ReflectionPropertyNameTest::propertiesToBeTested()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 41
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 18
nc 1
nop 0
dl 0
loc 41
rs 9.6666
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace RoaveTest\BackwardCompatibility\Formatter;
6
7
use PHPUnit\Framework\TestCase;
8
use Roave\BackwardCompatibility\Formatter\ReflectionPropertyName;
9
use Roave\BetterReflection\BetterReflection;
10
use Roave\BetterReflection\Reflection\ReflectionProperty;
11
use Roave\BetterReflection\Reflector\ClassReflector;
12
use Roave\BetterReflection\SourceLocator\Type\StringSourceLocator;
13
use RoaveTest\BackwardCompatibility\TypeRestriction;
14
use function array_combine;
15
use function array_keys;
16
use function array_map;
17
18
/**
19
 * @covers \Roave\BackwardCompatibility\Formatter\ReflectionPropertyName
20
 */
21
final class ReflectionPropertyNameTest extends TestCase
22
{
23
    /**
24
     * @dataProvider propertiesToBeTested
25
     */
26
    public function testName(ReflectionProperty $property, string $expectedName) : void
27
    {
28
        self::assertSame($expectedName, (new ReflectionPropertyName())->__invoke($property));
29
    }
30
31
    /**
32
     * @return array<string, array<int, string|ReflectionProperty>>
33
     *
34
     * @psalm-return array<string, array{0: ReflectionProperty, 1: string}>
35
     */
36
    public function propertiesToBeTested() : array
37
    {
38
        $locator = new StringSourceLocator(
39
            <<<'PHP'
40
<?php
41
42
namespace {
43
    class A {
44
        public static $b;
45
        public $c;
46
    }
47
}
48
namespace N1 {
49
    class D {
50
        public static $e;
51
        public $f;
52
    }
53
}
54
PHP
55
            ,
56
            (new BetterReflection())->astLocator()
57
        );
58
59
        $classReflector = new ClassReflector($locator);
60
61
        /** @var array<string, ReflectionProperty> $properties */
62
        $properties = [
63
            'A::$b'    => $classReflector->reflect('A')->getProperty('b'),
64
            'A#$c'     => $classReflector->reflect('A')->getProperty('c'),
65
            'N1\D::$e' => $classReflector->reflect('N1\D')->getProperty('e'),
66
            'N1\D#$f'  => $classReflector->reflect('N1\D')->getProperty('f'),
67
        ];
68
69
        return TypeRestriction::array(array_combine(
70
            array_keys($properties),
71
            array_map(
72
                static function (string $expectedMessage, ReflectionProperty $property) : array {
73
                    return [$property, $expectedMessage];
74
                },
75
                array_keys($properties),
76
                $properties
77
            )
78
        ));
79
    }
80
}
81