diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/extern/README.md | 17 | ||||
| -rw-r--r-- | tests/extern/kitty/parser.py | 9 | ||||
| -rw-r--r-- | tests/meson.build | 14 |
3 files changed, 30 insertions, 10 deletions
diff --git a/tests/extern/README.md b/tests/extern/README.md index cff42ed..2a52e29 100644 --- a/tests/extern/README.md +++ b/tests/extern/README.md @@ -2,7 +2,9 @@ This directory holds test suites imported from external projects. These are kept for reference and cross-checking against our own terminal emulator's -behavior. On Linux, `make test` builds and runs the adapted Kitty parser suite. +behavior. Every unsanitized Linux build runs the adapted Kitty parser +suite with the unit tests. `-Dkitty_tests=true` makes a missing suite an +error. ## kitty/ @@ -35,9 +37,20 @@ Kitty parser test suite against it via a Python compatibility layer. ### Test status (14 tests) All 14 tests pass. Features implemented for Kitty parity include DEC -Special Graphics charset translation (G0/G1, SO/SI), literal `\t` cells, +Special Graphics charset translation (G0/G1, SO/SI), LNM-default-off linefeed semantics, CSI insert-character and REP edge cases, DECRQM mode reports, DECRQSS (DCS `$q`) and XTGETTCAP (DCS `+q`) responses, DECCARA/DECSACE (CSI `$r` / `*x`), secondary device attributes (CSI `=c`), XTWINOPS cell-size report (CSI `14t`), underline styles 0–5, and SGR underline color (58/59) including colon-form subparameters. + +### Deliberate differences from Kitty + +The terminal follows xterm in two places. `parser.py` checks the xterm +result there, with a comment at each check. + +- A cursor position report (CSI 6n) with a pending wrap reports the last + column. Kitty reports the first column of the next line. +- HT only moves the cursor. Kitty writes a tab cell and blanks the cells + it skips, so a tab erases the text under it. `spec-test` checks that a + tab does not erase. diff --git a/tests/extern/kitty/parser.py b/tests/extern/kitty/parser.py index 537e1c0..76357fd 100644 --- a/tests/extern/kitty/parser.py +++ b/tests/extern/kitty/parser.py @@ -757,7 +757,9 @@ class TestParser(BaseTest): pb('12345', '12345') c.clear() pb('\033[6n', ('report_device_status', 6, 0)) - self.ae(c.wtcbuf, b'\033[2;1R') + # A pending wrap reports the last column, as xterm does. Kitty + # reports the start of the next line. + self.ae(c.wtcbuf, b'\033[1;5R') c.clear() s.cursor_key_mode = True pb('\033[?1$p', ('report_mode_status', 1, 1)) @@ -815,8 +817,9 @@ class TestParser(BaseTest): self.ae(str(s.line(0)), ' ') s.reset() pb('\t\033[b', ('screen_tab',), ('screen_repeat_character', 1)) - # The terminal includes blank tab padding in its line text. - self.ae(str(s.line(0)).rstrip(' '), '\t') + # HT only moves the cursor, as in xterm. Kitty writes a tab cell + # there. REP then has no graphic character to repeat. + self.ae(str(s.line(0)), '') self.ae(s.cursor.x, 7) self.ae(s.cursor.y, 0) s.reset() diff --git a/tests/meson.build b/tests/meson.build index 42c442e..8372574 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -109,10 +109,14 @@ test('term-cross-test', bash, timeout: 600, ) -if get_option('kitty_tests') - if host_machine.system() != 'linux' or get_option('b_sanitize') != 'none' - error('Kitty tests require an unsanitized Linux build') - endif +# The bridge is a shared library that Python loads, so a sanitized build +# cannot run it. +kitty_tests = get_option('kitty').require( + host_machine.system() == 'linux' and get_option('b_sanitize') == 'none', + error_message: 'The Kitty tests need an unsanitized Linux build', +) +term_kitty_tests = kitty_tests.allowed() +if term_kitty_tests kitty_bridge = shared_library('term', 'extern/kitty/screen_bridge.c', dependencies: term_internal_dep, ) @@ -122,7 +126,7 @@ if get_option('kitty_tests') args: files('extern/kitty/parser.py'), depends: kitty_bridge, env: kitty_env, - suite: 'kitty', + suite: ['unit', 'kitty'], is_parallel: false, ) endif |
