@@ -250,6 +250,12 @@ def __init__(self, baseline_images, extensions, tol,
250250 self .savefig_kwargs = savefig_kwargs
251251 self .style = style
252252
253+ def delayed_init (self , func ):
254+ assert callable (func ), "func must be callable"
255+ assert self .func is None , "it looks like same decorator used twice"
256+ self .func = func
257+ self .baseline_dir , self .result_dir = _image_directories (func )
258+
253259 def setup (self ):
254260 func = self .func
255261 self .setup_class ()
@@ -275,25 +281,26 @@ def copy_baseline(self, baseline, extension):
275281 orig_expected_fname = baseline_path + '.pdf'
276282 expected_fname = make_test_filename (os .path .join (
277283 self .result_dir , os .path .basename (orig_expected_fname )), 'expected' )
278- actual_fname = os .path .join (self .result_dir , baseline ) + '.' + extension
279284 if os .path .exists (orig_expected_fname ):
280285 shutil .copyfile (orig_expected_fname , expected_fname )
281286 else :
282287 xfail ("Do not have baseline image {0} because this "
283288 "file does not exist: {1}" .format (expected_fname ,
284289 orig_expected_fname ))
285- return expected_fname , actual_fname
290+ return expected_fname
286291
287292 def compare (self , idx , baseline , extension ):
288293 __tracebackhide__ = True
289- if self .baseline_dir is None :
290- self .baseline_dir , self .result_dir = _image_directories (self .func )
291- expected_fname , actual_fname = self .copy_baseline (baseline , extension )
292294 fignum = plt .get_fignums ()[idx ]
293295 fig = plt .figure (fignum )
296+
294297 if self .remove_text :
295298 remove_ticks_and_titles (fig )
299+
300+ actual_fname = os .path .join (self .result_dir , baseline ) + '.' + extension
296301 fig .savefig (actual_fname , ** self .savefig_kwargs )
302+
303+ expected_fname = self .copy_baseline (baseline , extension )
297304 raise_on_image_difference (expected_fname , actual_fname , self .tol )
298305
299306 def nose_runner (self ):
@@ -324,7 +331,7 @@ def wrapper(idx, baseline, extension):
324331 return wrapper
325332
326333 def __call__ (self , func ):
327- self .func = func
334+ self .delayed_init ( func )
328335 if is_called_from_pytest ():
329336 return copy_metadata (func , self .pytest_runner ())
330337 else :
0 commit comments