SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
INSTALL_SCRIPT="$PROJECT_ROOT/install.sh"
extract_install_functions() {
local tmp_functions
tmp_functions="$(mktemp)"
{
sed '
# Skip shebang
1d
# Replace set -euo pipefail with softer settings
s/^set -euo pipefail/set -e/
# Disable exit on errors for sourcing
s/^umask 022/umask 022; set +e/
# Return before actual execution starts (after all function definitions)
# The "Run Auto-Configuration" section starts actual execution
/^# Run Auto-Configuration$/i\
return 0 2>/dev/null || true
' "$INSTALL_SCRIPT"
} > "$tmp_functions"
source "$tmp_functions" >/dev/null 2>&1 || true
rm -f "$tmp_functions"
}
setup_isolated_home() {
export TEST_TMPDIR
TEST_TMPDIR="$(mktemp -d)"
export ORIGINAL_HOME="$HOME"
export ORIGINAL_PATH="$PATH"
export HOME="$TEST_TMPDIR/home"
mkdir -p "$HOME"
mkdir -p "$TEST_TMPDIR/bin"
export PATH="$TEST_TMPDIR/bin:/usr/bin:/bin"
export HAS_GUM=0
export NO_GUM=1
export QUIET=1
}
teardown_isolated_home() {
if [[ -n "${TEST_TMPDIR:-}" && -d "${TEST_TMPDIR:-}" ]]; then
rm -rf "$TEST_TMPDIR"
fi
if [[ -n "${ORIGINAL_HOME:-}" ]]; then
export HOME="$ORIGINAL_HOME"
fi
if [[ -n "${ORIGINAL_PATH:-}" ]]; then
export PATH="$ORIGINAL_PATH"
fi
}
setup_mock_claude() {
mkdir -p "$HOME/.claude"
echo '{"hooks": []}' > "$HOME/.claude/settings.json"
}
setup_mock_codex() {
mkdir -p "$HOME/.codex"
touch "$HOME/.codex/config.toml"
}
setup_mock_gemini() {
mkdir -p "$HOME/.gemini"
echo '{}' > "$HOME/.gemini/settings.json"
}
setup_mock_aider() {
mkdir -p "$TEST_TMPDIR/bin"
cat > "$TEST_TMPDIR/bin/aider" << 'EOF'
#!/bin/bash
echo "aider 0.50.0"
EOF
chmod +x "$TEST_TMPDIR/bin/aider"
export PATH="$TEST_TMPDIR/bin:$PATH"
}
setup_mock_continue() {
mkdir -p "$HOME/.continue"
echo '{}' > "$HOME/.continue/config.json"
}
create_test_file_with_checksum() {
local content="$1"
local file="$2"
echo -n "$content" > "$file"
if command -v sha256sum &>/dev/null; then
sha256sum "$file" | cut -d' ' -f1
elif command -v shasum &>/dev/null; then
shasum -a 256 "$file" | cut -d' ' -f1
fi
}
setup_test_log() {
local test_name="$1"
export TEST_LOG="$TEST_TMPDIR/test_${test_name}.log"
echo "=== Test started: $test_name ===" >> "$TEST_LOG"
}
log_test() {
echo "$@" >> "${TEST_LOG:-/dev/null}"
}