repos / zmx

session persistence for terminal processes
git clone https://github.com/neurosnap/zmx.git

zmx / test
Eric Bower  ·  2026-04-24

test_helper.bash

 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}