+A Xapian exception occurred at lib/message.cc:XXX: Database has been closed
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+# XXX TODO: test on a message from notmuch_thread_get_toplevel_messages
+# XXX this test only tests the trivial code path
+test_begin_subtest "Handle getting replies from closed database"
+cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
+ {
+ notmuch_messages_t *replies;
+ replies = notmuch_message_get_replies (message);
+ printf("%d\n%d\n", message != NULL, replies==NULL);
+ stat = NOTMUCH_STATUS_XAPIAN_EXCEPTION;
+ }
+EOF
+cat <<EOF > EXPECTED
+== stdout ==
+1
+1
+== stderr ==
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "Handle getting message filename from closed database"
+cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
+ {
+ const char *filename;
+ filename = notmuch_message_get_filename (message);
+ printf("%d\n%d\n", message != NULL, filename == NULL);
+ stat = NOTMUCH_STATUS_XAPIAN_EXCEPTION;
+ }
+EOF
+cat <<EOF > EXPECTED
+== stdout ==
+1
+1
+== stderr ==
+A Xapian exception occurred at lib/message.cc:XXX: Database has been closed
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "Handle getting all message filenames from closed database"
+cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
+ {
+ notmuch_filenames_t *filenames;
+ filenames = notmuch_message_get_filenames (message);
+ printf("%d\n%d\n", message != NULL, filenames == NULL);
+ stat = NOTMUCH_STATUS_XAPIAN_EXCEPTION;
+ }
+EOF
+cat <<EOF > EXPECTED
+== stdout ==
+1
+1
+== stderr ==
+A Xapian exception occurred at lib/message.cc:XXX: Database has been closed
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "Handle getting ghost flag from closed database"
+cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
+ {
+ notmuch_bool_t result;
+ result = notmuch_message_get_flag (message, NOTMUCH_MESSAGE_FLAG_GHOST);
+ printf("%d\n%d\n", message != NULL, result == FALSE);
+ stat = NOTMUCH_STATUS_XAPIAN_EXCEPTION;
+ }
+EOF
+cat <<EOF > EXPECTED
+== stdout ==
+1
+1
+== stderr ==
+A Xapian exception occurred at lib/message.cc:XXX: Database has been closed
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "Handle getting date from closed database"
+cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
+ {
+ time_t result;
+ result = notmuch_message_get_date (message);
+ printf("%d\n%d\n", message != NULL, result == 0);
+ stat = NOTMUCH_STATUS_XAPIAN_EXCEPTION;
+ }
+EOF
+cat <<EOF > EXPECTED
+== stdout ==
+1
+1
+== stderr ==
+A Xapian exception occurred at lib/message.cc:XXX: Database has been closed
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "Handle getting tags from closed database"
+cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
+ {
+ notmuch_tags_t *result;
+ result = notmuch_message_get_tags (message);
+ printf("%d\n%d\n", message != NULL, result == NULL);
+ stat = NOTMUCH_STATUS_XAPIAN_EXCEPTION;
+ }
+EOF
+cat <<EOF > EXPECTED
+== stdout ==
+1
+1
+== stderr ==
+A Xapian exception occurred at lib/message.cc:XXX: Database has been closed
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "Handle counting files from closed database"
+cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
+ {
+ int result;
+ result = notmuch_message_count_files (message);
+ printf("%d\n%d\n", message != NULL, result < 0);
+ stat = NOTMUCH_STATUS_XAPIAN_EXCEPTION;
+ }
+EOF
+cat <<EOF > EXPECTED
+== stdout ==
+1
+1
+== stderr ==
+A Xapian exception occurred at lib/message.cc:XXX: Database has been closed
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "Handle adding tag with closed database"
+cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
+ {
+ stat = notmuch_message_add_tag (message, "boom");
+ printf("%d\n%d\n", message != NULL, stat == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
+ }
+EOF
+cat <<EOF > EXPECTED
+== stdout ==
+1
+1
+== stderr ==
+A Xapian exception occurred at lib/message.cc:XXX: Database has been closed
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "Handle removing tag with closed database"
+cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
+ {
+ stat = notmuch_message_remove_tag (message, "boom");
+ printf("%d\n%d\n", message != NULL, stat == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
+ }
+EOF
+cat <<EOF > EXPECTED
+== stdout ==
+1
+1
+== stderr ==
+A Xapian exception occurred at lib/message.cc:XXX: Database has been closed
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "Handle read maildir flag with closed database"
+cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
+ {
+ notmuch_bool_t is_set = -1;
+ is_set = notmuch_message_has_maildir_flag (message, 'S');
+ printf("%d\n%d\n", message != NULL, is_set == FALSE || is_set == TRUE);
+ stat = NOTMUCH_STATUS_XAPIAN_EXCEPTION;
+ }
+EOF
+cat <<EOF > EXPECTED
+== stdout ==
+1
+1
+== stderr ==
+A Xapian exception occurred at lib/message.cc:XXX: Database has been closed
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "Handle checking maildir flag with closed db (new API)"
+cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
+ {
+ notmuch_bool_t out;
+ stat = notmuch_message_has_maildir_flag_st (message, 'S', &out);
+ printf("%d\n%d\n", message != NULL, stat == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
+ }
+EOF
+cat <<EOF > EXPECTED
+== stdout ==
+1
+1
+== stderr ==
+A Xapian exception occurred at lib/message.cc:XXX: Database has been closed
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "Handle converting maildir flags to tags with closed db"
+cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
+ {
+ stat = notmuch_message_maildir_flags_to_tags (message);
+ printf("%d\n%d\n", message != NULL, stat == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
+ }
+EOF
+cat <<EOF > EXPECTED
+== stdout ==
+1
+1
+== stderr ==
+A Xapian exception occurred at lib/message.cc:XXX: Database has been closed
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "Handle removing all tags with closed db"
+cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
+ {
+ stat = notmuch_message_remove_all_tags (message);
+ printf("%d\n%d\n", message != NULL, stat == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
+ }
+EOF
+cat <<EOF > EXPECTED
+== stdout ==
+1
+1
+== stderr ==
+A Xapian exception occurred at lib/message.cc:XXX: Database has been closed
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "Handle freezing message with closed db"
+cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
+ {
+ stat = notmuch_message_freeze (message);
+ printf("%d\n%d\n", message != NULL, stat == NOTMUCH_STATUS_SUCCESS);
+ }
+EOF
+cat <<EOF > EXPECTED
+== stdout ==
+1
+1
+== stderr ==
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "Handle thawing message with closed db"
+cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
+ {
+ stat = notmuch_message_thaw (message);
+ printf("%d\n%d\n", message != NULL, stat == NOTMUCH_STATUS_UNBALANCED_FREEZE_THAW);
+ }
+EOF
+cat <<EOF > EXPECTED
+== stdout ==
+1
+1
+== stderr ==
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "Handle destroying message with closed db"
+cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
+ {
+ notmuch_message_destroy (message);
+ printf("%d\n%d\n", message != NULL, 1);
+ }
+EOF
+cat <<EOF > EXPECTED
+== stdout ==
+1
+1
+== stderr ==
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "Handle retrieving closed db from message"
+cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
+ {
+ notmuch_database_t *db2;
+ db2 = notmuch_message_get_database (message);
+ printf("%d\n%d\n", message != NULL, db == db2);
+ }
+EOF
+cat <<EOF > EXPECTED
+== stdout ==
+1
+1
+== stderr ==
+EOF
+test_expect_equal_file EXPECTED OUTPUT
+
+test_begin_subtest "Handle reindexing message with closed db"
+cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
+ {
+ stat = notmuch_message_reindex (message, NULL);
+ printf("%d\n%d\n", message != NULL, stat == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
+ }
+EOF
+cat <<EOF > EXPECTED
+== stdout ==
+1
+1
+== stderr ==
+A Xapian exception occurred at lib/message.cc:XXX: Database has been closed