utils/unified-design-system/tests/test_conformance_diff.py
2026-11-01 19:46:05 +01:00

72 lines
2.5 KiB
Python

"""Tests for scripts/conformance_diff.py (100 % branch coverage)."""
from __future__ import annotations
from typing import TYPE_CHECKING
import conformance_diff
import pytest
if TYPE_CHECKING:
from pathlib import Path
def previous_report(conf: float | None = 50.0) -> dict:
return {
"surfaces": [{"name": ".", "token_usages": 1, "raw_literals": 1, "conformance": conf}],
"totals": {"name": "TOTAL", "token_usages": 1, "raw_literals": 1, "conformance": conf},
}
def current_report() -> dict:
return {
"surfaces": [
{"name": ".", "files": 1, "token_usages": 3, "raw_literals": 1, "conformance": 75.0},
{"name": "new", "files": 1, "token_usages": 2, "raw_literals": 0, "conformance": None},
],
"totals": {"name": "TOTAL", "files": 2, "token_usages": 5, "raw_literals": 1, "conformance": 83.3},
}
def test_delta_rows() -> None:
rows = {r["name"]: r for r in conformance_diff.delta(current_report(), previous_report())["rows"]}
assert rows["."] == {"name": ".", "token_usages": 2.0, "raw_literals": 0.0, "conformance": 25.0}
assert rows["new"]["token_usages"] == 2.0
assert rows["new"]["conformance"] is None
assert rows["TOTAL"]["conformance"] == 33.3
def test_delta_missing_previous_conformance() -> None:
rows = conformance_diff.delta(current_report(), previous_report(None))["rows"]
assert rows[0]["conformance"] is None
def test_num_and_fmt() -> None:
assert conformance_diff._num("x") == 0.0
assert conformance_diff._num(2) == 2.0
assert conformance_diff._fmt(None) == "-"
assert conformance_diff._fmt(2.5) == "2.5"
assert conformance_diff._fmt(2, signed=True) == "+2"
def test_table_without_and_with_delta() -> None:
plain = conformance_diff.table(current_report(), None)
assert plain.splitlines()[0].split() == ["surface", "files", "tokens", "raw", "conf%"]
assert "TOTAL" in plain
diff = conformance_diff.delta(current_report(), previous_report())
text = conformance_diff.table(current_report(), diff)
assert "d.conf" in text
assert "+25" in text
@pytest.mark.parametrize(
"payload",
["[]", "{}", '{"surfaces": 1, "totals": {}}', '{"surfaces": [1], "totals": {}}',
'{"surfaces": [], "totals": 1}'],
)
def test_load_previous_rejects_bad_shape(tmp_path: Path, payload: str) -> None:
path = tmp_path / "p.json"
path.write_text(payload, encoding="utf-8")
with pytest.raises(ValueError, match="not a conformance report"):
conformance_diff.load_previous(path)