* @license MIT * * @covers \ProxyManager\ProxyGenerator\Util\PublicScopeSimulator * @group Coverage */ class PublicScopeSimulatorTest extends PHPUnit_Framework_TestCase { public function testSimpleGet() { $code = PublicScopeSimulator::getPublicAccessSimulationCode( PublicScopeSimulator::OPERATION_GET, 'foo', null, null, 'bar' ); $this->assertStringMatchesFormat('%a{%areturn $%s->$foo;%a}%a$bar = %s;', $code); } public function testSimpleSet() { $code = PublicScopeSimulator::getPublicAccessSimulationCode( PublicScopeSimulator::OPERATION_SET, 'foo', 'baz', null, 'bar' ); $this->assertStringMatchesFormat('%a{%areturn $%s->$foo = $baz;%a}%a$bar = %s;', $code); } public function testSimpleIsset() { $code = PublicScopeSimulator::getPublicAccessSimulationCode( PublicScopeSimulator::OPERATION_ISSET, 'foo', null, null, 'bar' ); $this->assertStringMatchesFormat('%a{%areturn isset($%s->$foo);%a}%a$bar = %s;', $code); } public function testSimpleUnset() { $code = PublicScopeSimulator::getPublicAccessSimulationCode( PublicScopeSimulator::OPERATION_UNSET, 'foo', null, null, 'bar' ); $this->assertStringMatchesFormat('%a{%aunset($%s->$foo);%a}%a$bar = %s;', $code); } public function testSetRequiresValueParameterName() { $this->setExpectedException('InvalidArgumentException'); PublicScopeSimulator::getPublicAccessSimulationCode( PublicScopeSimulator::OPERATION_SET, 'foo', null, null, 'bar' ); } public function testDelegatesToValueHolderWhenAvailable() { $code = PublicScopeSimulator::getPublicAccessSimulationCode( PublicScopeSimulator::OPERATION_SET, 'foo', 'baz', new PropertyGenerator('valueHolder'), 'bar' ); $this->assertStringMatchesFormat( '%A$targetObject = $this->valueHolder;%a{%areturn $%s->$foo = $baz;%a}%a$bar = %s;', $code ); } public function testSetRequiresValidOperation() { $this->setExpectedException('InvalidArgumentException'); PublicScopeSimulator::getPublicAccessSimulationCode('invalid', 'foo'); } public function testWillReturnDirectlyWithNoReturnParam() { $code = PublicScopeSimulator::getPublicAccessSimulationCode( PublicScopeSimulator::OPERATION_GET, 'foo' ); $this->assertStringMatchesFormat('%a{%areturn $%s->$foo;%a}%areturn %s;', $code); } }