summaryrefslogtreecommitdiff
path: root/plugins/managesieve/tests
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/managesieve/tests')
-rw-r--r--plugins/managesieve/tests/Makefile7
-rw-r--r--plugins/managesieve/tests/parser.phpt103
-rw-r--r--plugins/managesieve/tests/tokenize.phpt66
3 files changed, 176 insertions, 0 deletions
diff --git a/plugins/managesieve/tests/Makefile b/plugins/managesieve/tests/Makefile
new file mode 100644
index 000000000..072be2f2c
--- /dev/null
+++ b/plugins/managesieve/tests/Makefile
@@ -0,0 +1,7 @@
+
+clean:
+ rm -f *.log *.php *.diff *.exp *.out
+
+
+test:
+ pear run-tests *.phpt
diff --git a/plugins/managesieve/tests/parser.phpt b/plugins/managesieve/tests/parser.phpt
new file mode 100644
index 000000000..a3b820d45
--- /dev/null
+++ b/plugins/managesieve/tests/parser.phpt
@@ -0,0 +1,103 @@
+--TEST--
+Main test of script parser
+--SKIPIF--
+--FILE--
+<?php
+include('../lib/rcube_sieve.php');
+
+$txt = '
+require ["fileinto","vacation","reject","relational","comparator-i;ascii-numeric"];
+# rule:[spam]
+if anyof (header :contains "X-DSPAM-Result" "Spam")
+{
+ fileinto "Spam";
+ stop;
+}
+# rule:[test1]
+if anyof (header :contains ["From","To"] "test@domain.tld")
+{
+ discard;
+ stop;
+}
+# rule:[test2]
+if anyof (not header :contains ["Subject"] "[test]", header :contains "Subject" "[test2]")
+{
+ fileinto "test";
+ stop;
+}
+# rule:[test-vacation]
+if anyof (header :contains "Subject" "vacation")
+{
+ vacation :days 1 text:
+# test
+test test /* test */
+test
+.
+;
+ stop;
+}
+# rule:[comments]
+if anyof (true) /* comment
+ * "comment" #comment */ {
+ /* comment */ stop;
+# comment
+}
+# rule:[reject]
+if size :over 5000K {
+ reject "Message over 5MB size limit. Please contact me before sending this.";
+}
+# rule:[redirect]
+if header :value "ge" :comparator "i;ascii-numeric"
+ ["X-Spam-score"] ["14"] {redirect "test@test.tld";}
+';
+
+$s = new rcube_sieve_script($txt);
+echo $s->as_text();
+
+?>
+--EXPECT--
+require ["fileinto","vacation","reject","relational","comparator-i;ascii-numeric"];
+# rule:[spam]
+if header :contains "X-DSPAM-Result" "Spam"
+{
+ fileinto "Spam";
+ stop;
+}
+# rule:[test1]
+if header :contains ["From","To"] "test@domain.tld"
+{
+ discard;
+ stop;
+}
+# rule:[test2]
+if anyof (not header :contains "Subject" "[test]", header :contains "Subject" "[test2]")
+{
+ fileinto "test";
+ stop;
+}
+# rule:[test-vacation]
+if header :contains "Subject" "vacation"
+{
+ vacation :days 1 text:
+# test
+test test /* test */
+test
+.
+;
+ stop;
+}
+# rule:[comments]
+if true
+{
+ stop;
+}
+# rule:[reject]
+if size :over 5000K
+{
+ reject "Message over 5MB size limit. Please contact me before sending this.";
+}
+# rule:[redirect]
+if header :value "ge" :comparator "i;ascii-numeric" "X-Spam-score" "14"
+{
+ redirect "test@test.tld";
+}
diff --git a/plugins/managesieve/tests/tokenize.phpt b/plugins/managesieve/tests/tokenize.phpt
new file mode 100644
index 000000000..d1f68acea
--- /dev/null
+++ b/plugins/managesieve/tests/tokenize.phpt
@@ -0,0 +1,66 @@
+--TEST--
+Script parsing: tokenizer
+--SKIPIF--
+--FILE--
+<?php
+include('../lib/rcube_sieve.php');
+
+$txt[1] = array(1, 'text: #test
+This is test ; message;
+Multi line
+.
+;
+');
+$txt[2] = array(0, '["test1","test2"]');
+$txt[3] = array(1, '["test"]');
+$txt[4] = array(1, '"te\\"st"');
+$txt[5] = array(0, 'test #comment');
+$txt[6] = array(0, 'text:
+test
+.
+text:
+test
+.
+');
+$txt[7] = array(1, '"\\a\\\\\\"a"');
+
+foreach ($txt as $idx => $t) {
+ echo "[$idx]---------------\n";
+ var_dump(rcube_sieve_script::tokenize($t[1], $t[0]));
+}
+?>
+--EXPECT--
+[1]---------------
+string(34) "This is test ; message;
+Multi line"
+[2]---------------
+array(1) {
+ [0]=>
+ array(2) {
+ [0]=>
+ string(5) "test1"
+ [1]=>
+ string(5) "test2"
+ }
+}
+[3]---------------
+array(1) {
+ [0]=>
+ string(4) "test"
+}
+[4]---------------
+string(5) "te"st"
+[5]---------------
+array(1) {
+ [0]=>
+ string(4) "test"
+}
+[6]---------------
+array(2) {
+ [0]=>
+ string(4) "test"
+ [1]=>
+ string(4) "test"
+}
+[7]---------------
+string(4) "a\"a"