3 # paraslash test suite helper functions
4 # Licensed under the GPL v2. For licencing details see COPYING.
5 # uses ideas and code from git's test-lib.sh, Copyright (c) 2005 Junio C Hamano
13 result=$(find "$test_audio_file_dir" -type f)
15 result=$(find "$test_audio_file_dir" -type f -name "*.$suffix")
21 if [[ "$o_nocolor" != "true" && -n "$1" ]]; then
22 export TERM=$ORIGINAL_TERM
24 error) tput bold; tput setaf 1;;
27 (($o_verbose == 0)) && return
29 pass) tput bold; tput setaf 2;;
32 (($o_verbose == 0)) && return
38 if [[ "$o_nocolor" != "true" && -n "$1" ]]; then
47 [[ "$exit_ok" == "true" ]] && exit $code
48 say_color error "FATAL: Unexpected exit with code $code"
54 say_color error "error: $*"
72 say_color ok "ok $test_count - $1"
76 say_color error "not ok - $test_count $1"
77 f="$o_results_dir/${0##*/}-$$.out"
78 if [[ -s "$f" ]]; then
79 sed -e 's/^/# /' < "$f"
81 sed -e 's/^/# /' <<< "$2"
83 [[ "$o_immediate" != "true" ]] && return
90 (($# != 2)) && error "bug: not 2 parameters to test_skip()"
93 say_color skip >&3 "skipping test $this_test.$test_count ($1): $2"
94 say_color skip "ok $test_count - $1 # skipped ($2)"
97 test_require_objects()
102 # if no objects were given, we assume this test is run manually
103 # rather than via "make test". We won't check anything in this case
104 [[ -z "$o_objects" ]] && return
108 for o2 in $o_objects; do
109 [[ "$o1" != "$o2" ]] && continue
113 [[ "$found" == "true" ]] && continue
114 [[ -n "$result" ]] && result+=" "
120 test_require_executables()
126 [[ -n "$(builtin type -t "$i")" ]] && continue
127 [[ -n "$result" ]] && result+=" "
135 local t=$(exec 2>&1 1>/dev/null; time -p "$@")
136 result=$(awk '{print $2 * 1000}' <<< $t)
139 test_expect_success()
141 (($# != 2)) && error "bug: not 2 parameters to test_expect_success()"
142 say >&3 "expecting success: $2"
149 test_results_path="$o_results_dir/${0##*/}-$$.counts"
151 echo "total $test_count"
152 echo "success $test_success"
153 echo "failed $test_failure"
154 echo "skipped $test_skipped"
156 } > $test_results_path
159 msg="$test_count test(s) ($test_skipped test(s) skipped)"
160 if (($test_failure == 0)); then
161 say_color pass "# ${0##*/}: passed all $msg"
164 say_color error "# ${0##*/}: failed $test_failure among $msg"
169 sanitize_environment()
188 [[ "$TERM" == "dumb" ]] && return
190 tput bold >/dev/null 2>&1 || return
191 tput setaf 1 >/dev/null 2>&1 || return
192 tput sgr0 >/dev/null 2>&1 || return
200 -i|--immediate) o_immediate="true"; shift;;
201 -l|--long) export o_long="true"; shift;;
202 -h|--help) o_help="true"; shift;;
203 -v=0|--verbose=0) o_verbose="0"; shift;;
204 -v=1|--verbose=1) o_verbose="1"; shift;;
205 -v|--verbose|-v=2|--verbose=2) o_verbose="2"; shift;;
206 --no-color) o_nocolor="true"; shift;;
207 --results-dir) o_results_dir="$2"; shift; shift;;
208 --trash-dir) o_trash_dir="$2"; shift; shift;;
209 --executables-dir) export o_executables_dir="$2"; shift; shift;;
210 --executables) export o_executables="$2"; shift; shift;;
211 --objects) export o_objects="$2"; shift; shift;;
212 *) echo "error: unknown test option '$1'" >&2; exit 1;;
215 [[ -z "$o_verbose" ]] && o_verbose=1
218 create_trash_dir_and_cd()
220 local trash="$o_trash_dir/trash-dir.${0##*/}"
222 rm -rf "$trash" || error "could not remove trash dir"
223 mkdir -p "$trash" || error "could not make trash dir"
224 cd "$trash" || error "could not change to trash dir"
231 test_dir="$wd/${0%/*}"
232 test_audio_file_dir="$test_dir/audio_files"
234 [[ -z "$o_results_dir" ]] && o_results_dir="$test_dir/test-results"
235 [[ -z "$o_executables_dir" ]] && o_executables_dir="$test_dir/.."
236 [[ -z "$o_trash_dir" ]] && o_trash_dir="$test_dir/trashes"
238 # we want alsolute paths because relative paths become invalid
239 # after changing to the trash dir
240 [[ -n "${o_results_dir##/*}" ]] && o_results_dir="$wd/$o_results_dir"
241 [[ -n "${o_executables_dir##/*}" ]] && o_executables_dir="$wd/$o_results_dir"
242 [[ -n "${o_trash_dir##/*}" ]] && o_trash_dir="$wd/$o_trash_dir"
244 mkdir -p "$o_results_dir"
248 if [[ "$o_nocolor" != "true" ]]; then
250 [[ "$result" != "true" ]] && o_nocolor="true"
253 # Each test must set test_description
254 [[ -z "${test_description}" ]] && error "${0##*/} did not set test_description"
255 if [[ "$o_help" == "true" ]]; then
257 sed -e '1!d' <<< "$test_description"
258 if (($o_verbose >= 2)); then
260 sed -e '1,2d' -e 's/^/ /g' <<<"$test_description"
267 [[ -z "$o_executables" ]] && o_executables="para_afh para_audioc para_audiod
268 para_client para_fade para_filter para_gui para_recv para_server
270 for exe in $o_executables; do
271 export $(tr 'a-z' 'A-Z' <<< $exe)="$o_executables_dir/$exe"
281 create_trash_dir_and_cd
283 if (($o_verbose >= 2)); then
286 exec 4>$o_results_dir/${0##*/}-$$.out 3>&4
292 say_color run "# running ${0##*/}"