Skip to content

Commit b5aa567

Browse files
committed
templates + consistency
1 parent 5eb088b commit b5aa567

File tree

1 file changed

+43
-30
lines changed

1 file changed

+43
-30
lines changed

pytest_mpl/plugin.py

Lines changed: 43 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,6 @@
4646
from .kernels import DEFAULT_HAMMING_TOLERANCE, DEFAULT_HASH_SIZE, KERNEL_SHA256, kernel_factory
4747
from .summary.html import generate_summary_basic_html, generate_summary_html
4848

49-
SUPPORTED_FORMATS = {'html', 'json', 'basic-html'}
50-
51-
SHAPE_MISMATCH_ERROR = """Error: Image dimensions did not match.
52-
Expected shape: {expected_shape}
53-
{expected_path}
54-
Actual shape: {actual_shape}
55-
{actual_path}"""
56-
5749
#: The default matplotlib backend.
5850
DEFAULT_BACKEND = "agg"
5951

@@ -72,6 +64,32 @@
7264
#: The default matplotlib plot style.
7365
DEFAULT_STYLE = "classic"
7466

67+
#: Valid formats for generate summary.
68+
SUPPORTED_FORMATS = {'html', 'json', 'basic-html'}
69+
70+
#: Template error message for image shape conformance.
71+
TEMPLATE_SHAPE_MISMATCH = """Error! Image dimensions did not match.
72+
73+
Baseline Shape:
74+
{baseline_shape}
75+
Baseline Image:
76+
{baseline_image}
77+
Result Shape:
78+
{result_shape}
79+
Result Image:
80+
{result_image}"""
81+
82+
TEMPLATE_IMAGE_DIFFERENCE = """Failed! Image files did not match.
83+
84+
RMS: {rms}
85+
Tolerance: {tol}
86+
Baseline Image:
87+
{expected}
88+
Result Image:
89+
{actual}
90+
Difference Image:
91+
{diff}"""
92+
7593

7694
def pathify(path):
7795
"""
@@ -501,9 +519,9 @@ def compare_image_to_baseline(self, item, fig, result_dir, summary=None):
501519

502520
baseline_image_ref = self.obtain_baseline_image(item, result_dir)
503521

504-
test_image = (result_dir / "result.png").absolute()
505-
fig.savefig(str(test_image), **savefig_kwargs)
506-
summary['result_image'] = test_image.relative_to(self.results_dir).as_posix()
522+
result_image = (result_dir / "result.png").absolute()
523+
fig.savefig(str(result_image), **savefig_kwargs)
524+
summary['result_image'] = result_image.relative_to(self.results_dir).as_posix()
507525

508526
if not os.path.exists(baseline_image_ref):
509527
summary['status'] = 'failed'
@@ -512,7 +530,7 @@ def compare_image_to_baseline(self, item, fig, result_dir, summary=None):
512530
f"{self.get_baseline_directory(item)}\n"
513531
"(This is expected for new tests.)\n"
514532
"Generated Image: \n\t"
515-
f"{test_image}")
533+
f"{result_image}")
516534
summary['status_msg'] = error_message
517535
return error_message
518536

@@ -525,19 +543,20 @@ def compare_image_to_baseline(self, item, fig, result_dir, summary=None):
525543
# Compare image size ourselves since the Matplotlib
526544
# exception is a bit cryptic in this case and doesn't show
527545
# the filenames
528-
expected_shape = imread(str(baseline_image)).shape[:2]
529-
actual_shape = imread(str(test_image)).shape[:2]
530-
if expected_shape != actual_shape:
546+
baseline_shape = imread(str(baseline_image)).shape[:2]
547+
result_shape = imread(str(result_image)).shape[:2]
548+
if baseline_shape != result_shape:
531549
summary['status'] = 'failed'
532550
summary['image_status'] = 'diff'
533-
error_message = SHAPE_MISMATCH_ERROR.format(expected_path=baseline_image,
534-
expected_shape=expected_shape,
535-
actual_path=test_image,
536-
actual_shape=actual_shape)
551+
error_message = TEMPLATE_SHAPE_MISMATCH.format(baseline_image=baseline_image,
552+
baseline_shape=baseline_shape,
553+
result_image=result_image,
554+
result_shape=result_shape)
537555
summary['status_msg'] = error_message
538556
return error_message
539557

540-
results = compare_images(str(baseline_image), str(test_image), tol=tolerance, in_decorator=True)
558+
# 'in_decorator=True' ensures that a dictionary of results is returned by 'compare_images'
559+
results = compare_images(str(baseline_image), str(result_image), tol=tolerance, in_decorator=True)
541560
summary['tolerance'] = tolerance
542561
if results is None:
543562
summary['status'] = 'passed'
@@ -550,13 +569,7 @@ def compare_image_to_baseline(self, item, fig, result_dir, summary=None):
550569
summary['rms'] = results['rms']
551570
diff_image = (result_dir / 'result-failed-diff.png').absolute()
552571
summary['diff_image'] = diff_image.relative_to(self.results_dir).as_posix()
553-
template = ['Error: Image files did not match.',
554-
'RMS Value: {rms}',
555-
'Expected: \n {expected}',
556-
'Actual: \n {actual}',
557-
'Difference:\n {diff}',
558-
'Tolerance: \n {tol}', ]
559-
error_message = '\n '.join([line.format(**results) for line in template])
572+
error_message = TEMPLATE_IMAGE_DIFFERENCE.format(**results)
560573
summary['status_msg'] = error_message
561574
return error_message
562575

@@ -601,12 +614,12 @@ def compare_image_to_hash_library(self, item, fig, result_dir, summary=None):
601614
hash_comparison_pass = True
602615
summary['status'] = 'passed'
603616
summary['hash_status'] = 'match'
604-
summary['status_msg'] = 'Test hash matches baseline hash.'
617+
summary['status_msg'] = 'Result hash matches baseline hash.'
605618
self.kernel.update_summary(summary)
606619
else: # hash-diff
607620
summary['status'] = 'failed'
608621
summary['hash_status'] = 'diff'
609-
msg = (f"Test hash {test_hash!r} doesn't match baseline hash "
622+
msg = (f'Result hash {test_hash!r} does not match baseline hash '
610623
f'{baseline_hash!r} in library {str(hash_library_filename)!r} '
611624
f'for test {hash_name!r}.')
612625
summary['status_msg'] = self.kernel.update_status(msg)
@@ -639,7 +652,7 @@ def compare_image_to_hash_library(self, item, fig, result_dir, summary=None):
639652
# Append the log from image comparison
640653
r = baseline_comparison or "The comparison to the baseline image succeeded."
641654
summary['status_msg'] += ("\n\n"
642-
"Image comparison test\n"
655+
"Image Comparison Test\n"
643656
"---------------------\n") + r
644657

645658
if hash_comparison_pass: # Return None to indicate test passed

0 commit comments

Comments
 (0)