6
6
import matplotlib .tests
7
7
import matplotlib .units
8
8
from matplotlib import pyplot as plt
9
+ from matplotlib import ft2font
9
10
import numpy as np
10
11
from matplotlib .testing .compare import comparable_formats , compare_images
11
12
import warnings
@@ -63,7 +64,7 @@ def teardown_class(cls):
63
64
matplotlib .units .registry .clear ()
64
65
matplotlib .units .registry .update (cls .original_units_registry )
65
66
warnings .resetwarnings () #reset any warning filters set in tests
66
-
67
+
67
68
def test (self ):
68
69
self ._func ()
69
70
@@ -77,6 +78,18 @@ def cleanup(func):
77
78
{'_func' : func })
78
79
return new_class
79
80
81
+ def check_freetype_version (ver ):
82
+ if ver is None :
83
+ return True
84
+
85
+ from distutils import version
86
+ if isinstance (ver , str ):
87
+ ver = (ver , ver )
88
+ ver = [version .StrictVersion (x ) for x in ver ]
89
+ found = version .StrictVersion (ft2font .__freetype_version__ )
90
+
91
+ return found >= ver [0 ] and found <= ver [1 ]
92
+
80
93
class ImageComparisonTest (CleanupTest ):
81
94
@classmethod
82
95
def setup_class (cls ):
@@ -116,18 +129,25 @@ def do_test():
116
129
117
130
err = compare_images (expected_fname , actual_fname , self ._tol , in_decorator = True )
118
131
119
- if not os .path .exists (expected_fname ):
120
- raise ImageComparisonFailure (
121
- 'image does not exist: %s' % expected_fname )
122
-
123
- if err :
124
- raise ImageComparisonFailure (
125
- 'images not close: %(actual)s vs. %(expected)s '
126
- '(RMS %(rms).3f)' % err )
132
+ try :
133
+ if not os .path .exists (expected_fname ):
134
+ raise ImageComparisonFailure (
135
+ 'image does not exist: %s' % expected_fname )
136
+
137
+ if err :
138
+ raise ImageComparisonFailure (
139
+ 'images not close: %(actual)s vs. %(expected)s '
140
+ '(RMS %(rms).3f)' % err )
141
+ except ImageComparisonFailure :
142
+ if not check_freetype_version (self ._freetype_version ):
143
+ raise KnownFailureTest (
144
+ "Mismatched version of freetype. Test requires '%s', you have '%s'" %
145
+ (self ._freetype_version , ft2font .__freetype_version__ ))
146
+ raise
127
147
128
148
yield (do_test ,)
129
149
130
- def image_comparison (baseline_images = None , extensions = None , tol = 1e-3 ):
150
+ def image_comparison (baseline_images = None , extensions = None , tol = 1e-3 , freetype_version = None ):
131
151
"""
132
152
call signature::
133
153
@@ -148,6 +168,13 @@ def image_comparison(baseline_images=None, extensions=None, tol=1e-3):
148
168
If *None*, default to all supported extensions.
149
169
150
170
Otherwise, a list of extensions to test. For example ['png','pdf'].
171
+
172
+ *tol*: (default 1e-3)
173
+ The RMS threshold above which the test is considered failed.
174
+
175
+ *freetype_version*: str or tuple
176
+ The expected freetype version or range of versions for this
177
+ test to pass.
151
178
"""
152
179
153
180
if baseline_images is None :
@@ -178,7 +205,9 @@ def compare_images_decorator(func):
178
205
{'_func' : func ,
179
206
'_baseline_images' : baseline_images ,
180
207
'_extensions' : extensions ,
181
- '_tol' : tol })
208
+ '_tol' : tol ,
209
+ '_freetype_version' : freetype_version })
210
+
182
211
return new_class
183
212
return compare_images_decorator
184
213
0 commit comments