Revision: 7830
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7830&view=rev
Author:   jouni
Date:     2009-09-27 19:06:37 +0000 (Sun, 27 Sep 2009)

Log Message:
-----------
Beginnings of a capability to test the pdf backend.

Modified Paths:
--------------
    trunk/matplotlib/CHANGELOG
    trunk/matplotlib/lib/matplotlib/testing/compare.py
    trunk/matplotlib/lib/matplotlib/testing/decorators.py

Added Paths:
-----------
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/axhspan_epoch.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/axvspan_epoch.pdf
    trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/const_xy.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/fill_units.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_001.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_002.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_003.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_004.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_005.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/hexbin_extent.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/nonfinite_limits.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/offset_points.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_axes.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_coords.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_units.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_wrap_180.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_wrap_360.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/shaped_data.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_date.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_point.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/DateFormatter_fractionalSeconds.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/RRuleLocator_bounds.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axhline.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axhspan.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axvline.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axvspan.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_empty.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_image/image_interps.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/clipping.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/clipping_diamond.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/overflow.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/simplify_curve.pdf
    
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.pdf

Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG  2009-09-27 12:41:23 UTC (rev 7829)
+++ trunk/matplotlib/CHANGELOG  2009-09-27 19:06:37 UTC (rev 7830)
@@ -1,3 +1,5 @@
+2009-09-27 Beginnings of a capability to test the pdf backend. - JKS
+
 2009-09-27 Add a savefig.extension rcparam to control the default 
            filename extension used by savefig. - JKS
 

Modified: trunk/matplotlib/lib/matplotlib/testing/compare.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/testing/compare.py  2009-09-27 12:41:23 UTC 
(rev 7829)
+++ trunk/matplotlib/lib/matplotlib/testing/compare.py  2009-09-27 19:06:37 UTC 
(rev 7830)
@@ -8,6 +8,7 @@
 import os
 import numpy as np
 import shutil
+import subprocess
 
 #=======================================================================
 
@@ -73,6 +74,33 @@
       return None
 
 #-----------------------------------------------------------------------
