add_email_corpus
cat <<EOF > c_head
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <talloc.h>
#include <notmuch-test.h>
void print_properties (notmuch_message_t *message, const char *prefix, notmuch_bool_t exact) {
notmuch_message_t *message = NULL;
const char *val;
notmuch_status_t stat;
+ char* msg = NULL;
- EXPECT0(notmuch_database_open (argv[1], NOTMUCH_DATABASE_MODE_READ_WRITE, &db));
+ EXPECT0(notmuch_database_open_with_config (argv[1],
+ NOTMUCH_DATABASE_MODE_READ_WRITE,
+ "", NULL, &db, &msg));
+ if (msg) fputs (msg, stderr);
EXPECT0(notmuch_database_find_message(db, "4EFC743A.3060609@april.org", &message));
if (message == NULL) {
fprintf (stderr, "unable to find message");
EXPECT0(notmuch_message_get_property (message, "testkey2", &val));
printf("testkey2 = %s\n", val);
- /* remove non-existant value for key */
+ /* remove non-existent value for key */
EXPECT0(notmuch_message_remove_property (message, "testkey2", "this value has spaces and = sign"));
EXPECT0(notmuch_message_get_property (message, "testkey2", &val));
printf("testkey2 = %s\n", val);
EOF
test_expect_equal_file EXPECTED OUTPUT
+test_begin_subtest "testing string map binary search (via message properties)"
+cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
+{
+ char *keys[] = {"a", "b", "c", "d", "e", NULL};
+ for (int i=0; keys[i]; i++)
+ EXPECT0(notmuch_message_add_property (message, keys[i], keys[i]));
+
+ for (int i=0; keys[i]; i++) {
+ EXPECT0(notmuch_message_get_property (message, keys[i], &val));
+ printf("%s = %s\n", keys[i], val);
+ }
+
+ for (int i=0; keys[i]; i++) {
+ EXPECT0(notmuch_message_remove_property (message, keys[i], keys[i]));
+ EXPECT0(notmuch_message_get_property (message, keys[i], &val));
+ printf("%s = %s\n", keys[i], val == NULL ? "NULL" : val);
+ }
+}
+EOF
+cat <<EOF > EXPECTED
+== stdout ==
+a = a
+b = b
+c = c
+d = d
+e = e
+a = NULL
+b = NULL
+c = NULL
+d = NULL
+e = 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}
{
EXPECT0(notmuch_message_add_property (message, "testkey3", "alice3"));
print_properties (message, "testkey", FALSE);
EOF
+# expected: 4 values for testkey1, 3 values for testkey3
+# they are not guaranteed to be sorted, so sort them, leaving the first
+# line '== stdout ==' and the end ('== stderr ==' and whatever error
+# may have been printed) alone
+mv OUTPUT unsorted_OUTPUT
+awk ' NR == 1 { print; next } \
+ NR < 6 { print | "sort"; next } \
+ NR == 6 { close("sort") } \
+ NR < 9 { print | "sort"; next } \
+ NR == 9 { close("sort") } \
+ { print }' unsorted_OUTPUT > OUTPUT
+rm unsorted_OUTPUT
cat <<'EOF' >EXPECTED
== stdout ==
alice