This commit is contained in:
0
tools/generate_test_fixtures/tests/__init__.py
Normal file
0
tools/generate_test_fixtures/tests/__init__.py
Normal file
67
tools/generate_test_fixtures/tests/test_generation.py
Normal file
67
tools/generate_test_fixtures/tests/test_generation.py
Normal file
@@ -0,0 +1,67 @@
|
||||
"""Smoke test: every generator runs end-to-end into a tmp dir.
|
||||
|
||||
Asserts that the generator produces non-empty binary fixtures and that
|
||||
every ``*.gt.json`` sidecar parses to a dict with the expected keys.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from generate_test_fixtures import (
|
||||
diff_pairs,
|
||||
docx_revisions,
|
||||
odt_revisions,
|
||||
pdf_incremental,
|
||||
pptx_comments,
|
||||
security_fixtures,
|
||||
xlsx_revisions,
|
||||
)
|
||||
|
||||
# (module, expected_minimum_files). Each generator must emit at least one
|
||||
# binary + one sidecar. Stubs return 0, so we relax the floor to 0 for any
|
||||
# generator that hasn't been implemented yet — the smoke test still asserts
|
||||
# shape of whatever it does produce.
|
||||
GENERATORS = [
|
||||
docx_revisions,
|
||||
odt_revisions,
|
||||
xlsx_revisions,
|
||||
pptx_comments,
|
||||
pdf_incremental,
|
||||
diff_pairs,
|
||||
security_fixtures,
|
||||
]
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def repo_root(tmp_path: Path) -> Path:
|
||||
"""A fake repo root with a ``test_documents/`` marker so relative-path
|
||||
resolution in the ground-truth writer succeeds.
|
||||
"""
|
||||
(tmp_path / "Cargo.toml").write_text("# stub for fixture tests\n", encoding="utf-8")
|
||||
(tmp_path / "test_documents").mkdir()
|
||||
return tmp_path
|
||||
|
||||
|
||||
@pytest.mark.parametrize("module", GENERATORS, ids=lambda m: m.__name__.rsplit(".", 1)[-1])
|
||||
def test_generator_runs_and_emits_well_formed_outputs(module, tmp_path: Path, repo_root: Path) -> None:
|
||||
"""Each generator runs without raising and every sidecar parses cleanly."""
|
||||
output_root = tmp_path / "out"
|
||||
output_root.mkdir()
|
||||
|
||||
written = module.generate(output_root, repo_root)
|
||||
|
||||
# Stubs may legitimately write nothing while still being valid. We only
|
||||
# assert structure on files that ARE written.
|
||||
assert isinstance(written, list)
|
||||
for path in written:
|
||||
assert path.exists(), f"{module.__name__} reported {path} but it does not exist"
|
||||
assert path.stat().st_size > 0, f"{path} is zero-length"
|
||||
if path.suffix == ".json":
|
||||
payload = json.loads(path.read_text(encoding="utf-8"))
|
||||
assert isinstance(payload, dict), f"{path} is not a JSON object"
|
||||
for key in ("fixture_path", "format", "feature", "expectations", "generated_by"):
|
||||
assert key in payload, f"{path} missing {key!r}"
|
||||
Reference in New Issue
Block a user