Re: [PATCH 08/13] test: split emacs functionality to its own file

Subject: Re: [PATCH 08/13] test: split emacs functionality to its own file

Date: Sat, 01 May 2021 23:28:13 +0300

To: Felipe Contreras, notmuch@notmuchmail.org

Cc: Daniel Kahn Gillmor

From: Tomi Ollila


On Sat, May 01 2021, Felipe Contreras wrote:

> This way it's easier to identify the tests that do require emacs stuff.
>
> Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
> ---
>  test/T160-json.sh                      |   1 +
>  test/T170-sexp.sh                      |   1 +
>  test/T310-emacs.sh                     |   1 +
>  test/T320-emacs-large-search-buffer.sh |   3 +
>  test/T330-emacs-subject-to-filename.sh |   3 +
>  test/T350-crypto.sh                    |   1 +
>  test/T355-smime.sh                     |   1 +
>  test/T357-index-decryption.sh          |   1 +
>  test/T358-emacs-protected-headers.sh   |   2 +
>  test/T420-emacs-test-functions.sh      |   1 +
>  test/T430-emacs-address-cleaning.sh    |   3 +
>  test/T440-emacs-hello.sh               |   2 +
>  test/T450-emacs-show.sh                |   1 +
>  test/T455-emacs-charsets.sh            |   3 +
>  test/T460-emacs-tree.sh                |   1 +
>  test/T510-thread-replies.sh            |   1 +
>  test/T630-emacs-draft.sh               |   2 +
>  test/T720-emacs-attachment-warnings.sh |   3 +
>  test/T730-emacs-forwarding.sh          |   1 +
>  test/test-lib-emacs.sh                 | 213 +++++++++++++++++++++++++
>  test/test-lib.sh                       | 199 -----------------------
>  21 files changed, 245 insertions(+), 199 deletions(-)
>  create mode 100644 test/test-lib-emacs.sh
>
> 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 e64627c6..c08df5fc 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

Could the following work in case of emacs tests:

  . $(dirname "$0")/test-lib.sh || exit 1
  test_require_emacs
  . $(dirname "$0")/test-lib-emacs.sh || exit 1

i.e. in case of emacs tests test_require_emacs would always be needed 
-- and it requirement not satisfied, exit even before sourcing
test-lib-emacs.sh

Tomi

>  . $(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..ecad501a
> --- /dev/null
> +++ b/test/test-lib-emacs.sh
> @@ -0,0 +1,213 @@
> +#
> +# 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 () {
> +    test_require_external_prereq emacs
> +    test_require_external_prereq ${TEST_EMACSCLIENT}
> +    test_require_external_prereq dtach
> +}
> +
> +# 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
> +	missing_dependencies=
> +	test_require_external_prereq dtach || missing_dependencies=1
> +	test_require_external_prereq emacs || missing_dependencies=1
> +	test_require_external_prereq ${TEST_EMACSCLIENT} || missing_dependencies=1
> +	test -z "$missing_dependencies" || 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 88e2a82f..7fdc0007 100644
> --- a/test/test-lib.sh
> +++ b/test/test-lib.sh
> @@ -114,12 +114,6 @@ unset ALTERNATE_EDITOR
>  unset EMAIL
>  unset NAME
>  
> -test_require_emacs () {
> -    test_require_external_prereq emacs
> -    test_require_external_prereq ${TEST_EMACSCLIENT}
> -    test_require_external_prereq dtach
> -}
> -
>  add_gnupg_home ()
>  {
>      [ -e "${GNUPGHOME}/gpg.conf" ] && return
> @@ -349,90 +343,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.
> @@ -581,41 +491,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'
> @@ -1046,77 +921,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
> -	missing_dependencies=
> -	test_require_external_prereq dtach || missing_dependencies=1
> -	test_require_external_prereq emacs || missing_dependencies=1
> -	test_require_external_prereq ${TEST_EMACSCLIENT} || missing_dependencies=1
> -	test -z "$missing_dependencies" || 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')
> @@ -1210,9 +1014,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"
> -- 
> 2.31.0
> _______________________________________________
> notmuch mailing list -- notmuch@notmuchmail.org
> To unsubscribe send an email to notmuch-leave@notmuchmail.org
_______________________________________________
notmuch mailing list -- notmuch@notmuchmail.org
To unsubscribe send an email to notmuch-leave@notmuchmail.org

Thread: