chiark / gitweb /
Test suite: rename list-tests to enumerate-tests for ease of completion over tests...
[dgit.git] / tests / enumerate-tests
diff --git a/tests/enumerate-tests b/tests/enumerate-tests
new file mode 100755 (executable)
index 0000000..912ee4f
--- /dev/null
@@ -0,0 +1,107 @@
+#!/bin/bash
+
+set -e
+
+. tests/lib-core
+. tests/lib-restricts
+
+mode=$1
+
+test-begin- () {
+       whynots=''
+}
+
+restriction- () {
+       set +e
+       whynot=$(t-restriction-$r)
+       rc=$?
+       set -e
+       case "$rc.$whynot" in
+       0.)     ;;
+       1.?*)   whynots="$whynots${whynots:+; }$whynot" ;;
+       *)      fail "restriction $r for $t gave $rc $whynot !"
+       esac
+}
+
+dependencies- () {
+       :
+}
+
+test-done- () {
+       case "$whynots" in
+       '')     echo $t ;;
+       ?*)     echo >&2 "SKIP $t $whynots" ;;
+       esac
+}
+
+finish- () {
+       :
+}
+
+test-begin-gencontrol () {
+       restrictions=''
+       dependencies=''
+}
+
+restriction-gencontrol () {
+       restrictions+=" $r"
+}
+
+dependencies-gencontrol () {
+       dependencies+=", $deps"
+}
+
+test-done-gencontrol () {
+       stanza=$(
+               add_Depends="$dependencies" \
+               perl <debian/tests/control.in -wpe '
+                       if (/^(\w+):/) {
+                               my $h = $1;
+                               s{$}{ $ENV{"add_$h"} // "" }e;
+                       }
+               ' 
+               case "$restrictions" in
+               ?*) echo "Restrictions:$restrictions" ;;
+               esac
+               )
+       key=$(printf "%s" "$stanza" | sha256sum)
+       key=${key%% *}
+       eval "
+               stanza_$key=\"\$stanza\"
+               tests_$key+=\" \${t#tests/tests/}\"
+       "
+       keys=" ${keys/ $key /}"
+       keys+=" $key "
+}
+
+finish-gencontrol () {
+       for key in $keys; do
+               eval "
+                       stanza=\$stanza_$key
+                       tests=\$tests_$key
+               "
+               printf "Tests:%s\n%s\n\n" "$tests" "$stanza"
+       done
+}
+
+seddery () {
+       local seddery=$1
+       sed <$t -n '
+               20q;
+               /^: t-enumerate-tests-end$/q;
+               '"$seddery"'
+       '
+}
+
+for t in $(run-parts --list tests/tests); do
+       test-begin-$mode
+       for r in $(seddery 's/^t-restrict //p'); do
+               restriction-$mode
+       done
+       for deps in $(seddery 's/^t-dependencies //p'); do
+               dependencies-$mode
+       done
+       test-done-$mode
+done
+
+finish-$mode