1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-15 19:08:07 +00:00
trezor-firmware/tests/ui_tests/reporting/html.py

73 lines
2.0 KiB
Python

import base64
import filecmp
from itertools import zip_longest
from pathlib import Path
from typing import Dict, List, Optional
from dominate import document
from dominate.tags import a, i, img, table, td, th, tr
def report_links(
tests: List[Path], reports_path: Path, actual_hashes: Dict[str, str] = None
) -> None:
if actual_hashes is None:
actual_hashes = {}
if not tests:
i("None!")
return
with table(border=1):
with tr():
th("Link to report")
for test in sorted(tests):
with tr(data_actual_hash=actual_hashes.get(test.stem, "")):
path = test.relative_to(reports_path)
td(a(test.name, href=path))
def write(fixture_test_path: Path, doc: document, filename: str) -> Path:
(fixture_test_path / filename).write_text(doc.render())
return fixture_test_path / filename
def image_column(src: Path, image_width: Optional[int] = None) -> None:
"""Put image into table as one cell."""
with td():
if src:
image_raw(src, image_width)
else:
i("missing")
def image_raw(src: Path, image_width: Optional[int] = None) -> None:
"""Display image on the screen"""
# open image file
image = src.read_bytes()
# encode image as base64
image = base64.b64encode(image)
# convert output to str
image = image.decode()
# img(src=src.relative_to(fixture_test_path))
img(
src="data:image/png;base64, " + image,
style=f"width: {image_width}px; image-rendering: pixelated;"
if image_width
else "",
)
def diff_table(
left_screens: List[Path],
right_screens: List[Path],
image_width: Optional[int] = None,
) -> None:
for left, right in zip_longest(left_screens, right_screens):
if left and right and filecmp.cmp(right, left):
background = "white"
else:
background = "red"
with tr(bgcolor=background):
image_column(left, image_width)
image_column(right, image_width)