From ad3f009ad6089a787ecfb96a52b81f0c243c21dd Mon Sep 17 00:00:00 2001 From: Edern Deneuville Date: Fri, 11 Sep 2026 13:24:19 +0200 Subject: [PATCH] Add key stepper auto-first-character tests --- tests/test_key_stepper.py | 49 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 tests/test_key_stepper.py diff --git a/tests/test_key_stepper.py b/tests/test_key_stepper.py new file mode 100644 index 0000000..cf531d8 --- /dev/null +++ b/tests/test_key_stepper.py @@ -0,0 +1,49 @@ +from types import SimpleNamespace + +from ai_typewriter.key_stepper import KeyStepper + + +def test_start_types_first_character_immediately_then_hooks_remaining(monkeypatch): + typed = [] + hooked = [] + + monkeypatch.setattr("ai_typewriter.key_stepper.keyboard.write", lambda char, delay=0, exact=True: typed.append(char)) + monkeypatch.setattr("ai_typewriter.key_stepper.keyboard.hook", lambda callback, suppress=True: hooked.append((callback, suppress)) or "hook") + + stepper = KeyStepper("abc") + stepper.start() + + assert typed == ["a"] + assert hooked and hooked[0][1] is True + assert stepper.remaining_characters == 2 + + +def test_single_character_response_does_not_install_hook(monkeypatch): + typed = [] + hooks = [] + + monkeypatch.setattr("ai_typewriter.key_stepper.keyboard.write", lambda char, delay=0, exact=True: typed.append(char)) + monkeypatch.setattr("ai_typewriter.key_stepper.keyboard.hook", lambda callback, suppress=True: hooks.append(callback)) + + stepper = KeyStepper("x") + stepper.start() + + assert typed == ["x"] + assert hooks == [] + assert stepper.remaining_characters == 0 + + +def test_key_down_types_next_character_after_auto_first(monkeypatch): + typed = [] + hook = {} + + monkeypatch.setattr("ai_typewriter.key_stepper.keyboard.write", lambda char, delay=0, exact=True: typed.append(char)) + monkeypatch.setattr("ai_typewriter.key_stepper.keyboard.hook", lambda callback, suppress=True: hook.setdefault("callback", callback) or "hook") + monkeypatch.setattr("ai_typewriter.key_stepper.keyboard.unhook", lambda value: None) + + stepper = KeyStepper("ab") + stepper.start() + hook["callback"](SimpleNamespace(event_type="down")) + + assert typed == ["a", "b"] + assert stepper.remaining_characters == 0