find-polluter.sh
1.9 KB| 1 | |
| 2 | # Bisection script to find which test creates unwanted files/state |
| 3 | # Usage: ./find-polluter.sh <file_or_dir_to_check> <test_pattern> |
| 4 | # Example: ./find-polluter.sh '.git' 'src/**/*.test.ts' |
| 5 | |
| 6 | set -e |
| 7 | |
| 8 | if [ $# -ne 2 ]; then |
| 9 | echo "Usage: $0 <file_to_check> <test_pattern>" |
| 10 | echo "Example: $0 '.git' 'src/**/*.test.ts'" |
| 11 | exit 1 |
| 12 | fi |
| 13 | |
| 14 | POLLUTION_CHECK="$1" |
| 15 | TEST_PATTERN="$2" |
| 16 | |
| 17 | echo "🔍 Searching for test that creates: $POLLUTION_CHECK" |
| 18 | echo "Test pattern: $TEST_PATTERN" |
| 19 | echo "" |
| 20 | |
| 21 | # Get list of test files (find . emits ./-prefixed paths, so accept the |
| 22 | # pattern written with or without a leading ./) |
| 23 | TEST_PATTERN="${TEST_PATTERN#./}" |
| 24 | # find -path can't match '**/' against zero directory levels, so a pattern |
| 25 | # like src/**/*.test.ts would skip src/top.test.ts; also try the pattern |
| 26 | # with '**/' collapsed to cover files directly under the base directory. |
| 27 | TEST_FILES=$(find . \( -path "./$TEST_PATTERN" -o -path "./${TEST_PATTERN//\*\*\//}" \) | sort -u) |
| 28 | if [ -z "$TEST_FILES" ]; then |
| 29 | TOTAL=0 |
| 30 | else |
| 31 | TOTAL=$(printf '%s\n' "$TEST_FILES" | wc -l | tr -d ' ') |
| 32 | fi |
| 33 | |
| 34 | echo "Found $TOTAL test files" |
| 35 | echo "" |
| 36 | |
| 37 | COUNT=0 |
| 38 | for TEST_FILE in $TEST_FILES; do |
| 39 | COUNT=$((COUNT + 1)) |
| 40 | |
| 41 | # Skip if pollution already exists |
| 42 | if [ -e "$POLLUTION_CHECK" ]; then |
| 43 | echo "⚠️ Pollution already exists before test $COUNT/$TOTAL" |
| 44 | echo " Skipping: $TEST_FILE" |
| 45 | continue |
| 46 | fi |
| 47 | |
| 48 | echo "[$COUNT/$TOTAL] Testing: $TEST_FILE" |
| 49 | |
| 50 | # Run the test |
| 51 | npm test "$TEST_FILE" > /dev/null 2>&1 || true |
| 52 | |
| 53 | # Check if pollution appeared |
| 54 | if [ -e "$POLLUTION_CHECK" ]; then |
| 55 | echo "" |
| 56 | echo "🎯 FOUND POLLUTER!" |
| 57 | echo " Test: $TEST_FILE" |
| 58 | echo " Created: $POLLUTION_CHECK" |
| 59 | echo "" |
| 60 | echo "Pollution details:" |
| 61 | ls -la "$POLLUTION_CHECK" |
| 62 | echo "" |
| 63 | echo "To investigate:" |
| 64 | echo " npm test $TEST_FILE # Run just this test" |
| 65 | echo " cat $TEST_FILE # Review test code" |
| 66 | exit 1 |
| 67 | fi |
| 68 | done |
| 69 | |
| 70 | echo "" |
| 71 | echo "✅ No polluter found - all tests clean!" |
| 72 | exit 0 |
文件内容是平台检查时读出的文本,只供查看。平台不会运行包里的任何脚本或程序。

