CompositeExpressionTest.php 2.85 KB
Newer Older
1 2 3 4 5 6
<?php

namespace Doctrine\Tests\DBAL\Query\Expression;

use Doctrine\DBAL\Query\Expression\CompositeExpression;

7 8 9
/**
 * @group DBAL-12
 */
10 11 12 13 14
class CompositeExpressionTest extends \Doctrine\Tests\DbalTestCase
{
    public function testCount()
    {
        $expr = new CompositeExpression(CompositeExpression::TYPE_OR, array('u.group_id = 1'));
15

Gabriel Caruso's avatar
Gabriel Caruso committed
16
        self::assertCount(1, $expr);
17

18
        $expr->add('u.group_id = 2');
19

Gabriel Caruso's avatar
Gabriel Caruso committed
20
        self::assertCount(2, $expr);
21
    }
22

23 24 25 26
    public function testAdd()
    {
        $expr = new CompositeExpression(CompositeExpression::TYPE_OR, array('u.group_id = 1'));

27
        self::assertCount(1, $expr);
28 29 30

        $expr->add(new CompositeExpression(CompositeExpression::TYPE_AND, array()));

31
        self::assertCount(1, $expr);
32 33 34

        $expr->add(new CompositeExpression(CompositeExpression::TYPE_OR, array('u.user_id = 1')));

35
        self::assertCount(2, $expr);
36 37 38

        $expr->add(null);

39
        self::assertCount(2, $expr);
40 41 42

        $expr->add('u.user_id = 1');

43
        self::assertCount(3, $expr);
44 45
    }

46 47 48 49 50 51
    /**
     * @dataProvider provideDataForConvertToString
     */
    public function testCompositeUsageAndGeneration($type, $parts, $expects)
    {
        $expr = new CompositeExpression($type, $parts);
52

53
        self::assertEquals($expects, (string) $expr);
54
    }
55

56 57 58 59
    public function provideDataForConvertToString()
    {
        return array(
            array(
60 61
                CompositeExpression::TYPE_AND,
                array('u.user = 1'),
62 63 64
                'u.user = 1'
            ),
            array(
65 66
                CompositeExpression::TYPE_AND,
                array('u.user = 1', 'u.group_id = 1'),
67 68 69
                '(u.user = 1) AND (u.group_id = 1)'
            ),
            array(
70 71
                CompositeExpression::TYPE_OR,
                array('u.user = 1'),
72 73 74
                'u.user = 1'
            ),
            array(
75 76
                CompositeExpression::TYPE_OR,
                array('u.group_id = 1', 'u.group_id = 2'),
77 78 79
                '(u.group_id = 1) OR (u.group_id = 2)'
            ),
            array(
80
                CompositeExpression::TYPE_AND,
81
                array(
82
                    'u.user = 1',
83 84 85 86
                    new CompositeExpression(
                        CompositeExpression::TYPE_OR,
                        array('u.group_id = 1', 'u.group_id = 2')
                    )
87
                ),
88 89 90
                '(u.user = 1) AND ((u.group_id = 1) OR (u.group_id = 2))'
            ),
            array(
91
                CompositeExpression::TYPE_OR,
92
                array(
93
                    'u.group_id = 1',
94 95 96 97
                    new CompositeExpression(
                        CompositeExpression::TYPE_AND,
                        array('u.user = 1', 'u.group_id = 2')
                    )
98
                ),
99 100 101 102
                '(u.group_id = 1) OR ((u.user = 1) AND (u.group_id = 2))'
            ),
        );
    }
103
}