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
|
<?php
declare(strict_types=1);
namespace ProxyManagerTest\ProxyGenerator\Functional;
use PHPUnit\Framework\TestCase;
use ProxyManager\ProxyGenerator\Util\PublicScopeSimulator;
use ProxyManagerTestAsset\ClassWithMixedProperties;
use function sprintf;
/**
* @covers \ProxyManager\ProxyGenerator\Util\PublicScopeSimulator
* @coversNothing
*/
final class PublicScopeSimulatorFunctionalTest extends TestCase
{
/**
* @group #632
* @group #645
* @group #646
*/
public function testAccessingUndefinedPropertiesDoesNotLeadToInvalidByRefAccess(): void
{
/** @psalm-var ClassWithMixedProperties $sut */
$sut = eval(sprintf(
<<<'PHP'
return new class() extends %s {
public function doGet($prop) : string { %s }
public function doSet($prop, $val) : string { %s }
public function doIsset($prop) : bool { %s }
public function doUnset($prop) : void { %s }
};
PHP
,
ClassWithMixedProperties::class,
PublicScopeSimulator::getPublicAccessSimulationCode(PublicScopeSimulator::OPERATION_GET, 'prop'),
PublicScopeSimulator::getPublicAccessSimulationCode(PublicScopeSimulator::OPERATION_SET, 'prop', 'val'),
PublicScopeSimulator::getPublicAccessSimulationCode(PublicScopeSimulator::OPERATION_ISSET, 'prop'),
PublicScopeSimulator::getPublicAccessSimulationCode(PublicScopeSimulator::OPERATION_UNSET, 'prop')
));
self::assertSame('publicProperty0', $sut->doGet('publicProperty0'));
self::assertSame('bar', $sut->doSet('publicProperty0', 'bar'));
self::assertTrue($sut->doIsset('publicProperty0'));
self::assertNull($sut->doUnset('publicProperty0'));
}
}
|