Type at the window with a real keyboard: the akgl_typing test
Some checks failed
akbasic CI Build / cmake_build (push) Failing after 18s
akbasic CI Build / sanitizers (push) Failing after 13s
akbasic CI Build / coverage (push) Failing after 16s
akbasic CI Build / akgl_build (push) Failing after 17s
akbasic CI Build / mutation_test (push) Failing after 17s
Some checks failed
akbasic CI Build / cmake_build (push) Failing after 18s
akbasic CI Build / sanitizers (push) Failing after 13s
akbasic CI Build / coverage (push) Failing after 16s
akbasic CI Build / akgl_build (push) Failing after 17s
akbasic CI Build / mutation_test (push) Failing after 17s
xdotool closes the gap that shipped the missing SDL_StartTextInput(). Every other keyboard test synthesises SDL events, which covers the code downstream of SDL and cannot cover the code upstream of it -- so the suite stayed green while the real keyboard was dead. akgl_typing starts the driver under a pty, waits for the window with xdotool search --sync, gives it focus, and types a program containing a string literal and a lower-case one, polling the mirrored stdout for what they print. Verified by reverting both halves of the text-input fix and watching it fail with the reported symptom: READY, and nothing after it. Skips rather than fails without a display, xdotool, script(1) or a window manager -- none of those means the answer is no. It steals keyboard focus for about fifteen seconds; AKBASIC_SKIP_INTERACTIVE=1 skips it deliberately. xdotool and script(1) are documented as optional test dependencies, alongside what gcovr and python3 already bought. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
23
TODO.md
23
TODO.md
@@ -529,11 +529,22 @@ box's left edge at x=100 is a solid white line (mean 255), the box interior is b
|
||||
outlines rather than fills — and an empty corner is black. stdout carried `HELLO WORLD` at the
|
||||
same time. `QUIT` exits cleanly with status 0.
|
||||
|
||||
**What that check does not cover, and could not here:** typing at a real focused window. No key
|
||||
synthesis tool (`xdotool`, `xte`, python-xlib) is installed on this machine, so the keyboard
|
||||
path is proved only through SDL's own event queue in `tests/akgl_frontend.c` — which is the
|
||||
same queue a real keyboard delivers into, but not the same as a window manager giving the
|
||||
window focus. Somebody should type at it once.
|
||||
**The typing half is no longer manual, and it is no longer a gap.** It used to read "somebody
|
||||
should type at it once", because no key-synthesis tool was installed. `xdotool` now is, and
|
||||
`tests/akgl_typing.sh` is registered as the `akgl_typing` CTest case: it starts the driver under
|
||||
a pty, waits for the window with `xdotool search --sync`, gives it keyboard focus, types a
|
||||
program containing a **string literal** and a **lower-case** one, and polls the mirrored stdout
|
||||
for what they print.
|
||||
|
||||
That case earns its keep twice over. It is the only test that covers the path *upstream* of SDL
|
||||
— X11 → SDL composition → libakgl's ring → the editor — and everything else synthesises SDL
|
||||
events, which is precisely how the missing `SDL_StartTextInput()` shipped with a green suite.
|
||||
Confirmed by reverting both halves of that fix and watching it fail with the same symptom that
|
||||
was reported: `READY`, and nothing after it.
|
||||
|
||||
It needs a real X server, a window manager and `xdotool`, and it steals keyboard focus for about
|
||||
fifteen seconds. Absent any of those it reports CTest `Skipped` rather than failing, which is
|
||||
what it does in CI. `AKBASIC_SKIP_INTERACTIVE=1` skips it deliberately.
|
||||
|
||||
### The five things that had to be worked around — **all gone**
|
||||
|
||||
@@ -1122,7 +1133,7 @@ requirement; exactly one case has diverged on purpose since, and
|
||||
| Gate | Result |
|
||||
|---|---|
|
||||
| `ctest` | 77/77 — 41 reference golden cases, 9 local ones, 25 unit tests, 2 embedding examples. No known-failing tests: the list is empty |
|
||||
| `ctest` with `-DAKBASIC_WITH_AKGL=ON` | 76/76 — the same, minus the three `no_device` cases the SDL driver contradicts, plus `akgl_backends` and `akgl_frontend`; the `akgl_build` CI job |
|
||||
| `ctest` with `-DAKBASIC_WITH_AKGL=ON` | 77/77 on a machine with a display; 76 passed + 1 skipped headless. The same set minus the three `no_device` cases the SDL driver contradicts, plus `akgl_backends`, `akgl_frontend` and `akgl_typing` — the last of which is the skip, and the `akgl_build` CI job is where it skips |
|
||||
| Golden corpus | 41/41 byte-exact from `tests/reference/` — **and 41/41 again through the SDL binary**, which is most of what proves the frontend changes no output |
|
||||
| ASan + UBSan | 77/77 |
|
||||
| Line coverage | 94.6% (3857/4076) — above the 90% gate |
|
||||
|
||||
Reference in New Issue
Block a user