source: branches/properties/GDE/SINA/builddir/tests/test_helper.sh.in

Last change on this file was 19170, checked in by westram, 3 years ago
  • sina source
    • unpack + remove tarball
    • no longer ignore sina builddir.
File size: 3.6 KB
Line 
1set -Eo pipefail
2
3# copy FDs
4exec 5<&0
5exec 6>&1
6exec 7>&2
7
8test_num=0
9test_count=$(@GREP@ -c "begin_test" "$0")
10echo "1..$test_count"
11
12do_clean=yes
13test_helper_tmpdirs_=()
14trap test_helper_cleanup_ EXIT
15script_error_disable_=
16trap script_error ERR
17
18script_error() {
19    if [ -z "$script_error_disable_" ]; then
20        n="${#FUNCNAME[@]}"
21        test_err="${test_err}Error in bash, callstack:
22"
23        let n--;
24        for ((; n>0; --n)); do
25            let m=n-1
26            test_err="${test_err} $n:  ${BASH_SOURCE[$n]}:${BASH_LINENO[$m]} in ${FUNCNAME[$n]}()
27"
28        done
29    fi
30}
31
32maketmpdir() {
33    local tmp
34    tmp=$(@MKTEMP@ -d 2>/dev/null || mktemp -d -t 'mytmpdir')
35    test_helper_tmpdirs_+=($tmp)
36    eval $1=$tmp
37}
38
39test_helper_cleanup_() {
40    if test x"$do_clean" == x"yes"; then
41        for dir in "${test_helper_tmpdirs_[@]}"; do
42            echo "Removing $dir"
43            rm -rf "$dir"
44        done
45    else
46        test_name=$(basename $0)
47        for dir in "${test_helper_tmpdirs_[@]}"; do
48            tgt=test_failures/$test_name
49            echo "Copying $dir to $tgt"
50            rm -rf $tgt
51            mkdir -p $tgt
52            mv "$dir"/* $tgt
53            rm -rf "$dir"
54        done
55    fi
56}
57
58capture_stdout() {
59    echo "----- Running \"$*\""
60    script_error_disable_=1
61    output=$(eval "$SINA_TEST_WRAPPER $*" | @TEE@ /dev/fd/6)
62    exit_code=$?
63    script_error_disable_=
64    echo "----- Finished with exit code $exit_code (cmd: \"$*\""
65}
66capture_stderr() {
67    echo "----- Running \"$*\""
68    script_error_disable_=1
69    output=$(eval "$SINA_TEST_WRAPPER $*" 2>&1 >&6 | @TEE@ /dev/fd/7)
70    exit_code=$?
71    script_error_disable_=
72    echo "----- Finished with exit code $exit_code (cmd: \"$*\""
73}
74capture_stdouterr() {
75    echo "----- Running \"$*\""
76    script_error_disable_=1
77    output=$(eval "$SINA_TEST_WRAPPER $*" 2>&1 | @TEE@ /dev/fd/6)
78    exit_code=$?
79    script_error_disable_=
80    echo "----- Finished with exit code $exit_code (cmd: \"$*\""
81}
82
83begin_test() {
84    let ++test_num
85    test_name=$1
86    test_err=
87    test_var=
88    echo ""
89    echo "$test_num $test_name"
90    echo "$test_num $test_name" | sed 's/./=/g'
91    echo ""
92}
93
94end_test() {
95    if [ -n "$test_err" ]; then
96        do_clean=no
97        echo -n "not "
98    fi
99    echo "ok $test_num - $test_name"
100    if [ -n "$test_var" ]; then
101        echo "#$test_var"
102    fi
103    if [ -n "$test_err" ]; then
104        echo "--- BEGIN ERR ---"
105        echo "$test_err"
106        echo "--- END ERR ---"
107    fi
108}
109
110assert_exit_success() {
111    if [ -n "$1" ]; then
112        capture_stdouterr "$@"
113    fi
114    if [ $exit_code -ne 0 ]; then
115        test_err="${test_err}# command exited with $exit_code
116"
117    fi
118}
119
120assert_exit_failure() {
121    if [ -n "$1" ]; then
122        capture_stdouterr "$@"
123    fi
124    if [ $exit_code -eq 0 ]; then
125        test_err="${test_err}# command exited with $exit_code
126"
127    fi
128}
129
130assert_output_contains() {
131    if echo "$output" | @GREP@ "$1" >/dev/null; then
132        :
133    else
134        test_err="${test_err}# command output did not include '$1'
135OUTPUT_BEGIN
136$output
137OUTPUT_END
138"
139    fi
140}
141
142assert_output_not_contains() {
143    if echo "$output" | @GREP@ "$1" >/dev/null; then
144        test_err="${test_err}# command should not have included '$1'
145OUTPUT_BEGIN
146$output
147OUTPUT_END
148"
149    fi
150}
151
152assert_output_count() {
153    if test $(echo "$output" | @GREP@ -c "$1") $2 $3; then
154        :
155    else
156        test_err="${test_err}# command output did not match $@
157"
158    fi
159}
160
161assert_output_value() {
162    # convert 8.4e-10 to 8.4*10^-10 (from https://stackoverflow.com/questions/12882611)
163    snot2bc='s/([+-]?[0-9.]+)[eE]\+?(-?)([0-9]+)/(\1*10^\2\3)/g'
164    var="$1"
165    shift
166    val=$(echo "$output" | @SED@ -n 's/.*'$var'//p' | @SED@ -E "$snot2bc")
167    test_var="${test_var} $var$val"
168    while test $# -gt 0; do
169        if (( $(echo "$val $1" | @BC@) )); then
170            :
171        else
172            test_err="${test_err}# value for key $var ($val) did not match $1
173"
174        fi
175        shift
176    done
177}
Note: See TracBrowser for help on using the repository browser.