#!/usr/bin/env bash test_description='"notmuch tag"' . ./test-lib.sh add_message '[subject]=One' add_message '[subject]=Two' test_begin_subtest "Adding tags" notmuch tag +tag1 +tag2 +tag3 \* output=$(notmuch search \* | notmuch_search_sanitize) test_expect_equal "$output" "\ thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; One (inbox tag1 tag2 tag3 unread) thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Two (inbox tag1 tag2 tag3 unread)" test_begin_subtest "Removing tags" notmuch tag -tag1 -tag2 \* output=$(notmuch search \* | notmuch_search_sanitize) test_expect_equal "$output" "\ thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; One (inbox tag3 unread) thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Two (inbox tag3 unread)" test_expect_code 1 "No tag operations" 'notmuch tag One' test_expect_code 1 "No query" 'notmuch tag +tag2' test_begin_subtest "Redundant tagging" notmuch tag +tag1 -tag3 One notmuch tag +tag1 -tag3 \* output=$(notmuch search \* | notmuch_search_sanitize) test_expect_equal "$output" "\ thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; One (inbox tag1 unread) thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Two (inbox tag1 unread)" test_begin_subtest "Special characters in tags" notmuch tag +':" ' \* notmuch tag -':" ' Two output=$(notmuch search \* | notmuch_search_sanitize) test_expect_equal "$output" "\ thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; One (:\" inbox tag1 unread) thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Two (inbox tag1 unread)" test_begin_subtest "Tagging order" notmuch tag +tag4 -tag4 One notmuch tag -tag4 +tag4 Two output=$(notmuch search \* | notmuch_search_sanitize) test_expect_equal "$output" "\ thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; One (:\" inbox tag1 unread) thread:XXX 2001-01-05 [1/1] Notmuch Test Suite; Two (inbox tag1 tag4 unread)" test_begin_subtest "--batch" notmuch tag --batch < batch.in < batch.expected < backup.tags notmuch tag --input=batch.in notmuch search \* | notmuch_search_sanitize > OUTPUT notmuch restore --format=batch-tag < backup.tags test_expect_equal_file batch.expected OUTPUT test_begin_subtest "--batch --input" notmuch dump --format=batch-tag > backup.tags notmuch tag --batch --input=batch.in notmuch search \* | notmuch_search_sanitize > OUTPUT notmuch restore --format=batch-tag < backup.tags test_expect_equal_file batch.expected OUTPUT test_begin_subtest "--batch, blank lines and comments" notmuch dump | sort > EXPECTED notmuch tag --batch < OUTPUT test_expect_equal_file EXPECTED OUTPUT test_begin_subtest '--batch: checking error messages' notmuch dump --format=batch-tag > BACKUP notmuch tag --batch <OUTPUT # the next line has a space # this line has no tag operations, but this is permitted in batch format. a +0 +a +b # trailing whitespace +a +b +c +d -- # this is a harmless comment, do not yell about it. # the previous line was blank; also no yelling please +%zz -- id:whatever +e +f id:%yy # the next non-comment line should report an an empty tag error for # batch tagging, but not for restore + +e -- id:foo +- -- id:foo EOF cat < EXPECTED Warning: no query string [+0] Warning: no query string [+a +b] Warning: missing query string [+a +b ] Warning: no query string after -- [+c +d --] Warning: hex decoding of tag %zz failed [+%zz -- id:whatever] Warning: hex decoding of token '%yy' failed [+e +f id:%yy] Warning: empty tag forbidden [+ +e -- id:foo] Warning: tag starting with '-' forbidden [+- -- id:foo] EOF notmuch restore --format=batch-tag < BACKUP test_expect_equal_file EXPECTED OUTPUT test_expect_code 1 "Empty tag names" 'notmuch tag + One' test_expect_code 1 "Tag name beginning with -" 'notmuch tag +- One' test_done