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

76 lines
2.4 KiB
Python
Executable File

#!/usr/bin/env python3
"""Создаёт и проверяет HDD-fixture команды F6 local rename."""
from __future__ import annotations
import pathlib
import sys
def create(root: pathlib.Path) -> None:
panel = root / "RENTEST"
panel.mkdir(parents=True)
(panel / "OLD.TXT").write_bytes(b"old payload\r\n")
(panel / "EXIST.TXT").write_bytes(b"existing payload\r\n")
(panel / "UIOLD.TXT").write_bytes(b"ui payload\r\n")
old_dir = panel / "OLDDIR"
old_dir.mkdir()
(old_dir / "KEEP.BIN").write_bytes(b"dir payload\r\n")
def verify(root: pathlib.Path) -> None:
expected = [
"PASS CWD captured before rename matrix",
"PASS file renamed without data change",
"PASS existing target blocks rename and stays intact",
"PASS directory renamed with contents intact",
"PASS failed directory change preserves CWD",
"PASS successful and rejected renames restore CWD",
"ALL PASS",
]
failures: list[str] = []
result = root / "RENRES.TXT"
panel = root / "RENTEST"
if not result.is_file():
failures.append("нет RENRES.TXT")
else:
text = result.read_bytes().decode("cp866", errors="replace")
for line in expected:
if line not in text:
failures.append(f"нет строки результата: {line}")
files = {
"NEW.TXT": b"old payload\r\n",
"EXIST.TXT": b"existing payload\r\n",
"FINAL.BIN": b"ui payload\r\n",
"NEWDIR/KEEP.BIN": b"dir payload\r\n",
}
for relative, content in files.items():
path = panel / relative
if not path.is_file() or path.read_bytes() != content:
failures.append(f"неверное содержимое {relative}")
for unwanted in ("OLD.TXT", "UIOLD.TXT", "OLDDIR"):
if (panel / unwanted).exists():
failures.append(f"старое имя осталось: {unwanted}")
if failures:
for failure in failures:
print(f"FAIL: {failure}")
raise SystemExit(1)
print("PASS: file/dir rename, no-overwrite, CWD restore и UI F6.")
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()