|
28 | 28 | use Symfony\Component\PropertyInfo\Tests\Fixtures\Php7Dummy;
|
29 | 29 | use Symfony\Component\PropertyInfo\Tests\Fixtures\Php7ParentDummy;
|
30 | 30 | use Symfony\Component\PropertyInfo\Tests\Fixtures\Php81Dummy;
|
| 31 | +use Symfony\Component\PropertyInfo\Tests\Fixtures\VirtualProperties; |
31 | 32 | use Symfony\Component\PropertyInfo\Type;
|
32 | 33 |
|
33 | 34 | /**
|
@@ -699,4 +700,67 @@ public function testAsymmetricVisibility()
|
699 | 700 | $this->assertFalse($this->extractor->isWritable(AsymmetricVisibility::class, 'publicProtected'));
|
700 | 701 | $this->assertFalse($this->extractor->isWritable(AsymmetricVisibility::class, 'protectedPrivate'));
|
701 | 702 | }
|
| 703 | + |
| 704 | + /** |
| 705 | + * @requires PHP 8.4 |
| 706 | + */ |
| 707 | + public function testVirtualProperties() |
| 708 | + { |
| 709 | + $this->assertTrue($this->extractor->isReadable(VirtualProperties::class, 'virtualNoSetHook')); |
| 710 | + $this->assertTrue($this->extractor->isReadable(VirtualProperties::class, 'virtualSetHookOnly')); |
| 711 | + $this->assertTrue($this->extractor->isReadable(VirtualProperties::class, 'virtualHook')); |
| 712 | + $this->assertFalse($this->extractor->isWritable(VirtualProperties::class, 'virtualNoSetHook')); |
| 713 | + $this->assertTrue($this->extractor->isWritable(VirtualProperties::class, 'virtualSetHookOnly')); |
| 714 | + $this->assertTrue($this->extractor->isWritable(VirtualProperties::class, 'virtualHook')); |
| 715 | + } |
| 716 | + |
| 717 | + /** |
| 718 | + * @dataProvider provideAsymmetricVisibilityMutator |
| 719 | + * @requires PHP 8.4 |
| 720 | + */ |
| 721 | + public function testAsymmetricVisibilityMutator(string $property, string $readVisibility, string $writeVisibility) |
| 722 | + { |
| 723 | + $extractor = new ReflectionExtractor(null, null, null, true, ReflectionExtractor::ALLOW_PUBLIC | ReflectionExtractor::ALLOW_PROTECTED | ReflectionExtractor::ALLOW_PRIVATE); |
| 724 | + $readMutator = $extractor->getReadInfo(AsymmetricVisibility::class, $property); |
| 725 | + $writeMutator = $extractor->getWriteInfo(AsymmetricVisibility::class, $property, [ |
| 726 | + 'enable_getter_setter_extraction' => true, |
| 727 | + ]); |
| 728 | + |
| 729 | + $this->assertSame(PropertyReadInfo::TYPE_PROPERTY, $readMutator->getType()); |
| 730 | + $this->assertSame(PropertyWriteInfo::TYPE_PROPERTY, $writeMutator->getType()); |
| 731 | + $this->assertSame($readVisibility, $readMutator->getVisibility()); |
| 732 | + $this->assertSame($writeVisibility, $writeMutator->getVisibility()); |
| 733 | + } |
| 734 | + |
| 735 | + public static function provideAsymmetricVisibilityMutator(): iterable |
| 736 | + { |
| 737 | + yield ['publicPrivate', PropertyReadInfo::VISIBILITY_PUBLIC, PropertyWriteInfo::VISIBILITY_PRIVATE]; |
| 738 | + yield ['publicProtected', PropertyReadInfo::VISIBILITY_PUBLIC, PropertyWriteInfo::VISIBILITY_PROTECTED]; |
| 739 | + yield ['protectedPrivate', PropertyReadInfo::VISIBILITY_PROTECTED, PropertyWriteInfo::VISIBILITY_PRIVATE]; |
| 740 | + } |
| 741 | + |
| 742 | + /** |
| 743 | + * @dataProvider provideVirtualPropertiesMutator |
| 744 | + * @requires PHP 8.4 |
| 745 | + */ |
| 746 | + public function testVirtualPropertiesMutator(string $property, string $readVisibility, string $writeVisibility) |
| 747 | + { |
| 748 | + $extractor = new ReflectionExtractor(null, null, null, true, ReflectionExtractor::ALLOW_PUBLIC | ReflectionExtractor::ALLOW_PROTECTED | ReflectionExtractor::ALLOW_PRIVATE); |
| 749 | + $readMutator = $extractor->getReadInfo(VirtualProperties::class, $property); |
| 750 | + $writeMutator = $extractor->getWriteInfo(VirtualProperties::class, $property, [ |
| 751 | + 'enable_getter_setter_extraction' => true, |
| 752 | + ]); |
| 753 | + |
| 754 | + $this->assertSame(PropertyReadInfo::TYPE_PROPERTY, $readMutator->getType()); |
| 755 | + $this->assertSame(PropertyWriteInfo::TYPE_PROPERTY, $writeMutator->getType()); |
| 756 | + $this->assertSame($readVisibility, $readMutator->getVisibility()); |
| 757 | + $this->assertSame($writeVisibility, $writeMutator->getVisibility()); |
| 758 | + } |
| 759 | + |
| 760 | + public static function provideVirtualPropertiesMutator(): iterable |
| 761 | + { |
| 762 | + yield ['virtualNoSetHook', PropertyReadInfo::VISIBILITY_PUBLIC, PropertyWriteInfo::VISIBILITY_PRIVATE]; |
| 763 | + yield ['virtualSetHookOnly', PropertyReadInfo::VISIBILITY_PUBLIC, PropertyWriteInfo::VISIBILITY_PUBLIC]; |
| 764 | + yield ['virtualHook', PropertyReadInfo::VISIBILITY_PUBLIC, PropertyWriteInfo::VISIBILITY_PUBLIC]; |
| 765 | + } |
702 | 766 | }
|
0 commit comments