mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-24 03:48: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
|
||||
test_description="--format=json output"
|
||||
. $(dirname "$0")/test-lib.sh || exit 1
|
||||
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||
|
||||
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\""
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#!/usr/bin/env bash
|
||||
test_description="--format=sexp output"
|
||||
. $(dirname "$0")/test-lib.sh || exit 1
|
||||
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||
|
||||
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\""
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
test_description="emacs interface"
|
||||
. $(dirname "$0")/test-lib.sh || exit 1
|
||||
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||
|
||||
EXPECTED=$NOTMUCH_SRCDIR/test/emacs.expected-output
|
||||
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
#!/usr/bin/env bash
|
||||
test_description="Emacs with large search results buffer"
|
||||
. $(dirname "$0")/test-lib.sh || exit 1
|
||||
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||
|
||||
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
|
||||
|
||||
test_require_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
|
||||
# cross several 4kB page boundaries and see the bug.
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
|
||||
test_description="emacs: mail subject to filename"
|
||||
. $(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 ...)
|
||||
test_emacs '(ignore)' > /dev/null
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
test_description='PGP/MIME signature verification and decryption'
|
||||
. $(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'
|
||||
. $(dirname "$0")/test-lib.sh || exit 1
|
||||
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||
|
||||
test_require_emacs
|
||||
test_require_external_prereq openssl
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
test_description='indexing decrypted mail'
|
||||
. $(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"
|
||||
. $(dirname "$0")/test-lib.sh || exit 1
|
||||
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||
|
||||
# testing protected headers with emacs
|
||||
test_require_emacs
|
||||
add_gnupg_home
|
||||
add_email_corpus protected-headers
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
test_description="emacs test function sanity"
|
||||
. $(dirname "$0")/test-lib.sh || exit 1
|
||||
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||
|
||||
test_begin_subtest "emacs test function sanity"
|
||||
test_emacs_expect_t 't'
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
|
||||
test_description="emacs address cleaning"
|
||||
. $(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_emacs_expect_t '(notmuch-test-address-cleaning-1)'
|
||||
|
|
|
@ -2,9 +2,11 @@
|
|||
|
||||
test_description="emacs notmuch-hello view"
|
||||
. $(dirname "$0")/test-lib.sh || exit 1
|
||||
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||
|
||||
EXPECTED=$NOTMUCH_SRCDIR/test/emacs.expected-output
|
||||
|
||||
test_require_emacs
|
||||
add_email_corpus
|
||||
|
||||
test_begin_subtest "User-defined section with inbox tag"
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
test_description="emacs notmuch-show view"
|
||||
. $(dirname "$0")/test-lib.sh || exit 1
|
||||
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||
|
||||
EXPECTED=$NOTMUCH_SRCDIR/test/emacs-show.expected-output
|
||||
|
||||
|
|
|
@ -2,11 +2,14 @@
|
|||
|
||||
test_description="emacs notmuch-show charset handling"
|
||||
. $(dirname "$0")/test-lib.sh || exit 1
|
||||
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||
|
||||
|
||||
UTF8_YEN=$'\xef\xbf\xa5'
|
||||
BIG5_YEN=$'\xa2\x44'
|
||||
|
||||
test_require_emacs
|
||||
|
||||
# Add four messages with unusual encoding requirements:
|
||||
#
|
||||
# 1) text/plain in quoted-printable big5
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
test_description="emacs tree view interface"
|
||||
. $(dirname "$0")/test-lib.sh || exit 1
|
||||
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||
|
||||
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'
|
||||
|
||||
. $(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"
|
||||
add_message '[id]="foo@one.com"' \
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
#!/usr/bin/env bash
|
||||
test_description="Emacs Draft Handling"
|
||||
. $(dirname "$0")/test-lib.sh || exit 1
|
||||
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||
|
||||
test_require_emacs
|
||||
add_email_corpus
|
||||
|
||||
notmuch config set search.exclude_tags deleted
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
|
||||
test_description="emacs attachment warnings"
|
||||
. $(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_emacs_expect_t '(notmuch-test-attachment-warning-1)'
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
test_description="emacs forwarding"
|
||||
. $(dirname "$0")/test-lib.sh || exit 1
|
||||
. $(dirname "$0")/test-lib-emacs.sh || exit 1
|
||||
|
||||
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 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 () {
|
||||
[ -e "${GNUPGHOME}/gpg.conf" ] && return
|
||||
_gnupg_exit () { gpgconf --kill all 2>/dev/null || true; }
|
||||
|
@ -348,88 +340,6 @@ export GNUPGHOME="${TEST_TMPDIR}/gnupg"
|
|||
trap 'trap_exit' EXIT
|
||||
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.
|
||||
#
|
||||
# $1 is the corpus dir under corpora to add, using "default" if unset.
|
||||
|
@ -574,41 +484,6 @@ test_json_nodes () {
|
|||
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 "${@}" | grep -v -E -e '^Processed [0-9]*( total)? file|Found [0-9]* total file'
|
||||
}
|
||||
|
@ -1022,73 +897,6 @@ test_done () {
|
|||
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 () {
|
||||
# Note: if there is need to print debug information from python program,
|
||||
# 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
|
||||
|
||||
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 "$TMP_DIRECTORY" || error "Cannot set up test environment"
|
||||
|
|
Loading…
Reference in a new issue