X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=test%2Ftest-lib.sh;h=ad1506c9a455a8929dadcb0b32ac47b115ff29da;hb=caeb05493d5d0c97859cfd6303d8c64071dd69ea;hp=f53617258ae8bfca73642de89b7d39eadad03354;hpb=42b0409f8e27a3e9008b5735f397e67152893cfa;p=notmuch diff --git a/test/test-lib.sh b/test/test-lib.sh index f5361725..ad1506c9 100755 --- a/test/test-lib.sh +++ b/test/test-lib.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # # Copyright (c) 2005 Junio C Hamano # @@ -379,6 +379,38 @@ add_message () notmuch new > /dev/null } +# 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="$1" + local 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} + ../smtp-dummy sent_message & + smtp_dummy_pid=$! + test_emacs "(setq message-send-mail-function 'message-smtpmail-send-it) + (setq smtpmail-smtp-server \"localhost\") + (setq smtpmail-smtp-service \"25025\") + (notmuch-hello) + (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}\") + $@ + (message-send-and-exit)" >/dev/null 2>&1 + wait ${smtp_dummy_pid} + notmuch new >/dev/null +} + # Generate a corpus of email and add it to the database. # # This corpus is fixed, (it happens to be 50 messages from early in @@ -404,7 +436,7 @@ test_begin_subtest () error "bug in test script: Missing test_expect_equal in ${BASH_SOURCE[1]}:${BASH_LINENO[0]}" fi test_subtest_name="$1" - # Remember stdout and stderr file descriptios and redirect test + # Remember stdout and stderr file descriptors and redirect test # output to the previously prepared file descriptors 3 and 4 (see # below) if test "$verbose" != "t"; then exec 4>test.output 3>&4; fi @@ -441,6 +473,29 @@ test_expect_equal () fi } +test_expect_equal_file () +{ + exec 1>&6 2>&7 # Restore stdout and stderr + inside_subtest= + test "$#" = 3 && { prereq=$1; shift; } || prereq= + test "$#" = 2 || + error "bug in the test script: not 2 or 3 parameters to test_expect_equal" + + output="$1" + expected="$2" + if ! test_skip "$@" + then + if diff -q "$expected" "$output" >/dev/null ; then + test_ok_ "$test_subtest_name" + else + testname=$this_test.$test_count + cp "$output" $testname.output + cp "$expected" $testname.expected + test_failure_ "$test_subtest_name" "$(diff -u $testname.expected $testname.output)" + fi + fi +} + test_expect_equal_failure () { exec 1>&6 2>&7 # Restore stdout and stderr @@ -479,6 +534,20 @@ notmuch_show_sanitize () { sed -e "$NOTMUCH_SHOW_FILENAME_SQUELCH" } +notmuch_show_sanitize_all () +{ + sed \ + -e 's| filename:.*| filename:XXXXX|' \ + -e 's| id:[^ ]* | id:XXXXX |' +} + +notmuch_json_show_sanitize () +{ + sed -e 's|, |,\n |g' | \ + sed \ + -e 's|"id": "[^"]*",|"id": "XXXXX",|' \ + -e 's|"filename": "[^"]*",|"filename": "YYYYY",|' +} # End of notmuch helper functions @@ -792,23 +861,14 @@ fi # # --no-site-file Don't load the site-wide startup stuff # -# --directory Ensure that the local notmuch.el source is found +# --directory Ensure that the local elisp sources are found # -# --load Force loading of notmuch.el -# -# notmuch-test-wait Function for tests to use to wait for process completion -# -# message-signature Avoiding appending user's signature on messages -# -# set-frame-width 80 columns (avoids crazy 10-column default of --batch) +# --load Force loading of notmuch.el and test-lib.el emacs \$BATCH --no-init-file --no-site-file \ --directory ../../emacs --load notmuch.el \ - --eval "(defun notmuch-test-wait () - (while (get-buffer-process (current-buffer)) - (sleep-for 0.1)))" \ - --eval "(setq message-signature nil)" \ - --eval "(progn (set-frame-width (window-frame (get-buffer-window)) 80) \$@)" + --directory .. --load test-lib.el \ + --eval "(progn \$@)" EOF chmod a+x ./run_emacs ./run_emacs "$@" @@ -915,7 +975,15 @@ rm -fr "$test" || { exit 1 } +# A temporary home directory is needed by at least: +# - emacs/"Sending a message via (fake) SMTP" +# - emacs/"Reply within emacs" +# - crypto/emacs_deliver_message +export HOME="${TMP_DIRECTORY}/home" +mkdir -p "${HOME}" + MAIL_DIR="${TMP_DIRECTORY}/mail" +export GNUPGHOME="${TMP_DIRECTORY}/gnupg" export NOTMUCH_CONFIG="${TMP_DIRECTORY}/notmuch-config" mkdir -p "${test}"