test_actor.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from drill.actor import Actor, ActorAction
  2. class TestActorAction:
  3. def test_parse_type_action(self):
  4. action = ActorAction.from_tool_result({"action": "type", "text": "create a worktree"})
  5. assert action.action == "type"
  6. assert action.text == "create a worktree"
  7. def test_parse_done_action(self):
  8. action = ActorAction.from_tool_result({"action": "done"})
  9. assert action.action == "done"
  10. def test_parse_stuck_action(self):
  11. action = ActorAction.from_tool_result({"action": "stuck"})
  12. assert action.action == "stuck"
  13. def test_parse_key_action(self):
  14. action = ActorAction.from_tool_result({"action": "key", "key": "ctrl-c"})
  15. assert action.action == "key"
  16. assert action.key == "ctrl-c"
  17. class TestActorPrompt:
  18. def test_builds_system_prompt_naive(self):
  19. actor = Actor(model="claude-sonnet-4-6", temperature=0.7)
  20. prompt = actor.build_system_prompt(
  21. posture="naive",
  22. intents=["Ask the agent to create a worktree"],
  23. )
  24. assert "plain language" in prompt.lower() or "don't know" in prompt.lower()
  25. assert "create a worktree" in prompt
  26. def test_builds_system_prompt_spec_aware(self):
  27. actor = Actor(model="claude-sonnet-4-6", temperature=0.7)
  28. prompt = actor.build_system_prompt(
  29. posture="spec-aware",
  30. intents=["Use the worktree skill"],
  31. )
  32. assert "skill" in prompt.lower() or "convention" in prompt.lower()
  33. class TestActorContext:
  34. def test_appends_terminal_captures(self):
  35. actor = Actor(model="claude-sonnet-4-6", temperature=0.7)
  36. actor.append_capture("Screen 1: Welcome to Claude")
  37. actor.append_capture("Screen 2: ❯ ")
  38. messages = actor.build_messages()
  39. assert len(messages) == 2
  40. assert "Screen 1" in messages[0]["content"]
  41. assert "Screen 2" in messages[1]["content"]