2 test_description="library config API"
4 . $(dirname "$0")/test-lib.sh || exit 1
8 _libconfig_sanitize() {
9 ${NOTMUCH_PYTHON} /dev/fd/3 3<<'EOF'
10 import os, sys, pwd, socket
12 pw = pwd.getpwuid(os.getuid())
14 name = pw.pw_gecos.partition(",")[0]
15 fqdn = socket.getaddrinfo(socket.gethostname(), 0, 0,
16 socket.SOCK_STREAM, 0, socket.AI_CANONNAME)[0][3]
19 l = l.replace(user, "USERNAME", 1).replace("@" + fqdn, "@FQDN", 1)
20 l = l.replace(".(none)", "", 1).replace(".localdomain", "", 1)
22 l = l.replace("'" + name, "'USER_FULL_NAME", 1)
30 #include <notmuch-test.h>
32 int main (int argc, char** argv)
34 notmuch_database_t *db;
36 notmuch_status_t stat;
39 for (int i = 1; i < argc; i++)
40 if (strcmp (argv[i], "%NULL%") == 0) argv[i] = NULL;
42 stat = notmuch_database_open_with_config (argv[1],
43 NOTMUCH_DATABASE_MODE_READ_WRITE,
48 if (stat != NOTMUCH_STATUS_SUCCESS) {
49 fprintf (stderr, "error opening database\n%s\n%s\n", notmuch_status_to_string (stat), msg ? msg : "");
55 EXPECT0(notmuch_database_destroy(db));
59 test_begin_subtest "notmuch_database_{set,get}_config"
60 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
62 EXPECT0(notmuch_database_set_config (db, "test.key1", "testvalue1"));
63 EXPECT0(notmuch_database_set_config (db, "test.key2", "testvalue2"));
64 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
65 printf("test.key1 = %s\n", val);
66 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
67 printf("test.key2 = %s\n", val);
72 test.key1 = testvalue1
73 test.key2 = testvalue2
76 test_expect_equal_file EXPECTED OUTPUT
79 test_begin_subtest "notmuch_database_get_config_list: empty list"
80 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
82 notmuch_config_list_t *list;
83 EXPECT0(notmuch_database_get_config_list (db, "nonexistent", &list));
84 printf("valid = %d\n", notmuch_config_list_valid (list));
85 notmuch_config_list_destroy (list);
93 test_expect_equal_file EXPECTED OUTPUT
95 test_begin_subtest "notmuch_database_get_config_list: closed db"
96 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
98 notmuch_config_list_t *list;
99 EXPECT0(notmuch_database_close (db));
100 stat = notmuch_database_get_config_list (db, "nonexistent", &list);
101 printf("%d\n", stat == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
104 cat <<'EOF' >EXPECTED
109 test_expect_equal_file EXPECTED OUTPUT
111 test_begin_subtest "notmuch_database_get_config_list: all pairs"
112 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
114 notmuch_config_list_t *list;
115 EXPECT0(notmuch_database_set_config (db, "zzzafter", "afterval"));
116 EXPECT0(notmuch_database_set_config (db, "aaabefore", "beforeval"));
117 EXPECT0(notmuch_database_get_config_list (db, "", &list));
118 for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
119 printf("%s %s\n", notmuch_config_list_key (list), notmuch_config_list_value(list));
121 notmuch_config_list_destroy (list);
124 cat <<'EOF' >EXPECTED
132 test_expect_equal_file EXPECTED OUTPUT
134 test_begin_subtest "notmuch_database_get_config_list: all pairs (closed db)"
135 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
137 notmuch_config_list_t *list;
138 EXPECT0(notmuch_database_get_config_list (db, "", &list));
139 EXPECT0(notmuch_database_close (db));
140 for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
141 printf("%s %d\n", notmuch_config_list_key (list), NULL == notmuch_config_list_value(list));
143 notmuch_config_list_destroy (list);
146 cat <<'EOF' >EXPECTED
154 test_expect_equal_file EXPECTED OUTPUT
156 test_begin_subtest "notmuch_database_get_config_list: one prefix"
157 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
159 notmuch_config_list_t *list;
160 EXPECT0(notmuch_database_get_config_list (db, "test.key", &list));
161 for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
162 printf("%s %s\n", notmuch_config_list_key (list), notmuch_config_list_value(list));
164 notmuch_config_list_destroy (list);
167 cat <<'EOF' >EXPECTED
173 test_expect_equal_file EXPECTED OUTPUT
175 test_begin_subtest "dump config"
176 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
178 EXPECT0(notmuch_database_set_config (db, "key with spaces", "value, with, spaces!"));
181 notmuch dump --include=config >OUTPUT
182 cat <<'EOF' >EXPECTED
183 #notmuch-dump batch-tag:3 config
184 #@ aaabefore beforeval
185 #@ key%20with%20spaces value,%20with,%20spaces%21
186 #@ test.key1 testvalue1
187 #@ test.key2 testvalue2
190 test_expect_equal_file EXPECTED OUTPUT
192 test_begin_subtest "restore config"
193 notmuch dump --include=config >EXPECTED
194 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
196 EXPECT0(notmuch_database_set_config (db, "test.key1", "mutatedvalue"));
199 notmuch restore --include=config <EXPECTED
200 notmuch dump --include=config >OUTPUT
201 test_expect_equal_file EXPECTED OUTPUT
204 test_begin_subtest "override config from file"
205 notmuch config set test.key1 overridden
206 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
208 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
209 printf("test.key1 = %s\n", val);
210 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
211 printf("test.key2 = %s\n", val);
214 cat <<'EOF' >EXPECTED
216 test.key1 = overridden
217 test.key2 = testvalue2
220 test_expect_equal_file EXPECTED OUTPUT
223 test_begin_subtest "NOTMUCH_CONFIG_HOOK_DIR: traditional"
224 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
226 const char *val = notmuch_config_get (db, NOTMUCH_CONFIG_HOOK_DIR);
227 printf("database.hook_dir = %s\n", val);
230 cat <<'EOF' >EXPECTED
232 database.hook_dir = MAIL_DIR/.notmuch/hooks
235 test_expect_equal_file EXPECTED OUTPUT
237 test_begin_subtest "NOTMUCH_CONFIG_HOOK_DIR: xdg"
238 dir="${HOME}/.config/notmuch/default/hooks"
240 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
242 const char *val = notmuch_config_get (db, NOTMUCH_CONFIG_HOOK_DIR);
243 printf("database.hook_dir = %s\n", val);
246 cat <<'EOF' >EXPECTED
248 database.hook_dir = CWD/home/.config/notmuch/default/hooks
252 test_expect_equal_file EXPECTED OUTPUT
254 test_begin_subtest "notmuch_config_get_values"
255 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
257 notmuch_config_values_t *values;
258 EXPECT0(notmuch_config_set (db, NOTMUCH_CONFIG_NEW_TAGS, "a;b;c"));
259 for (values = notmuch_config_get_values (db, NOTMUCH_CONFIG_NEW_TAGS);
260 notmuch_config_values_valid (values);
261 notmuch_config_values_move_to_next (values))
263 puts (notmuch_config_values_get (values));
267 cat <<'EOF' >EXPECTED
274 test_expect_equal_file EXPECTED OUTPUT
277 test_begin_subtest "notmuch_config_get_values_string"
278 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
280 notmuch_config_values_t *values;
281 EXPECT0(notmuch_database_set_config (db, "test.list", "x;y;z"));
282 for (values = notmuch_config_get_values_string (db, "test.list");
283 notmuch_config_values_valid (values);
284 notmuch_config_values_move_to_next (values))
286 puts (notmuch_config_values_get (values));
290 cat <<'EOF' >EXPECTED
297 test_expect_equal_file EXPECTED OUTPUT
300 test_begin_subtest "notmuch_config_get_values (restart)"
301 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
303 notmuch_config_values_t *values;
304 EXPECT0(notmuch_config_set (db, NOTMUCH_CONFIG_NEW_TAGS, "a;b;c"));
305 for (values = notmuch_config_get_values (db, NOTMUCH_CONFIG_NEW_TAGS);
306 notmuch_config_values_valid (values);
307 notmuch_config_values_move_to_next (values))
309 puts (notmuch_config_values_get (values));
311 for (notmuch_config_values_start (values);
312 notmuch_config_values_valid (values);
313 notmuch_config_values_move_to_next (values))
315 puts (notmuch_config_values_get (values));
319 cat <<'EOF' >EXPECTED
329 test_expect_equal_file EXPECTED OUTPUT
333 test_begin_subtest "notmuch_config_get_values, trailing ;"
334 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
336 notmuch_config_values_t *values;
337 EXPECT0(notmuch_config_set (db, NOTMUCH_CONFIG_NEW_TAGS, "a;b;c"));
338 for (values = notmuch_config_get_values (db, NOTMUCH_CONFIG_NEW_TAGS);
339 notmuch_config_values_valid (values);
340 notmuch_config_values_move_to_next (values))
342 puts (notmuch_config_values_get (values));
346 cat <<'EOF' >EXPECTED
353 test_expect_equal_file EXPECTED OUTPUT
357 test_begin_subtest "get config by key"
358 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
360 printf("before = %s\n", notmuch_config_get (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS));
361 EXPECT0(notmuch_database_set_config (db, "maildir.synchronize_flags", "false"));
362 printf("after = %s\n", notmuch_config_get (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS));
365 cat <<'EOF' >EXPECTED
371 test_expect_equal_file EXPECTED OUTPUT
375 test_begin_subtest "set config by key"
376 notmuch config set test.key1 overridden
377 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
379 printf("before = %s\n", notmuch_config_get (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS));
380 EXPECT0(notmuch_config_set (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS, "false"));
381 printf("after = %s\n", notmuch_config_get (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS));
384 cat <<'EOF' >EXPECTED
390 test_expect_equal_file EXPECTED OUTPUT
393 test_begin_subtest "load default values"
394 export MAILDIR=${MAIL_DIR}
395 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} '' %NULL%
397 notmuch_config_key_t key;
398 for (key = NOTMUCH_CONFIG_FIRST;
399 key < NOTMUCH_CONFIG_LAST;
400 key = (notmuch_config_key_t)(key + 1)) {
401 const char *val = notmuch_config_get (db, key);
402 printf("%02d: '%s'\n", key, val ? val : "NULL" );
407 _libconfig_sanitize < OUTPUT > OUTPUT.clean
409 cat <<'EOF' >EXPECTED
413 02: 'MAIL_DIR/.notmuch/hooks'
414 03: 'MAIL_DIR/.notmuch/backups'
425 test_expect_equal_file EXPECTED OUTPUT.clean
428 test_begin_subtest "override config from \${NOTMUCH_CONFIG}"
429 notmuch config set test.key1 overridden
430 # second argument omitted to make argv[2] == NULL
431 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
433 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
434 printf("test.key1 = %s\n", val);
435 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
436 printf("test.key2 = %s\n", val);
439 notmuch config set test.key1
440 cat <<'EOF' >EXPECTED
442 test.key1 = overridden
443 test.key2 = testvalue2
446 test_expect_equal_file EXPECTED OUTPUT
450 test_begin_subtest "override config from \${HOME}/.notmuch-config"
451 ovconfig=${HOME}/.notmuch-config
452 cp ${NOTMUCH_CONFIG} ${ovconfig}
453 old_NOTMUCH_CONFIG=${NOTMUCH_CONFIG}
455 notmuch --config=${ovconfig} config set test.key1 overridden-home
456 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} %NULL% %NULL%
458 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
459 printf("test.key1 = %s\n", val);
460 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
461 printf("test.key2 = %s\n", val);
465 NOTMUCH_CONFIG=${old_NOTMUCH_CONFIG}
466 cat <<'EOF' >EXPECTED
468 test.key1 = overridden-home
469 test.key2 = testvalue2
472 test_expect_equal_file EXPECTED OUTPUT
476 test_begin_subtest "override config from \${XDG_CONFIG_HOME}/notmuch"
477 ovconfig=${HOME}/.config/notmuch/default/config
478 mkdir -p $(dirname ${ovconfig})
479 cp ${NOTMUCH_CONFIG} ${ovconfig}
480 old_NOTMUCH_CONFIG=${NOTMUCH_CONFIG}
482 notmuch --config=${ovconfig} config set test.key1 overridden-xdg
483 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} %NULL% %NULL%
485 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
486 printf("test.key1 = %s\n", val);
487 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
488 printf("test.key2 = %s\n", val);
492 NOTMUCH_CONFIG=${old_NOTMUCH_CONFIG}
493 cat <<'EOF' >EXPECTED
495 test.key1 = overridden-xdg
496 test.key2 = testvalue2
499 test_expect_equal_file EXPECTED OUTPUT
503 test_begin_subtest "override config from \${XDG_CONFIG_HOME}/notmuch with profile"
504 ovconfig=${HOME}/.config/notmuch/work/config
505 mkdir -p $(dirname ${ovconfig})
506 cp ${NOTMUCH_CONFIG} ${ovconfig}
507 old_NOTMUCH_CONFIG=${NOTMUCH_CONFIG}
509 notmuch --config=${ovconfig} config set test.key1 overridden-xdg-profile
510 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} %NULL% work
512 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
513 printf("test.key1 = %s\n", val);
514 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
515 printf("test.key2 = %s\n", val);
519 NOTMUCH_CONFIG=${old_NOTMUCH_CONFIG}
520 cat <<'EOF' >EXPECTED
522 test.key1 = overridden-xdg-profile
523 test.key2 = testvalue2
526 test_expect_equal_file EXPECTED OUTPUT
530 test_begin_subtest "override config from \${HOME}/.notmuch-config.work (via args)"
531 ovconfig=${HOME}/.notmuch-config.work
532 cp ${NOTMUCH_CONFIG} ${ovconfig}
533 old_NOTMUCH_CONFIG=${NOTMUCH_CONFIG}
535 notmuch --config=${ovconfig} config set test.key1 overridden-profile
536 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} %NULL% work
538 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
539 printf("test.key1 = %s\n", val);
540 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
541 printf("test.key2 = %s\n", val);
545 NOTMUCH_CONFIG=${old_NOTMUCH_CONFIG}
546 cat <<'EOF' >EXPECTED
548 test.key1 = overridden-profile
549 test.key2 = testvalue2
552 test_expect_equal_file EXPECTED OUTPUT
555 test_begin_subtest "no config, fail to open database"
556 old_NOTMUCH_CONFIG=${NOTMUCH_CONFIG}
558 cat c_head - c_tail <<'EOF' | test_C %NULL% '' %NULL%
563 NOTMUCH_CONFIG=${old_NOTMUCH_CONFIG}
564 cat <<'EOF' >EXPECTED
567 error opening database
569 Error: could not locate database.
572 test_expect_equal_file EXPECTED OUTPUT
574 test_begin_subtest "open database from NOTMUCH_DATABASE"
575 old_NOTMUCH_CONFIG=${NOTMUCH_CONFIG}
577 export NOTMUCH_DATABASE=${MAIL_DIR}
578 cat c_head - c_tail <<'EOF' | test_C %NULL% '' %NULL%
580 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
581 printf("test.key1 = %s\n", val);
582 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
583 printf("test.key2 = %s\n", val);
586 export NOTMUCH_CONFIG=${old_NOTMUCH_CONFIG}
587 unset NOTMUCH_DATABASE
588 cat <<'EOF' >EXPECTED
590 test.key1 = testvalue1
591 test.key2 = testvalue2
594 test_expect_equal_file EXPECTED OUTPUT
596 test_begin_subtest "NOTMUCH_DATABASE overrides config"
597 cp notmuch-config notmuch-config.bak
598 notmuch config set database.path /nonexistent
599 export NOTMUCH_DATABASE=${MAIL_DIR}
600 cat c_head - c_tail <<'EOF' | test_C %NULL% '' %NULL%
602 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
603 printf("test.key1 = %s\n", val);
604 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
605 printf("test.key2 = %s\n", val);
608 NOTMUCH_CONFIG=${old_NOTMUCH_CONFIG}
609 unset NOTMUCH_DATABASE
610 cat <<'EOF' >EXPECTED
612 test.key1 = testvalue1
613 test.key2 = testvalue2
616 cp notmuch-config.bak notmuch-config
617 test_expect_equal_file EXPECTED OUTPUT
622 #include <notmuch-test.h>
624 int main (int argc, char** argv)
626 notmuch_database_t *db;
628 notmuch_status_t stat;
631 for (int i = 1; i < argc; i++)
632 if (strcmp (argv[i], "%NULL%") == 0) argv[i] = NULL;
634 stat = notmuch_database_load_config (argv[1],
639 if (stat != NOTMUCH_STATUS_SUCCESS && stat != NOTMUCH_STATUS_NO_CONFIG) {
640 fprintf (stderr, "error opening database\n%d: %s\n%s\n", stat,
641 notmuch_status_to_string (stat), msg ? msg : "");
647 test_begin_subtest "notmuch_database_get_config (ndlc)"
648 cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} %NULL% %NULL%
650 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
651 printf("test.key1 = %s\n", val);
652 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
653 printf("test.key2 = %s\n", val);
656 cat <<'EOF' >EXPECTED
658 test.key1 = testvalue1
659 test.key2 = testvalue2
662 test_expect_equal_file EXPECTED OUTPUT
665 test_begin_subtest "notmuch_database_get_config_list: all pairs (ndlc)"
666 cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
668 notmuch_config_list_t *list;
669 EXPECT0(notmuch_database_get_config_list (db, "", &list));
670 for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
671 printf("%s %s\n", notmuch_config_list_key (list), notmuch_config_list_value(list));
673 notmuch_config_list_destroy (list);
676 cat <<'EOF' >EXPECTED
679 key with spaces value, with, spaces!
685 test_expect_equal_file EXPECTED OUTPUT
687 test_begin_subtest "notmuch_database_get_config_list: one prefix (ndlc)"
688 cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
690 notmuch_config_list_t *list;
691 EXPECT0(notmuch_database_get_config_list (db, "test.key", &list));
692 for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
693 printf("%s %s\n", notmuch_config_list_key (list), notmuch_config_list_value(list));
695 notmuch_config_list_destroy (list);
698 cat <<'EOF' >EXPECTED
704 test_expect_equal_file EXPECTED OUTPUT
706 test_begin_subtest "list by keys (ndlc)"
707 notmuch config set search.exclude_tags "foo;bar;fub"
708 notmuch config set new.ignore "sekrit_junk"
709 cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} %NULL% %NULL%
711 notmuch_config_key_t key;
712 for (key = NOTMUCH_CONFIG_FIRST;
713 key < NOTMUCH_CONFIG_LAST;
714 key = (notmuch_config_key_t)(key + 1)) {
715 const char *val = notmuch_config_get (db, key);
716 printf("%x: '%s'\n", key, val ? val : "NULL" );
720 cat <<'EOF' >EXPECTED
724 2: 'MAIL_DIR/.notmuch/hooks'
725 3: 'MAIL_DIR/.notmuch/backups'
730 8: 'test_suite@notmuchmail.org'
731 9: 'test_suite_other@notmuchmail.org;test_suite@otherdomain.org'
732 a: 'Notmuch Test Suite'
735 test_expect_equal_file EXPECTED OUTPUT
737 test_begin_subtest "load default values (ndlc, nonexistent config)"
738 cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} /nonexistent %NULL%
740 notmuch_config_key_t key;
741 for (key = NOTMUCH_CONFIG_FIRST;
742 key < NOTMUCH_CONFIG_LAST;
743 key = (notmuch_config_key_t)(key + 1)) {
744 const char *val = notmuch_config_get (db, key);
745 printf("%02d: '%s'\n", key, val ? val : "NULL" );
750 _libconfig_sanitize < OUTPUT > OUTPUT.clean
752 cat <<'EOF' >EXPECTED
756 02: 'MAIL_DIR/.notmuch/hooks'
757 03: 'MAIL_DIR/.notmuch/backups'
767 test_expect_equal_file EXPECTED OUTPUT.clean
770 test_begin_subtest "override config from \${HOME}/.notmuch-config (ndlc)"
771 ovconfig=${HOME}/.notmuch-config
772 cp ${NOTMUCH_CONFIG} ${ovconfig}
773 old_NOTMUCH_CONFIG=${NOTMUCH_CONFIG}
775 notmuch --config=${ovconfig} config set test.key1 overridden-home
776 cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} %NULL% %NULL%
778 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
779 printf("test.key1 = %s\n", val);
780 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
781 printf("test.key2 = %s\n", val);
785 NOTMUCH_CONFIG=${old_NOTMUCH_CONFIG}
786 cat <<'EOF' >EXPECTED
788 test.key1 = overridden-home
789 test.key2 = testvalue2
792 test_expect_equal_file EXPECTED OUTPUT
795 test_begin_subtest "notmuch_config_get_pairs: prefix (ndlc)"
796 cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
798 notmuch_config_pairs_t *list;
799 for (list = notmuch_config_get_pairs (db, "user.");
800 notmuch_config_pairs_valid (list);
801 notmuch_config_pairs_move_to_next (list)) {
802 printf("%s %s\n", notmuch_config_pairs_key (list), notmuch_config_pairs_value(list));
804 notmuch_config_pairs_destroy (list);
807 cat <<'EOF' >EXPECTED
809 user.name Notmuch Test Suite
810 user.other_email test_suite_other@notmuchmail.org;test_suite@otherdomain.org
811 user.primary_email test_suite@notmuchmail.org
814 test_expect_equal_file EXPECTED OUTPUT
816 test_begin_subtest "notmuch_config_get_pairs: all pairs (ndlc)"
817 cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
819 notmuch_config_pairs_t *list;
820 for (list = notmuch_config_get_pairs (db, "");
821 notmuch_config_pairs_valid (list);
822 notmuch_config_pairs_move_to_next (list)) {
823 printf("%s %s\n", notmuch_config_pairs_key (list), notmuch_config_pairs_value(list));
825 notmuch_config_pairs_destroy (list);
828 cat <<'EOF' >EXPECTED
831 database.backup_dir MAIL_DIR/.notmuch/backups
832 database.hook_dir MAIL_DIR/.notmuch/hooks
833 database.mail_root MAIL_DIR
834 database.path MAIL_DIR
835 key with spaces value, with, spaces!
836 maildir.synchronize_flags true
837 new.ignore sekrit_junk
838 new.tags unread;inbox
839 search.exclude_tags foo;bar;fub
842 user.name Notmuch Test Suite
843 user.other_email test_suite_other@notmuchmail.org;test_suite@otherdomain.org
844 user.primary_email test_suite@notmuchmail.org
848 test_expect_equal_file EXPECTED OUTPUT