X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=test%2Ftest-lib.sh;h=f8c6e1e074037b92141e8315481adb8d93c76200;hp=79dc8419950c5db76d8310bc0f0d5b22ce7c341a;hb=b8f12bd3717aa446ef04197734af7a055e6909fe;hpb=740f3296b86ab8e18a6da4949b0db4139298202b diff --git a/test/test-lib.sh b/test/test-lib.sh index 79dc8419..f8c6e1e0 100644 --- a/test/test-lib.sh +++ b/test/test-lib.sh @@ -93,15 +93,6 @@ unset GREP_OPTIONS # For emacsclient unset ALTERNATE_EDITOR -# Convenience -# -# A regexp to match 5 and 40 hexdigits -_x05='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]' -_x40="$_x05$_x05$_x05$_x05$_x05$_x05$_x05$_x05" - -_x04='[0-9a-f][0-9a-f][0-9a-f][0-9a-f]' -_x32="$_x04$_x04$_x04$_x04$_x04$_x04$_x04$_x04" - # Each test should start with something like this, after copyright notices: # # test_description='Description of this test... @@ -122,17 +113,15 @@ _x32="$_x04$_x04$_x04$_x04$_x04$_x04$_x04$_x04" while test "$#" -ne 0 do case "$1" in - -d|--d|--de|--deb|--debu|--debug) + -d|--debug) debug=t; shift ;; - -i|--i|--im|--imm|--imme|--immed|--immedi|--immedia|--immediat|--immediate) + -i|--immediate) immediate=t; shift ;; - -l|--l|--lo|--lon|--long|--long-|--long-t|--long-te|--long-tes|--long-test|--long-tests) - GIT_TEST_LONG=t; export GIT_TEST_LONG; shift ;; - -h|--h|--he|--hel|--help) + -h|--help) help=t; shift ;; - -v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose) + -v|--verbose) verbose=t; shift ;; - -q|--q|--qu|--qui|--quie|--quiet) + -q|--quiet) quiet=t; shift ;; --with-dashes) with_dashes=t; shift ;; @@ -141,7 +130,7 @@ do --no-python) # noop now... shift ;; - --va|--val|--valg|--valgr|--valgri|--valgrin|--valgrind) + --valgrind) valgrind=t; verbose=t; shift ;; --tee) shift ;; # was handled already @@ -276,33 +265,6 @@ export GNUPGHOME="${TEST_TMPDIR}/gnupg" trap 'trap_exit' EXIT trap 'trap_signal' HUP INT TERM -test_decode_color () { - sed -e 's/.\[1m//g' \ - -e 's/.\[31m//g' \ - -e 's/.\[32m//g' \ - -e 's/.\[33m//g' \ - -e 's/.\[34m//g' \ - -e 's/.\[35m//g' \ - -e 's/.\[36m//g' \ - -e 's/.\[m//g' -} - -q_to_nul () { - perl -pe 'y/Q/\000/' -} - -q_to_cr () { - tr Q '\015' -} - -append_cr () { - sed -e 's/$/Q/' | tr Q '\015' -} - -remove_cr () { - tr '\015' Q | sed -e 's/Q$//' -} - # Generate a new message in the mail directory, with a unique message # ID and subject. The message is not added to the index. # @@ -597,10 +559,12 @@ test_begin_subtest () test_expect_equal () { exec 1>&6 2>&7 # Restore stdout and stderr + if [ -z "$inside_subtest" ]; then + error "bug in the test script: test_expect_equal without test_begin_subtest" + fi inside_subtest= - test "$#" = 3 && { prereq=$1; shift; } || prereq= test "$#" = 2 || - error "bug in the test script: not 2 or 3 parameters to test_expect_equal" + error "bug in the test script: not 2 parameters to test_expect_equal" output="$1" expected="$2" @@ -621,10 +585,12 @@ test_expect_equal () test_expect_equal_file () { exec 1>&6 2>&7 # Restore stdout and stderr + if [ -z "$inside_subtest" ]; then + error "bug in the test script: test_expect_equal_file without test_begin_subtest" + fi inside_subtest= - test "$#" = 3 && { prereq=$1; shift; } || prereq= test "$#" = 2 || - error "bug in the test script: not 2 or 3 parameters to test_expect_equal" + error "bug in the test script: not 2 parameters to test_expect_equal_file" file1="$1" file2="$2" @@ -665,9 +631,11 @@ test_sort_json () { } test_emacs_expect_t () { - test "$#" = 2 && { prereq=$1; shift; } || prereq= test "$#" = 1 || - error "bug in the test script: not 1 or 2 parameters to test_emacs_expect_t" + error "bug in the test script: not 1 parameter to test_emacs_expect_t" + if [ -z "$inside_subtest" ]; then + error "bug in the test script: test_emacs_expect_t without test_begin_subtest" + fi # Run the test. if ! test_skip "$test_subtest_name" @@ -779,12 +747,8 @@ notmuch_config_sanitize () # End of notmuch helper functions # Use test_set_prereq to tell that a particular prerequisite is available. -# The prerequisite can later be checked for in two ways: -# -# - Explicitly using test_have_prereq. # -# - Implicitly by specifying the prerequisite tag in the calls to -# test_expect_{success,failure,code}. +# The prerequisite can later be checked for by using test_have_prereq. # # The single parameter is the prerequisite tag (a simple word, in all # capital letters by convention). @@ -866,7 +830,9 @@ test_failure_message_ () { say_color error "%-6s" "$1" echo " $2" shift 2 - echo "$@" | sed -e 's/^/ /' + if [ "$#" != "0" ]; then + echo "$@" | sed -e 's/^/ /' + fi if test "$verbose" != "t"; then cat test.output; fi } @@ -880,7 +846,11 @@ test_known_broken_ok_ () { test_known_broken_failure_ () { test_reset_state_ test_broken=$(($test_broken+1)) - test_failure_message_ "BROKEN" "$test_subtest_name" "$@" + if [ -z "$NOTMUCH_TEST_QUIET" ]; then + test_failure_message_ "BROKEN" "$test_subtest_name" "$@" + else + test_failure_message_ "BROKEN" "$test_subtest_name" + fi return 1 } @@ -913,11 +883,6 @@ test_skip () { break esac done - if test -z "$to_skip" && test -n "$prereq" && - ! test_have_prereq "$prereq" - then - to_skip=t - fi case "$to_skip" in t) test_report_skip_ "$@" @@ -951,9 +916,8 @@ test_subtest_known_broken () { } test_expect_success () { - test "$#" = 3 && { prereq=$1; shift; } || prereq= test "$#" = 2 || - error "bug in the test script: not 2 or 3 parameters to test-expect-success" + error "bug in the test script: not 2 parameters to test_expect_success" test_subtest_name="$1" test_reset_state_ if ! test_skip "$@" @@ -972,9 +936,8 @@ test_expect_success () { } test_expect_code () { - test "$#" = 4 && { prereq=$1; shift; } || prereq= test "$#" = 3 || - error "bug in the test script: not 3 or 4 parameters to test-expect-code" + error "bug in the test script: not 3 parameters to test_expect_code" test_subtest_name="$2" test_reset_state_ if ! test_skip "$@" @@ -992,65 +955,6 @@ test_expect_code () { fi } -# test_external runs external test scripts that provide continuous -# test output about their progress, and succeeds/fails on -# zero/non-zero exit code. It outputs the test output on stdout even -# in non-verbose mode, and announces the external script with "* run -# : ..." before running it. When providing relative paths, keep in -# mind that all scripts run in "trash directory". -# Usage: test_external description command arguments... -# Example: test_external 'Perl API' perl ../path/to/test.pl -test_external () { - test "$#" = 4 && { prereq=$1; shift; } || prereq= - test "$#" = 3 || - error >&6 "bug in the test script: not 3 or 4 parameters to test_external" - test_subtest_name="$1" - shift - test_reset_state_ - if ! test_skip "$test_subtest_name" "$@" - then - # Announce the script to reduce confusion about the - # test output that follows. - say_color "" " run $test_count: $descr ($*)" - # Run command; redirect its stderr to &4 as in - # test_run_, but keep its stdout on our stdout even in - # non-verbose mode. - "$@" 2>&4 - if [ "$?" = 0 ] - then - test_ok_ - else - test_failure_ "$@" - fi - fi -} - -# Like test_external, but in addition tests that the command generated -# no output on stderr. -test_external_without_stderr () { - # The temporary file has no (and must have no) security - # implications. - tmp="$TMPDIR"; if [ -z "$tmp" ]; then tmp=/tmp; fi - stderr="$tmp/git-external-stderr.$$.tmp" - test_external "$@" 4> "$stderr" - [ -f "$stderr" ] || error "Internal error: $stderr disappeared." - test_subtest_name="no stderr: $1" - shift - if [ ! -s "$stderr" ]; then - rm "$stderr" - test_ok_ - else - if [ "$verbose" = t ]; then - output=`echo; echo Stderr is:; cat "$stderr"` - else - output= - fi - # rm first in case test_failure exits. - rm "$stderr" - test_failure_ "$@" "$output" - fi -} - # This is not among top-level (test_expect_success) # but is a prefix that can be used in the test script, like: #