Test per-key LaTeX typing

This commit is contained in:
Edern Deneuville
2026-09-12 12:19:47 +02:00
parent 6076b3270d
commit 132aa8e918
+29 -9
View File
@@ -3,7 +3,7 @@ from types import SimpleNamespace
from ai_typewriter.key_stepper import KeyStepper
def test_start_types_first_character_immediately_then_hooks_remaining(monkeypatch):
def test_start_installs_hook_without_typing_immediately(monkeypatch):
typed = []
hooked = []
@@ -13,37 +13,57 @@ def test_start_types_first_character_immediately_then_hooks_remaining(monkeypatc
stepper = KeyStepper("abc")
stepper.start()
assert typed == ["a"]
assert typed == []
assert hooked and hooked[0][1] is True
assert stepper.remaining_characters == 2
assert stepper.remaining_characters == 3
def test_single_character_response_does_not_install_hook(monkeypatch):
def test_single_character_response_waits_for_key_then_unhooks(monkeypatch):
typed = []
hooks = []
hook = {}
unhooked = []
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))
monkeypatch.setattr("ai_typewriter.key_stepper.keyboard.hook", lambda callback, suppress=True: hook.update({"callback": callback}) or "hook")
monkeypatch.setattr("ai_typewriter.key_stepper.keyboard.unhook", lambda value: unhooked.append(value))
stepper = KeyStepper("x")
stepper.start()
hook["callback"](SimpleNamespace(event_type="down"))
assert typed == ["x"]
assert hooks == []
assert unhooked == ["hook"]
assert stepper.remaining_characters == 0
def test_key_down_types_next_character_after_auto_first(monkeypatch):
def test_each_key_down_types_next_character(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.hook", lambda callback, suppress=True: hook.update({"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"))
hook["callback"](SimpleNamespace(event_type="down"))
assert typed == ["a", "b"]
assert stepper.remaining_characters == 0
def test_latex_markers_are_typed_literally_character_by_character(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.update({"callback": callback}) or "hook")
monkeypatch.setattr("ai_typewriter.key_stepper.keyboard.unhook", lambda value: None)
stepper = KeyStepper(r"[EQ]\frac{a}{b}[/EQ]")
stepper.start()
for _ in range(len(stepper.text)):
hook["callback"](SimpleNamespace(event_type="down"))
assert "".join(typed) == r"[EQ]\frac{a}{b}[/EQ]"