File: CompositeExpressionTest.php

package info (click to toggle)
php-doctrine-collections 2.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 468 kB
  • sloc: php: 2,531; makefile: 18
file content (85 lines) | stat: -rw-r--r-- 2,771 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php

declare(strict_types=1);

namespace Doctrine\Tests\Common\Collections\Expr;

use Doctrine\Common\Collections\Expr\CompositeExpression;
use Doctrine\Common\Collections\Expr\Expression;
use Doctrine\Common\Collections\Expr\ExpressionVisitor;
use Doctrine\Common\Collections\Expr\Value;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\MockObject\MockBuilder;
use PHPUnit\Framework\TestCase;
use RuntimeException;

/** @covers  \Doctrine\Common\Collections\Expr\CompositeExpression */
class CompositeExpressionTest extends TestCase
{
    /** @return list<array{type:string, expressions: list<mixed>}> */
    public static function invalidDataProvider(): array
    {
        return [
            ['type' => CompositeExpression::TYPE_AND, 'expressions' => [new Value('value')]],
            ['type' => CompositeExpression::TYPE_AND, 'expressions' => ['wrong-type']],
            [
                'type' => CompositeExpression::TYPE_NOT,
                'expressions' => [
                    self::createStub(Expression::class),
                    self::createStub(Expression::class),
                ],
            ],
        ];
    }

    /**
     * @param list<mixed> $expressions
     *
     * @dataProvider invalidDataProvider
     */
    #[DataProvider('invalidDataProvider')]
    public function testExceptions(string $type, array $expressions): void
    {
        $this->expectException(RuntimeException::class);
        new CompositeExpression($type, $expressions);
    }

    public function testGetType(): void
    {
        $compositeExpression = $this->createCompositeExpression();

        $expectedType = CompositeExpression::TYPE_AND;
        $actualType   = $compositeExpression->getType();

        self::assertSame($expectedType, $actualType);
    }

    protected function createCompositeExpression(): CompositeExpression
    {
        $type        = CompositeExpression::TYPE_AND;
        $expressions = [$this->createMock(Expression::class)];

        return new CompositeExpression($type, $expressions);
    }

    public function testGetExpressionList(): void
    {
        $compositeExpression    = $this->createCompositeExpression();
        $expectedExpressionList = [$this->createMock(Expression::class)];
        $actualExpressionList   = $compositeExpression->getExpressionList();

        self::assertEquals($expectedExpressionList, $actualExpressionList);
    }

    public function testVisitor(): void
    {
        $compositeExpression = $this->createCompositeExpression();

        $visitor = $this->getMockBuilder(ExpressionVisitor::class)->getMock();
        $visitor
            ->expects($this->once())
            ->method('walkCompositeExpression');

        $compositeExpression->visit($visitor);
    }
}