diff --git a/Makefile.am b/Makefile.am index 064df045809da3a50c5915660ed673a0b378d22f..02835571f3e09e736a52ba88c1719e0c1a2f0f9e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -56,6 +56,8 @@ test_cases = \ tests/extensions/include/errors.svtest \ tests/extensions/include/variables.svtest \ tests/extensions/include/once.svtest \ + tests/extensions/include/twice.svtest \ + tests/extensions/include/rfc.svtest \ tests/extensions/imap4flags/basic.svtest \ tests/extensions/imap4flags/hasflag.svtest \ tests/extensions/imap4flags/errors.svtest \ diff --git a/tests/extensions/include/included-global/rfc-ex1-spam_tests.sieve b/tests/extensions/include/included-global/rfc-ex1-spam_tests.sieve new file mode 100644 index 0000000000000000000000000000000000000000..340ceaf8c15bd443d4f18be647b661aca72a8d02 --- /dev/null +++ b/tests/extensions/include/included-global/rfc-ex1-spam_tests.sieve @@ -0,0 +1,7 @@ +require ["reject"]; + +if anyof (header :contains "Subject" "$$", + header :contains "Subject" "Make money") +{ + reject "Not wanted"; +} diff --git a/tests/extensions/include/included/rfc-ex1-always_allow.sieve b/tests/extensions/include/included/rfc-ex1-always_allow.sieve new file mode 100644 index 0000000000000000000000000000000000000000..dcb3413afcc3be3c422b7cef36ffd4cd8e119c21 --- /dev/null +++ b/tests/extensions/include/included/rfc-ex1-always_allow.sieve @@ -0,0 +1,8 @@ +if header :is "From" "boss@example.com" +{ + keep; +} +elsif header :is "From" "ceo@example.com" +{ + keep; +} diff --git a/tests/extensions/include/included/rfc-ex1-mailing_lists.sieve b/tests/extensions/include/included/rfc-ex1-mailing_lists.sieve new file mode 100644 index 0000000000000000000000000000000000000000..de148a19481134414a37ee75811b11cf6095f154 --- /dev/null +++ b/tests/extensions/include/included/rfc-ex1-mailing_lists.sieve @@ -0,0 +1,10 @@ +require ["fileinto"]; + +if header :is "Sender" "owner-ietf-mta-filters@imc.org" +{ + fileinto "lists.sieve"; +} +elsif header :is "Sender" "owner-ietf-imapext@imc.org" +{ + fileinto "lists.imapext"; +} diff --git a/tests/extensions/include/included/rfc-ex1-spam_tests.sieve b/tests/extensions/include/included/rfc-ex1-spam_tests.sieve new file mode 100644 index 0000000000000000000000000000000000000000..7916064efa6fed05938b063e9bc0c6fecb8cc70a --- /dev/null +++ b/tests/extensions/include/included/rfc-ex1-spam_tests.sieve @@ -0,0 +1,10 @@ +require ["reject"]; + +if header :contains "Subject" "XXXX" +{ + reject "Not wanted"; +} +elsif header :is "From" "money@example.com" +{ + reject "Not wanted"; +} diff --git a/tests/extensions/include/included/rfc-ex2-spam_filter_script.sieve b/tests/extensions/include/included/rfc-ex2-spam_filter_script.sieve new file mode 100644 index 0000000000000000000000000000000000000000..01ab984631a18614ae351cd87a66fcf836db1ac6 --- /dev/null +++ b/tests/extensions/include/included/rfc-ex2-spam_filter_script.sieve @@ -0,0 +1,8 @@ +require ["variables", "include"]; +global ["test", "test_mailbox"]; + +if header :contains "Subject" "${test}" +{ + set "test_mailbox" "spam-${test}"; +} + diff --git a/tests/extensions/include/included/twice-1.sieve b/tests/extensions/include/included/twice-1.sieve new file mode 100644 index 0000000000000000000000000000000000000000..a770a3b33e71ee4cc7c72f3902b41bd3704a3c5c --- /dev/null +++ b/tests/extensions/include/included/twice-1.sieve @@ -0,0 +1,7 @@ +require "include"; +require "variables"; + +global "result"; + +set "result" "${result} TWO"; + diff --git a/tests/extensions/include/included/twice-2.sieve b/tests/extensions/include/included/twice-2.sieve new file mode 100644 index 0000000000000000000000000000000000000000..cc907b01384d71bfc1e60665a2786f63650feba1 --- /dev/null +++ b/tests/extensions/include/included/twice-2.sieve @@ -0,0 +1,8 @@ +require "include"; +require "variables"; + +global "result"; + +set "result" "${result} THREE"; + +include "twice-1.sieve"; diff --git a/tests/extensions/include/rfc-ex1-default.sieve b/tests/extensions/include/rfc-ex1-default.sieve new file mode 100644 index 0000000000000000000000000000000000000000..5a8cb524d975e9742ac8ba7c9ac340b4c5944d86 --- /dev/null +++ b/tests/extensions/include/rfc-ex1-default.sieve @@ -0,0 +1,6 @@ +require ["include"]; + +include :personal "rfc-ex1-always_allow"; +include :global "rfc-ex1-spam_tests"; +include :personal "rfc-ex1-spam_tests"; +include :personal "rfc-ex1-mailing_lists"; diff --git a/tests/extensions/include/rfc-ex2-default.sieve b/tests/extensions/include/rfc-ex2-default.sieve new file mode 100644 index 0000000000000000000000000000000000000000..7124e03afcc6188111da18d5693a9adc4b4df7d6 --- /dev/null +++ b/tests/extensions/include/rfc-ex2-default.sieve @@ -0,0 +1,21 @@ +require ["variables", "include", "relational", "fileinto"]; +global "test"; +global "test-mailbox"; + +# The included script may contain repetitive code that is +# effectively a subroutine that can be factored out. +set "test" "$$"; +include "rfc-ex2-spam_filter_script"; + +set "test" "Make money"; +include "rfc-ex2-spam_filter_script"; + +# Message will be filed according to the test that matched last. +if string :count "eq" "${test_mailbox}" "1" +{ + fileinto "INBOX${test_mailbox}"; + stop; +} + +# If nothing matched, the message is implicitly kept. + diff --git a/tests/extensions/include/rfc.svtest b/tests/extensions/include/rfc.svtest new file mode 100644 index 0000000000000000000000000000000000000000..00908acd20a412c1dc3cbd4cbdb1fd0154dc7880 --- /dev/null +++ b/tests/extensions/include/rfc.svtest @@ -0,0 +1,13 @@ +require "vnd.dovecot.testsuite"; + +test "RFC example 1" { + if not test_script_compile "rfc-ex1-default.sieve" { + test_fail "failed to compile sieve script"; + } +} + +test "RFC example 2" { + if not test_script_compile "rfc-ex2-default.sieve" { + test_fail "failed to compile sieve script"; + } +} diff --git a/tests/extensions/include/twice.svtest b/tests/extensions/include/twice.svtest new file mode 100644 index 0000000000000000000000000000000000000000..5cd5da21463ee8e4ae18ee0e2759367067b4462d --- /dev/null +++ b/tests/extensions/include/twice.svtest @@ -0,0 +1,20 @@ +require "vnd.dovecot.testsuite"; +require "include"; +require "variables"; + +global "result"; + +set "result" "ONE"; + +test "Twice included" { + include "twice-1"; + include "twice-2"; + + if string "${result}" "ONE TWO THREE" { + test_fail "duplicate include failed"; + } + + if not string "${result}" "ONE TWO THREE TWO" { + test_fail "unexpected result: ${result}"; + } +}