From cad5a4f9f78c437e9ae80173118abb31df0954d4 Mon Sep 17 00:00:00 2001 From: blasty Date: Thu, 6 Aug 2026 15:11:54 +0200 Subject: pane: drive panes under zellij as well as tmux The multiplexer is auto-detected ($ZELLIJ then $TMUX) and every pane command works the same under both. Pane ids are self-identifying, so a mixed set of tmux and zellij panes can be tracked at once. zellij has no -l, so --size is ignored there, it always focuses a new pane (--detached is emulated), and it leaves an EXITED husk behind that stop/reap now clear. The pane tests skip on neither multiplexer rather than on no TMUX. --- tests/test_rawimage_rpc.py | 6 +++--- tests/test_trace_rpc.py | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'tests') diff --git a/tests/test_rawimage_rpc.py b/tests/test_rawimage_rpc.py index fe2629f..4da6348 100644 --- a/tests/test_rawimage_rpc.py +++ b/tests/test_rawimage_rpc.py @@ -16,7 +16,7 @@ fall apart: This test spawns a real pane on a real Thumb blob and checks all three. -Requires: tmux, IDA (idalib). ~2min. +Requires: tmux or zellij, IDA (idalib). ~2min. ~/ida-venv/bin/python tests/test_rawimage_rpc.py """ @@ -65,8 +65,8 @@ def stop_pane(sock, timeout=60): def main() -> int: - if not os.environ.get("TMUX"): - print("SKIP: not inside tmux") + if not os.environ.get("TMUX") and not os.environ.get("ZELLIJ"): + print("SKIP: not inside tmux or zellij (test spawns a pane)") return 0 if not os.path.exists(BLOB): print(f"SKIP: no blob at {BLOB}") diff --git a/tests/test_trace_rpc.py b/tests/test_trace_rpc.py index 1007385..b5a77a4 100644 --- a/tests/test_trace_rpc.py +++ b/tests/test_trace_rpc.py @@ -2,12 +2,12 @@ """Trace integration over the RPC socket — the path an agent actually takes. The UI tests (test_trace_ui.py) drive the trace via in-process keystrokes and -the Textual pilot. This one spawns a real tmux pane with ``--trace`` and drives +the Textual pilot. This one spawns a real mux pane with ``--trace`` and drives every trace verb through the RPC socket, validating the JSON responses an agent would see. It exercises the serialization, the settle/timeout machinery, and the response shape that a driver depends on. -Requires: tmux, IDA (idalib), and a trace. Records a fresh trace with the QEMU +Requires: tmux or zellij, IDA (idalib), and a trace. Records a fresh trace with the QEMU tracer if built; falls back to /tmp/echotrace.0.log if present; skips with a message otherwise. @@ -78,8 +78,8 @@ def stop_pane(sock, timeout=60): def main() -> int: global PASS, FAIL - if not os.environ.get("TMUX"): - print(" skip: not inside tmux (test spawns a pane)") + if not os.environ.get("TMUX") and not os.environ.get("ZELLIJ"): + print(" skip: not inside tmux or zellij (test spawns a pane)") return 0 with tempfile.TemporaryDirectory() as tmp: -- cgit v1.3.1-sl0p