From d80e394f60d6ed1df14391f20a79305ab00f6662 Mon Sep 17 00:00:00 2001 From: Pavel Raiskup Date: Thu, 12 Nov 2015 20:17:51 +0100 Subject: initial commit * bin/dtf-gen: New script. * dtf-gen: New wrapper to be run from git. * share/dtf/lib/default: Library script. * share/dtf/tpl/run.tpl: Template for 'run' wrapper. --- share/dtf/lib/default | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++ share/dtf/tpl/run.tpl | 46 +++++++++++++++++++++++++ 2 files changed, 139 insertions(+) create mode 100644 share/dtf/lib/default create mode 100644 share/dtf/tpl/run.tpl (limited to 'share') diff --git a/share/dtf/lib/default b/share/dtf/lib/default new file mode 100644 index 0000000..6c53c40 --- /dev/null +++ b/share/dtf/lib/default @@ -0,0 +1,93 @@ +#! /bin/bash + +# Global library file. Methods prefixed by '__dtf_' are internal, for example +# __dtf_is_testdir. Other methods prefixed by 'dtf_' are API. + +: ${SHELL=/bin/bash} + + +__dtf_is_testdir () +{ + test -d "$1" || return 1 + case "$1" in + DTF_OUTPUT|DTF_RESULT|library) + return 1 + ;; + esac + : +} + + +__dtf_run_testcase () +{ + resultdir="$outputdir/$testname" + $__DTF_TOP_TEST && resultdir="$outputdir" + + stdout="$resultdir/stdout" + stderr="$resultdir/stderr" + + mkdir -p "$resultdir" && cd "$resultdir" + + set dummy \ + __DTF_TOP_TEST=false \ + outputdir="$outputdir" \ + "$@" + shift + + if $__DTF_TOP_TEST; then + eval "$@" 4>&2 3>&1 \ + 2>> "$stderr" \ + 1>> "$stdout" + else + # TODO: avoid bashishm + eval "$@" \ + 2> >(tee -a "$stderr" >&2) \ + 1> >(tee -a "$stdout") + fi + + case $? in + 0|77) + return 0 + ;; + *) + __dtf_rc=1 + return 1 + ;; + esac +} + + +__dtf_control_msg () +{ + echo >&4 "$*" +} + + +__dtf_nl_control_msg () +{ + __dtf_control_msg " + ** $* ** +" +} + + +__dtf_top_control_msg () +{ + $__DTF_TOP_TEST && return + __dtf_nl_control_msg "$*" +} + + +__dtf_toplevel_result_msg () +{ + $__DTF_TOP_TEST || return + + case $1 in + 0) + __dtf_nl_control_msg "Success." + ;; + *) + __dtf_nl_control_msg "Fail." + ;; + esac +} diff --git a/share/dtf/tpl/run.tpl b/share/dtf/tpl/run.tpl new file mode 100644 index 0000000..663e302 --- /dev/null +++ b/share/dtf/tpl/run.tpl @@ -0,0 +1,46 @@ +#! /bin/bash -x +# vi: ft=sh + +test -z "$outputdir" && outputdir="$PWD/DTF_RESULT" + +. "$top_srcdir/library" + +__dtf_rc=0 + + +# Gather sub-tests. +sub_tests= +for __dtf_sub_test in $srcdir/* +do + __dtf_is_testdir "$__dtf_sub_test" || continue + sub_tests="$sub_tests +$__dtf_sub_test/run" +done + +# +# Execute the testcase, when available. +# + +test -f $srcdir/testcase && { + __dtf_control_msg " $testname" + __dtf_run_testcase "$SHELL" "$srcdir"/testcase +} + +# +# Execute sub-tests. +# + +if test -n "$sub_tests"; then + __dtf_top_control_msg "going to $testname" + + for subtest in $sub_tests + do + __dtf_run_testcase "$SHELL" "$subtest" + done + result=Ok. + test "$__dtf_rc" -eq 0 || result=Fail. + __dtf_top_control_msg "group $testname: $result" +fi + +__dtf_toplevel_result_msg "$__dtf_rc" +exit $__dtf_rc -- cgit