run.sh raw
1 #!/bin/bash
2 # Restriction test runner: compiles each .mx, checks it fails cleanly.
3 set -euo pipefail
4
5 SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
6 ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
7 source "$SCRIPT_DIR/../util.sh"
8
9 echo ""
10 echo "=== Phase 0b: Restrictions ==="
11
12 for f in "$SCRIPT_DIR"/*.mx; do
13 [ -f "$f" ] || continue
14 name="restrict:$(basename "$f" .mx)"
15 t0=$(date +%s%N)
16 td="$(tempdir "rst_$(basename "$f" .mx)")"
17 rm -rf "$td"; mkdir -p "$td"
18 mkdir -p "$td/pkg"
19 cp "$f" "$td/pkg/main.mx"
20
21 expected=$(grep "^// expected:" "$f" | head -1 | sed 's/^\/\/ expected: *//')
22 if [ -z "$expected" ]; then
23 log_fail "$name" "no '// expected:' header"
24 rm -rf "$td"
25 continue
26 fi
27
28 log="$td/build.log"
29 rc=0
30 MOXIEROOT="$ROOT" "$MOXIE" build -o /dev/null "$td/pkg" >"$log" 2>&1 || rc=$?
31
32 if [ $rc -eq 0 ]; then
33 log_fail "$name" "compiler did not reject (exit 0, expected error: '$expected')"
34 rm -rf "$td"
35 continue
36 fi
37
38 if grep -qE "panic:|caught signal|nil pointer dereference" "$log" 2>/dev/null; then
39 log_fail "$name" "compiler crashed instead of producing clean error"
40 rm -rf "$td"
41 continue
42 fi
43
44 if ! grep -qiF "$expected" "$log" 2>/dev/null; then
45 log_fail "$name" "expected error '$expected' not found in output"
46 tail -5 "$log"
47 rm -rf "$td"
48 continue
49 fi
50
51 t1=$(date +%s%N)
52 log_pass "$name" "ok"
53 rm -rf "$td"
54 done
55