summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2012-09-22 10:22:11 -0700
committerPaul Phillips <paulp@improving.org>2012-09-22 10:23:34 -0700
commit3992f23d3839e940c0656dc55f063908550216dc (patch)
tree3a26f590177b266213545e0a16a55d9b1719c159 /tools
parent4adfcfe6ffc0d850568b5d606aa7fc91b4deca52 (diff)
downloadscala-3992f23d3839e940c0656dc55f063908550216dc.tar.gz
scala-3992f23d3839e940c0656dc55f063908550216dc.tar.bz2
scala-3992f23d3839e940c0656dc55f063908550216dc.zip
A wrapper for selecting tests for partest.
"partest-ack", just what it sounds like. % tools/partest-ack Usage: tools/partest-ack <regex> [ack options] Given a regular expression (and optionally, any arguments accepted by ack) runs all the tests for which any associated file matches the regex. Associated files include .check and .flags files. Tests in directories will match if any file matches. A file can match the regex by its contents or by its name. You must have ack installed: http://betterthangrep.com/ack-standalone Examples: % tools/partest-ack monad Found 4 tests matching 'ack monad' Testing individual files testing: [...]/files/pos/tcpoly_boundedmonad.scala [ OK ] testing: [...]/files/pos/tcpoly_ticket2096.scala [ OK ] testing: [...]/files/run/tcpoly_monads.scala [ OK ] testing: [...]/files/presentation/callcc-interpreter [ OK ] % tools/partest-ack monad -i # -i == ignore case Found 12 tests matching 'ack monad -i' Testing individual files [etc]
Diffstat (limited to 'tools')
-rwxr-xr-xtools/partest-ack71
1 files changed, 71 insertions, 0 deletions
diff --git a/tools/partest-ack b/tools/partest-ack
new file mode 100755
index 0000000000..f62d2c1ac0
--- /dev/null
+++ b/tools/partest-ack
@@ -0,0 +1,71 @@
+#!/usr/bin/env bash
+#
+# wrapper around partest for fine-grained test selection via ack
+
+args="$@"
+
+pathMatches () {
+ ack --noenv --files-with-matches "$@" test/files
+
+ for p in $(find test/files/* -print); do
+ [[ $p =~ $1 ]] && echo "$p"
+ done
+}
+
+testIds () {
+ pathMatches "$@" | \
+ perl -pe 's#^(test/files/[^/]+/[^/.]+).*$#$1#' | \
+ sort -u
+}
+testPaths () {
+ for id in "$@"; do
+ if [[ -d $id ]]; then
+ echo $id
+ elif [[ -f ${id}.scala ]]; then
+ echo "${id}.scala"
+ else
+ echo >&2 "No test corresponds to $id"
+ fi
+ done
+}
+
+[[ $# -gt 0 ]] || {
+ cat <<EOM
+Usage: $0 <regex> [ack options]
+
+Given a regular expression (and optionally, any arguments accepted by ack)
+runs all the tests for which any associated file matches the regex. Associated
+files include .check and .flags files. Tests in directories will match if any
+file matches. A file can match the regex by its contents or by its name.
+
+You must have ack installed: http://betterthangrep.com/ack-standalone
+
+Examples:
+
+ % tools/partest-ack monad
+ Found 4 tests matching 'ack monad'
+
+ Testing individual files
+ testing: [...]/files/pos/tcpoly_boundedmonad.scala [ OK ]
+ testing: [...]/files/pos/tcpoly_ticket2096.scala [ OK ]
+ testing: [...]/files/run/tcpoly_monads.scala [ OK ]
+ testing: [...]/files/presentation/callcc-interpreter [ OK ]
+
+ % tools/partest-ack monad -i # -i == ignore case
+ Found 12 tests matching 'ack monad -i'
+
+ Testing individual files
+ [etc]
+EOM
+
+ exit 0
+}
+
+paths=$(testPaths $(testIds "$@"))
+if [[ -z $paths ]]; then
+ echo >&2 "No matching tests."
+else
+ count=$(echo $(echo "$paths" | wc -w))
+ echo "Found $count tests matching 'ack $@'"
+ test/partest $paths
+fi