test: Add `test_emacs_expect_t'.

Add a new test function to allow simpler testing of emacs
functionality.

`test_emacs_expect_t' takes one argument - a lisp expression to
evaluate. The test passes if the expression returns `t', otherwise it
fails and the output is reported to the tester.
This commit is contained in:
David Edmondson 2012-01-24 16:14:05 +00:00 committed by David Bremner
parent 2903b32f79
commit 260975e8af
5 changed files with 56 additions and 0 deletions

View file

@ -202,6 +202,14 @@ library for your script to use.
tests that may run in the same Emacs instance. Use `let' instead
so the scope of the changed variables is limited to a single test.
test_emacs_expect_t <emacs-lisp-expressions>
This function executes the provided emacs lisp script within
emacs in a manner similar to 'test_emacs'. The expressions should
return the value `t' to indicate that the test has passed. If the
test does not return `t' then it is considered failed and all data
returned by the test is reported to the tester.
test_done
Your test script must have test_done at the end. Its purpose

9
test/emacs-test-functions.sh Executable file
View file

@ -0,0 +1,9 @@
#!/usr/bin/env bash
test_description="emacs test function sanity"
. test-lib.sh
test_begin_subtest "emacs test function sanity"
test_emacs_expect_t 't'
test_done

View file

@ -52,6 +52,7 @@ TESTS="
python
hooks
argument-parsing
emacs-test-functions.sh
"
TESTS=${NOTMUCH_TESTS:=$TESTS}

View file

@ -83,3 +83,12 @@ nothing."
(add-hook-counter 'notmuch-hello-mode-hook)
(add-hook-counter 'notmuch-hello-refresh-hook)
(defmacro notmuch-test-run (&rest body)
"Evaluate a BODY of test expressions and output the result."
`(with-temp-buffer
(let ((result (progn ,@body)))
(insert (if (stringp result)
result
(prin1-to-string result)))
(test-output))))

View file

@ -503,6 +503,35 @@ test_expect_equal_file ()
fi
}
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"
# Run the test.
if ! test_skip "$test_subtest_name"
then
test_emacs "(notmuch-test-run $1)" >/dev/null
# Restore state after the test.
exec 1>&6 2>&7 # Restore stdout and stderr
inside_subtest=
# Report success/failure.
result=$(cat OUTPUT)
if [ "$result" = t ]
then
test_ok_ "$test_subtest_name"
else
test_failure_ "$test_subtest_name" "${result}"
fi
else
# Restore state after the (non) test.
exec 1>&6 2>&7 # Restore stdout and stderr
inside_subtest=
fi
}
NOTMUCH_NEW ()
{
notmuch new | grep -v -E -e '^Processed [0-9]*( total)? file|Found [0-9]* total file'