Skip to content

Commit 7027739

Browse files
committed
Show baseline image in HTML when generating
1 parent 0ce475f commit 7027739

File tree

4 files changed

+28
-14
lines changed

4 files changed

+28
-14
lines changed

pytest_mpl/plugin.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -390,11 +390,14 @@ def generate_baseline_image(self, item, fig):
390390
if not os.path.exists(self.generate_dir):
391391
os.makedirs(self.generate_dir)
392392

393-
fig.savefig(str((self.generate_dir / self.generate_filename(item)).absolute()),
394-
**savefig_kwargs)
393+
baseline_filename = self.generate_filename(item)
394+
baseline_path = (self.generate_dir / baseline_filename).absolute()
395+
fig.savefig(str(baseline_path), **savefig_kwargs)
395396

396397
close_mpl_figure(fig)
397398

399+
return baseline_path
400+
398401
def generate_image_hash(self, item, fig):
399402
"""
400403
For a `matplotlib.figure.Figure`, returns the SHA256 hash as a hexadecimal
@@ -597,6 +600,7 @@ def item_function_wrapper(*args, **kwargs):
597600
remove_ticks_and_titles(fig)
598601

599602
test_name = self.generate_test_name(item)
603+
result_dir = self.make_test_results_dir(item)
600604

601605
summary = {
602606
'status': None,
@@ -615,20 +619,20 @@ def item_function_wrapper(*args, **kwargs):
615619
if self.generate_dir is not None:
616620
summary['status'] = 'skipped'
617621
summary['status_msg'] = 'Skipped test, since generating image.'
618-
self.generate_baseline_image(item, fig)
619-
if self.generate_hash_library is None:
620-
self._test_results[str(pathify(test_name))] = summary
621-
pytest.skip("Skipping test, since generating image.")
622+
generate_image = self.generate_baseline_image(item, fig)
623+
if self.results_always: # Make baseline image available in HTML
624+
result_image = (result_dir / "baseline.png").absolute()
625+
shutil.copy(generate_image, result_image)
626+
summary['baseline_image'] = \
627+
result_image.relative_to(self.results_dir).as_posix()
622628

623629
if self.generate_hash_library is not None:
624630
image_hash = self.generate_image_hash(item, fig)
625631
self._generated_hash_library[test_name] = image_hash
626-
summary['result_hash'] = image_hash
632+
summary['baseline_hash'] = image_hash
627633

628634
# Only test figures if not generating images
629635
if self.generate_dir is None:
630-
result_dir = self.make_test_results_dir(item)
631-
632636
# Compare to hash library
633637
if self.hash_library or compare.kwargs.get('hash_library', None):
634638
msg = self.compare_image_to_hash_library(item, fig, result_dir, summary=summary)
@@ -645,12 +649,15 @@ def item_function_wrapper(*args, **kwargs):
645649
for image_type in ['baseline_image', 'diff_image', 'result_image']:
646650
summary[image_type] = None # image no longer exists
647651
else:
648-
self._test_results[str(pathify(test_name))] = summary
652+
self._test_results[test_name] = summary
649653
pytest.fail(msg, pytrace=False)
650654

651655
close_mpl_figure(fig)
652656

653-
self._test_results[str(pathify(test_name))] = summary
657+
self._test_results[test_name] = summary
658+
659+
if summary['status'] == 'skipped':
660+
pytest.skip(summary['status_msg'])
654661

655662
if item.cls is not None:
656663
setattr(item.cls, item.function.__name__, item_function_wrapper)

pytest_mpl/summary/html.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,14 +117,16 @@ def image_status(self):
117117
elif self.baseline_image is None:
118118
return 'missing'
119119
else:
120-
raise ValueError('Unknown image result.')
120+
return 'generated'
121121

122122
@cached_property
123123
def hash_status(self):
124124
"""Status of the hash comparison test."""
125125
if self.baseline_hash is not None or self.result_hash is not None:
126126
if self.baseline_hash is None:
127127
return 'missing'
128+
elif self.result_hash is None:
129+
return 'generated'
128130
elif self.baseline_hash == self.result_hash:
129131
return 'match'
130132
else:
@@ -198,6 +200,7 @@ def status_class(status):
198200
'match': 'success',
199201
'diff': 'danger',
200202
'missing': 'warning',
203+
'generated': 'warning',
201204
}
202205
return classes[status]
203206

@@ -208,6 +211,7 @@ def image_status_msg(status):
208211
'match': 'Baseline image matches',
209212
'diff': 'Baseline image differs',
210213
'missing': 'Baseline image not found',
214+
'generated': 'Baseline image was generated',
211215
}
212216
return messages[status]
213217

@@ -218,6 +222,7 @@ def hash_status_msg(status):
218222
'match': 'Baseline hash matches',
219223
'diff': 'Baseline hash differs',
220224
'missing': 'Baseline hash not found',
225+
'generated': 'Baseline hash was generated',
221226
}
222227
return messages[status]
223228

pytest_mpl/summary/templates/result.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717
<img src="{{ r.result_image }}" class="card-img-top" alt="result image">
1818
</div>
1919
</div>
20-
{%- else -%}
20+
{%- elif r.result_image -%}
2121
<img src="{{ r.result_image }}" class="card-img-top" alt="result image">
22+
{%- elif r.baseline_image -%}
23+
<img src="{{ r.baseline_image }}" class="card-img-top" alt="baseline image">
2224
{%- endif %}
2325
</a>
2426
{% filter indent(width=8) -%}

pytest_mpl/summary/templates/result_images.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ <h6><small class="text-muted">{{ r.module }}</small></h6>
66
</div>
77
<div class="offcanvas-body">
88
<h5 class="card-title">{{ r.name }}</h5>
9-
{% if results.warn_missing['baseline_image'] -%}
9+
{% if results.warn_missing['baseline_image'] and r.image_status != 'generated' -%}
1010
<div class="row row-cols-1 row-cols-md-3 g-4 mt-3">
1111
{% macro image_card(file, name) -%}
1212
<div class="col py-3 m-0">

0 commit comments

Comments
 (0)