Sync with testing.

This commit is contained in:
hjozwiak committed 2026-11-02 23:15:59 -05:00
commit f2a35a9305
14 files changed
+502 -6

No files matched your search

+46
View File
@@ -55,6 +55,52 @@ go test ./internal/atspi ./internal/presentation ./internal/app -count=1
CTHULHU_NATIVE_BROWSER_TESTS=menu /usr/bin/python3 tests/native_browser.py
```
## Editable combos with read-only editors
Some Qt applications make a combo editable, then make its internal line edit
read-only. Qt can expose that child with both EDITABLE and READ_ONLY states.
Closed Up/Down navigation sends child caret events followed by a name/value
event from the combo. A caret event can arrive without a new focus event.
On Slint with Qt/PySide6 6.9.3 and AT-SPI 2.58.1, querying the word at that
child's caret reproduced an 800 ms timeout, followed by stale list-item
queries and loss of further accessibility events. Cthulhu identifies these
children using READ_ONLY plus a direct combo parent, copies that parent's
identity into each caret snapshot, and omits the unused word query. It keeps
native focus on the combo and lets its name/value event present the selection.
This does not depend on the last caret/focus event or on a coalescing delay.
Writable combo editors and standalone read-only text fields retain word capture.
The app event loop suppresses a child caret only when its copied combo identity
matches the owned focus. Normal foreground checks still apply. Popup selection
followed by focus is presented once, and deselection of the previous managed
item does not replace the current item. Deselection of the current focused
item remains audible.
Run the isolated regression with:
```sh
python3 tests/native_toby_combo.py
```
This requires PySide6, Xvfb, xdotool and the native Go build dependencies. It
explicitly uses a 24-bit screen; Slint's 8-bit Xvfb default can crash Qt's text
cursor painter before accessibility checks complete. Fixture diagnostics are
saved in the printed `/tmp/cthulhu-combo-qt-*.log` path. The test
checks consecutive closed arrows, Home/End, popup Return and Escape,
Tab/Shift+Tab after each close, and word capture in writable fields, standalone
read-only fields and writable combo editors. It waits for each provider event
instead of filling the adapter queue with an unobserved key sequence. Snapshot
timings are reported for diagnosis, without a machine-speed pass threshold.
For live acceptance, repeat those keys in Toby Doom Launcher for both IWAD and
game choices. Confirm each new value is spoken once, navigation continues after
several changes, and Tab/Shift+Tab still reaches narration and buttons. In an
ordinary text field and writable combo, check typing and Ctrl+Left/Right word
reading. Switch away with a popup open and confirm background events do not
interrupt the new foreground application. Check a physical Braille display when
available; private event tests do not establish audible or physical output.
## Providers which omit checkability
The tested Mumble 1.5.939 / Qt 5 installation exports Mute Self and Deafen Self