|
14 | 14 | use PHPUnit\Framework\TestCase;
|
15 | 15 | use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor;
|
16 | 16 | use Symfony\Component\PropertyInfo\Extractor\PhpStanExtractor;
|
17 |
| -use Symfony\Component\PropertyInfo\Tests\Fixtures\ConstructorDummy; |
18 | 17 | use Symfony\Component\PropertyInfo\Tests\Fixtures\Clazz;
|
| 18 | +use Symfony\Component\PropertyInfo\Tests\Fixtures\ConstructorDummy; |
19 | 19 | use Symfony\Component\PropertyInfo\Tests\Fixtures\ConstructorDummyWithoutDocBlock;
|
20 | 20 | use Symfony\Component\PropertyInfo\Tests\Fixtures\DefaultValue;
|
21 | 21 | use Symfony\Component\PropertyInfo\Tests\Fixtures\DockBlockFallback;
|
22 | 22 | use Symfony\Component\PropertyInfo\Tests\Fixtures\Dummy;
|
23 | 23 | use Symfony\Component\PropertyInfo\Tests\Fixtures\DummyCollection;
|
| 24 | +use Symfony\Component\PropertyInfo\Tests\Fixtures\DummyGeneric; |
24 | 25 | use Symfony\Component\PropertyInfo\Tests\Fixtures\DummyNamespace;
|
25 | 26 | use Symfony\Component\PropertyInfo\Tests\Fixtures\DummyPropertyAndGetterWithDifferentTypes;
|
26 | 27 | use Symfony\Component\PropertyInfo\Tests\Fixtures\DummyUnionType;
|
| 28 | +use Symfony\Component\PropertyInfo\Tests\Fixtures\IFace; |
27 | 29 | use Symfony\Component\PropertyInfo\Tests\Fixtures\IntRangeDummy;
|
28 | 30 | use Symfony\Component\PropertyInfo\Tests\Fixtures\InvalidDummy;
|
29 |
| -use Symfony\Component\PropertyInfo\Tests\Fixtures\DummyGeneric; |
30 |
| -use Symfony\Component\PropertyInfo\Tests\Fixtures\IFace; |
31 | 31 | use Symfony\Component\PropertyInfo\Tests\Fixtures\ParentDummy;
|
32 | 32 | use Symfony\Component\PropertyInfo\Tests\Fixtures\Php80Dummy;
|
33 | 33 | use Symfony\Component\PropertyInfo\Tests\Fixtures\Php80PromotedDummy;
|
@@ -555,6 +555,77 @@ public static function allowPrivateAccessLegacyProvider(): array
|
555 | 555 | ];
|
556 | 556 | }
|
557 | 557 |
|
| 558 | + /** |
| 559 | + * @param list<LegacyType> $expectedTypes |
| 560 | + * |
| 561 | + * @dataProvider legacyGenericsProvider |
| 562 | + */ |
| 563 | + public function testGenericsLegacy(string $property, array $expectedTypes) |
| 564 | + { |
| 565 | + $this->assertEquals($expectedTypes, $this->extractor->getTypes(DummyGeneric::class, $property)); |
| 566 | + } |
| 567 | + |
| 568 | + /** |
| 569 | + * @return iterable<array{0: string, 1: list<LegacyType>}> |
| 570 | + */ |
| 571 | + public static function legacyGenericsProvider(): iterable |
| 572 | + { |
| 573 | + yield [ |
| 574 | + 'basicClass', |
| 575 | + [ |
| 576 | + new LegacyType( |
| 577 | + builtinType: LegacyType::BUILTIN_TYPE_OBJECT, |
| 578 | + class: Clazz::class, |
| 579 | + collectionValueType: new LegacyType( |
| 580 | + builtinType: LegacyType::BUILTIN_TYPE_OBJECT, |
| 581 | + class: Dummy::class, |
| 582 | + ) |
| 583 | + ), |
| 584 | + ], |
| 585 | + ]; |
| 586 | + yield [ |
| 587 | + 'nullableClass', |
| 588 | + [ |
| 589 | + new LegacyType( |
| 590 | + builtinType: LegacyType::BUILTIN_TYPE_OBJECT, |
| 591 | + class: Clazz::class, |
| 592 | + nullable: true, |
| 593 | + collectionValueType: new LegacyType( |
| 594 | + builtinType: LegacyType::BUILTIN_TYPE_OBJECT, |
| 595 | + class: Dummy::class, |
| 596 | + ) |
| 597 | + ), |
| 598 | + ], |
| 599 | + ]; |
| 600 | + yield [ |
| 601 | + 'basicInterface', |
| 602 | + [ |
| 603 | + new LegacyType( |
| 604 | + builtinType: LegacyType::BUILTIN_TYPE_OBJECT, |
| 605 | + class: IFace::class, |
| 606 | + collectionValueType: new LegacyType( |
| 607 | + builtinType: LegacyType::BUILTIN_TYPE_OBJECT, |
| 608 | + class: Dummy::class, |
| 609 | + ) |
| 610 | + ), |
| 611 | + ], |
| 612 | + ]; |
| 613 | + yield [ |
| 614 | + 'nullableInterface', |
| 615 | + [ |
| 616 | + new LegacyType( |
| 617 | + builtinType: LegacyType::BUILTIN_TYPE_OBJECT, |
| 618 | + class: IFace::class, |
| 619 | + nullable: true, |
| 620 | + collectionValueType: new LegacyType( |
| 621 | + builtinType: LegacyType::BUILTIN_TYPE_OBJECT, |
| 622 | + class: Dummy::class, |
| 623 | + ) |
| 624 | + ), |
| 625 | + ], |
| 626 | + ]; |
| 627 | + } |
| 628 | + |
558 | 629 | /**
|
559 | 630 | * @dataProvider typesProvider
|
560 | 631 | */
|
@@ -972,86 +1043,39 @@ public static function allowPrivateAccessProvider(): array
|
972 | 1043 | public function testGenericInterface()
|
973 | 1044 | {
|
974 | 1045 | $this->assertEquals(
|
975 |
| - [ |
976 |
| - new Type( |
977 |
| - builtinType: Type::BUILTIN_TYPE_OBJECT, |
978 |
| - class: \BackedEnum::class, |
979 |
| - collectionValueType: new Type( |
980 |
| - builtinType: Type::BUILTIN_TYPE_STRING, |
981 |
| - ) |
982 |
| - ), |
983 |
| - ], |
984 |
| - $this->extractor->getTypes(Dummy::class, 'genericInterface') |
| 1046 | + Type::generic(Type::object(\BackedEnum::class), Type::string()), |
| 1047 | + $this->extractor->getType(Dummy::class, 'genericInterface'), |
985 | 1048 | );
|
986 | 1049 | }
|
987 | 1050 |
|
988 | 1051 | /**
|
989 |
| - * @param list<Type> $expectedTypes |
990 | 1052 | * @dataProvider genericsProvider
|
991 | 1053 | */
|
992 |
| - public function testGenericsLegacy(string $property, array $expectedTypes) |
| 1054 | + public function testGenerics(string $property, Type $expectedType) |
993 | 1055 | {
|
994 |
| - $this->assertEquals($expectedTypes, $this->extractor->getTypes(DummyGeneric::class, $property)); |
| 1056 | + $this->assertEquals($expectedType, $this->extractor->getType(DummyGeneric::class, $property)); |
995 | 1057 | }
|
996 | 1058 |
|
997 | 1059 | /**
|
998 |
| - * @return iterable<array{0: string, 1: list<Type>}> |
| 1060 | + * @return iterable<array{0: string, 1: Type}> |
999 | 1061 | */
|
1000 | 1062 | public static function genericsProvider(): iterable
|
1001 | 1063 | {
|
1002 | 1064 | yield [
|
1003 | 1065 | 'basicClass',
|
1004 |
| - [ |
1005 |
| - new Type( |
1006 |
| - builtinType: Type::BUILTIN_TYPE_OBJECT, |
1007 |
| - class: Clazz::class, |
1008 |
| - collectionValueType: new Type( |
1009 |
| - builtinType: Type::BUILTIN_TYPE_OBJECT, |
1010 |
| - class: Dummy::class, |
1011 |
| - ) |
1012 |
| - ), |
1013 |
| - ], |
| 1066 | + Type::generic(Type::object(Clazz::class), Type::object(Dummy::class)), |
1014 | 1067 | ];
|
1015 | 1068 | yield [
|
1016 | 1069 | 'nullableClass',
|
1017 |
| - [ |
1018 |
| - new Type( |
1019 |
| - builtinType: Type::BUILTIN_TYPE_OBJECT, |
1020 |
| - class: Clazz::class, |
1021 |
| - nullable: true, |
1022 |
| - collectionValueType: new Type( |
1023 |
| - builtinType: Type::BUILTIN_TYPE_OBJECT, |
1024 |
| - class: Dummy::class, |
1025 |
| - ) |
1026 |
| - ), |
1027 |
| - ], |
| 1070 | + Type::nullable(Type::generic(Type::object(Clazz::class), Type::object(Dummy::class))), |
1028 | 1071 | ];
|
1029 | 1072 | yield [
|
1030 | 1073 | 'basicInterface',
|
1031 |
| - [ |
1032 |
| - new Type( |
1033 |
| - builtinType: Type::BUILTIN_TYPE_OBJECT, |
1034 |
| - class: IFace::class, |
1035 |
| - collectionValueType: new Type( |
1036 |
| - builtinType: Type::BUILTIN_TYPE_OBJECT, |
1037 |
| - class: Dummy::class, |
1038 |
| - ) |
1039 |
| - ), |
1040 |
| - ], |
| 1074 | + Type::generic(Type::object(IFace::class), Type::object(Dummy::class)), |
1041 | 1075 | ];
|
1042 | 1076 | yield [
|
1043 | 1077 | 'nullableInterface',
|
1044 |
| - [ |
1045 |
| - new Type( |
1046 |
| - builtinType: Type::BUILTIN_TYPE_OBJECT, |
1047 |
| - class: IFace::class, |
1048 |
| - nullable: true, |
1049 |
| - collectionValueType: new Type( |
1050 |
| - builtinType: Type::BUILTIN_TYPE_OBJECT, |
1051 |
| - class: Dummy::class, |
1052 |
| - ) |
1053 |
| - ), |
1054 |
| - ], |
| 1078 | + Type::nullable(Type::generic(Type::object(IFace::class), Type::object(Dummy::class))), |
1055 | 1079 | ];
|
1056 | 1080 | }
|
1057 | 1081 | }
|
|
0 commit comments