notmuch/test/emacs-large-search-buffer
Dmitry Kurochkin 3b24b396c4 test: save buffer content to file instead of printing it in Emacs tests
Before the change, the common Emacs test scheme was to print
buffer content to stdout and redirect it to a file or capture it
in a shell variable.  This does not work if we switch to using
emacsclient(1) for running the tests, because you can not print
to the stdout in this case. (Actually, you can print to stdout
from Emacs server, but you can not capture the output on
emacsclient(1)).

The patch introduces new Emacs test auxiliary functions:
`test-output' and `test-visible-output'.  These functions are
used to save buffer content to a file directly from Emacs.  For
most tests the changes are trivial, because Emacs stdout output
was redirected to a file anyway.  But some tests captured the
output in a shell variable and compare it with the expected
output using test_expect_equal.  These tests are changed to use
files and test_expect_equal_file instead.

Note: even if we do not switch Emacs tests to emacsclient(1), the
patch makes tests cleaner and is an improvement.
2011-06-28 15:06:47 -07:00

43 lines
1.3 KiB
Bash
Executable file

#!/usr/bin/env bash
test_description="Emacs with large search results buffer"
. test-lib.sh
x=xxxxxxxxxx # 10
x=$x$x$x$x$x$x$x$x$x$x # 100
x=$x$x$x$x$x$x$x$x$x # 900
# We generate a long subject here (over 900 bytes) so that the emacs
# search results get large quickly. With 30 such messages we should
# cross several 4kB page boundaries and see the bug.
n=30
for i in $(seq 1 $n); do
# Roughly 100B2 KiB per message. That is, we need two messages in order to
# exceed the typical size of the pipe buffer (4 KiB on commodity systems).
generate_message '[subject]="$x $i of $n"'
done
notmuch new > /dev/null
test_begin_subtest "Ensure that emacs doesn't drop results"
notmuch search '*' > EXPEXTED
sed -i -e 's/^thread:[0-9a-f]* //' -e 's/;//' -e 's/xx*/[BLOB]/' EXPEXTED
echo 'End of search results.' >> EXPEXTED
test_emacs '(notmuch-search "*")
(notmuch-test-wait)
(test-output)'
sed -i -e s', *, ,g' -e 's/xxx*/[BLOB]/g' OUTPUT
test_expect_equal_file OUTPUT EXPEXTED
test_begin_subtest "Ensure that emacs doesn't drop error messages"
test_emacs '(notmuch-search "--this-option-does-not-exist")
(notmuch-test-wait)
(test-output)'
cat <<EOF >EXPEXTED
Error: Unexpected output from notmuch search:
Unrecognized option: --this-option-does-not-exist
End of search results. (process returned 1)
EOF
test_expect_equal_file OUTPUT EXPEXTED
test_done