require "vnd.stalwart.testsuite"; /* * ## RFC 5228, Section 3.1. Control if (page 21) ## */ test_set "message" text: From: stephan@example.org To: test@dovecot.example.net Cc: friep@example.com Subject: Test Test! . ; /* * Basic functionality */ /* "The semantics are similar to those of any of the many other * programming languages these control structures appear in. When the * interpreter sees an "if", it evaluates the test associated with it. * If the test is true, it executes the block associated with it. * * If the test of the "if" is false, it evaluates the test of the first * "elsif" (if any). If the test of "elsif" is true, it runs the * elsif's block. An elsif may be followed by an elsif, in which case, * the interpreter repeats this process until it runs out of elsifs. * * When the interpreter runs out of elsifs, there may be an "else" case. * If there is, and none of the if or elsif tests were true, the * interpreter runs the else's block. * * This provides a way of performing exactly one of the blocks in the * chain. * " */ /* * TEST: Basic functionality: if true/false */ test "Basic functionality: if true/false" { /* Static */ if true { /* Correct */ } else { test_fail "executed wrong alternative for static true"; } if false { test_fail "executed wrong alternative for static false"; } else { /* Correct */ } /* Dynamic */ if exists "to" { /* Correct */ } else { test_fail "executed wrong alternative for dynamic true"; } if exists "flierp" { test_fail "executed wrong alternative for dynamic false"; } else { /* Correct */ } } /* * TEST: Basic functionality: if not true/false */ test "Basic functionality: if not true/false" { /* Static */ if not true { test_fail "executed wrong alternative for static not true"; } else { /* Correct */ } if not false { /* Correct */ } else { test_fail "executed wrong alternative for static not false"; } /* Dynamic */ if not exists "to" { test_fail "executed wrong alternative for dynamic not true"; } else { /* Correct */ } if not exists "flierp" { /* Correct */ } else { test_fail "executed wrong alternative for dynamic not false"; } } /* * TEST: Basic functionality: elseif true/false */ test "Basic functionality: elseif true/false" { /* Static */ if true { /* Correct */ } elsif true { test_fail "executed wrong alternative for static true-true (elsif)"; } else { test_fail "executed wrong alternative for static true-true (else)"; } if true { /* Correct */ } elsif false { test_fail "executed wrong alternative for static true-false (elsif)"; } else { test_fail "executed wrong alternative for static true-false (else)"; } if false { test_fail "executed wrong alternative for static false-true (if)"; } elsif true { /* Correct */ } else { test_fail "executed wrong alternative for static false-false (else)"; } if false { test_fail "executed wrong alternative for static false-false (if)"; } elsif false { test_fail "executed wrong alternative for static false-false (elsif)"; } else { /* Correct */ } /* Dynamic */ if address :is "from" "stephan@example.org" { /* Correct */ } elsif address :contains "from" "stephan" { test_fail "executed wrong alternative for dynamic true-true (elsif)"; } else { test_fail "executed wrong alternative for dynamic true-true (else)"; } if address :is "from" "stephan@example.org" { /* Correct */ } elsif address :is "from" "frop@example.com" { test_fail "executed wrong alternative for dynamic true-false (elsif)"; } else { test_fail "executed wrong alternative for dynamic true-false (else)"; } if address :is "from" "tss@example.net" { test_fail "executed wrong alternative for dynamic false-true (if)"; } elsif address :is "from" "stephan@example.org" { /* Correct */ } else { test_fail "executed wrong alternative for dynamic false-true(else)"; } if address :is "from" "tss@example.net" { test_fail "executed wrong alternative for dynamic false-false (if)"; } elsif address :is "to" "stephan@example.org" { test_fail "executed wrong alternative for dynamic false-false (elsif)"; } else { /* Correct */ } /* Static/Dynamic */ if true { /* Correct */ } elsif address :contains "from" "stephan" { test_fail "executed wrong alternative for first-static true-true (elsif)"; } else { test_fail "executed wrong alternative for first-static true-true (else)"; } if address :is "from" "stephan@example.org" { /* Correct */ } elsif true { test_fail "executed wrong alternative for second-static true-true (elsif)"; } else { test_fail "executed wrong alternative for second-static true-true (else)"; } if true { /* Correct */ } elsif address :is "from" "frop@example.com" { test_fail "executed wrong alternative for first-static true-false (elsif)"; } else { test_fail "executed wrong alternative for first-static true-false (else)"; } if address :is "from" "stephan@example.org" { /* Correct */ } elsif false { test_fail "executed wrong alternative for second-static true-false (elsif)"; } else { test_fail "executed wrong alternative for second-static true-false (else)"; } if false { test_fail "executed wrong alternative for first-static false-true (if)"; } elsif address :is "from" "stephan@example.org" { /* Correct */ } else { test_fail "executed wrong alternative for first-static false-true(else)"; } if address :is "from" "tss@example.net" { test_fail "executed wrong alternative for second-static false-true (if)"; } elsif true { /* Correct */ } else { test_fail "executed wrong alternative for second-static false-true(else)"; } if false { test_fail "executed wrong alternative for first-static false-false (if)"; } elsif address :is "to" "stephan@example.org" { test_fail "executed wrong alternative for first-static false-false (elsif)"; } else { /* Correct */ } if address :is "from" "tss@example.net" { test_fail "executed wrong alternative for second-static false-false (if)"; } elsif false { test_fail "executed wrong alternative for second-static false-false (elsif)"; } else { /* Correct */ } } /* * TEST: Basic functionality: nesting */ test "Basic functionality: nesting" { /* Static */ if true { if true { if false { test_fail "chose wrong static outcome: true->true->false"; } else { /* Correct */ } } else { test_fail "chose wrong static outcome: true->false"; } } elsif true { if false { test_fail "chose wrong static outcome: false->true->false"; } elsif true { test_fail "chose wrong static outcome: false->true->true"; } } else { test_fail "chose wrong static outcome: false->false"; } /* Dynamic */ if exists "to" { if exists "from" { if exists "friep" { test_fail "chose wrong dynamic outcome: true->true->false"; } else { /* Correct */ } } else { test_fail "chose wrong dynamic outcome: true->false"; } } elsif exists "cc" { if exists "frop" { test_fail "chose wrong dynamic outcome: false->true->false"; } elsif exists "from" { test_fail "chose wrong dynamic outcome: false->true->true"; } } else { test_fail "chose wrong dynamic outcome: false->false"; } }