64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
import tempfile
|
|
import unittest
|
|
import json
|
|
from pathlib import Path
|
|
|
|
from validate_task_pointer import PointerError, validate_pointer
|
|
|
|
|
|
VALID = """# pointer
|
|
## Current
|
|
context_id: c1
|
|
## Read
|
|
read paths only; coverage/report.json
|
|
## Task
|
|
one result
|
|
## Next
|
|
one next
|
|
## Verify
|
|
one test
|
|
## Stop
|
|
stop on drift
|
|
"""
|
|
|
|
|
|
class TaskPointerTests(unittest.TestCase):
|
|
def write(self, text: str) -> Path:
|
|
directory = tempfile.TemporaryDirectory()
|
|
self.addCleanup(directory.cleanup)
|
|
path = Path(directory.name) / "nextTask.md"
|
|
path.write_text(text, encoding="utf-8")
|
|
return path
|
|
|
|
def test_valid_pointer_reports_bounded_size(self):
|
|
result = validate_pointer(self.write(VALID))
|
|
self.assertLessEqual(result["bytes"], 8192)
|
|
|
|
def test_context_id_must_match_lock_when_supplied(self):
|
|
directory = tempfile.TemporaryDirectory()
|
|
self.addCleanup(directory.cleanup)
|
|
root = Path(directory.name)
|
|
pointer = root / "nextTask.md"
|
|
pointer.write_text(VALID, encoding="utf-8")
|
|
lock = root / "context-lock.json"
|
|
lock.write_text(json.dumps({"context_id": "other"}), encoding="utf-8")
|
|
with self.assertRaisesRegex(PointerError, "does not match lock"):
|
|
validate_pointer(pointer, lock_path=lock)
|
|
|
|
def test_history_heading_is_rejected(self):
|
|
with self.assertRaisesRegex(PointerError, "history section"):
|
|
validate_pointer(self.write(VALID + "\n## History\nold log\n"))
|
|
|
|
def test_evidence_heading_is_rejected(self):
|
|
with self.assertRaisesRegex(PointerError, "history section"):
|
|
validate_pointer(self.write(VALID + "\n## Evidence\nold evidence\n"))
|
|
|
|
def test_large_pointer_is_rejected(self):
|
|
with self.assertRaisesRegex(PointerError, "byte budget"):
|
|
validate_pointer(self.write(VALID + "x" * 9000))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|