summaryrefslogtreecommitdiff
path: root/tools/partest-paths
diff options
context:
space:
mode:
Diffstat (limited to 'tools/partest-paths')
-rwxr-xr-xtools/partest-paths27
1 files changed, 27 insertions, 0 deletions
diff --git a/tools/partest-paths b/tools/partest-paths
new file mode 100755
index 0000000000..6ce403a04e
--- /dev/null
+++ b/tools/partest-paths
@@ -0,0 +1,27 @@
+#!/bin/sh
+#
+# Given a list of files on stdin, translates them into a set
+# of tests covering those files. That means paths which aren't
+# part of a test are dropped and the rest are rewritten to the
+# primary test path, with duplicates dropped.
+
+cd "$(dirname "$0")/.."
+
+# We have to enumerate good test dirs since partest chokes and fails
+# on continuations, bench, etc. tests
+pathRegex="test/files/(pos|neg|jvm|run|scalap|presentation)/[^/.]+([.]scala)?\$"
+
+# Echo the argument only if it matches our idea of a test and exists.
+isPath () { [[ "$1" =~ $pathRegex ]] && [[ -e "$1" ]]; }
+
+# Filter stdin down to actual test paths.
+asTestPaths() {
+ while read -r p; do
+ # Matched file at the standard test depth
+ p1="${p%.*}" && isPath "$p1.scala" && echo "$p1.scala" && continue
+ # Or, matched file may be in a test subdirectory, so strip the last path segment and check
+ p2="${p1%/*}" && isPath "$p2" && echo "$p2" && continue
+ done
+}
+
+asTestPaths | sort -u