notmuch/test/emacs-large-search-buffer
Dmitry Kurochkin a0ebd5c5e4 test: use princ' instead of message' calls in emacs tests
The patch replaces all (message (buffer-string)) calls in emacs
tests with (princ (buffer-string)).  This avoids accidentally
interpreting '%' as format specifiers and makes code simpler
because we do not need to capture stderr.

Also, the patch works around an Emacs (23.3+1-1 on current Debian
Unstable) segfault in "Ensure that emacs doesn't drop results"
test.  Note: the segfault does not happen on every test run.
Though, it seems to be consistently reproducible if the test uses
300 messages instead of 30.  Hopefully, it is the crash described
in Emacs bug #8545 [1] which is already fixed.

[1] http://debbugs.gnu.org/cgi/bugreport.cgi?bug=8545
2011-05-27 16:07:29 -07:00

34 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"
expected="$(notmuch search '*' | sed -e 's/^thread:[0-9a-f]* //' -e 's/;//' -e 's/xx*/[BLOB]/')
End of search results."
output=$(test_emacs '(notmuch-search "*") (notmuch-test-wait) (princ (buffer-string))' | sed -e s', *, ,g' -e 's/xxx*/[BLOB]/g')
test_expect_equal "$output" "$expected"
test_begin_subtest "Ensure that emacs doesn't drop error messages"
output=$(test_emacs '(notmuch-search "--this-option-does-not-exist") (notmuch-test-wait) (princ (buffer-string))')
test_expect_equal "$output" "Error: Unexpected output from notmuch search:
Unrecognized option: --this-option-does-not-exist
End of search results. (process returned 1)"
test_done