aboutsummaryrefslogtreecommitdiffstats
path: root/script/spec-all-pairs
diff options
context:
space:
mode:
Diffstat (limited to 'script/spec-all-pairs')
-rwxr-xr-xscript/spec-all-pairs81
1 files changed, 81 insertions, 0 deletions
diff --git a/script/spec-all-pairs b/script/spec-all-pairs
new file mode 100755
index 000000000..5b6439a4e
--- /dev/null
+++ b/script/spec-all-pairs
@@ -0,0 +1,81 @@
+#!/bin/bash
+
+# Try all ordered pairs of spec files,
+# to winkle out order-dependent failures.
+
+log_file=/dev/null
+
+test_pair () {
+ rake db:test:prepare > /dev/null 2>&1
+ output=$(script/spec "$1" "$2" 2>&1)
+ if [ $? -eq 0 ]
+ then
+ echo "OK: $1 $2"
+ return 0
+ else
+ echo >> "$log_file" "FAILED: $1 $2"
+ echo >> "$log_file" "======================================="
+ echo >> "$log_file" "$output"
+ echo >> "$log_file"
+
+ echo "FAILED: $1 $2"
+ return 1
+ fi
+}
+
+all_pairs() {
+ specs=spec/*/*.rb
+
+ for spec1 in $specs
+ do
+ all_okay=true
+ for spec2 in $specs
+ do
+ if ! test_pair "$spec1" "$spec2"
+ then
+ all_okay=false
+ fi
+ done
+ done
+
+ $all_okay
+ return $?
+}
+
+pairs_from_stdin() {
+ all_okay=true
+ while read line
+ do
+ case "$line" in
+ \*\ FAILED:\ *|\
+ spec/*.rb\ spec/*.rb)
+ line=${line#\* FAILED: }
+ if ! test_pair $line
+ then
+ all_okay=false
+ fi
+ ;;
+ *)
+ echo "No match: $line"
+ ;;
+ esac
+ done
+
+ $all_okay
+ return $?
+}
+
+if [ "$1" = --log ]
+then
+ shift
+ log_file=$1
+ shift
+ cp /dev/null "$log_file"
+fi
+if [ "$1" = "-" ]
+then
+ pairs_from_stdin
+else
+ all_pairs
+fi
+exit $?