X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=test%2Ftest-lib.sh;h=db3b6aa198c7319bafb13d7b319f768169877d33;hp=6057238c7e3cc9f6880efd49e20923cf2d6c0140;hb=23d86773b9e1b8111921af94f7f14ea0867eaee2;hpb=c0c007dd7f60977047e2d58ec9e3c10fc4ac1302 diff --git a/test/test-lib.sh b/test/test-lib.sh index 6057238c..db3b6aa1 100644 --- a/test/test-lib.sh +++ b/test/test-lib.sh @@ -45,6 +45,12 @@ done,*) ;; esac +# Save STDOUT to fd 6 and STDERR to fd 7. +exec 6>&1 7>&2 +# Make xtrace debugging (when used) use redirected STDERR, with verbose lead: +BASH_XTRACEFD=7 +export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }' + # Keep the original TERM for say_color and test_emacs ORIGINAL_TERM=$TERM @@ -67,6 +73,8 @@ if [[ ( -n "$TEST_EMACS" && -z "$TEST_EMACSCLIENT" ) || \ fi TEST_EMACS=${TEST_EMACS:-${EMACS:-emacs}} TEST_EMACSCLIENT=${TEST_EMACSCLIENT:-emacsclient} +TEST_CC=${TEST_CC:-cc} +TEST_CFLAGS=${TEST_CFLAGS:-"-g -O0"} # Protect ourselves from common misconfiguration to export # CDPATH into the environment @@ -204,8 +212,6 @@ then print_test_description fi -exec 5>&1 - test_failure=0 test_count=0 test_fixed=0 @@ -225,7 +231,7 @@ die () { then exit $code else - exec >&5 + exec >&6 say_color error '%-6s' FATAL echo " $test_subtest_name" echo @@ -236,7 +242,7 @@ die () { die_signal () { _die_common - echo >&5 "FATAL: $0: interrupted by signal" $((code - 128)) + echo >&6 "FATAL: $0: interrupted by signal" $((code - 128)) exit $code } @@ -546,11 +552,10 @@ test_begin_subtest () fi test_subtest_name="$1" test_reset_state_ - # Remember stdout and stderr file descriptors and redirect test - # output to the previously prepared file descriptors 3 and 4 (see - # below) + # Redirect test output to the previously prepared file descriptors + # 3 and 4 (see below) if test "$verbose" != "t"; then exec 4>test.output 3>&4; fi - exec 6>&1 7>&2 >&3 2>&4 + exec >&3 2>&4 inside_subtest=t } @@ -616,9 +621,9 @@ test_expect_equal_json () { # The test suite forces LC_ALL=C, but this causes Python 3 to # decode stdin as ASCII. We need to read JSON in UTF-8, so # override Python's stdio encoding defaults. - output=$(echo "$1" | PYTHONIOENCODING=utf-8 python -mjson.tool \ + output=$(echo "$1" | PYTHONIOENCODING=utf-8 $NOTMUCH_PYTHON -mjson.tool \ || echo "$1") - expected=$(echo "$2" | PYTHONIOENCODING=utf-8 python -mjson.tool \ + expected=$(echo "$2" | PYTHONIOENCODING=utf-8 $NOTMUCH_PYTHON -mjson.tool \ || echo "$2") shift 2 test_expect_equal "$output" "$expected" "$@" @@ -941,7 +946,7 @@ test_expect_code () { test_external () { test "$#" = 4 && { prereq=$1; shift; } || prereq= test "$#" = 3 || - error >&5 "bug in the test script: not 3 or 4 parameters to test_external" + error >&6 "bug in the test script: not 3 or 4 parameters to test_external" test_subtest_name="$1" shift test_reset_state_ @@ -1148,16 +1153,28 @@ test_python() { export LD_LIBRARY_PATH=$TEST_DIRECTORY/../lib export PYTHONPATH=$TEST_DIRECTORY/../bindings/python - # Some distros (e.g. Arch Linux) ship Python 2.* as /usr/bin/python2, - # most others as /usr/bin/python. So first try python2, and fallback to - # python if python2 doesn't exist. - cmd=python2 - [[ ${test_missing_external_prereq_[python2]} == t ]] && cmd=python - (echo "import sys; _orig_stdout=sys.stdout; sys.stdout=open('OUTPUT', 'w')"; cat) \ - | $cmd - + | $NOTMUCH_PYTHON - +} + +test_ruby() { + export LD_LIBRARY_PATH=$TEST_DIRECTORY/../lib + MAIL_DIR=$MAIL_DIR ruby -I $TEST_DIRECTORY/../bindings/ruby> OUTPUT +} + +test_C () { + exec_file="test${test_count}" + test_file="${exec_file}.c" + cat > ${test_file} + export LD_LIBRARY_PATH=${TEST_DIRECTORY}/../lib + ${TEST_CC} ${TEST_CFLAGS} -I${TEST_DIRECTORY}/../lib -o ${exec_file} ${test_file} -L${TEST_DIRECTORY}/../lib/ -lnotmuch -ltalloc + echo "== stdout ==" > OUTPUT.stdout + echo "== stderr ==" > OUTPUT.stderr + ./${exec_file} "$@" 1>>OUTPUT.stdout 2>>OUTPUT.stderr + sed "s,${PWD},CWD,g" OUTPUT.stdout OUTPUT.stderr > OUTPUT } + # Creates a script that counts how much time it is executed and calls # notmuch. $notmuch_counter_command is set to the path to the # generated script. Use notmuch_counter_value() function to get the @@ -1213,7 +1230,7 @@ emacs_generate_script # Use -P to resolve symlinks in our working directory so that the cwd # in subprocesses like git equals our $PWD (for pathname comparisons). -cd -P "$test" || error "Cannot setup test environment" +cd -P "$test" || error "Cannot set up test environment" if test "$verbose" = "t" then @@ -1302,5 +1319,4 @@ test_declare_external_prereq emacs test_declare_external_prereq ${TEST_EMACSCLIENT} test_declare_external_prereq gdb test_declare_external_prereq gpg -test_declare_external_prereq python -test_declare_external_prereq python2 +test_declare_external_prereq ${NOTMUCH_PYTHON}