mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-24 11:58:10 +01:00
test: split emacs functionality to its own file
This way it's easier to identify the tests that do require emacs stuff. Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
This commit is contained in:
parent
bba4788aec
commit
92454bc093
21 changed files with 241 additions and 195 deletions
|
@ -1,6 +1,7 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
test_description="--format=json output"
|
test_description="--format=json output"
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||||
|
|
||||||
test_begin_subtest "Show message: json"
|
test_begin_subtest "Show message: json"
|
||||||
add_message "[subject]=\"json-show-subject\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[bcc]=\"test_suite+bcc@notmuchmail.org\"" "[reply-to]=\"test_suite+replyto@notmuchmail.org\"" "[body]=\"json-show-message\""
|
add_message "[subject]=\"json-show-subject\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[bcc]=\"test_suite+bcc@notmuchmail.org\"" "[reply-to]=\"test_suite+replyto@notmuchmail.org\"" "[body]=\"json-show-message\""
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
test_description="--format=sexp output"
|
test_description="--format=sexp output"
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||||
|
|
||||||
test_begin_subtest "Show message: sexp"
|
test_begin_subtest "Show message: sexp"
|
||||||
add_message "[subject]=\"sexp-show-subject\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[bcc]=\"test_suite+bcc@notmuchmail.org\"" "[reply-to]=\"test_suite+replyto@notmuchmail.org\"" "[body]=\"sexp-show-message\""
|
add_message "[subject]=\"sexp-show-subject\"" "[date]=\"Sat, 01 Jan 2000 12:00:00 -0000\"" "[bcc]=\"test_suite+bcc@notmuchmail.org\"" "[reply-to]=\"test_suite+replyto@notmuchmail.org\"" "[body]=\"sexp-show-message\""
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
test_description="emacs interface"
|
test_description="emacs interface"
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||||
|
|
||||||
EXPECTED=$NOTMUCH_SRCDIR/test/emacs.expected-output
|
EXPECTED=$NOTMUCH_SRCDIR/test/emacs.expected-output
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
test_description="Emacs with large search results buffer"
|
test_description="Emacs with large search results buffer"
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||||
|
|
||||||
x=xxxxxxxxxx # 10
|
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$x # 100
|
||||||
x=$x$x$x$x$x$x$x$x$x # 900
|
x=$x$x$x$x$x$x$x$x$x # 900
|
||||||
|
|
||||||
|
test_require_emacs
|
||||||
|
|
||||||
# We generate a long subject here (over 900 bytes) so that the emacs
|
# We generate a long subject here (over 900 bytes) so that the emacs
|
||||||
# search results get large quickly. With 30 such messages we should
|
# search results get large quickly. With 30 such messages we should
|
||||||
# cross several 4kB page boundaries and see the bug.
|
# cross several 4kB page boundaries and see the bug.
|
||||||
|
|
|
@ -2,6 +2,9 @@
|
||||||
|
|
||||||
test_description="emacs: mail subject to filename"
|
test_description="emacs: mail subject to filename"
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||||
|
|
||||||
|
test_require_emacs
|
||||||
|
|
||||||
# emacs server can't be started in a child process with $(test_emacs ...)
|
# emacs server can't be started in a child process with $(test_emacs ...)
|
||||||
test_emacs '(ignore)' > /dev/null
|
test_emacs '(ignore)' > /dev/null
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
test_description='PGP/MIME signature verification and decryption'
|
test_description='PGP/MIME signature verification and decryption'
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||||
|
|
||||||
##################################################
|
##################################################
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
test_description='S/MIME signature verification and decryption'
|
test_description='S/MIME signature verification and decryption'
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||||
|
|
||||||
test_require_emacs
|
test_require_emacs
|
||||||
test_require_external_prereq openssl
|
test_require_external_prereq openssl
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
test_description='indexing decrypted mail'
|
test_description='indexing decrypted mail'
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||||
|
|
||||||
##################################################
|
##################################################
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,10 @@
|
||||||
|
|
||||||
test_description="protected headers in emacs interface"
|
test_description="protected headers in emacs interface"
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||||
|
|
||||||
# testing protected headers with emacs
|
# testing protected headers with emacs
|
||||||
|
test_require_emacs
|
||||||
add_gnupg_home
|
add_gnupg_home
|
||||||
add_email_corpus protected-headers
|
add_email_corpus protected-headers
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
test_description="emacs test function sanity"
|
test_description="emacs test function sanity"
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||||
|
|
||||||
test_begin_subtest "emacs test function sanity"
|
test_begin_subtest "emacs test function sanity"
|
||||||
test_emacs_expect_t 't'
|
test_emacs_expect_t 't'
|
||||||
|
|
|
@ -2,6 +2,9 @@
|
||||||
|
|
||||||
test_description="emacs address cleaning"
|
test_description="emacs address cleaning"
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||||
|
|
||||||
|
test_require_emacs
|
||||||
|
|
||||||
test_begin_subtest "notmuch-test-address-clean part 1"
|
test_begin_subtest "notmuch-test-address-clean part 1"
|
||||||
test_emacs_expect_t '(notmuch-test-address-cleaning-1)'
|
test_emacs_expect_t '(notmuch-test-address-cleaning-1)'
|
||||||
|
|
|
@ -2,9 +2,11 @@
|
||||||
|
|
||||||
test_description="emacs notmuch-hello view"
|
test_description="emacs notmuch-hello view"
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||||
|
|
||||||
EXPECTED=$NOTMUCH_SRCDIR/test/emacs.expected-output
|
EXPECTED=$NOTMUCH_SRCDIR/test/emacs.expected-output
|
||||||
|
|
||||||
|
test_require_emacs
|
||||||
add_email_corpus
|
add_email_corpus
|
||||||
|
|
||||||
test_begin_subtest "User-defined section with inbox tag"
|
test_begin_subtest "User-defined section with inbox tag"
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
test_description="emacs notmuch-show view"
|
test_description="emacs notmuch-show view"
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||||
|
|
||||||
EXPECTED=$NOTMUCH_SRCDIR/test/emacs-show.expected-output
|
EXPECTED=$NOTMUCH_SRCDIR/test/emacs-show.expected-output
|
||||||
|
|
||||||
|
|
|
@ -2,11 +2,14 @@
|
||||||
|
|
||||||
test_description="emacs notmuch-show charset handling"
|
test_description="emacs notmuch-show charset handling"
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||||
|
|
||||||
|
|
||||||
UTF8_YEN=$'\xef\xbf\xa5'
|
UTF8_YEN=$'\xef\xbf\xa5'
|
||||||
BIG5_YEN=$'\xa2\x44'
|
BIG5_YEN=$'\xa2\x44'
|
||||||
|
|
||||||
|
test_require_emacs
|
||||||
|
|
||||||
# Add four messages with unusual encoding requirements:
|
# Add four messages with unusual encoding requirements:
|
||||||
#
|
#
|
||||||
# 1) text/plain in quoted-printable big5
|
# 1) text/plain in quoted-printable big5
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
test_description="emacs tree view interface"
|
test_description="emacs tree view interface"
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||||
|
|
||||||
EXPECTED=$NOTMUCH_SRCDIR/test/emacs-tree.expected-output
|
EXPECTED=$NOTMUCH_SRCDIR/test/emacs-tree.expected-output
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ test_description='test of proper handling of in-reply-to and references headers'
|
||||||
# non-RFC-compliant headers'
|
# non-RFC-compliant headers'
|
||||||
|
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||||
|
|
||||||
test_begin_subtest "Use References when In-Reply-To is broken"
|
test_begin_subtest "Use References when In-Reply-To is broken"
|
||||||
add_message '[id]="foo@one.com"' \
|
add_message '[id]="foo@one.com"' \
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
test_description="Emacs Draft Handling"
|
test_description="Emacs Draft Handling"
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||||
|
|
||||||
|
test_require_emacs
|
||||||
add_email_corpus
|
add_email_corpus
|
||||||
|
|
||||||
notmuch config set search.exclude_tags deleted
|
notmuch config set search.exclude_tags deleted
|
||||||
|
|
|
@ -2,6 +2,9 @@
|
||||||
|
|
||||||
test_description="emacs attachment warnings"
|
test_description="emacs attachment warnings"
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||||
|
|
||||||
|
test_require_emacs
|
||||||
|
|
||||||
test_begin_subtest "notmuch-test-attachment-warning part 1"
|
test_begin_subtest "notmuch-test-attachment-warning part 1"
|
||||||
test_emacs_expect_t '(notmuch-test-attachment-warning-1)'
|
test_emacs_expect_t '(notmuch-test-attachment-warning-1)'
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
test_description="emacs forwarding"
|
test_description="emacs forwarding"
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||||
|
|
||||||
test_require_emacs
|
test_require_emacs
|
||||||
|
|
||||||
|
|
209
test/test-lib-emacs.sh
Normal file
209
test/test-lib-emacs.sh
Normal file
|
@ -0,0 +1,209 @@
|
||||||
|
#
|
||||||
|
# Copyright (c) 2010-2020 Notmuch Developers
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see https://www.gnu.org/licenses/ .
|
||||||
|
|
||||||
|
test_require_emacs () {
|
||||||
|
local ret=0
|
||||||
|
test_require_external_prereq "$TEST_EMACS" || ret=1
|
||||||
|
test_require_external_prereq "$TEST_EMACSCLIENT" || ret=1
|
||||||
|
test_require_external_prereq dtach || ret=1
|
||||||
|
return $ret
|
||||||
|
}
|
||||||
|
|
||||||
|
# Deliver a message with emacs and add it to the database
|
||||||
|
#
|
||||||
|
# Uses emacs to generate and deliver a message to the mail store.
|
||||||
|
# Accepts arbitrary extra emacs/elisp functions to modify the message
|
||||||
|
# before sending, which is useful to doing things like attaching files
|
||||||
|
# to the message and encrypting/signing.
|
||||||
|
emacs_deliver_message () {
|
||||||
|
local subject body smtp_dummy_pid smtp_dummy_port
|
||||||
|
subject="$1"
|
||||||
|
body="$2"
|
||||||
|
shift 2
|
||||||
|
# before we can send a message, we have to prepare the FCC maildir
|
||||||
|
mkdir -p "$MAIL_DIR"/sent/{cur,new,tmp}
|
||||||
|
# eval'ing smtp-dummy --background will set smtp_dummy_pid and -_port
|
||||||
|
smtp_dummy_pid= smtp_dummy_port=
|
||||||
|
eval `$TEST_DIRECTORY/smtp-dummy --background sent_message`
|
||||||
|
test -n "$smtp_dummy_pid" || return 1
|
||||||
|
test -n "$smtp_dummy_port" || return 1
|
||||||
|
|
||||||
|
test_emacs \
|
||||||
|
"(let ((message-send-mail-function 'message-smtpmail-send-it)
|
||||||
|
(mail-host-address \"example.com\")
|
||||||
|
(smtpmail-smtp-server \"localhost\")
|
||||||
|
(smtpmail-smtp-service \"${smtp_dummy_port}\"))
|
||||||
|
(notmuch-mua-mail)
|
||||||
|
(message-goto-to)
|
||||||
|
(insert \"test_suite@notmuchmail.org\nDate: 01 Jan 2000 12:00:00 -0000\")
|
||||||
|
(message-goto-subject)
|
||||||
|
(insert \"${subject}\")
|
||||||
|
(message-goto-body)
|
||||||
|
(insert \"${body}\")
|
||||||
|
$*
|
||||||
|
(notmuch-mua-send-and-exit))"
|
||||||
|
|
||||||
|
# In case message was sent properly, client waits for confirmation
|
||||||
|
# before exiting and resuming control here; therefore making sure
|
||||||
|
# that server exits by sending (KILL) signal to it is safe.
|
||||||
|
kill -9 $smtp_dummy_pid
|
||||||
|
notmuch new >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
# Pretend to deliver a message with emacs. Really save it to a file
|
||||||
|
# and add it to the database
|
||||||
|
#
|
||||||
|
# Uses emacs to generate and deliver a message to the mail store.
|
||||||
|
# Accepts arbitrary extra emacs/elisp functions to modify the message
|
||||||
|
# before sending, which is useful to doing things like attaching files
|
||||||
|
# to the message and encrypting/signing.
|
||||||
|
#
|
||||||
|
# If any GNU-style long-arguments (like --quiet or --decrypt=true) are
|
||||||
|
# at the head of the argument list, they are sent directly to "notmuch
|
||||||
|
# new" after message delivery
|
||||||
|
emacs_fcc_message () {
|
||||||
|
local nmn_args subject body
|
||||||
|
nmn_args=''
|
||||||
|
while [[ "$1" =~ ^-- ]]; do
|
||||||
|
nmn_args="$nmn_args $1"
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
subject="$1"
|
||||||
|
body="$2"
|
||||||
|
shift 2
|
||||||
|
# before we can send a message, we have to prepare the FCC maildir
|
||||||
|
mkdir -p "$MAIL_DIR"/sent/{cur,new,tmp}
|
||||||
|
|
||||||
|
test_emacs \
|
||||||
|
"(let ((message-send-mail-function (lambda () t))
|
||||||
|
(mail-host-address \"example.com\"))
|
||||||
|
(notmuch-mua-mail)
|
||||||
|
(message-goto-to)
|
||||||
|
(insert \"test_suite@notmuchmail.org\nDate: 01 Jan 2000 12:00:00 -0000\")
|
||||||
|
(message-goto-subject)
|
||||||
|
(insert \"${subject}\")
|
||||||
|
(message-goto-body)
|
||||||
|
(insert \"${body}\")
|
||||||
|
$*
|
||||||
|
(let ((mml-secure-smime-sign-with-sender t)
|
||||||
|
(mml-secure-openpgp-sign-with-sender t))
|
||||||
|
(notmuch-mua-send-and-exit)))" || return 1
|
||||||
|
notmuch new $nmn_args >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
test_emacs_expect_t () {
|
||||||
|
local result
|
||||||
|
test "$#" = 1 ||
|
||||||
|
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"
|
||||||
|
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=
|
||||||
|
|
||||||
|
# test_emacs may update missing external prerequisites
|
||||||
|
test_check_missing_external_prereqs_ "$test_subtest_name" && return
|
||||||
|
|
||||||
|
# Report success/failure.
|
||||||
|
result=$(cat OUTPUT)
|
||||||
|
if [ "$result" = t ]
|
||||||
|
then
|
||||||
|
test_ok_
|
||||||
|
else
|
||||||
|
test_failure_ "${result}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Restore state after the (non) test.
|
||||||
|
exec 1>&6 2>&7 # Restore stdout and stderr
|
||||||
|
inside_subtest=
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
emacs_generate_script () {
|
||||||
|
# Construct a little test script here for the benefit of the user,
|
||||||
|
# (who can easily run "run_emacs" to get the same emacs environment
|
||||||
|
# for investigating any failures).
|
||||||
|
cat <<EOF >"$TMP_DIRECTORY/run_emacs"
|
||||||
|
#!/bin/sh
|
||||||
|
export PATH=$PATH
|
||||||
|
export NOTMUCH_CONFIG=$NOTMUCH_CONFIG
|
||||||
|
|
||||||
|
# Here's what we are using here:
|
||||||
|
#
|
||||||
|
# --quick Use minimal customization. This implies --no-init-file,
|
||||||
|
# --no-site-file and (emacs 24) --no-site-lisp
|
||||||
|
#
|
||||||
|
# --directory Ensure that the local elisp sources are found
|
||||||
|
#
|
||||||
|
# --load Force loading of notmuch.el and test-lib.el
|
||||||
|
|
||||||
|
exec ${TEST_EMACS} --quick \
|
||||||
|
--directory "$NOTMUCH_BUILDDIR/emacs" --load notmuch.el \
|
||||||
|
--directory "$NOTMUCH_SRCDIR/test" --load test-lib.el \
|
||||||
|
"\$@"
|
||||||
|
EOF
|
||||||
|
chmod a+x "$TMP_DIRECTORY/run_emacs"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_emacs () {
|
||||||
|
# test dependencies beforehand to avoid the waiting loop below
|
||||||
|
test_require_emacs || return
|
||||||
|
|
||||||
|
if [ -z "$EMACS_SERVER" ]; then
|
||||||
|
emacs_tests="$NOTMUCH_SRCDIR/test/${this_test_bare}.el"
|
||||||
|
if [ -f "$emacs_tests" ]; then
|
||||||
|
load_emacs_tests="--eval '(load \"$emacs_tests\")'"
|
||||||
|
else
|
||||||
|
load_emacs_tests=
|
||||||
|
fi
|
||||||
|
server_name="notmuch-test-suite-$$"
|
||||||
|
# start a detached session with an emacs server
|
||||||
|
# user's TERM (or 'vt100' in case user's TERM is known dumb
|
||||||
|
# or unknown) is given to dtach which assumes a minimally
|
||||||
|
# VT100-compatible terminal -- and emacs inherits that
|
||||||
|
TERM=$SMART_TERM dtach -n "$TEST_TMPDIR/emacs-dtach-socket.$$" \
|
||||||
|
sh -c "stty rows 24 cols 80; exec '$TMP_DIRECTORY/run_emacs' \
|
||||||
|
--no-window-system \
|
||||||
|
$load_emacs_tests \
|
||||||
|
--eval '(setq server-name \"$server_name\")' \
|
||||||
|
--eval '(server-start)' \
|
||||||
|
--eval '(orphan-watchdog $$)'" || return
|
||||||
|
EMACS_SERVER="$server_name"
|
||||||
|
# wait until the emacs server is up
|
||||||
|
until test_emacs '()' >/dev/null 2>/dev/null; do
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Clear test-output output file. Most Emacs tests end with a
|
||||||
|
# call to (test-output). If the test code fails with an
|
||||||
|
# exception before this call, the output file won't get
|
||||||
|
# updated. Since we don't want to compare against an output
|
||||||
|
# file from another test, so start out with an empty file.
|
||||||
|
rm -f OUTPUT
|
||||||
|
touch OUTPUT
|
||||||
|
|
||||||
|
${TEST_EMACSCLIENT} --socket-name="$EMACS_SERVER" --eval "(notmuch-test-progn $*)"
|
||||||
|
}
|
||||||
|
|
||||||
|
emacs_generate_script
|
195
test/test-lib.sh
195
test/test-lib.sh
|
@ -114,14 +114,6 @@ unset ALTERNATE_EDITOR
|
||||||
unset EMAIL
|
unset EMAIL
|
||||||
unset NAME
|
unset NAME
|
||||||
|
|
||||||
test_require_emacs () {
|
|
||||||
local ret=0
|
|
||||||
test_require_external_prereq "$TEST_EMACS" || ret=1
|
|
||||||
test_require_external_prereq "$TEST_EMACSCLIENT" || ret=1
|
|
||||||
test_require_external_prereq dtach || ret=1
|
|
||||||
return $ret
|
|
||||||
}
|
|
||||||
|
|
||||||
add_gnupg_home () {
|
add_gnupg_home () {
|
||||||
[ -e "${GNUPGHOME}/gpg.conf" ] && return
|
[ -e "${GNUPGHOME}/gpg.conf" ] && return
|
||||||
_gnupg_exit () { gpgconf --kill all 2>/dev/null || true; }
|
_gnupg_exit () { gpgconf --kill all 2>/dev/null || true; }
|
||||||
|
@ -348,88 +340,6 @@ export GNUPGHOME="${TEST_TMPDIR}/gnupg"
|
||||||
trap 'trap_exit' EXIT
|
trap 'trap_exit' EXIT
|
||||||
trap 'trap_signal' HUP INT TERM
|
trap 'trap_signal' HUP INT TERM
|
||||||
|
|
||||||
# Deliver a message with emacs and add it to the database
|
|
||||||
#
|
|
||||||
# Uses emacs to generate and deliver a message to the mail store.
|
|
||||||
# Accepts arbitrary extra emacs/elisp functions to modify the message
|
|
||||||
# before sending, which is useful to doing things like attaching files
|
|
||||||
# to the message and encrypting/signing.
|
|
||||||
emacs_deliver_message () {
|
|
||||||
local subject body smtp_dummy_pid smtp_dummy_port
|
|
||||||
subject="$1"
|
|
||||||
body="$2"
|
|
||||||
shift 2
|
|
||||||
# before we can send a message, we have to prepare the FCC maildir
|
|
||||||
mkdir -p "$MAIL_DIR"/sent/{cur,new,tmp}
|
|
||||||
# eval'ing smtp-dummy --background will set smtp_dummy_pid and -_port
|
|
||||||
smtp_dummy_pid= smtp_dummy_port=
|
|
||||||
eval `$TEST_DIRECTORY/smtp-dummy --background sent_message`
|
|
||||||
test -n "$smtp_dummy_pid" || return 1
|
|
||||||
test -n "$smtp_dummy_port" || return 1
|
|
||||||
|
|
||||||
test_emacs \
|
|
||||||
"(let ((message-send-mail-function 'message-smtpmail-send-it)
|
|
||||||
(mail-host-address \"example.com\")
|
|
||||||
(smtpmail-smtp-server \"localhost\")
|
|
||||||
(smtpmail-smtp-service \"${smtp_dummy_port}\"))
|
|
||||||
(notmuch-mua-mail)
|
|
||||||
(message-goto-to)
|
|
||||||
(insert \"test_suite@notmuchmail.org\nDate: 01 Jan 2000 12:00:00 -0000\")
|
|
||||||
(message-goto-subject)
|
|
||||||
(insert \"${subject}\")
|
|
||||||
(message-goto-body)
|
|
||||||
(insert \"${body}\")
|
|
||||||
$*
|
|
||||||
(notmuch-mua-send-and-exit))"
|
|
||||||
|
|
||||||
# In case message was sent properly, client waits for confirmation
|
|
||||||
# before exiting and resuming control here; therefore making sure
|
|
||||||
# that server exits by sending (KILL) signal to it is safe.
|
|
||||||
kill -9 $smtp_dummy_pid
|
|
||||||
notmuch new >/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
# Pretend to deliver a message with emacs. Really save it to a file
|
|
||||||
# and add it to the database
|
|
||||||
#
|
|
||||||
# Uses emacs to generate and deliver a message to the mail store.
|
|
||||||
# Accepts arbitrary extra emacs/elisp functions to modify the message
|
|
||||||
# before sending, which is useful to doing things like attaching files
|
|
||||||
# to the message and encrypting/signing.
|
|
||||||
#
|
|
||||||
# If any GNU-style long-arguments (like --quiet or --decrypt=true) are
|
|
||||||
# at the head of the argument list, they are sent directly to "notmuch
|
|
||||||
# new" after message delivery
|
|
||||||
emacs_fcc_message () {
|
|
||||||
local nmn_args subject body
|
|
||||||
nmn_args=''
|
|
||||||
while [[ "$1" =~ ^-- ]]; do
|
|
||||||
nmn_args="$nmn_args $1"
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
subject="$1"
|
|
||||||
body="$2"
|
|
||||||
shift 2
|
|
||||||
# before we can send a message, we have to prepare the FCC maildir
|
|
||||||
mkdir -p "$MAIL_DIR"/sent/{cur,new,tmp}
|
|
||||||
|
|
||||||
test_emacs \
|
|
||||||
"(let ((message-send-mail-function (lambda () t))
|
|
||||||
(mail-host-address \"example.com\"))
|
|
||||||
(notmuch-mua-mail)
|
|
||||||
(message-goto-to)
|
|
||||||
(insert \"test_suite@notmuchmail.org\nDate: 01 Jan 2000 12:00:00 -0000\")
|
|
||||||
(message-goto-subject)
|
|
||||||
(insert \"${subject}\")
|
|
||||||
(message-goto-body)
|
|
||||||
(insert \"${body}\")
|
|
||||||
$*
|
|
||||||
(let ((mml-secure-smime-sign-with-sender t)
|
|
||||||
(mml-secure-openpgp-sign-with-sender t))
|
|
||||||
(notmuch-mua-send-and-exit)))" || return 1
|
|
||||||
notmuch new $nmn_args >/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
# Add an existing, fixed corpus of email to the database.
|
# Add an existing, fixed corpus of email to the database.
|
||||||
#
|
#
|
||||||
# $1 is the corpus dir under corpora to add, using "default" if unset.
|
# $1 is the corpus dir under corpora to add, using "default" if unset.
|
||||||
|
@ -574,41 +484,6 @@ test_json_nodes () {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
test_emacs_expect_t () {
|
|
||||||
local result
|
|
||||||
test "$#" = 1 ||
|
|
||||||
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"
|
|
||||||
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=
|
|
||||||
|
|
||||||
# test_emacs may update missing external prerequisites
|
|
||||||
test_check_missing_external_prereqs_ "$test_subtest_name" && return
|
|
||||||
|
|
||||||
# Report success/failure.
|
|
||||||
result=$(cat OUTPUT)
|
|
||||||
if [ "$result" = t ]
|
|
||||||
then
|
|
||||||
test_ok_
|
|
||||||
else
|
|
||||||
test_failure_ "${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 () {
|
||||||
notmuch new "${@}" | grep -v -E -e '^Processed [0-9]*( total)? file|Found [0-9]* total file'
|
notmuch new "${@}" | grep -v -E -e '^Processed [0-9]*( total)? file|Found [0-9]* total file'
|
||||||
}
|
}
|
||||||
|
@ -1022,73 +897,6 @@ test_done () {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
emacs_generate_script () {
|
|
||||||
# Construct a little test script here for the benefit of the user,
|
|
||||||
# (who can easily run "run_emacs" to get the same emacs environment
|
|
||||||
# for investigating any failures).
|
|
||||||
cat <<EOF >"$TMP_DIRECTORY/run_emacs"
|
|
||||||
#!/bin/sh
|
|
||||||
export PATH=$PATH
|
|
||||||
export NOTMUCH_CONFIG=$NOTMUCH_CONFIG
|
|
||||||
|
|
||||||
# Here's what we are using here:
|
|
||||||
#
|
|
||||||
# --quick Use minimal customization. This implies --no-init-file,
|
|
||||||
# --no-site-file and (emacs 24) --no-site-lisp
|
|
||||||
#
|
|
||||||
# --directory Ensure that the local elisp sources are found
|
|
||||||
#
|
|
||||||
# --load Force loading of notmuch.el and test-lib.el
|
|
||||||
|
|
||||||
exec ${TEST_EMACS} --quick \
|
|
||||||
--directory "$NOTMUCH_BUILDDIR/emacs" --load notmuch.el \
|
|
||||||
--directory "$NOTMUCH_SRCDIR/test" --load test-lib.el \
|
|
||||||
"\$@"
|
|
||||||
EOF
|
|
||||||
chmod a+x "$TMP_DIRECTORY/run_emacs"
|
|
||||||
}
|
|
||||||
|
|
||||||
test_emacs () {
|
|
||||||
# test dependencies beforehand to avoid the waiting loop below
|
|
||||||
test_require_emacs || return
|
|
||||||
|
|
||||||
if [ -z "$EMACS_SERVER" ]; then
|
|
||||||
emacs_tests="$NOTMUCH_SRCDIR/test/${this_test_bare}.el"
|
|
||||||
if [ -f "$emacs_tests" ]; then
|
|
||||||
load_emacs_tests="--eval '(load \"$emacs_tests\")'"
|
|
||||||
else
|
|
||||||
load_emacs_tests=
|
|
||||||
fi
|
|
||||||
server_name="notmuch-test-suite-$$"
|
|
||||||
# start a detached session with an emacs server
|
|
||||||
# user's TERM (or 'vt100' in case user's TERM is known dumb
|
|
||||||
# or unknown) is given to dtach which assumes a minimally
|
|
||||||
# VT100-compatible terminal -- and emacs inherits that
|
|
||||||
TERM=$SMART_TERM dtach -n "$TEST_TMPDIR/emacs-dtach-socket.$$" \
|
|
||||||
sh -c "stty rows 24 cols 80; exec '$TMP_DIRECTORY/run_emacs' \
|
|
||||||
--no-window-system \
|
|
||||||
$load_emacs_tests \
|
|
||||||
--eval '(setq server-name \"$server_name\")' \
|
|
||||||
--eval '(server-start)' \
|
|
||||||
--eval '(orphan-watchdog $$)'" || return
|
|
||||||
EMACS_SERVER="$server_name"
|
|
||||||
# wait until the emacs server is up
|
|
||||||
until test_emacs '()' >/dev/null 2>/dev/null; do
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Clear test-output output file. Most Emacs tests end with a
|
|
||||||
# call to (test-output). If the test code fails with an
|
|
||||||
# exception before this call, the output file won't get
|
|
||||||
# updated. Since we don't want to compare against an output
|
|
||||||
# file from another test, so start out with an empty file.
|
|
||||||
rm -f OUTPUT
|
|
||||||
touch OUTPUT
|
|
||||||
|
|
||||||
${TEST_EMACSCLIENT} --socket-name="$EMACS_SERVER" --eval "(notmuch-test-progn $*)"
|
|
||||||
}
|
|
||||||
|
|
||||||
test_python () {
|
test_python () {
|
||||||
# Note: if there is need to print debug information from python program,
|
# Note: if there is need to print debug information from python program,
|
||||||
# use stdout = os.fdopen(6, 'w') or stderr = os.fdopen(7, 'w')
|
# use stdout = os.fdopen(6, 'w') or stderr = os.fdopen(7, 'w')
|
||||||
|
@ -1178,9 +986,6 @@ TEST_DIRECTORY=$NOTMUCH_BUILDDIR/test
|
||||||
|
|
||||||
. "$NOTMUCH_SRCDIR/test/test-lib-common.sh" || exit 1
|
. "$NOTMUCH_SRCDIR/test/test-lib-common.sh" || exit 1
|
||||||
|
|
||||||
emacs_generate_script
|
|
||||||
|
|
||||||
|
|
||||||
# Use -P to resolve symlinks in our working directory so that the cwd
|
# Use -P to resolve symlinks in our working directory so that the cwd
|
||||||
# in subprocesses like git equals our $PWD (for pathname comparisons).
|
# in subprocesses like git equals our $PWD (for pathname comparisons).
|
||||||
cd -P "$TMP_DIRECTORY" || error "Cannot set up test environment"
|
cd -P "$TMP_DIRECTORY" || error "Cannot set up test environment"
|
||||||
|
|
Loading…
Reference in a new issue