]> git.notmuchmail.org Git - notmuch/blobdiff - test/test-lib.sh
Merge tag 0.28.4
[notmuch] / test / test-lib.sh
index 9f0d7e02a3d940454edf1e5b71888e6a4e6815ed..04d93f7d07c03dee970716b805dbb8c14cea6134 100644 (file)
@@ -26,9 +26,11 @@ fi
 # Make sure echo builtin does not expand backslash-escape sequences by default.
 shopt -u xpg_echo
 
+# Ensure NOTMUCH_SRCDIR and NOTMUCH_BUILDDIR are set.
+. $(dirname "$0")/export-dirs.sh || exit 1
+
 # It appears that people try to run tests without building...
-if ! test -x ../notmuch
-then
+if [[ ! -x "$NOTMUCH_BUILDDIR/notmuch" ]]; then
        echo >&2 'You do not seem to have built notmuch yet.'
        exit 1
 fi
@@ -107,7 +109,7 @@ add_gnupg_home ()
     _gnupg_exit () { gpgconf --kill all 2>/dev/null || true; }
     at_exit_function _gnupg_exit
     mkdir -m 0700 "$GNUPGHOME"
-    gpg --no-tty --import <$TEST_DIRECTORY/gnupg-secret-key.asc >"$GNUPGHOME"/import.log 2>&1
+    gpg --no-tty --import <$NOTMUCH_SRCDIR/test/gnupg-secret-key.asc >"$GNUPGHOME"/import.log 2>&1
     test_debug "cat $GNUPGHOME/import.log"
     if (gpg --quick-random --version >/dev/null 2>&1) ; then
        echo quick-random >> "$GNUPGHOME"/gpg.conf
@@ -115,6 +117,9 @@ add_gnupg_home ()
        echo debug-quick-random >> "$GNUPGHOME"/gpg.conf
     fi
     echo no-emit-version >> "$GNUPGHOME"/gpg.conf
+
+    # Change this if we ship a new test key
+    FINGERPRINT="5AEAB11F5E33DCE875DDB75B6D92612D94E46381"
 }
 
 # Each test should start with something like this, after copyright notices:
@@ -158,9 +163,6 @@ do
                valgrind=t; verbose=t; shift ;;
        --tee)
                shift ;; # was handled already
-       --root=*)
-               root=$(expr "z$1" : 'z[^=]*=\(.*\)')
-               shift ;;
        *)
                echo "error: unknown test option '$1'" >&2; exit 1 ;;
        esac
@@ -347,8 +349,17 @@ emacs_deliver_message ()
 # 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=''
+    while [[ "$1" =~ ^-- ]]; do
+        nmn_args="$nmn_args $1"
+        shift
+    done
     local subject="$1"
     local body="$2"
     shift 2
@@ -367,7 +378,7 @@ emacs_fcc_message ()
           (insert \"${body}\")
           $@
           (notmuch-mua-send-and-exit))" || return 1
-    notmuch new >/dev/null
+    notmuch new $nmn_args >/dev/null
 }
 
 # Add an existing, fixed corpus of email to the database.
@@ -386,7 +397,7 @@ add_email_corpus ()
     if [ -d $TEST_DIRECTORY/corpora.mail/$corpus ]; then
        cp -a $TEST_DIRECTORY/corpora.mail/$corpus ${MAIL_DIR}
     else
-       cp -a $TEST_DIRECTORY/corpora/$corpus ${MAIL_DIR}
+       cp -a $NOTMUCH_SRCDIR/test/corpora/$corpus ${MAIL_DIR}
        notmuch new >/dev/null || die "'notmuch new' failed while adding email corpus"
        mkdir -p $TEST_DIRECTORY/corpora.mail
        cp -a ${MAIL_DIR} $TEST_DIRECTORY/corpora.mail/$corpus
@@ -613,6 +624,11 @@ notmuch_config_sanitize ()
     notmuch_dir_sanitize | notmuch_built_with_sanitize
 }
 
+notmuch_show_part ()
+{
+    awk '/^\014part}/{ f=0 }; { if (f) { print $0 } } /^\014part{ ID: '"$1"'/{ f=1 }'
+}
+
 # End of notmuch helper functions
 
 # Use test_set_prereq to tell that a particular prerequisite is available.
@@ -935,8 +951,8 @@ export NOTMUCH_CONFIG=$NOTMUCH_CONFIG
 # --load               Force loading of notmuch.el and test-lib.el
 
 exec ${TEST_EMACS} --quick \
-       --directory "$TEST_DIRECTORY/../emacs" --load notmuch.el \
-       --directory "$TEST_DIRECTORY" --load test-lib.el \
+       --directory "$NOTMUCH_SRCDIR/emacs" --load notmuch.el \
+       --directory "$NOTMUCH_SRCDIR/test" --load test-lib.el \
        "\$@"
 EOF
        chmod a+x "$TMP_DIRECTORY/run_emacs"
@@ -951,8 +967,8 @@ test_emacs () {
        test -z "$missing_dependencies" || return
 
        if [ -z "$EMACS_SERVER" ]; then
-               emacs_tests="${this_test_bare}.el"
-               if [ -f "$TEST_DIRECTORY/$emacs_tests" ]; 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=
@@ -995,14 +1011,14 @@ test_python() {
 }
 
 test_ruby() {
-    MAIL_DIR=$MAIL_DIR ruby -I $TEST_DIRECTORY/../bindings/ruby> OUTPUT
+    MAIL_DIR=$MAIL_DIR $NOTMUCH_RUBY -I $NOTMUCH_SRCDIR/bindings/ruby> OUTPUT
 }
 
 test_C () {
     exec_file="test${test_count}"
     test_file="${exec_file}.c"
     cat > ${test_file}
-    ${TEST_CC} ${TEST_CFLAGS} -I${TEST_DIRECTORY} -I${NOTMUCH_SRCDIR}/lib -o ${exec_file} ${test_file} -L${TEST_DIRECTORY}/../lib/ -lnotmuch -ltalloc
+    ${TEST_CC} ${TEST_CFLAGS} -I${NOTMUCH_SRCDIR}/test -I${NOTMUCH_SRCDIR}/lib -o ${exec_file} ${test_file} -L${NOTMUCH_BUILDDIR}/lib/ -lnotmuch -ltalloc
     echo "== stdout ==" > OUTPUT.stdout
     echo "== stderr ==" > OUTPUT.stderr
     ./${exec_file} "$@" 1>>OUTPUT.stdout 2>>OUTPUT.stderr
@@ -1058,30 +1074,17 @@ test_init_ () {
 }
 
 
-. ./test-lib-common.sh || exit 1
+# Where to run the tests
+TEST_DIRECTORY=$NOTMUCH_BUILDDIR/test
 
-if [ "${NOTMUCH_GMIME_MAJOR}" = 3 ]; then
-    test_subtest_broken_gmime_3 () {
-       test_subtest_known_broken
-    }
-    test_subtest_broken_gmime_2 () {
-       true
-    }
-else
-    test_subtest_broken_gmime_3 () {
-       true
-    }
-    test_subtest_broken_gmime_2 () {
-       test_subtest_known_broken
-    }
-fi
+. "$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 "$test" || error "Cannot set up test environment"
+cd -P "$TMP_DIRECTORY" || error "Cannot set up test environment"
 
 if test "$verbose" = "t"
 then