#!/usr/bin/env bash test_description="message property API" . ./test-lib.sh || exit 1 add_email_corpus cat < c_head #include #include #include #include void run(int line, notmuch_status_t ret) { if (ret) { fprintf (stderr, "line %d: %s\n", line, ret); exit (1); } } #define RUN(v) run(__LINE__, v); int main (int argc, char** argv) { notmuch_database_t *db; notmuch_message_t *message = NULL; const char *val; notmuch_status_t stat; RUN(notmuch_database_open (argv[1], NOTMUCH_DATABASE_MODE_READ_WRITE, &db)); RUN(notmuch_database_find_message(db, "4EFC743A.3060609@april.org", &message)); if (message == NULL) { fprintf (stderr, "unable to find message"); exit (1); } EOF cat < c_tail RUN(notmuch_database_destroy(db)); } EOF test_begin_subtest "notmuch_message_{add,get,remove}_property" cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} { RUN(notmuch_message_add_property (message, "testkey1", "testvalue1")); RUN(notmuch_message_get_property (message, "testkey1", &val)); printf("testkey1[1] = %s\n", val); RUN(notmuch_message_add_property (message, "testkey2", "testvalue2")); RUN(notmuch_message_get_property (message, "testkey1", &val)); printf("testkey1[2] = %s\n", val); RUN(notmuch_message_get_property (message, "testkey1", &val)); RUN(notmuch_message_get_property (message, "testkey2", &val)); printf("testkey2 = %s\n", val); /* Add second value for key */ RUN(notmuch_message_add_property (message, "testkey2", "testvalue3")); RUN(notmuch_message_get_property (message, "testkey2", &val)); printf("testkey2 = %s\n", val); /* remove first value for key */ RUN(notmuch_message_remove_property (message, "testkey2", "testvalue2")); RUN(notmuch_message_get_property (message, "testkey2", &val)); printf("testkey2 = %s\n", val); /* remove non-existant value for key */ RUN(notmuch_message_remove_property (message, "testkey2", "testvalue2")); RUN(notmuch_message_get_property (message, "testkey2", &val)); printf("testkey2 = %s\n", val); /* remove only value for key */ RUN(notmuch_message_remove_property (message, "testkey2", "testvalue3")); RUN(notmuch_message_get_property (message, "testkey2", &val)); printf("testkey2 = %s\n", val == NULL ? "NULL" : val); } EOF cat <<'EOF' >EXPECTED == stdout == testkey1[1] = testvalue1 testkey1[2] = testvalue1 testkey2 = testvalue2 testkey2 = testvalue2 testkey2 = testvalue3 testkey2 = testvalue3 testkey2 = NULL == stderr == EOF test_expect_equal_file EXPECTED OUTPUT test_begin_subtest "notmuch_message_get_properties: empty list" cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} { notmuch_message_properties_t *list; list = notmuch_message_get_properties (message, "nonexistent", TRUE); printf("valid = %d\n", notmuch_message_properties_valid (list)); notmuch_message_properties_destroy (list); } EOF cat <<'EOF' >EXPECTED == stdout == valid = 0 == stderr == EOF test_expect_equal_file EXPECTED OUTPUT test_begin_subtest "notmuch_message_properties: one value" cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} { notmuch_message_properties_t *list; for (list = notmuch_message_get_properties (message, "testkey1", TRUE); notmuch_message_properties_valid (list); notmuch_message_properties_move_to_next (list)) { printf("%s\n", notmuch_message_properties_value(list)); } notmuch_message_properties_destroy (list); } EOF cat <<'EOF' >EXPECTED == stdout == testvalue1 == stderr == EOF test_expect_equal_file EXPECTED OUTPUT test_begin_subtest "notmuch_message_properties: multiple values" cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} { notmuch_message_properties_t *list; RUN(notmuch_message_add_property (message, "testkey1", "bob")); RUN(notmuch_message_add_property (message, "testkey1", "testvalue2")); RUN(notmuch_message_add_property (message, "testkey1", "alice")); for (list = notmuch_message_get_properties (message, "testkey1", TRUE); notmuch_message_properties_valid (list); notmuch_message_properties_move_to_next (list)) { printf("%s\n", notmuch_message_properties_value(list)); } notmuch_message_properties_destroy (list); } EOF cat <<'EOF' >EXPECTED == stdout == alice bob testvalue1 testvalue2 == stderr == EOF test_expect_equal_file EXPECTED OUTPUT test_begin_subtest "notmuch_message_properties: prefix" cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} { notmuch_message_properties_t *list; RUN(notmuch_message_add_property (message, "testkey3", "bob3")); RUN(notmuch_message_add_property (message, "testkey3", "testvalue3")); RUN(notmuch_message_add_property (message, "testkey3", "alice3")); for (list = notmuch_message_get_properties (message, "testkey", FALSE); notmuch_message_properties_valid (list); notmuch_message_properties_move_to_next (list)) { printf("%s\n", notmuch_message_properties_value(list)); } notmuch_message_properties_destroy (list); } EOF cat <<'EOF' >EXPECTED == stdout == alice bob testvalue1 testvalue2 alice3 bob3 testvalue3 == stderr == EOF test_expect_equal_file EXPECTED OUTPUT test_done