|
|
|
@@ -55,7 +55,7 @@ recurse() {
|
|
|
|
|
|
|
|
|
|
(
|
|
|
|
|
cd -- "$potential_test"
|
|
|
|
|
[ -f setup_dir ] && [ -x setup_dir ] && ./setup_dir >> "$stdout_file"
|
|
|
|
|
[ -f setup_dir ] && [ -x setup_dir ] && . ./setup_dir >> "$stdout_file"
|
|
|
|
|
|
|
|
|
|
if [ -n "$ZSH_VERSION" ]; then
|
|
|
|
|
# avoid "no matches found: *" error when directories are empty
|
|
|
|
@@ -64,27 +64,21 @@ recurse() {
|
|
|
|
|
|
|
|
|
|
for test in *
|
|
|
|
|
do
|
|
|
|
|
[ -f setup ] && [ -x setup ] && ./setup >> "$stdout_file"
|
|
|
|
|
[ -f setup ] && [ -x setup ] && . ./setup >> "$stdout_file"
|
|
|
|
|
|
|
|
|
|
# $2 instead of $indent_level so it doesn't clash
|
|
|
|
|
(
|
|
|
|
|
recurse "${test}" $(( $2 + 1 )) "$shell_for_sh_tests"
|
|
|
|
|
exit_code=$?
|
|
|
|
|
[ -f teardown ] && [ -x teardown ] && ./teardown >> "$stdout_file"
|
|
|
|
|
exit $exit_code
|
|
|
|
|
) &
|
|
|
|
|
recurse "${test}" $(( $2 + 1 )) "$shell_for_sh_tests"
|
|
|
|
|
exit_code=$?
|
|
|
|
|
|
|
|
|
|
if $single_process; then
|
|
|
|
|
wait $!
|
|
|
|
|
exit_code=$?
|
|
|
|
|
if $exit_on_fail && test $exit_code -ne 0; then
|
|
|
|
|
[ -f teardown_dir ] && [ -x teardown_dir ] && ./teardown_dir >> "$stdout_file"
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
if $exit_on_fail && test $exit_code -ne 0; then
|
|
|
|
|
[ -f teardown ] && [ -x teardown ] && . ./teardown >> "$stdout_file"
|
|
|
|
|
[ -f teardown_dir ] && [ -x teardown_dir ] && . ./teardown_dir >> "$stdout_file"
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
[ -f teardown ] && [ -x teardown ] && . ./teardown >> "$stdout_file"
|
|
|
|
|
done
|
|
|
|
|
wait
|
|
|
|
|
[ -f teardown_dir ] && [ -x teardown_dir ] && ./teardown_dir >> "$stdout_file"
|
|
|
|
|
[ -f teardown_dir ] && [ -x teardown_dir ] && . ./teardown_dir >> "$stdout_file"
|
|
|
|
|
)
|
|
|
|
|
if $tap_format; then
|
|
|
|
|
indent $indent_level | sed 's/ /#/g'
|
|
|
|
@@ -95,7 +89,7 @@ recurse() {
|
|
|
|
|
else
|
|
|
|
|
if [ -x "$potential_test" ]
|
|
|
|
|
then
|
|
|
|
|
[ -f setup ] && [ -x setup ] && ./setup >> "$stdout_file"
|
|
|
|
|
[ -f setup ] && [ -x setup ] && . ./setup >> "$stdout_file"
|
|
|
|
|
|
|
|
|
|
# Run the test
|
|
|
|
|
if [ -n "$shell_for_sh_tests" ] && has_sh_or_no_shebang_line ./"$potential_test"
|
|
|
|
@@ -104,10 +98,9 @@ recurse() {
|
|
|
|
|
else
|
|
|
|
|
TEST_SHELL="$TEST_SHELL" ./"$potential_test" > "$stdout_file" 2>&1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
exit_code="$?"
|
|
|
|
|
|
|
|
|
|
[ -f teardown ] && [ -x teardown ] && ./teardown >> "$stdout_file"
|
|
|
|
|
[ -f teardown ] && [ -x teardown ] && . ./teardown >> "$stdout_file"
|
|
|
|
|
if [ $exit_code -eq 0 ]; then
|
|
|
|
|
result=success
|
|
|
|
|
else
|
|
|
|
@@ -189,8 +182,6 @@ $USAGE
|
|
|
|
|
|
|
|
|
|
-s <shell> Invoke test scripts that either have no shebang line at all or
|
|
|
|
|
have shebang line "#!/bin/sh" with the specified shell.
|
|
|
|
|
-b, --series Run all tests in series in a single process. The default
|
|
|
|
|
is to run tests from the same directory in parallel.
|
|
|
|
|
-e Stop running if any single test fails. This is helpful if you want
|
|
|
|
|
to use Urchin to run things other than tests, such as a set of
|
|
|
|
|
configuration scripts.
|
|
|
|
@@ -276,7 +267,6 @@ urchin_molly_guard() {
|
|
|
|
|
exit 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
single_process=false
|
|
|
|
|
shell_for_sh_tests=
|
|
|
|
|
force=false
|
|
|
|
|
exit_on_fail=false
|
|
|
|
@@ -284,7 +274,6 @@ tap_format=false
|
|
|
|
|
while [ $# -gt 0 ]
|
|
|
|
|
do
|
|
|
|
|
case "$1" in
|
|
|
|
|
-b|--series) single_process=true;;
|
|
|
|
|
-e) exit_on_fail=true;;
|
|
|
|
|
-f) force=true;;
|
|
|
|
|
-s)
|
|
|
|
@@ -293,7 +282,7 @@ do
|
|
|
|
|
which "$shell_for_sh_tests" > /dev/null || {
|
|
|
|
|
echo "Cannot find specified shell: '$shell_for_sh_tests'" >&2
|
|
|
|
|
urchin_help >&2
|
|
|
|
|
exit 3
|
|
|
|
|
exit 2
|
|
|
|
|
} ;;
|
|
|
|
|
-t) tap_format=true;;
|
|
|
|
|
-h|--help) urchin_help
|
|
|
|
@@ -312,12 +301,7 @@ if [ "$#" != '1' ] || [ ! -d "$1" ]
|
|
|
|
|
then
|
|
|
|
|
[ -n "$1" ] && [ ! -d "$1" ] && echo "Not a directory: '$1'" >&2
|
|
|
|
|
echo "$USAGE" >&2
|
|
|
|
|
exit 3
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if $exit_on_fail && ! $single_process; then
|
|
|
|
|
echo 'You must specify -b/--series in order to use -e.' >&2
|
|
|
|
|
exit 3
|
|
|
|
|
exit 2
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Constants
|
|
|
|
|