Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / dbal / tests / Doctrine / Tests / DBAL / Query / Expression / ExpressionBuilderTest.php
1 <?php
2
3 namespace Doctrine\Tests\DBAL\Query\Expression;
4
5 use Doctrine\DBAL\Query\Expression\ExpressionBuilder,
6     Doctrine\DBAL\Query\Expression\CompositeExpression;
7
8 require_once __DIR__ . '/../../../TestInit.php';
9
10 /**
11  * @group DBAL-12
12  */
13 class ExpressionBuilderTest extends \Doctrine\Tests\DbalTestCase
14 {
15     protected $expr;
16
17     public function setUp()
18     {
19         $conn = $this->getMock('Doctrine\DBAL\Connection', array(), array(), '', false);
20
21         $this->expr = new ExpressionBuilder($conn);
22
23         $conn->expects($this->any())
24              ->method('getExpressionBuilder')
25              ->will($this->returnValue($this->expr));
26     }
27
28     /**
29      * @dataProvider provideDataForAndX
30      */
31     public function testAndX($parts, $expected)
32     {
33         $composite = $this->expr->andX();
34
35         foreach ($parts as $part) {
36             $composite->add($part);
37         }
38
39         $this->assertEquals($expected, (string) $composite);
40     }
41
42     public function provideDataForAndX()
43     {
44         return array(
45             array(
46                 array('u.user = 1'),
47                 'u.user = 1'
48             ),
49             array(
50                 array('u.user = 1', 'u.group_id = 1'),
51                 '(u.user = 1) AND (u.group_id = 1)'
52             ),
53             array(
54                 array('u.user = 1'),
55                 'u.user = 1'
56             ),
57             array(
58                 array('u.group_id = 1', 'u.group_id = 2'),
59                 '(u.group_id = 1) AND (u.group_id = 2)'
60             ),
61             array(
62                 array(
63                     'u.user = 1',
64                     new CompositeExpression(
65                         CompositeExpression::TYPE_OR,
66                         array('u.group_id = 1', 'u.group_id = 2')
67                     )
68                 ),
69                 '(u.user = 1) AND ((u.group_id = 1) OR (u.group_id = 2))'
70             ),
71             array(
72                 array(
73                     'u.group_id = 1',
74                     new CompositeExpression(
75                         CompositeExpression::TYPE_AND,
76                         array('u.user = 1', 'u.group_id = 2')
77                     )
78                 ),
79                 '(u.group_id = 1) AND ((u.user = 1) AND (u.group_id = 2))'
80             ),
81         );
82     }
83
84     /**
85      * @dataProvider provideDataForOrX
86      */
87     public function testOrX($parts, $expected)
88     {
89         $composite = $this->expr->orX();
90
91         foreach ($parts as $part) {
92             $composite->add($part);
93         }
94
95         $this->assertEquals($expected, (string) $composite);
96     }
97
98     public function provideDataForOrX()
99     {
100         return array(
101             array(
102                 array('u.user = 1'),
103                 'u.user = 1'
104             ),
105             array(
106                 array('u.user = 1', 'u.group_id = 1'),
107                 '(u.user = 1) OR (u.group_id = 1)'
108             ),
109             array(
110                 array('u.user = 1'),
111                 'u.user = 1'
112             ),
113             array(
114                 array('u.group_id = 1', 'u.group_id = 2'),
115                 '(u.group_id = 1) OR (u.group_id = 2)'
116             ),
117             array(
118                 array(
119                     'u.user = 1',
120                     new CompositeExpression(
121                         CompositeExpression::TYPE_OR,
122                         array('u.group_id = 1', 'u.group_id = 2')
123                     )
124                 ),
125                 '(u.user = 1) OR ((u.group_id = 1) OR (u.group_id = 2))'
126             ),
127             array(
128                 array(
129                     'u.group_id = 1',
130                     new CompositeExpression(
131                         CompositeExpression::TYPE_AND,
132                         array('u.user = 1', 'u.group_id = 2')
133                     )
134                 ),
135                 '(u.group_id = 1) OR ((u.user = 1) AND (u.group_id = 2))'
136             ),
137         );
138     }
139
140     /**
141      * @dataProvider provideDataForComparison
142      */
143     public function testComparison($leftExpr, $operator, $rightExpr, $expected)
144     {
145         $part = $this->expr->comparison($leftExpr, $operator, $rightExpr);
146
147         $this->assertEquals($expected, (string) $part);
148     }
149
150     public function provideDataForComparison()
151     {
152         return array(
153             array('u.user_id', ExpressionBuilder::EQ, '1', 'u.user_id = 1'),
154             array('u.user_id', ExpressionBuilder::NEQ, '1', 'u.user_id <> 1'),
155             array('u.salary', ExpressionBuilder::LT, '10000', 'u.salary < 10000'),
156             array('u.salary', ExpressionBuilder::LTE, '10000', 'u.salary <= 10000'),
157             array('u.salary', ExpressionBuilder::GT, '10000', 'u.salary > 10000'),
158             array('u.salary', ExpressionBuilder::GTE, '10000', 'u.salary >= 10000'),
159         );
160     }
161
162     public function testEq()
163     {
164         $this->assertEquals('u.user_id = 1', $this->expr->eq('u.user_id', '1'));
165     }
166
167     public function testNeq()
168     {
169         $this->assertEquals('u.user_id <> 1', $this->expr->neq('u.user_id', '1'));
170     }
171
172     public function testLt()
173     {
174         $this->assertEquals('u.salary < 10000', $this->expr->lt('u.salary', '10000'));
175     }
176
177     public function testLte()
178     {
179         $this->assertEquals('u.salary <= 10000', $this->expr->lte('u.salary', '10000'));
180     }
181
182     public function testGt()
183     {
184         $this->assertEquals('u.salary > 10000', $this->expr->gt('u.salary', '10000'));
185     }
186
187     public function testGte()
188     {
189         $this->assertEquals('u.salary >= 10000', $this->expr->gte('u.salary', '10000'));
190     }
191
192     public function testIsNull()
193     {
194         $this->assertEquals('u.deleted IS NULL', $this->expr->isNull('u.deleted'));
195     }
196
197     public function testIsNotNull()
198     {
199         $this->assertEquals('u.updated IS NOT NULL', $this->expr->isNotNull('u.updated'));
200     }
201 }