diff options
Diffstat (limited to 'pigeonhole/tests/extensions/imap4flags/basic.svtest')
-rw-r--r-- | pigeonhole/tests/extensions/imap4flags/basic.svtest | 332 |
1 files changed, 332 insertions, 0 deletions
diff --git a/pigeonhole/tests/extensions/imap4flags/basic.svtest b/pigeonhole/tests/extensions/imap4flags/basic.svtest new file mode 100644 index 0000000..d6af444 --- /dev/null +++ b/pigeonhole/tests/extensions/imap4flags/basic.svtest @@ -0,0 +1,332 @@ +require "vnd.dovecot.testsuite"; + +require "imap4flags"; +require "relational"; +require "variables"; +require "comparator-i;ascii-numeric"; + +/* + * Basic functionality tests + */ + +test "Hasflag empty" { + if hasflag "\\Seen" { + test_fail "hasflag sees initial \\seen flag were there should be none"; + } + if hasflag "\\draft" { + test_fail "hasflag sees initial \\draft flag were there should be none"; + } + if hasflag "\\recent" { + test_fail "hasflag sees initial \\recent flag were there should be none"; + } + if hasflag "\\flagged" { + test_fail "hasflag sees initial \\flagged flag were there should be none"; + } + if hasflag "\\answered" { + test_fail "hasflag sees initial \\answered flag were there should be none"; + } + if hasflag "\\deleted" { + test_fail "hasflag sees initial \\deleted flag were there should be none"; + } + + if hasflag :comparator "i;ascii-numeric" :count "ge" "1" { + test_fail "hasflag sees initial flags were there should be none"; + } +} + +test "Setflag; Hasflag one" { + setflag "\\seen"; + + if not hasflag "\\Seen" { + test_fail "flag not set of hasflag fails to see it"; + } + + if not hasflag :comparator "i;ascii-numeric" :count "eq" "1" { + test_fail "flag not set of hasflag fails to see it"; + } + + if hasflag "$Nonsense" { + test_fail "hasflag sees other flag that the one set"; + } +} + +test "Hasflag; duplicates" { + set "Flags" "A B C D E F A B C D E F"; + + if hasflag :comparator "i;ascii-numeric" :count "gt" "Flags" "6" { + test_fail "hasflag must ignore duplicates"; + } + + if not hasflag :comparator "i;ascii-numeric" :count "eq" "Flags" "6" { + test_fail "hasflag :count gives strange results"; + } +} + +test "Flag operations" { + setflag "A"; + + if not hasflag "A" { + test_fail "hasflag misses set flag"; + } + + if hasflag :comparator "i;ascii-numeric" :count "gt" "1" { + test_fail "hasflag sees more than one flag"; + } + + addflag "B"; + + if not hasflag "B" { + test_fail "flag \"B\" not added"; + } + + if not hasflag "A" { + test_fail "flag \"A\" not retained"; + } + + if hasflag :comparator "i;ascii-numeric" :count "gt" "2" { + test_fail "hasflag sees more than two flags"; + } + + addflag ["C", "D", "E F"]; + + if not hasflag :comparator "i;ascii-numeric" :count "eq" "6" { + test_fail "hasflag sees more than two flags"; + } + + removeflag ["D"]; + + if not hasflag :comparator "i;ascii-numeric" :count "eq" "5" { + test_fail "hasflag sees more than two flags"; + } + + if hasflag "D" { + test_fail "removed flag still present"; + } + + set "var" "G"; + addflag "${var}"; + + if not hasflag "G" { + test_fail "flag \"G\" not added"; + } + + if not hasflag "A" { + test_fail "flag \"A\" not retained"; + } + + if not hasflag :comparator "i;ascii-numeric" :count "eq" "6" { + test_fail "hasflag sees something other than six flags"; + } +} + +test "Variable flag operations" { + setflag "frop" "A"; + + if not hasflag "frop" "A" { + test_fail "hasflag misses set flag"; + } + + if hasflag :comparator "i;ascii-numeric" :count "gt" "frop" "1" { + test_fail "hasflag sees more than one flag"; + } + + addflag "frop" "B"; + + if not hasflag "frop" "B" { + test_fail "flag \"B\" not added"; + } + + if not hasflag "frop" "A" { + test_fail "flag \"A\" not retained"; + } + + if hasflag :comparator "i;ascii-numeric" :count "gt" "frop" "2" { + test_fail "hasflag sees more than two flags"; + } + + addflag "frop" ["C", "D", "E F"]; + + if not hasflag :comparator "i;ascii-numeric" :count "eq" "frop" "6" { + test_fail "hasflag sees something other than six flags"; + } + + removeflag "frop" ["D"]; + + if not hasflag :comparator "i;ascii-numeric" :count "eq" "frop" "5" { + test_fail "hasflag sees something other than five flags"; + } + + if hasflag "frop" "D" { + test_fail "removed flag still present"; + } + + set "var" "G"; + addflag "frop" "${var}"; + + if not hasflag "frop" "G" { + test_fail "flag \"G\" not added"; + } + + if not hasflag "frop" "A" { + test_fail "flag \"A\" not retained"; + } + + if not hasflag :comparator "i;ascii-numeric" :count "eq" "frop" "6" { + test_fail "hasflag sees something other than six flags"; + } +} + +test "Setflag; string list" { + setflag ["A B", "C D"]; + + if not hasflag "A" { + test_fail "hasflag misses A flag"; + } + + if not hasflag "B" { + test_fail "hasflag misses B flag"; + } + + if not hasflag "C" { + test_fail "hasflag misses C flag"; + } + + if not hasflag "D" { + test_fail "hasflag misses D flag"; + } + + if hasflag :comparator "i;ascii-numeric" :count "ne" "4" { + test_fail "hasflag sees incorrect number of flags"; + } +} + +test "Removal: one" { + setflag "\\seen"; + + if not hasflag "\\seen" { + test_fail "hasflag misses set flag"; + } + + removeflag "\\seen"; + + if hasflag "\\seen" { + test_fail "flag not removed"; + } + + if not hasflag :comparator "i;ascii-numeric" :count "eq" "0" { + test_fail "flags are still set"; + } +} + +test "Removal: first" { + setflag "$frop \\seen"; + + if not allof ( hasflag "\\seen", hasflag "$frop" ) { + test_fail "hasflag misses set flags"; + } + + removeflag "$frop"; + + if not hasflag "\\seen" { + test_fail "wrong flag removed"; + } + + if hasflag "$frop" { + test_fail "flag not removed"; + } + + if not hasflag :comparator "i;ascii-numeric" :count "eq" "1" { + test_fail "more than one flag remains set"; + } +} + +test "Removal: last" { + setflag "\\seen $friep"; + + if not allof ( hasflag "\\seen", hasflag "$friep" ) { + test_fail "hasflag misses set flags"; + } + + removeflag "$friep"; + + if not hasflag "\\seen" { + test_fail "wrong flag removed"; + } + + if hasflag "$friep" { + test_fail "flag not removed"; + } + + if not hasflag :comparator "i;ascii-numeric" :count "eq" "1" { + test_fail "more than one flag remains set"; + } +} + +test "Removal: middle" { + setflag "\\seen $friep \\flagged"; + + if not allof ( hasflag "\\flagged", hasflag "\\seen", hasflag "$friep" ) { + test_fail "hasflag misses set flags"; + } + + removeflag "$friep"; + + if not allof ( hasflag "\\seen", hasflag "\\flagged" ) { + test_fail "wrong flag removed"; + } + + if hasflag "$friep" { + test_fail "flag not removed"; + } + + if not hasflag :comparator "i;ascii-numeric" :count "eq" "2" { + test_fail "more than two flags remain set"; + } +} + +test "Removal: duplicates" { + setflag "\\seen $friep $friep \\flagged $friep"; + + if not allof ( hasflag "\\flagged", hasflag "\\seen", hasflag "$friep" ) { + test_fail "hasflag misses set flags"; + } + + removeflag "$friep"; + + if not allof ( hasflag "\\seen", hasflag "\\flagged" ) { + test_fail "wrong flag removed"; + } + + if hasflag "$friep" { + test_fail "flag not removed"; + } + + if not hasflag :comparator "i;ascii-numeric" :count "eq" "2" { + test_fail "more than two flags remain set"; + } +} + +test "Removal: whitespace" { + setflag " \\seen $friep $friep \\flagged $friep "; + + if not allof ( hasflag "\\flagged", hasflag "\\seen", hasflag "$friep" ) { + test_fail "hasflag misses set flags"; + } + + removeflag "$friep"; + + if not allof ( hasflag "\\seen", hasflag "\\flagged" ) { + test_fail "wrong flag removed"; + } + + if hasflag "$friep" { + test_fail "flag not removed"; + } + + if not hasflag :comparator "i;ascii-numeric" :count "eq" "2" { + test_fail "more than two flags remain set"; + } +} + + + |