-printf " Ensure content before uu data is indexed..."
-execute_expecting "search beforeuudata" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; uuencodetest (inbox unread)"
-printf " Ensure uu data is not indexed...\t"
-execute_expecting "search DURINGUUDATA" ""
-printf " Ensure content after uu data is indexed..."
-execute_expecting "search afteruudata" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; uuencodetest (inbox unread)"
-
-cat <<EOF
-Notmuch test suite complete.
-
-Intermediate state can be examined in:
- ${TEST_DIR}
-EOF
+printf " Ensure content before uu data is indexed...\t"
+output=$($NOTMUCH search beforeuudata | notmuch_search_sanitize)
+pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; uuencodetest (inbox unread)"
+printf " Ensure uu data is not indexed...\t\t"
+output=$($NOTMUCH search DURINGUUDATA | notmuch_search_sanitize)
+pass_if_equal "$output" ""
+printf " Ensure content after uu data is indexed...\t"
+output=$($NOTMUCH search afteruudata | notmuch_search_sanitize)
+pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; uuencodetest (inbox unread)"
+
+printf "\nTesting \"notmuch dump\" and \"notmuch restore\":\n"
+
+printf " Dumping all tags...\t\t\t\t"
+$NOTMUCH dump dump.expected
+pass_if_equal "$?" "0"
+
+printf " Clearing all tags...\t\t\t\t"
+sed -e 's/(\([^(]*\))$/()/' < dump.expected > clear.expected
+$NOTMUCH restore clear.expected
+$NOTMUCH dump clear.actual
+pass_if_equal "$(< clear.actual)" "$(< clear.expected)"
+
+printf " Restoring original tags...\t\t\t"
+$NOTMUCH restore dump.expected
+$NOTMUCH dump dump.actual
+pass_if_equal "$(< dump.actual)" "$(< dump.expected)"
+
+printf " Restore with nothing to do...\t\t\t"
+$NOTMUCH restore dump.expected
+pass_if_equal "$?" "0"
+
+printf "\nTesting threading when messages received out of order:\n"
+printf " Adding initial child message...\t\t"
+generate_message [body]=foo '[in-reply-to]=\<parent-id\>' [subject]=brokenthreadtest '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
+output=$(NOTMUCH_NEW)
+pass_if_equal "$output" "Added 1 new message to the database."
+printf " Searching returns the message...\t\t"
+output=$($NOTMUCH search foo | notmuch_search_sanitize)
+pass_if_equal "$output" "thread:XXX 2000-01-01 [1/1] Notmuch Test Suite; brokenthreadtest (inbox unread)"
+printf " Adding second child message...\t\t\t"
+generate_message [body]=foo '[in-reply-to]=\<parent-id\>' [subject]=brokenthreadtest '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
+output=$(NOTMUCH_NEW)
+pass_if_equal "$output" "Added 1 new message to the database."
+printf " Searching returns both messages in one thread..."
+output=$($NOTMUCH search foo | notmuch_search_sanitize)
+pass_if_equal "$output" "thread:XXX 2000-01-01 [2/2] Notmuch Test Suite; brokenthreadtest (inbox unread)"
+printf " Adding parent message...\t\t\t"
+generate_message [body]=foo [id]=parent-id [subject]=brokenthreadtest '[date]="Sat, 01 Jan 2000 12:00:00 -0000"'
+output=$(NOTMUCH_NEW)
+pass_if_equal "$output" "Added 1 new message to the database."
+printf " Searching returns all three messages in one thread..."
+output=$($NOTMUCH search foo | notmuch_search_sanitize)
+pass_if_equal "$output" "thread:XXX 2000-01-01 [3/3] Notmuch Test Suite; brokenthreadtest (inbox unread)"
+
+echo ""
+echo "Notmuch test suite complete."
+
+if [ "$test_failures" = "0" ]; then
+ echo "All $tests tests passed."
+ rm -rf ${TEST_DIR}
+else
+ echo "$test_failures/$tests tests failed. The failures can be investigated in:"
+ echo "${TEST_DIR}"
+fi
+
+echo ""
+
+exit $test_failures