Eric Bower
·
2026-08-11
1# test_helper.bash — shared setup/teardown for zmx BATS tests
2
3REPO_DIR="$(cd "$BATS_TEST_DIRNAME/.." && pwd)"
4
5setup() {
6 # Build once per test suite (skips if already built)
7 if [[ ! -x "$REPO_DIR/zig-out/bin/zmx" ]]; then
8 cd "$REPO_DIR" && zig build
9 fi
10 ZMX="$REPO_DIR/zig-out/bin/zmx"
11
12 # Isolate socket dir so tests don't interfere with real sessions or each other
13 export ZMX_DIR="$BATS_TEST_TMPDIR/zmx-sockets"
14 mkdir -p "$ZMX_DIR"
15}
16
17teardown() {
18 # Kill any sessions created during this test
19 if [[ -d "$ZMX_DIR" ]]; then
20 local sessions
21 sessions=$("$ZMX" list --short 2>/dev/null) || true
22 if [[ -n "$sessions" ]]; then
23 echo "$sessions" | xargs "$ZMX" kill --force 2>/dev/null || true
24 fi
25 fi
26}
27
28# Helper: wait for a session to appear in list (up to N seconds)
29wait_for_session() {
30 local name="$1" timeout="${2:-5}" i=0
31 while (( i < timeout * 10 )); do
32 if "$ZMX" list --short 2>/dev/null | grep -qx "$name"; then
33 return 0
34 fi
35 sleep 0.1
36 (( i++ )) || true
37 done
38 echo "Timed out waiting for session '$name'" >&2
39 return 1
40}
41
42# Helper: wait for a marker to appear in a session's history (up to N seconds).
43# Use this instead of a fixed sleep whenever a test needs the daemon to have
44# processed and buffered PTY output before it checks/sends more.
45wait_for_output() {
46 local name="$1" marker="$2" timeout="${3:-5}" i=0
47 while (( i < timeout * 10 )); do
48 if "$ZMX" history "$name" 2>/dev/null | grep -qF "$marker"; then
49 return 0
50 fi
51 sleep 0.1
52 (( i++ )) || true
53 done
54 echo "Timed out waiting for output '$marker' in session '$name'" >&2
55 return 1
56}
57
58# Helper: wait for a session's cwd to match expected substring (up to N seconds).
59wait_for_cwd() {
60 local name="$1" pattern="$2" timeout="${3:-5}" i=0
61 while (( i < timeout * 10 )); do
62 if "$ZMX" list 2>/dev/null | grep -F "name=$name" | grep -qF "$pattern"; then
63 return 0
64 fi
65 sleep 0.1
66 (( i++ )) || true
67 done
68 echo "Timed out waiting for cwd '$pattern' in session '$name'" >&2
69 return 1
70}