2 test_description="API tests for notmuch_message_*"
4 . $(dirname "$0")/test-lib.sh || exit 1
8 test_begin_subtest "building database"
9 test_expect_success "NOTMUCH_NEW"
13 const char *stat_str = notmuch_database_status_string (db);
15 fputs (stat_str, stderr);
24 #include <notmuch-test.h>
25 int main (int argc, char** argv)
27 notmuch_database_t *db;
28 notmuch_status_t stat;
30 notmuch_message_t *message = NULL;
31 const char *id = "1258471718-6781-1-git-send-email-dottedmag@dottedmag.net";
33 stat = notmuch_database_open_verbose (argv[1], NOTMUCH_DATABASE_MODE_READ_WRITE, &db, &msg);
34 if (stat != NOTMUCH_STATUS_SUCCESS) {
35 fprintf (stderr, "error opening database: %d %s\n", stat, msg ? msg : "");
38 EXPECT0(notmuch_database_find_message (db, id, &message));
42 echo " EXPECT0(notmuch_database_close (db));" >> c_head
44 test_begin_subtest "Handle getting message-id from closed database"
45 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
48 id2=notmuch_message_get_message_id (message);
49 printf("%d\n%d\n", message != NULL, id2==NULL);
58 test_expect_equal_file EXPECTED OUTPUT
60 test_begin_subtest "Handle getting thread-id from closed database"
61 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
64 id2=notmuch_message_get_thread_id (message);
65 printf("%d\n%d\n", message != NULL, id2==NULL);
74 test_expect_equal_file EXPECTED OUTPUT
76 test_begin_subtest "Handle getting header from closed database"
77 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
80 from=notmuch_message_get_header (message, "from");
81 printf("%s\n%d\n", id, from == NULL);
86 1258471718-6781-1-git-send-email-dottedmag@dottedmag.net
90 test_expect_equal_file EXPECTED OUTPUT
92 # XXX this test only tests the trivial code path
93 test_begin_subtest "Handle getting replies from closed database"
94 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
96 notmuch_messages_t *replies;
97 replies = notmuch_message_get_replies (message);
98 printf("%d\n%d\n", message != NULL, replies==NULL);
107 test_expect_equal_file EXPECTED OUTPUT
109 test_begin_subtest "Handle getting message filename from closed database"
110 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
112 const char *filename;
113 filename = notmuch_message_get_filename (message);
114 printf("%d\n%d\n", message != NULL, filename == NULL);
123 test_expect_equal_file EXPECTED OUTPUT
125 test_begin_subtest "Handle getting all message filenames from closed database"
126 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
128 notmuch_filenames_t *filenames;
129 filenames = notmuch_message_get_filenames (message);
130 printf("%d\n%d\n", message != NULL, filenames == NULL);
139 test_expect_equal_file EXPECTED OUTPUT
141 test_begin_subtest "Handle getting ghost flag from closed database"
142 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
144 notmuch_bool_t result;
145 result = notmuch_message_get_flag (message, NOTMUCH_MESSAGE_FLAG_GHOST);
146 printf("%d\n%d\n", message != NULL, result == FALSE);
155 test_expect_equal_file EXPECTED OUTPUT
157 test_begin_subtest "Handle getting date from closed database"
158 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
161 result = notmuch_message_get_date (message);
162 printf("%d\n%d\n", message != NULL, result == 0);
171 test_expect_equal_file EXPECTED OUTPUT
173 test_begin_subtest "Handle getting tags from closed database"
174 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
176 notmuch_tags_t *result;
177 result = notmuch_message_get_tags (message);
178 printf("%d\n%d\n", message != NULL, result == NULL);
187 test_expect_equal_file EXPECTED OUTPUT
189 test_begin_subtest "Handle counting files from closed database"
190 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
193 result = notmuch_message_count_files (message);
194 printf("%d\n%d\n", message != NULL, result < 0);
203 test_expect_equal_file EXPECTED OUTPUT
205 test_begin_subtest "Handle adding tag with closed database"
206 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
208 notmuch_status_t status;
209 status = notmuch_message_add_tag (message, "boom");
210 printf("%d\n%d\n", message != NULL, status == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
219 test_expect_equal_file EXPECTED OUTPUT
221 test_begin_subtest "Handle removing tag with closed database"
222 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
224 notmuch_status_t status;
225 status = notmuch_message_remove_tag (message, "boom");
226 printf("%d\n%d\n", message != NULL, status == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
235 test_expect_equal_file EXPECTED OUTPUT
237 test_begin_subtest "Handle read maildir flag with closed database"
238 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
240 notmuch_bool_t is_set = -1;
241 is_set = notmuch_message_has_maildir_flag (message, 'S');
242 printf("%d\n%d\n", message != NULL, is_set == FALSE || is_set == TRUE);
251 test_expect_equal_file EXPECTED OUTPUT
253 test_begin_subtest "Handle checking maildir flag with closed db (new API)"
254 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
256 notmuch_status_t status;
258 status = notmuch_message_has_maildir_flag_st (message, 'S', &out);
259 printf("%d\n%d\n", message != NULL, status == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
268 test_expect_equal_file EXPECTED OUTPUT
270 test_begin_subtest "Handle converting maildir flags to tags with closed db"
271 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
273 notmuch_status_t status;
274 status = notmuch_message_maildir_flags_to_tags (message);
275 printf("%d\n%d\n", message != NULL, status == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
284 test_expect_equal_file EXPECTED OUTPUT
286 test_begin_subtest "Handle removing all tags with closed db"
287 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
289 notmuch_status_t status;
290 status = notmuch_message_remove_all_tags (message);
291 printf("%d\n%d\n", message != NULL, status == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
300 test_expect_equal_file EXPECTED OUTPUT
302 test_begin_subtest "Handle freezing message with closed db"
303 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
305 notmuch_status_t status;
306 status = notmuch_message_freeze (message);
307 printf("%d\n%d\n", message != NULL, status == NOTMUCH_STATUS_SUCCESS);
316 test_expect_equal_file EXPECTED OUTPUT
318 test_begin_subtest "Handle thawing message with closed db"
319 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
321 notmuch_status_t status;
322 status = notmuch_message_thaw (message);
323 printf("%d\n%d\n", message != NULL, status == NOTMUCH_STATUS_UNBALANCED_FREEZE_THAW);
332 test_expect_equal_file EXPECTED OUTPUT
334 test_begin_subtest "Handle destroying message with closed db"
335 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
337 notmuch_message_destroy (message);
338 printf("%d\n%d\n", message != NULL, 1);
347 test_expect_equal_file EXPECTED OUTPUT
349 test_begin_subtest "Handle retrieving closed db from message"
350 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
352 notmuch_database_t *db2;
353 db2 = notmuch_message_get_database (message);
354 printf("%d\n%d\n", message != NULL, db == db2);
363 test_expect_equal_file EXPECTED OUTPUT
365 test_begin_subtest "Handle reindexing message with closed db"
366 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
368 notmuch_status_t status;
369 status = notmuch_message_reindex (message, NULL);
370 printf("%d\n%d\n", message != NULL, status == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
379 test_expect_equal_file EXPECTED OUTPUT