+# A dictionary that maps filename extensions to functions that map
+# parameters old and new to a list that can be passed to Popen to
+# convert files with that extension to png format.
+converter = { 'pdf': lambda old, new: \
+                 ['gs', '-q', '-sDEVICE=png16m', '-dNOPAUSE', '-dBATCH',
+                  '-sOutputFile=' + new, old],
+              }
+def convert(filename):
+   '''Convert the named file into a png file.
+   Returns the name of the created file.
+   '''
+   base, extension = filename.rsplit('.', 1)
+   if extension not in converter:
+      raise KeyError, "Don't know how to convert %s files to png" % extension
+   newname = base + '_' + extension + '.png'
+   cmd = converter[extension](filename, newname)
+   pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+   stdout, stderr = pipe.communicate()
+   if not os.path.exists(newname):
+      msg = "Conversion command failed:\n%s\n" % ' '.join(cmd)
+      if stdout:
+         msg += "Standard output:\n%s\n" % stdout
+      if stderr:
+         msg += "Standard error:\n%s\n" % stderr
+      raise IOError, msg
+   return newname
+
 def compare_images( expected, actual, tol, in_decorator=False ):
    '''Compare two image files - not the greatest, but fast and good enough.
 
@@ -99,8 +127,16 @@
             "be installed.  To run tests without using PIL, then use " \
             "the '--without-tag=PIL' command-line option.\n"           \
             "Importing PIL failed with the following error:\n%s" % e
-      return msg
+      if in_decorator:
+         raise NotImplementedError, e
+      else:
+         return msg
 
+   # Convert the image to png
+   extension = expected.split('.')[-1]
+   if extension != 'png':
+      expected, actual = convert(expected), convert(actual)
+
    # open the image files and remove the alpha channel (if it exists)
    expectedImage = Image.open( expected ).convert("RGB")
    actualImage = Image.open( actual ).convert("RGB")

Modified: trunk/matplotlib/lib/matplotlib/testing/decorators.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/testing/decorators.py       2009-09-27 
12:41:23 UTC (rev 7829)
+++ trunk/matplotlib/lib/matplotlib/testing/decorators.py       2009-09-27 
19:06:37 UTC (rev 7830)
@@ -2,6 +2,7 @@
      KnownFailureDidNotFailTest, ImageComparisonFailure
 import os, sys
 import nose
+import matplotlib
 import matplotlib.tests
 from matplotlib.testing.compare import compare_images
 
@@ -48,42 +49,54 @@
         raise ValueError('baseline_images must be specified')
     def compare_images_decorator(func):
         def decorated_compare_images(*args,**kwargs):
-            result = func(*args,**kwargs)
-            extension = '.png' # TODO: test more backends
-            for fname in baseline_images:
-                # FIXME: place "actual", or current images, images in
-                # a more reasonable location than the current
-                # directory. Also, perhaps put them in sub-directory
-                # according to the name of the test module like the
-                # baseline images.
-                actual = fname + extension
 
-                # compute filename for baseline image
-                module_name = func.__module__
-                if module_name=='__main__':
-                    # FIXME: this won't work for nested packages in 
matplotlib.tests
-                    import warnings
-                    warnings.warn('test module run as script. guessing 
baseline image locations')
-                    script_name = sys.argv[0]
-                    basedir = os.path.abspath(os.path.dirname(script_name))
-                    subdir = os.path.splitext(os.path.split(script_name)[1])[0]
-                else:
-                    mods = module_name.split('.')
-                    assert mods.pop(0)=='matplotlib'
-                    assert mods.pop(0)=='tests'
-                    subdir = os.path.join(*mods)
-                    basedir = os.path.dirname(matplotlib.tests.__file__)
-                baseline_dir = os.path.join(basedir,'baseline_images',subdir)
-                expected = os.path.join(baseline_dir,fname) + extension
+            # compute baseline image directory
+            module_name = func.__module__
+            if module_name=='__main__':
+                # FIXME: this won't work for nested packages in 
matplotlib.tests
+                import warnings
+                warnings.warn('test module run as script. guessing baseline 
image locations')
+                script_name = sys.argv[0]
+                basedir = os.path.abspath(os.path.dirname(script_name))
+                subdir = os.path.splitext(os.path.split(script_name)[1])[0]
+            else:
+                mods = module_name.split('.')
+                assert mods.pop(0)=='matplotlib'
+                assert mods.pop(0)=='tests'
+                subdir = os.path.join(*mods)
+                basedir = os.path.dirname(matplotlib.tests.__file__)
+            baseline_dir = os.path.join(basedir,'baseline_images',subdir)
+            result_dir = os.path.join(basedir,'current_images',subdir)
+            if not os.path.exists(result_dir):
+                try:
+                    # make the current_images directory first
+                    os.mkdir(os.path.join(basedir,'current_images'))
+                except OSError:
+                    pass # probably exists already
+                os.mkdir(result_dir)
 
-                # compare the images
-                tol=1e-3 # default tolerance
-                err = compare_images( expected, actual, tol,
-                                      in_decorator=True )
-                if err:
-                    raise ImageComparisonFailure(
-                        'images not close: %(actual)s vs. %(expected)s '
-                        '(RMS %(rms).3f)'%err)
-            return result
+            for extension in ['png', 'pdf']:
+                # set the default format of savefig
+                matplotlib.rc('savefig', extension=extension)
+                # change to the result directory for the duration of the test
+                old_dir = os.getcwd()
+                os.chdir(result_dir)
+                try:
+                    last_result = func(*args,**kwargs) # actually call the 
test function
+                finally:
+                    os.chdir(old_dir)
+                for fname in baseline_images:
+                    actual = os.path.join(result_dir, fname) + '.' + extension
+                    expected = os.path.join(baseline_dir,fname) + '.' + 
extension
+
+                    # compare the images
+                    tol=1e-3 # default tolerance
+                    err = compare_images( expected, actual, tol,
+                                          in_decorator=True )
+                    if err:
+                        raise ImageComparisonFailure(
+                            'images not close: %(actual)s vs. %(expected)s '
+                            '(RMS %(rms).3f)'%err)
+            return last_result
         return nose.tools.make_decorator(func)(decorated_compare_images)
     return compare_images_decorator

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/axhspan_epoch.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/axhspan_epoch.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/axvspan_epoch.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/axvspan_epoch.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/const_xy.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/const_xy.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/fill_units.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/fill_units.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_001.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_001.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_002.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_002.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_003.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_003.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_004.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_004.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_005.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_005.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/hexbin_extent.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/hexbin_extent.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/nonfinite_limits.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/nonfinite_limits.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/offset_points.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/offset_points.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_axes.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_axes.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_coords.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_coords.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_units.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_units.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_wrap_180.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_wrap_180.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_wrap_360.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_wrap_360.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/shaped_data.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/shaped_data.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_date.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_date.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_point.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_point.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/DateFormatter_fractionalSeconds.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/DateFormatter_fractionalSeconds.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/RRuleLocator_bounds.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/RRuleLocator_bounds.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axhline.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axhline.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axhspan.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axhspan.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axvline.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axvline.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axvspan.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axvspan.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_empty.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_empty.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_image/image_interps.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_image/image_interps.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/clipping.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/clipping.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/clipping_diamond.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/clipping_diamond.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/overflow.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/overflow.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/simplify_curve.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/simplify_curve.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf

Added: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.pdf
===================================================================
(Binary files differ)


Property changes on: 
trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.pdf
___________________________________________________________________
Added: svn:mime-type
   + application/pdf


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Come build with us! The BlackBerry® Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9-12, 2009. Register now!
http://p.sf.net/sfu/devconf
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to