from laya_router.trajectory import ( Step, consecutive_failures, edited_without_verification, repeated_command, response_failed, step_from_event, target_paths, was_inspected, ) def test_patch_and_edit_paths(): assert target_paths("Edit", {"file_path": "src/app.py"}) == ("src/app.py",) patch = "*** Update File: src/app.py\n*** Add File: src/new.py\n" assert target_paths("apply_patch", {"command": patch}) == ("src/app.py", "src/new.py") def test_failure_signals(): assert response_failed({"exit_code": 1}) assert not response_failed({"exit_code": 0}) assert response_failed("command failed: boom") steps = [ Step("bash", "Bash", "pytest", failed=True), Step("bash", "Bash", "pytest", failed=True), ] assert consecutive_failures(steps) == 2 assert repeated_command(steps) == 2 steps.append(Step("bash", "Bash", "pytest", failed=False)) assert consecutive_failures(steps) == 0 def test_unread_edit_and_verification(): read = step_from_event("Read", {"file_path": "src/app.py"}, None, after=True) edit = step_from_event("Edit", {"file_path": "src/app.py"}, None, after=True) other = step_from_event("Edit", {"file_path": "src/other.py"}, None, after=True) verify = step_from_event("Bash", {"command": "pytest -q"}, {"exit_code": 0}, after=True) assert read is not None and edit is not None and other is not None and verify is not None steps = [read, edit] assert was_inspected(steps, "src/app.py") assert not was_inspected(steps, "src/other.py") assert edited_without_verification([edit, other]) assert not edited_without_verification([edit, verify]) assert step_from_event("Edit", {"file_path": "a.py"}, None, after=False) is None