#!/usr/bin/env python3 """Fixture и проверка UI-policy overwrite/skip/rename/cancel P19.""" from __future__ import annotations import pathlib import sys def payload(seed: int, size: int) -> bytes: return bytes(((index * 31 + seed) & 0xFF) for index in range(size)) SOURCES = { "AONE.BIN": payload(1, 4097), "ATWO.BIN": payload(2, 8193), "CANCEL.BIN": payload(3, 33), "REN.BIN": payload(4, 257), "RONLY.BIN": payload(5, 5000), "SONE.BIN": payload(6, 65), "STWO.BIN": payload(7, 66), } OLD = {name: ("old-" + name).encode("ascii") for name in SOURCES} def create(root: pathlib.Path) -> None: source = root / "P19SRC" target = root / "P19DST" source.mkdir(parents=True) target.mkdir(parents=True) for name, data in SOURCES.items(): (source / name).write_bytes(data) for name, data in OLD.items(): (target / name).write_bytes(data) def verify(root: pathlib.Path) -> None: target = root / "P19DST" expected = { "AONE.BIN": SOURCES["AONE.BIN"], "ATWO.BIN": SOURCES["ATWO.BIN"], "RONLY.BIN": SOURCES["RONLY.BIN"], "SONE.BIN": OLD["SONE.BIN"], "STWO.BIN": OLD["STWO.BIN"], "REN.BIN": OLD["REN.BIN"], "CANCEL.BIN": OLD["CANCEL.BIN"], "NEXT.BIN": SOURCES["REN.BIN"], } failures: list[str] = [] for name, data in expected.items(): path = target / name if not path.is_file() or path.read_bytes() != data: failures.append(f"неверный target {name}") garbage = sorted( path.name for path in target.iterdir() if path.name.upper().startswith(("~SC", "~SB")) ) if garbage: failures.append(f"оставлены служебные файлы: {garbage!r}") if failures: for failure in failures: print(f"FAIL: {failure}") raise SystemExit(1) print("PASS: overwrite-all, readonly prompt, skip-all, rename and cancel.") def main() -> None: if len(sys.argv) != 3 or sys.argv[1] not in {"create", "verify"}: raise SystemExit(f"usage: {sys.argv[0]} create|verify PATH") root = pathlib.Path(sys.argv[2]) if sys.argv[1] == "create": create(root) else: verify(root) if __name__ == "__main__": main()