#!/bin/bash
echo "=== BitFun ACP Server Test ==="
echo ""
BINARY="${BITFUN_CLI:-target/debug/bitfun}"
WORKSPACE="/tmp/test-acp"
PIPE_DIR="$(mktemp -d /tmp/bitfun-acp-test-sh.XXXXXX)"
ACP_IN="$PIPE_DIR/in"
ACP_OUT="$PIPE_DIR/out"
mkdir -p "$WORKSPACE"
mkfifo "$ACP_IN" "$ACP_OUT"
cleanup() {
exec 3>&- 2>/dev/null || true
exec 4<&- 2>/dev/null || true
if [[ -n "${ACP_PID:-}" ]]; then
kill "$ACP_PID" 2>/dev/null || true
wait "$ACP_PID" 2>/dev/null || true
fi
rm -rf "$PIPE_DIR"
}
trap cleanup EXIT
echo "Test 1: Initialize"
echo "Test 2: Create Session"
echo "Test 3: List Sessions"
"$BINARY" acp <"$ACP_IN" >"$ACP_OUT" &
ACP_PID="$!"
exec 3>"$ACP_IN"
exec 4<"$ACP_OUT"
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":1,"clientCapabilities":{"fs":{"readTextFile":true,"writeTextFile":true},"terminal":true},"clientInfo":{"name":"TestClient","version":"1.0"}}}' \
>&3
responses=0
while [[ "$responses" -lt 3 ]]; do
if ! IFS= read -r -t 15 line <&4; then
echo "Timed out waiting for ACP response" >&2
exit 1
fi
echo "$line"
if [[ "$line" == *'"id":'* ]]; then
responses=$((responses + 1))
fi
if [[ "$line" == *'"id":1'* ]]; then
printf '%s\n' \
"{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"session/new\",\"params\":{\"cwd\":\"$WORKSPACE\",\"mcpServers\":[]}}" \
>&3
elif [[ "$line" == *'"id":2'* ]]; then
printf '%s\n' \
"{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"session/list\",\"params\":{\"cwd\":\"$WORKSPACE\"}}" \
>&3
fi
done
exec 3>&-
echo ""
echo "=== Tests Complete ==="
echo ""
echo "Note: This is a basic test of the typed ACP protocol layer."