Files
Sprinter-SDCC/applications/Volkov/tests/p11_delete_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

77 lines
2.4 KiB
Python
Executable File

#!/usr/bin/env python3
"""Создаёт и проверяет HDD-fixture команды F8 delete."""
from __future__ import annotations
import pathlib
import sys
def create(root: pathlib.Path) -> None:
panel = root / "DELTEST"
panel.mkdir(parents=True)
(panel / "TARGET.TXT").write_bytes(b"target payload\r\n")
(panel / "REMOVE.TXT").write_bytes(b"remove payload\r\n")
(panel / "KEEP.TXT").write_bytes(b"keep remains\r\n")
(panel / "TEMPDIR").mkdir()
(panel / "EMPTYDIR").mkdir()
nonempty = panel / "NONEMPTY"
nonempty.mkdir()
(nonempty / "CHILD.TXT").write_bytes(b"child remains\r\n")
def verify(root: pathlib.Path) -> None:
expected = [
"PASS CWD captured before delete matrix",
"PASS unlink removes one regular file",
"PASS rmdir removes one empty directory",
"PASS nonempty directory is not removed",
"PASS unrelated file remains intact",
"PASS full-path delete operations preserve CWD",
"ALL PASS",
]
failures: list[str] = []
result = root / "DELRES.TXT"
panel = root / "DELTEST"
if not result.is_file():
failures.append("нет DELRES.TXT")
else:
text = result.read_bytes().decode("cp866", errors="replace")
for line in expected:
if line not in text:
failures.append(f"нет строки результата: {line}")
absent = ("TARGET.TXT", "TEMPDIR", "REMOVE.TXT", "EMPTYDIR")
for name in absent:
if (panel / name).exists():
failures.append(f"объект не удалён: {name}")
remaining = {
"KEEP.TXT": b"keep remains\r\n",
"NONEMPTY/CHILD.TXT": b"child remains\r\n",
}
for name, content in remaining.items():
path = panel / name
if not path.is_file() or path.read_bytes() != content:
failures.append(f"объект изменён: {name}")
if failures:
for failure in failures:
print(f"FAIL: {failure}")
raise SystemExit(1)
print("PASS: file/empty-dir delete, cancel, guards, nonempty и CWD.")
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 DIR")
root = pathlib.Path(sys.argv[2])
if sys.argv[1] == "create":
create(root)
else:
verify(root)
if __name__ == "__main__":
main()