@@ -58,57 +58,88 @@ agent_teams: false
5858EOF_STATE
5959}
6060
61- # Test 1: Default project root should be caller cwd (not plugin install dir)
61+ # Single setup_test_dir call to avoid EXIT trap overwrite and temp dir leak.
6262setup_test_dir
63- setup_active_loop_fixture " $TEST_DIR /project"
63+
64+ # Test 1: Default project root should be caller cwd (not plugin install dir)
65+ T1_DIR=" $TEST_DIR /t1"
66+ mkdir -p " $T1_DIR "
67+ setup_active_loop_fixture " $T1_DIR /project"
6468
6569set +e
6670(
67- cd " $TEST_DIR /project"
71+ cd " $T1_DIR /project"
6872 " $GATE_SCRIPT "
69- ) > " $TEST_DIR /out1 .txt" 2>&1
73+ ) > " $T1_DIR /out .txt" 2>&1
7074EXIT1=$?
7175set -e
7276
7377if [[ " $EXIT1 " -eq 10 ]]; then
7478 pass " rlcr-stop-gate default project root uses cwd and blocks active loop"
7579else
76- OUTPUT1=$( cat " $TEST_DIR /out1 .txt" 2> /dev/null || true)
80+ OUTPUT1=$( cat " $T1_DIR /out .txt" 2> /dev/null || true)
7781 fail " rlcr-stop-gate default project root uses cwd and blocks active loop" " exit 10" " exit $EXIT1 ; output: $OUTPUT1 "
7882fi
7983
80- if grep -q " ^BLOCK:" " $TEST_DIR /out1 .txt" 2> /dev/null; then
84+ if grep -q " ^BLOCK:" " $T1_DIR /out .txt" 2> /dev/null; then
8185 pass " rlcr-stop-gate reports a real loop blocking reason"
8286else
83- OUTPUT1=$( cat " $TEST_DIR /out1 .txt" 2> /dev/null || true)
87+ OUTPUT1=$( cat " $T1_DIR /out .txt" 2> /dev/null || true)
8488 fail " rlcr-stop-gate reports a real loop blocking reason" " output containing BLOCK:" " $OUTPUT1 "
8589fi
8690
8791# Test 2: --project-root override works from outside target repository
88- setup_test_dir
89- setup_active_loop_fixture " $TEST_DIR /project"
92+ T2_DIR=" $TEST_DIR /t2"
93+ mkdir -p " $T2_DIR "
94+ setup_active_loop_fixture " $T2_DIR /project"
9095
9196set +e
9297(
93- cd " $TEST_DIR "
94- " $GATE_SCRIPT " --project-root " $TEST_DIR /project"
95- ) > " $TEST_DIR /out2 .txt" 2>&1
98+ cd " $T2_DIR "
99+ " $GATE_SCRIPT " --project-root " $T2_DIR /project"
100+ ) > " $T2_DIR /out .txt" 2>&1
96101EXIT2=$?
97102set -e
98103
99104if [[ " $EXIT2 " -eq 10 ]]; then
100105 pass " rlcr-stop-gate --project-root override blocks using target repo loop"
101106else
102- OUTPUT2=$( cat " $TEST_DIR /out2 .txt" 2> /dev/null || true)
107+ OUTPUT2=$( cat " $T2_DIR /out .txt" 2> /dev/null || true)
103108 fail " rlcr-stop-gate --project-root override blocks using target repo loop" " exit 10" " exit $EXIT2 ; output: $OUTPUT2 "
104109fi
105110
106- if grep -q " ^BLOCK:" " $TEST_DIR /out2 .txt" 2> /dev/null; then
111+ if grep -q " ^BLOCK:" " $T2_DIR /out .txt" 2> /dev/null; then
107112 pass " rlcr-stop-gate --project-root output contains expected block reason"
108113else
109- OUTPUT2=$( cat " $TEST_DIR /out2 .txt" 2> /dev/null || true)
114+ OUTPUT2=$( cat " $T2_DIR /out .txt" 2> /dev/null || true)
110115 fail " rlcr-stop-gate --project-root output contains expected block reason" " output containing BLOCK:" " $OUTPUT2 "
111116fi
112117
118+ # Test 3: No active loop -> gate allows exit (exit 0)
119+ T3_DIR=" $TEST_DIR /t3"
120+ mkdir -p " $T3_DIR /empty-project"
121+
122+ set +e
123+ (
124+ cd " $T3_DIR /empty-project"
125+ " $GATE_SCRIPT "
126+ ) > " $T3_DIR /out.txt" 2>&1
127+ EXIT3=$?
128+ set -e
129+
130+ if [[ " $EXIT3 " -eq 0 ]]; then
131+ pass " rlcr-stop-gate exits 0 when no active loop exists"
132+ else
133+ OUTPUT3=$( cat " $T3_DIR /out.txt" 2> /dev/null || true)
134+ fail " rlcr-stop-gate exits 0 when no active loop exists" " exit 0" " exit $EXIT3 ; output: $OUTPUT3 "
135+ fi
136+
137+ if grep -q " ^ALLOW:" " $T3_DIR /out.txt" 2> /dev/null; then
138+ pass " rlcr-stop-gate reports ALLOW when no active loop"
139+ else
140+ OUTPUT3=$( cat " $T3_DIR /out.txt" 2> /dev/null || true)
141+ fail " rlcr-stop-gate reports ALLOW when no active loop" " output containing ALLOW:" " $OUTPUT3 "
142+ fi
143+
113144print_test_summary " RLCR Stop Gate Wrapper Test Summary"
114145exit $?
0 commit comments