From: Felipe Contreras Date: Sat, 15 May 2021 20:47:44 +0000 (-0500) Subject: test: split emacs functionality to its own file X-Git-Tag: archive/debian/0.33_rc0-1~87 X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=commitdiff_plain;h=92454bc0935604f4a623e75dec9506c0283eee70 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 --- diff --git a/test/T160-json.sh b/test/T160-json.sh index e8b75605..638afb4d 100755 --- a/test/T160-json.sh +++ b/test/T160-json.sh @@ -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\"" diff --git a/test/T170-sexp.sh b/test/T170-sexp.sh index 24be8351..af8c4b44 100755 --- a/test/T170-sexp.sh +++ b/test/T170-sexp.sh @@ -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\"" diff --git a/test/T310-emacs.sh b/test/T310-emacs.sh index 851ef64e..1ece6e00 100755 --- a/test/T310-emacs.sh +++ b/test/T310-emacs.sh @@ -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 diff --git a/test/T320-emacs-large-search-buffer.sh b/test/T320-emacs-large-search-buffer.sh index f61e8a97..d2638c8b 100755 --- a/test/T320-emacs-large-search-buffer.sh +++ b/test/T320-emacs-large-search-buffer.sh @@ -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. diff --git a/test/T330-emacs-subject-to-filename.sh b/test/T330-emacs-subject-to-filename.sh index eaf7c980..6e09a048 100755 --- a/test/T330-emacs-subject-to-filename.sh +++ b/test/T330-emacs-subject-to-filename.sh @@ -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 diff --git a/test/T350-crypto.sh b/test/T350-crypto.sh index ae1d6a98..4508c984 100755 --- a/test/T350-crypto.sh +++ b/test/T350-crypto.sh @@ -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 ################################################## diff --git a/test/T355-smime.sh b/test/T355-smime.sh index 12ac2525..69bdcfac 100755 --- a/test/T355-smime.sh +++ b/test/T355-smime.sh @@ -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 diff --git a/test/T357-index-decryption.sh b/test/T357-index-decryption.sh index b81bdfe1..f5644d7e 100755 --- a/test/T357-index-decryption.sh +++ b/test/T357-index-decryption.sh @@ -4,6 +4,7 @@ test_description='indexing decrypted mail' . $(dirname "$0")/test-lib.sh || exit 1 +. $(dirname "$0")/test-lib-emacs.sh || exit 1 ################################################## diff --git a/test/T358-emacs-protected-headers.sh b/test/T358-emacs-protected-headers.sh index bca78531..b25d7ea7 100755 --- a/test/T358-emacs-protected-headers.sh +++ b/test/T358-emacs-protected-headers.sh @@ -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 diff --git a/test/T420-emacs-test-functions.sh b/test/T420-emacs-test-functions.sh index bfc10be3..22e4f01e 100755 --- a/test/T420-emacs-test-functions.sh +++ b/test/T420-emacs-test-functions.sh @@ -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' diff --git a/test/T430-emacs-address-cleaning.sh b/test/T430-emacs-address-cleaning.sh index 02d3b411..640bff3f 100755 --- a/test/T430-emacs-address-cleaning.sh +++ b/test/T430-emacs-address-cleaning.sh @@ -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)' diff --git a/test/T440-emacs-hello.sh b/test/T440-emacs-hello.sh index d23c1fca..642aa3cc 100755 --- a/test/T440-emacs-hello.sh +++ b/test/T440-emacs-hello.sh @@ -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" diff --git a/test/T450-emacs-show.sh b/test/T450-emacs-show.sh index bd76d378..e58124d4 100755 --- a/test/T450-emacs-show.sh +++ b/test/T450-emacs-show.sh @@ -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 diff --git a/test/T455-emacs-charsets.sh b/test/T455-emacs-charsets.sh index cb1297ca..a0f4dc24 100755 --- a/test/T455-emacs-charsets.sh +++ b/test/T455-emacs-charsets.sh @@ -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 diff --git a/test/T460-emacs-tree.sh b/test/T460-emacs-tree.sh index 195485c1..dfc69049 100755 --- a/test/T460-emacs-tree.sh +++ b/test/T460-emacs-tree.sh @@ -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 diff --git a/test/T510-thread-replies.sh b/test/T510-thread-replies.sh index 2859d29f..cdb4be44 100755 --- a/test/T510-thread-replies.sh +++ b/test/T510-thread-replies.sh @@ -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"' \ diff --git a/test/T630-emacs-draft.sh b/test/T630-emacs-draft.sh index d7903ce7..8553f022 100755 --- a/test/T630-emacs-draft.sh +++ b/test/T630-emacs-draft.sh @@ -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 diff --git a/test/T720-emacs-attachment-warnings.sh b/test/T720-emacs-attachment-warnings.sh index c8d2bcc2..4e8c5d26 100755 --- a/test/T720-emacs-attachment-warnings.sh +++ b/test/T720-emacs-attachment-warnings.sh @@ -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)' diff --git a/test/T730-emacs-forwarding.sh b/test/T730-emacs-forwarding.sh index 5d6ac9f0..378067ed 100755 --- a/test/T730-emacs-forwarding.sh +++ b/test/T730-emacs-forwarding.sh @@ -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 diff --git a/test/test-lib-emacs.sh b/test/test-lib-emacs.sh new file mode 100644 index 00000000..dde32177 --- /dev/null +++ b/test/test-lib-emacs.sh @@ -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 <"$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 diff --git a/test/test-lib.sh b/test/test-lib.sh index 756e5baf..89eb744d 100644 --- a/test/test-lib.sh +++ b/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 <"$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"