Convert managesieve test scripts to PHPUnit, add them to the suite
12 files deleted
13 files added
2 files modified
New file |
| | |
| | | <?php |
| | | |
| | | class Parser extends PHPUnit_Framework_TestCase |
| | | { |
| | | |
| | | function setUp() |
| | | { |
| | | include_once dirname(__FILE__) . '/../lib/rcube_sieve_script.php'; |
| | | } |
| | | |
| | | /** |
| | | * Sieve script parsing |
| | | * |
| | | * @dataProvider data_parser |
| | | */ |
| | | function test_parser($input, $output, $message) |
| | | { |
| | | $script = new rcube_sieve_script($input); |
| | | $result = $script->as_text(); |
| | | |
| | | $this->assertEquals(trim($result), trim($output), $message); |
| | | } |
| | | |
| | | /** |
| | | * Data provider for test_parser() |
| | | */ |
| | | function data_parser() |
| | | { |
| | | $dir_path = realpath(dirname(__FILE__) . '/src'); |
| | | $dir = opendir($dir_path); |
| | | $result = array(); |
| | | |
| | | while ($file = readdir($dir)) { |
| | | if (preg_match('/^[a-z_]+$/', $file)) { |
| | | $input = file_get_contents($dir_path . '/' . $file); |
| | | |
| | | if (file_exists($dir_path . '/' . $file . '.out')) { |
| | | $output = file_get_contents($dir_path . '/' . $file . '.out'); |
| | | } |
| | | else { |
| | | $output = $input; |
| | | } |
| | | |
| | | $result[] = array( |
| | | 'input' => $input, |
| | | 'output' => $output, |
| | | 'message' => "Error in parsing '$file' file", |
| | | ); |
| | | } |
| | | } |
| | | |
| | | return $result; |
| | | } |
| | | } |
New file |
| | |
| | | <?php |
| | | |
| | | class Tokenizer extends PHPUnit_Framework_TestCase |
| | | { |
| | | |
| | | function setUp() |
| | | { |
| | | include_once dirname(__FILE__) . '/../lib/rcube_sieve_script.php'; |
| | | } |
| | | |
| | | function data_tokenizer() |
| | | { |
| | | return array( |
| | | array(1, "text: #test\nThis is test ; message;\nMulti line\n.\n;\n", '"This is test ; message;\nMulti line"'), |
| | | array(0, '["test1","test2"]', '[["test1","test2"]]'), |
| | | array(1, '["test"]', '["test"]'), |
| | | array(1, '"te\\"st"', '"te\\"st"'), |
| | | array(0, 'test #comment', '["test"]'), |
| | | array(0, "text:\ntest\n.\ntext:\ntest\n.\n", '["test","test"]'), |
| | | array(1, '"\\a\\\\\\"a"', '"a\\\\\\"a"'), |
| | | ); |
| | | } |
| | | |
| | | /** |
| | | * @dataProvider data_tokenizer |
| | | */ |
| | | function test_tokenizer($num, $input, $output) |
| | | { |
| | | $res = json_encode(rcube_sieve_script::tokenize($input, $num)); |
| | | |
| | | $this->assertEquals(trim($res), trim($output)); |
| | | } |
| | | } |
New file |
| | |
| | | require ["fileinto","reject","envelope"]; |
| | | # rule:[spam] |
| | | if anyof (header :contains "X-DSPAM-Result" "Spam") |
| | | { |
| | | fileinto "Spam"; |
| | | stop; |
| | | } |
| | | # rule:[test1] |
| | | if anyof (header :comparator "i;ascii-casemap" :contains ["From","To"] "test@domain.tld") |
| | | { |
| | | discard; |
| | | stop; |
| | | } |
| | | # rule:[test2] |
| | | if anyof (not header :comparator "i;octet" :contains ["Subject"] "[test]", header :contains "Subject" "[test2]") |
| | | { |
| | | fileinto "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:[false] |
| | | if false # size :over 5000K |
| | | { |
| | | stop; /* rule disabled */ |
| | | } |
| | | # rule:[true] |
| | | if true |
| | | { |
| | | stop; |
| | | } |
| | | fileinto "Test"; |
| | | # rule:[address test] |
| | | if address :all :is "From" "nagios@domain.tld" |
| | | { |
| | | fileinto "domain.tld"; |
| | | stop; |
| | | } |
| | | # rule:[envelope test] |
| | | if envelope :domain :is "From" "domain.tld" |
| | | { |
| | | fileinto "domain.tld"; |
| | | stop; |
| | | } |
New file |
| | |
| | | require ["fileinto","reject","envelope"]; |
| | | # 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 :comparator "i;octet" :contains "Subject" "[test]", header :contains "Subject" "[test2]") |
| | | { |
| | | fileinto "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:[false] |
| | | if false # size :over 5000K |
| | | { |
| | | stop; |
| | | } |
| | | # rule:[true] |
| | | if true |
| | | { |
| | | stop; |
| | | } |
| | | fileinto "Test"; |
| | | # rule:[address test] |
| | | if address :all :is "From" "nagios@domain.tld" |
| | | { |
| | | fileinto "domain.tld"; |
| | | stop; |
| | | } |
| | | # rule:[envelope test] |
| | | if envelope :domain :is "From" "domain.tld" |
| | | { |
| | | fileinto "domain.tld"; |
| | | stop; |
| | | } |
New file |
| | |
| | | require ["body","fileinto"]; |
| | | if body :raw :contains "MAKE MONEY FAST" |
| | | { |
| | | stop; |
| | | } |
| | | if body :content "text" :contains ["missile","coordinates"] |
| | | { |
| | | fileinto "secrets"; |
| | | } |
| | | if body :content "audio/mp3" :contains "" |
| | | { |
| | | fileinto "jukebox"; |
| | | } |
| | | if body :text :contains "project schedule" |
| | | { |
| | | fileinto "project/schedule"; |
| | | } |
New file |
| | |
| | | require ["imap4flags"]; |
| | | # rule:[imapflags] |
| | | if header :matches "Subject" "^Test$" |
| | | { |
| | | setflag "\\Seen"; |
| | | addflag ["\\Answered","\\Deleted"]; |
| | | } |
New file |
| | |
| | | require ["include"]; |
| | | include "script.sieve"; |
| | | # rule:[two] |
| | | if true |
| | | { |
| | | include :optional "second.sieve"; |
| | | } |
New file |
| | |
| | | # EDITOR Roundcube |
| | | # EDITOR_VERSION 123 |
New file |
| | |
| | | # this is a comment |
| | | # and the second line |
| | | |
| | | require ["variables"]; |
| | | set "b" "c"; |
New file |
| | |
| | | require ["relational","comparator-i;ascii-numeric"]; |
| | | # rule:[redirect] |
| | | if header :value "ge" :comparator "i;ascii-numeric" "X-Spam-score" "14" |
| | | { |
| | | redirect "test@test.tld"; |
| | | } |
New file |
| | |
| | | require ["envelope","subaddress","fileinto"]; |
| | | if envelope :user "To" "postmaster" |
| | | { |
| | | fileinto "postmaster"; |
| | | stop; |
| | | } |
| | | if envelope :detail :is "To" "mta-filters" |
| | | { |
| | | fileinto "mta-filters"; |
| | | stop; |
| | | } |
New file |
| | |
| | | require ["vacation"]; |
| | | # rule:[test-vacation] |
| | | if header :contains "Subject" "vacation" |
| | | { |
| | | vacation :days 1 text: |
| | | # test |
| | | test test /* test */ |
| | | test |
| | | . |
| | | ; |
| | | stop; |
| | | } |
New file |
| | |
| | | require ["variables"]; |
| | | set "honorific" "Mr"; |
| | | set "vacation" text: |
| | | Dear ${HONORIFIC} ${last_name}, |
| | | I am out, please leave a message after the meep. |
| | | . |
| | | ; |
| | | set :length "b" "${a}"; |
| | | set :lower "b" "${a}"; |
| | | set :upperfirst "b" "${a}"; |
| | | set :upperfirst :lower "b" "${a}"; |
| | | set :quotewildcard "b" "Rock*"; |
| | |
| | | class HtmlToText extends PHPUnit_Framework_TestCase |
| | | { |
| | | |
| | | function data() |
| | | function data_html2text() |
| | | { |
| | | return array( |
| | | 0 => array( |
| | |
| | | } |
| | | |
| | | /** |
| | | * @dataProvider data |
| | | * @dataProvider data_html2text |
| | | */ |
| | | function test_html2text($title, $in, $out) |
| | | { |
| | |
| | | <file>HtmlToText.php</file> |
| | | <file>MailFunc.php</file> |
| | | </testsuite> |
| | | <testsuite name="managesieve"> |
| | | <file>./../plugins/managesieve/tests/Parser.php</file> |
| | | <file>./../plugins/managesieve/tests/Tokenizer.php</file> |
| | | </testsuite> |
| | | </testsuites> |
| | | </phpunit> |