diff options
| author | Gabriel Schneider <[email protected]> | 2026-09-11 12:38:56 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-09-15 17:24:42 -0300 |
| commit | 682e237df7e8b22f820d14a4adee58e6e2f84268 (patch) | |
| tree | 5d888cb46f1a49e89fc55e2a4c232d3af0265b1d /test/tag_cleanup.py | |
| parent | 6878e1c309172d624c0d7a3555f6f0217ae6770e (diff) | |
| download | pardes-682e237df7e8b22f820d14a4adee58e6e2f84268.tar.gz pardes-682e237df7e8b22f820d14a4adee58e6e2f84268.zip | |
trunk: resume before the Reload experiment
Empty marker on the last pre-Reload change. Keep the Reload experiment on reload (3801914), its first change on reload-start (200a1fc), and the unfinished performance investigation on reload-perf-wip.
Diffstat (limited to 'test/tag_cleanup.py')
| -rw-r--r-- | test/tag_cleanup.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/test/tag_cleanup.py b/test/tag_cleanup.py new file mode 100644 index 00000000..81b15ad8 --- /dev/null +++ b/test/tag_cleanup.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 +"""Check compact PDF tags and Togglettymode/Ctrl-B parity in an isolated 9P session.""" +import argparse +from pathlib import Path + +from fs import session, new_pane, execute +from column_tags import Input as HostInput +from ui_review import capture, panes, require, wait_for + + +def run(args): + root = args.output.resolve() + root.mkdir(parents=True, mode=0o700, exist_ok=True) + root.chmod(0o700) + name = 'tag-cleanup' + binary = str(args.binary.resolve()) + source = Path('docs/design.pdf').resolve() + original = source.read_bytes() + inherited = {} if args.tty else { + 'PARDES_TEST': '1', 'PARDES_TEST_CAPTURE_DIR': str(root), + 'PARDES_TEST_COLS': '150', 'PARDES_TEST_ROWS': '48', + 'SDL_VIDEODRIVER': 'x11', + } + launch = ['-c', 'stty cols 150 rows 48; exec "$@"', name, binary, + '--9p=' + name, str(source)] + terminal = {} + with session('/bin/sh', root, name, socket_name=name, tty=True, + launch=launch, inherited=inherited, terminal=terminal) as (client, _): + keys = HostInput(terminal['input_fd']) + pdf = next(serial for serial, tag in panes(client).items() if str(source) in tag) + pdf_tag = client.read(f'/self/pane/{pdf}/tag').decode().strip() + require(pdf_tag.startswith(str(source) + ' [1/'), 'PDF name/page prefix missing') + require(pdf_tag.endswith('] Tty Del PdfSections PdfTint Collapse'), 'PDF commands missing') + require(all(word not in pdf_tag for word in ['PdfFit', 'filtered', 'full', 'disabled']), 'PDF tag contains fit or tint-state clutter') + control = new_pane(client, b'') + before = set(panes(client)) + execute(client, control, 'Tty') + tty = require(wait_for(lambda: next((s for s in panes(client) if s not in before), None)), 'terminal missing') + client.write(f'/self/pane/{control}/ctl', b'delete\n') # owned command-only scratch + + def tag_position(): + frame = client.screen() + for row in range(frame['rows']): + text = ''.join(c[0] for c in frame['cells'][row * frame['cols']:(row + 1) * frame['cols']]) + if ' Togglettymode Filter' in text: + return text.index(' Togglettymode Filter') + 1, row, text[0] + return None + + require(wait_for(lambda: (p := tag_position()) and p[2] == '$'), 'new terminal not in raw mode') + x, y, _ = tag_position() + keys.click(x, y, button=1) + require(wait_for(lambda: (p := tag_position()) and p[2] == ' '), 'Togglettymode click did not enter normal mode') + keys.send(b'\x02') + require(wait_for(lambda: (p := tag_position()) and p[2] == '$'), 'Ctrl-B did not restore raw mode') + x, y, _ = tag_position() + keys.click(x, y) + keys.send(b'\t') + require(wait_for(lambda: (p := tag_position()) and p[2] == ' '), 'Togglettymode from edited tag ignored parked raw mode') + keys.send(b'\x02') + client.write(f'/self/pane/{tty}/pty/data', b"printf 'Togglettymode toggle ready\\n'\r") + require(wait_for(lambda: b'Togglettymode toggle ready' in client.read(f'/self/pane/{tty}/body')), 'terminal input failed') + capture(client, root, 'pdf-and-tty-tags', not args.tty) + require(source.read_bytes() == original, 'PDF file changed') + client.write(f'/self/pane/{tty}/pty/data', b'exit\r') + print('PDF tag, Togglettymode click, Ctrl-B, edited-tag execution and source preservation passed') + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('binary', type=Path) + parser.add_argument('output', type=Path) + parser.add_argument('--tty', action='store_true') + run(parser.parse_args()) |
