summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2023-10-23 11:42:33 -0400
committerTavian Barnes <tavianator@tavianator.com>2023-10-23 13:00:21 -0400
commitde8e0fbb8c1e59b3f1af72a07477b63a8f0bbc75 (patch)
tree4ab177ebe2342103eeca4d721d6a810b58ef99fc /tests
parent4c7a49a83e082a7bfff85a9305882f0912655123 (diff)
downloadbfs-de8e0fbb8c1e59b3f1af72a07477b63a8f0bbc75.tar.xz
tests: Fix Bash 3 compatibility
Diffstat (limited to 'tests')
-rw-r--r--tests/bfs/execdir_plus_nonexistent.sh6
-rw-r--r--tests/common/execdir_nonexistent.sh6
-rw-r--r--tests/posix/L_loops.sh4
-rw-r--r--tests/posix/exec_nonexistent.sh7
-rw-r--r--tests/posix/exec_plus_nonexistent.sh6
-rw-r--r--tests/run.sh44
-rw-r--r--tests/util.sh11
7 files changed, 47 insertions, 37 deletions
diff --git a/tests/bfs/execdir_plus_nonexistent.sh b/tests/bfs/execdir_plus_nonexistent.sh
index e3b4d2d..ed7ed56 100644
--- a/tests/bfs/execdir_plus_nonexistent.sh
+++ b/tests/bfs/execdir_plus_nonexistent.sh
@@ -1,4 +1,2 @@
-! stderr=$(invoke_bfs basic -execdir "$TESTS/nonexistent" {} + 2>&1 >/dev/null)
-[ -n "$stderr" ]
-
-! bfs_diff basic -execdir "$TESTS/nonexistent" {} + -print
+bfs_diff basic -execdir "$TESTS/nonexistent" {} + -print 2>"$TEST/err" && fail
+test -s "$TEST/err"
diff --git a/tests/common/execdir_nonexistent.sh b/tests/common/execdir_nonexistent.sh
index 4bb4fdb..0ec013c 100644
--- a/tests/common/execdir_nonexistent.sh
+++ b/tests/common/execdir_nonexistent.sh
@@ -1,4 +1,2 @@
-! stderr=$(invoke_bfs basic -execdir "$TESTS/nonexistent" {} \; 2>&1 >/dev/null)
-[ -n "$stderr" ]
-
-! bfs_diff basic -print -execdir "$TESTS/nonexistent" {} \; -print
+bfs_diff basic -print -execdir "$TESTS/nonexistent" {} \; -print 2>"$TEST/err" && fail
+test -s "$TEST/err"
diff --git a/tests/posix/L_loops.sh b/tests/posix/L_loops.sh
index 1314401..01b7efc 100644
--- a/tests/posix/L_loops.sh
+++ b/tests/posix/L_loops.sh
@@ -1,4 +1,4 @@
# POSIX says it's okay to either stop or keep going on seeing a filesystem
# loop, as long as a diagnostic is printed
-! errors=$(invoke_bfs -L loops 2>&1 >/dev/null)
-[ -n "$errors" ]
+invoke_bfs -L loops >/dev/null 2>"$OUT" && fail
+test -s "$OUT"
diff --git a/tests/posix/exec_nonexistent.sh b/tests/posix/exec_nonexistent.sh
index 901be86..a9ff052 100644
--- a/tests/posix/exec_nonexistent.sh
+++ b/tests/posix/exec_nonexistent.sh
@@ -1,7 +1,4 @@
# Failure to execute the command should lead to an error message and
# non-zero exit status. See https://unix.stackexchange.com/q/704522/56202
-
-! stderr=$(invoke_bfs basic -exec "$TESTS/nonexistent" {} \; 2>&1 >/dev/null)
-[ -n "$stderr" ]
-
-! bfs_diff basic -print -exec "$TESTS/nonexistent" {} \; -print
+bfs_diff basic -print -exec "$TESTS/nonexistent" {} \; -print 2>"$TEST/err" && fail
+test -s "$TEST/err"
diff --git a/tests/posix/exec_plus_nonexistent.sh b/tests/posix/exec_plus_nonexistent.sh
index 6bddc67..24582a3 100644
--- a/tests/posix/exec_plus_nonexistent.sh
+++ b/tests/posix/exec_plus_nonexistent.sh
@@ -1,4 +1,2 @@
-! stderr=$(invoke_bfs basic -exec "$TESTS/nonexistent" {} + 2>&1 >/dev/null)
-[ -n "$stderr" ]
-
-! bfs_diff basic -exec "$TESTS/nonexistent" {} + -print
+bfs_diff basic -exec "$TESTS/nonexistent" {} + -print 2>"$TEST/err" && fail
+test -s "$TEST/err"
diff --git a/tests/run.sh b/tests/run.sh
index b46fde6..d581476 100644
--- a/tests/run.sh
+++ b/tests/run.sh
@@ -47,7 +47,7 @@ bg_test() {
if ((VERBOSE_ERRORS)); then
run_test "$1"
else
- run_test "$1" 2>"$TMP/TEST.err"
+ run_test "$1" 2>"$TMP/$TEST.err"
fi
ret=$?
@@ -59,9 +59,21 @@ bg_test() {
return $ret
}
-# Reap a background job
-reap() {
- wait -n
+# Wait for any background job to complete
+if ((BASH_VERSINFO[0] > 4 || (BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] >= 3))); then
+ wait_any() {
+ wait -n
+ }
+else
+ wait_any() {
+ read -ra jobs < <(jobs -p)
+ wait ${jobs[0]}
+ }
+fi
+
+# Wait for a background test to finish
+wait_test() {
+ wait_any
ret=$?
((BG--))
@@ -118,7 +130,7 @@ run_tests() {
OUT="$TMP/$TEST.out"
if ((BG >= JOBS)); then
- reap
+ wait_test
fi
((++BG))
@@ -126,7 +138,7 @@ run_tests() {
done
while ((BG > 0)); do
- reap
+ wait_test
done
printf "${BOL}"
@@ -145,6 +157,14 @@ run_tests() {
## Utilities for the tests themselves
+# Default return value for failed tests
+EX_FAIL=1
+
+# Fail the current test
+fail() {
+ exit $EX_FAIL
+}
+
# Return value when a test is skipped
EX_SKIP=77
@@ -166,9 +186,9 @@ skip() {
# Run a command and check its exit status
check_exit() {
local expected="$1"
- local actual="0"
+ local actual=0
shift
- "$@" || actual="$?"
+ "$@" || actual=$?
((actual == expected))
}
@@ -253,9 +273,9 @@ invoke_bfs() {
# Allow bfs to fail, but not crash
if ((ret > 125)); then
- exit "$ret"
+ exit $ret
else
- return "$ret"
+ return $ret
fi
}
@@ -275,9 +295,9 @@ bfs_pty() {
"$UNBUFFER" bash -c 'stty cols 80 rows 24 && "$@"' bash "${BFS[@]}" "$@" || ret=$?
if ((ret > 125)); then
- exit "$ret"
+ exit $ret
else
- return "$ret"
+ return $ret
fi
}
diff --git a/tests/util.sh b/tests/util.sh
index 31a7b6c..bfa5d16 100644
--- a/tests/util.sh
+++ b/tests/util.sh
@@ -120,7 +120,7 @@ callers() {
# Print a message including path, line number, and command
debug() {
- local file="${1/#*\/tests\//tests\/}"
+ local file="${1/#*\/tests\//tests/}"
set -- "$file" "${@:2}"
color printf "${BLD}%s:%d:${RST} %s\n %s\n" "$@"
}
@@ -136,14 +136,13 @@ quote() {
fi
}
+DEFER_LEVEL=-1
+
# Run a command when this (sub)shell exits
defer() {
- # Refresh trap state before trap -p
- # See https://unix.stackexchange.com/a/556888/56202
- trap -- KILL
-
# Check if the EXIT trap is already set
- if ! trap -p EXIT | grep -q pop_defers; then
+ if ((DEFER_LEVEL != BASH_SUBSHELL)); then
+ DEFER_LEVEL=$BASH_SUBSHELL
DEFER_CMDS=()
DEFER_LINES=()
DEFER_FILES=()