Rajout de doctrine/orm
[zf2.biz/application_blanche.git] / vendor / doctrine / dbal / tests / Doctrine / Tests / DBAL / Query / Expression / ExpressionBuilderTest.php
diff --git a/vendor/doctrine/dbal/tests/Doctrine/Tests/DBAL/Query/Expression/ExpressionBuilderTest.php b/vendor/doctrine/dbal/tests/Doctrine/Tests/DBAL/Query/Expression/ExpressionBuilderTest.php
new file mode 100644 (file)
index 0000000..1893e97
--- /dev/null
@@ -0,0 +1,201 @@
+<?php
+
+namespace Doctrine\Tests\DBAL\Query\Expression;
+
+use Doctrine\DBAL\Query\Expression\ExpressionBuilder,
+    Doctrine\DBAL\Query\Expression\CompositeExpression;
+
+require_once __DIR__ . '/../../../TestInit.php';
+
+/**
+ * @group DBAL-12
+ */
+class ExpressionBuilderTest extends \Doctrine\Tests\DbalTestCase
+{
+    protected $expr;
+
+    public function setUp()
+    {
+        $conn = $this->getMock('Doctrine\DBAL\Connection', array(), array(), '', false);
+
+        $this->expr = new ExpressionBuilder($conn);
+
+        $conn->expects($this->any())
+             ->method('getExpressionBuilder')
+             ->will($this->returnValue($this->expr));
+    }
+
+    /**
+     * @dataProvider provideDataForAndX
+     */
+    public function testAndX($parts, $expected)
+    {
+        $composite = $this->expr->andX();
+
+        foreach ($parts as $part) {
+            $composite->add($part);
+        }
+
+        $this->assertEquals($expected, (string) $composite);
+    }
+
+    public function provideDataForAndX()
+    {
+        return array(
+            array(
+                array('u.user = 1'),
+                'u.user = 1'
+            ),
+            array(
+                array('u.user = 1', 'u.group_id = 1'),
+                '(u.user = 1) AND (u.group_id = 1)'
+            ),
+            array(
+                array('u.user = 1'),
+                'u.user = 1'
+            ),
+            array(
+                array('u.group_id = 1', 'u.group_id = 2'),
+                '(u.group_id = 1) AND (u.group_id = 2)'
+            ),
+            array(
+                array(
+                    'u.user = 1',
+                    new CompositeExpression(
+                        CompositeExpression::TYPE_OR,
+                        array('u.group_id = 1', 'u.group_id = 2')
+                    )
+                ),
+                '(u.user = 1) AND ((u.group_id = 1) OR (u.group_id = 2))'
+            ),
+            array(
+                array(
+                    'u.group_id = 1',
+                    new CompositeExpression(
+                        CompositeExpression::TYPE_AND,
+                        array('u.user = 1', 'u.group_id = 2')
+                    )
+                ),
+                '(u.group_id = 1) AND ((u.user = 1) AND (u.group_id = 2))'
+            ),
+        );
+    }
+
+    /**
+     * @dataProvider provideDataForOrX
+     */
+    public function testOrX($parts, $expected)
+    {
+        $composite = $this->expr->orX();
+
+        foreach ($parts as $part) {
+            $composite->add($part);
+        }
+
+        $this->assertEquals($expected, (string) $composite);
+    }
+
+    public function provideDataForOrX()
+    {
+        return array(
+            array(
+                array('u.user = 1'),
+                'u.user = 1'
+            ),
+            array(
+                array('u.user = 1', 'u.group_id = 1'),
+                '(u.user = 1) OR (u.group_id = 1)'
+            ),
+            array(
+                array('u.user = 1'),
+                'u.user = 1'
+            ),
+            array(
+                array('u.group_id = 1', 'u.group_id = 2'),
+                '(u.group_id = 1) OR (u.group_id = 2)'
+            ),
+            array(
+                array(
+                    'u.user = 1',
+                    new CompositeExpression(
+                        CompositeExpression::TYPE_OR,
+                        array('u.group_id = 1', 'u.group_id = 2')
+                    )
+                ),
+                '(u.user = 1) OR ((u.group_id = 1) OR (u.group_id = 2))'
+            ),
+            array(
+                array(
+                    'u.group_id = 1',
+                    new CompositeExpression(
+                        CompositeExpression::TYPE_AND,
+                        array('u.user = 1', 'u.group_id = 2')
+                    )
+                ),
+                '(u.group_id = 1) OR ((u.user = 1) AND (u.group_id = 2))'
+            ),
+        );
+    }
+
+    /**
+     * @dataProvider provideDataForComparison
+     */
+    public function testComparison($leftExpr, $operator, $rightExpr, $expected)
+    {
+        $part = $this->expr->comparison($leftExpr, $operator, $rightExpr);
+
+        $this->assertEquals($expected, (string) $part);
+    }
+
+    public function provideDataForComparison()
+    {
+        return array(
+            array('u.user_id', ExpressionBuilder::EQ, '1', 'u.user_id = 1'),
+            array('u.user_id', ExpressionBuilder::NEQ, '1', 'u.user_id <> 1'),
+            array('u.salary', ExpressionBuilder::LT, '10000', 'u.salary < 10000'),
+            array('u.salary', ExpressionBuilder::LTE, '10000', 'u.salary <= 10000'),
+            array('u.salary', ExpressionBuilder::GT, '10000', 'u.salary > 10000'),
+            array('u.salary', ExpressionBuilder::GTE, '10000', 'u.salary >= 10000'),
+        );
+    }
+
+    public function testEq()
+    {
+        $this->assertEquals('u.user_id = 1', $this->expr->eq('u.user_id', '1'));
+    }
+
+    public function testNeq()
+    {
+        $this->assertEquals('u.user_id <> 1', $this->expr->neq('u.user_id', '1'));
+    }
+
+    public function testLt()
+    {
+        $this->assertEquals('u.salary < 10000', $this->expr->lt('u.salary', '10000'));
+    }
+
+    public function testLte()
+    {
+        $this->assertEquals('u.salary <= 10000', $this->expr->lte('u.salary', '10000'));
+    }
+
+    public function testGt()
+    {
+        $this->assertEquals('u.salary > 10000', $this->expr->gt('u.salary', '10000'));
+    }
+
+    public function testGte()
+    {
+        $this->assertEquals('u.salary >= 10000', $this->expr->gte('u.salary', '10000'));
+    }
+
+    public function testIsNull()
+    {
+        $this->assertEquals('u.deleted IS NULL', $this->expr->isNull('u.deleted'));
+    }
+
+    public function testIsNotNull()
+    {
+        $this->assertEquals('u.updated IS NOT NULL', $this->expr->isNotNull('u.updated'));
+    }
+}
\ No newline at end of file