summaryrefslogtreecommitdiffstats
path: root/share/dtf/lib/default
diff options
context:
space:
mode:
Diffstat (limited to 'share/dtf/lib/default')
-rw-r--r--share/dtf/lib/default39
1 files changed, 32 insertions, 7 deletions
diff --git a/share/dtf/lib/default b/share/dtf/lib/default
index 6c53c40..3d9bb9e 100644
--- a/share/dtf/lib/default
+++ b/share/dtf/lib/default
@@ -1,9 +1,9 @@
-#! /bin/bash
+#! /bin/sh
# Global library file. Methods prefixed by '__dtf_' are internal, for example
# __dtf_is_testdir. Other methods prefixed by 'dtf_' are API.
-: ${SHELL=/bin/bash}
+: ${SHELL=/bin/sh}
__dtf_is_testdir ()
@@ -18,6 +18,13 @@ __dtf_is_testdir ()
}
+__dtf_internal_fail ()
+{
+ __dtf_control_msg "internal fail: $*"
+ __dtf_rc=1
+}
+
+
__dtf_run_testcase ()
{
resultdir="$outputdir/$testname"
@@ -34,18 +41,36 @@ __dtf_run_testcase ()
"$@"
shift
+ __save_rc=1
if $__DTF_TOP_TEST; then
eval "$@" 4>&2 3>&1 \
2>> "$stderr" \
1>> "$stdout"
+ __save_rc=$?
else
- # TODO: avoid bashishm
- eval "$@" \
- 2> >(tee -a "$stderr" >&2) \
- 1> >(tee -a "$stdout")
+ for _d_i in stdout stderr
+ do
+ _d_fifo=$resultdir/fifo-$_d_i
+ eval "_d_fifo_$_d_i=\$_d_fifo"
+ test -e "$_d_fifo" && continue
+ mkfifo "$_d_fifo" && continue
+ __dtf_internal_fail "can't create $_d_fifo fifo"
+ return 1
+ done
+
+ tee -a "$stdout" < "$_d_fifo_stdout" >&1 &
+ tee -a "$stderr" < "$_d_fifo_stderr" >&2 &
+
+ eval "$@" 2> $_d_fifo_stderr >$_d_fifo_stdout
+ __save_rc=$?
+
+ rm "$_d_fifo_stdout" "$_d_fifo_stderr" || {
+ __dtf_internal_fail "can't remove fifos"
+ return 1
+ }
fi
- case $? in
+ case $__save_rc in
0|77)
return 0
;;