4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\ExpressionLanguage\Tests\Node;
14 use Symfony\Component\ExpressionLanguage\Node\BinaryNode;
15 use Symfony\Component\ExpressionLanguage\Node\ArrayNode;
16 use Symfony\Component\ExpressionLanguage\Node\ConstantNode;
18 class BinaryNodeTest extends AbstractNodeTest
20 public function getEvaluateData()
22 $array = new ArrayNode();
23 $array->addElement(new ConstantNode('a'));
24 $array->addElement(new ConstantNode('b'));
27 array(true, new BinaryNode('or', new ConstantNode(true), new ConstantNode(false))),
28 array(true, new BinaryNode('||', new ConstantNode(true), new ConstantNode(false))),
29 array(false, new BinaryNode('and', new ConstantNode(true), new ConstantNode(false))),
30 array(false, new BinaryNode('&&', new ConstantNode(true), new ConstantNode(false))),
32 array(0, new BinaryNode('&', new ConstantNode(2), new ConstantNode(4))),
33 array(6, new BinaryNode('|', new ConstantNode(2), new ConstantNode(4))),
34 array(6, new BinaryNode('^', new ConstantNode(2), new ConstantNode(4))),
36 array(true, new BinaryNode('<', new ConstantNode(1), new ConstantNode(2))),
37 array(true, new BinaryNode('<=', new ConstantNode(1), new ConstantNode(2))),
38 array(true, new BinaryNode('<=', new ConstantNode(1), new ConstantNode(1))),
40 array(false, new BinaryNode('>', new ConstantNode(1), new ConstantNode(2))),
41 array(false, new BinaryNode('>=', new ConstantNode(1), new ConstantNode(2))),
42 array(true, new BinaryNode('>=', new ConstantNode(1), new ConstantNode(1))),
44 array(true, new BinaryNode('===', new ConstantNode(true), new ConstantNode(true))),
45 array(false, new BinaryNode('!==', new ConstantNode(true), new ConstantNode(true))),
47 array(false, new BinaryNode('==', new ConstantNode(2), new ConstantNode(1))),
48 array(true, new BinaryNode('!=', new ConstantNode(2), new ConstantNode(1))),
50 array(-1, new BinaryNode('-', new ConstantNode(1), new ConstantNode(2))),
51 array(3, new BinaryNode('+', new ConstantNode(1), new ConstantNode(2))),
52 array(4, new BinaryNode('*', new ConstantNode(2), new ConstantNode(2))),
53 array(1, new BinaryNode('/', new ConstantNode(2), new ConstantNode(2))),
54 array(1, new BinaryNode('%', new ConstantNode(5), new ConstantNode(2))),
55 array(25, new BinaryNode('**', new ConstantNode(5), new ConstantNode(2))),
56 array('ab', new BinaryNode('~', new ConstantNode('a'), new ConstantNode('b'))),
58 array(true, new BinaryNode('in', new ConstantNode('a'), $array)),
59 array(false, new BinaryNode('in', new ConstantNode('c'), $array)),
60 array(true, new BinaryNode('not in', new ConstantNode('c'), $array)),
61 array(false, new BinaryNode('not in', new ConstantNode('a'), $array)),
63 array(array(1, 2, 3), new BinaryNode('..', new ConstantNode(1), new ConstantNode(3))),
65 array(1, new BinaryNode('matches', new ConstantNode('abc'), new ConstantNode('/^[a-z]+$/'))),
69 public function getCompileData()
71 $array = new ArrayNode();
72 $array->addElement(new ConstantNode('a'));
73 $array->addElement(new ConstantNode('b'));
76 array('(true || false)', new BinaryNode('or', new ConstantNode(true), new ConstantNode(false))),
77 array('(true || false)', new BinaryNode('||', new ConstantNode(true), new ConstantNode(false))),
78 array('(true && false)', new BinaryNode('and', new ConstantNode(true), new ConstantNode(false))),
79 array('(true && false)', new BinaryNode('&&', new ConstantNode(true), new ConstantNode(false))),
81 array('(2 & 4)', new BinaryNode('&', new ConstantNode(2), new ConstantNode(4))),
82 array('(2 | 4)', new BinaryNode('|', new ConstantNode(2), new ConstantNode(4))),
83 array('(2 ^ 4)', new BinaryNode('^', new ConstantNode(2), new ConstantNode(4))),
85 array('(1 < 2)', new BinaryNode('<', new ConstantNode(1), new ConstantNode(2))),
86 array('(1 <= 2)', new BinaryNode('<=', new ConstantNode(1), new ConstantNode(2))),
87 array('(1 <= 1)', new BinaryNode('<=', new ConstantNode(1), new ConstantNode(1))),
89 array('(1 > 2)', new BinaryNode('>', new ConstantNode(1), new ConstantNode(2))),
90 array('(1 >= 2)', new BinaryNode('>=', new ConstantNode(1), new ConstantNode(2))),
91 array('(1 >= 1)', new BinaryNode('>=', new ConstantNode(1), new ConstantNode(1))),
93 array('(true === true)', new BinaryNode('===', new ConstantNode(true), new ConstantNode(true))),
94 array('(true !== true)', new BinaryNode('!==', new ConstantNode(true), new ConstantNode(true))),
96 array('(2 == 1)', new BinaryNode('==', new ConstantNode(2), new ConstantNode(1))),
97 array('(2 != 1)', new BinaryNode('!=', new ConstantNode(2), new ConstantNode(1))),
99 array('(1 - 2)', new BinaryNode('-', new ConstantNode(1), new ConstantNode(2))),
100 array('(1 + 2)', new BinaryNode('+', new ConstantNode(1), new ConstantNode(2))),
101 array('(2 * 2)', new BinaryNode('*', new ConstantNode(2), new ConstantNode(2))),
102 array('(2 / 2)', new BinaryNode('/', new ConstantNode(2), new ConstantNode(2))),
103 array('(5 % 2)', new BinaryNode('%', new ConstantNode(5), new ConstantNode(2))),
104 array('pow(5, 2)', new BinaryNode('**', new ConstantNode(5), new ConstantNode(2))),
105 array('("a" . "b")', new BinaryNode('~', new ConstantNode('a'), new ConstantNode('b'))),
107 array('in_array("a", array(0 => "a", 1 => "b"))', new BinaryNode('in', new ConstantNode('a'), $array)),
108 array('in_array("c", array(0 => "a", 1 => "b"))', new BinaryNode('in', new ConstantNode('c'), $array)),
109 array('!in_array("c", array(0 => "a", 1 => "b"))', new BinaryNode('not in', new ConstantNode('c'), $array)),
110 array('!in_array("a", array(0 => "a", 1 => "b"))', new BinaryNode('not in', new ConstantNode('a'), $array)),
112 array('range(1, 3)', new BinaryNode('..', new ConstantNode(1), new ConstantNode(3))),
114 array('preg_match("/^[a-z]+/i\$/", "abc")', new BinaryNode('matches', new ConstantNode('abc'), new ConstantNode('/^[a-z]+/i$/'))),