90 lines
3.0 KiB
Bash
90 lines
3.0 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# Phase 153: Dead Code Detection Smoke Test
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||
|
|
BIN="${NYASH_BIN:-$ROOT/target/release/hakorune}"
|
||
|
|
|
||
|
|
if [ ! -x "$BIN" ]; then
|
||
|
|
echo "[ERROR] hakorune binary not found: $BIN" >&2
|
||
|
|
echo "Run: cargo build --release" >&2
|
||
|
|
exit 2
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "=== Phase 153: Dead Code Detection Smoke Test ===" >&2
|
||
|
|
|
||
|
|
# Test 1: Basic dead code detection with --dead-code flag
|
||
|
|
echo "[TEST 1] Testing --dead-code flag with dead method..." >&2
|
||
|
|
TEST1_FILE="$ROOT/tools/hako_check/tests/HC019_dead_code/ng.hako"
|
||
|
|
TEST1_OUTPUT=$(NYASH_DISABLE_PLUGINS=1 \
|
||
|
|
NYASH_BOX_FACTORY_POLICY=builtin_first \
|
||
|
|
NYASH_FEATURES=stage3 \
|
||
|
|
"$BIN" --backend vm "$ROOT/tools/hako_check/cli.hako" -- --dead-code --source-file "$TEST1_FILE" "$(cat "$TEST1_FILE")" 2>&1 || true)
|
||
|
|
|
||
|
|
if echo "$TEST1_OUTPUT" | grep -q "HC019.*unreachable method"; then
|
||
|
|
echo "[PASS] Test 1: Dead method detected" >&2
|
||
|
|
else
|
||
|
|
echo "[FAIL] Test 1: Dead method NOT detected" >&2
|
||
|
|
echo "Output: $TEST1_OUTPUT" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
if echo "$TEST1_OUTPUT" | grep -q "HC019.*dead static box"; then
|
||
|
|
echo "[PASS] Test 1: Dead static box detected" >&2
|
||
|
|
else
|
||
|
|
echo "[FAIL] Test 1: Dead static box NOT detected" >&2
|
||
|
|
echo "Output: $TEST1_OUTPUT" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Test 2: Clean code (no dead code)
|
||
|
|
echo "[TEST 2] Testing --dead-code flag with clean code..." >&2
|
||
|
|
TEST2_FILE="$ROOT/tools/hako_check/tests/HC019_dead_code/ok.hako"
|
||
|
|
TEST2_OUTPUT=$(NYASH_DISABLE_PLUGINS=1 \
|
||
|
|
NYASH_BOX_FACTORY_POLICY=builtin_first \
|
||
|
|
NYASH_FEATURES=stage3 \
|
||
|
|
"$BIN" --backend vm "$ROOT/tools/hako_check/cli.hako" -- --dead-code --source-file "$TEST2_FILE" "$(cat "$TEST2_FILE")" 2>&1 || true)
|
||
|
|
|
||
|
|
if echo "$TEST2_OUTPUT" | grep -q "HC019"; then
|
||
|
|
echo "[FAIL] Test 2: False positive detected" >&2
|
||
|
|
echo "Output: $TEST2_OUTPUT" >&2
|
||
|
|
exit 1
|
||
|
|
else
|
||
|
|
echo "[PASS] Test 2: No false positives" >&2
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Test 3: --rules dead_code flag
|
||
|
|
echo "[TEST 3] Testing --rules dead_code..." >&2
|
||
|
|
TEST3_OUTPUT=$(NYASH_DISABLE_PLUGINS=1 \
|
||
|
|
NYASH_BOX_FACTORY_POLICY=builtin_first \
|
||
|
|
NYASH_FEATURES=stage3 \
|
||
|
|
"$BIN" --backend vm "$ROOT/tools/hako_check/cli.hako" -- --rules dead_code --source-file "$TEST1_FILE" "$(cat "$TEST1_FILE")" 2>&1 || true)
|
||
|
|
|
||
|
|
if echo "$TEST3_OUTPUT" | grep -q "HC019"; then
|
||
|
|
echo "[PASS] Test 3: --rules dead_code works" >&2
|
||
|
|
else
|
||
|
|
echo "[FAIL] Test 3: --rules dead_code did not work" >&2
|
||
|
|
echo "Output: $TEST3_OUTPUT" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Test 4: JSON-LSP format with --dead-code
|
||
|
|
echo "[TEST 4] Testing JSON-LSP format with --dead-code..." >&2
|
||
|
|
TEST4_OUTPUT=$(NYASH_DISABLE_PLUGINS=1 \
|
||
|
|
NYASH_BOX_FACTORY_POLICY=builtin_first \
|
||
|
|
NYASH_FEATURES=stage3 \
|
||
|
|
NYASH_JSON_ONLY=1 \
|
||
|
|
"$BIN" --backend vm "$ROOT/tools/hako_check/cli.hako" -- --format json-lsp --dead-code "$TEST1_FILE" 2>/dev/null || true)
|
||
|
|
|
||
|
|
if echo "$TEST4_OUTPUT" | grep -q '"rule":"HC019"'; then
|
||
|
|
echo "[PASS] Test 4: JSON-LSP format works" >&2
|
||
|
|
else
|
||
|
|
echo "[FAIL] Test 4: JSON-LSP format did not work" >&2
|
||
|
|
echo "Output: $TEST4_OUTPUT" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "" >&2
|
||
|
|
echo "=== All Dead Code Detection Tests Passed ===" >&2
|
||
|
|
exit 0
|