find-polluter.sh 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #!/usr/bin/env bash
  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. set -e
  6. if [ $# -ne 2 ]; then
  7. echo "Usage: $0 <file_to_check> <test_pattern>"
  8. echo "Example: $0 '.git' 'src/**/*.test.ts'"
  9. exit 1
  10. fi
  11. POLLUTION_CHECK="$1"
  12. TEST_PATTERN="$2"
  13. echo "🔍 Searching for test that creates: $POLLUTION_CHECK"
  14. echo "Test pattern: $TEST_PATTERN"
  15. echo ""
  16. # Get list of test files
  17. TEST_FILES=$(find . -path "$TEST_PATTERN" | sort)
  18. TOTAL=$(echo "$TEST_FILES" | wc -l | tr -d ' ')
  19. echo "Found $TOTAL test files"
  20. echo ""
  21. COUNT=0
  22. for TEST_FILE in $TEST_FILES; do
  23. COUNT=$((COUNT + 1))
  24. # Skip if pollution already exists
  25. if [ -e "$POLLUTION_CHECK" ]; then
  26. echo "⚠️ Pollution already exists before test $COUNT/$TOTAL"
  27. echo " Skipping: $TEST_FILE"
  28. continue
  29. fi
  30. echo "[$COUNT/$TOTAL] Testing: $TEST_FILE"
  31. # Run the test
  32. npm test "$TEST_FILE" > /dev/null 2>&1 || true
  33. # Check if pollution appeared
  34. if [ -e "$POLLUTION_CHECK" ]; then
  35. echo ""
  36. echo "🎯 FOUND POLLUTER!"
  37. echo " Test: $TEST_FILE"
  38. echo " Created: $POLLUTION_CHECK"
  39. echo ""
  40. echo "Pollution details:"
  41. ls -la "$POLLUTION_CHECK"
  42. echo ""
  43. echo "To investigate:"
  44. echo " npm test $TEST_FILE # Run just this test"
  45. echo " cat $TEST_FILE # Review test code"
  46. exit 1
  47. fi
  48. done
  49. echo ""
  50. echo "✅ No polluter found - all tests clean!"
  51. exit 0