File: ClassAttributesPassTest.php

package info (click to toggle)
php-mockery 1.6.12-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 34,988 kB
  • sloc: php: 12,443; xml: 1,716; makefile: 204; sh: 47; python: 43
file content (70 lines) | stat: -rw-r--r-- 2,032 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
<?php

namespace test\Mockery\Generator\StringManipulation\Pass;

use Generator;
use Mockery;
use Mockery\Adapter\Phpunit\MockeryTestCase;
use Mockery\Generator\MockConfiguration;
use Mockery\Generator\StringManipulation\Pass\ClassAttributesPass;
use Mockery\Generator\UndefinedTargetClass;
use PHPUnit\Framework\Attributes\DataProvider;

use function mb_strpos;

class ClassAttributesPassTest extends MockeryTestCase
{
    const CODE = "namespace Mockery; class Mock {}";

    /**
     * @param array $attributes
     * @param string $expected
     * @return void
     */
    #[DataProvider('providerCanApplyClassAttributes')]
    public function testCanApplyClassAttributes(
        array $attributes,
        string $expected
    ): void {
        $undefinedTargetClass = mock(UndefinedTargetClass::class);
        $undefinedTargetClass->expects('getAttributes')
            ->once()
            ->andReturn($attributes);

        $config = mock(MockConfiguration::class);
        $config->expects('getTargetClass')
            ->once()
            ->andReturn($undefinedTargetClass);

        $pass = new ClassAttributesPass();

        $code = $pass->apply(file_get_contents(__FILE__), $config);

        self::assertStringContainsString($expected, $code);
    }

    /** @see testCanApplyClassAttributes */
    public static function providerCanApplyClassAttributes(): Generator
    {
        yield 'has no attributes' => [
            'attributes' => [],
            'expected'   => '',
        ];

        yield 'has one attribute' => [
            'attributes' => [
                                'Attribute1'
                            ],
            'expected'   => '#[Attribute1]',
        ];

        yield 'has attributes' => [
            'attributes' => [
                                'Attribute1',
                                'Attribute2',
                                'Attribute3()'
                            ],
            'expected'   => '#[Attribute1,Attribute2,Attribute3()]',
        ];
    }
}