Files
Sprinter-SDCC/applications/Volkov/tests/p19_policy_fixture.py
T
snark13 8e389c03f8 Volkov: добавить Sprinter Commander
Реализовать двухпанельный Commander от платформенного PoC до этапов P6-P20: EMM-каталог, сортировку и выбор, операции с файлами и деревьями, транзакционное копирование, метаданные, политику конфликтов и предварительную проверку свободного места.

Добавить проектную документацию, HDD/MAME-сценарии и проверенные артефакты. Расширить libc операцией bank_write_page, исправлением режима O_RDONLY и связанными регрессионными проверками.
2026-09-10 10:45:30 +03:00

79 lines
2.2 KiB
Python

#!/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()