* @license MIT * * @covers \ProxyManager\ProxyGenerator\NullObjectGenerator * @group Coverage */ class NullObjectGeneratorTest extends PHPUnit_Framework_TestCase { /** * @dataProvider getTestedImplementations * * Verifies that generated code is valid and implements expected interfaces */ public function testGeneratesValidCode($className) { $generator = $this->getProxyGenerator(); $generatedClassName = UniqueIdentifierGenerator::getIdentifier('AbstractProxyGeneratorTest'); $generatedClass = new ClassGenerator($generatedClassName); $originalClass = new ReflectionClass($className); $generatorStrategy = new EvaluatingGeneratorStrategy(); $generator->generate($originalClass, $generatedClass); $generatorStrategy->generate($generatedClass); $generatedReflection = new ReflectionClass($generatedClassName); if ($originalClass->isInterface()) { $this->assertTrue($generatedReflection->implementsInterface($className)); } $this->assertSame($generatedClassName, $generatedReflection->getName()); foreach ($this->getExpectedImplementedInterfaces() as $interface) { $this->assertTrue($generatedReflection->implementsInterface($interface)); } $proxyGenerated = new $generatedClassName(); foreach ($generatedReflection->getProperties(ReflectionProperty::IS_PUBLIC) as $property) { $this->assertNull($proxyGenerated->$property); } /** @var \ReflectionMethod $method */ foreach ($generatedReflection->getMethods(ReflectionProperty::IS_PUBLIC) as $method) { if ($method->getNumberOfParameters() == 0) { $this->assertNull(call_user_func(array($proxyGenerated, $method->getName()))); } } } /** * {@inheritDoc} */ protected function getProxyGenerator() { return new NullObjectGenerator(); } /** * {@inheritDoc} */ protected function getExpectedImplementedInterfaces() { return array( 'ProxyManager\\Proxy\\NullObjectInterface', ); } /** * @return array */ public function getTestedImplementations() { return array( array('ProxyManagerTestAsset\\BaseClass'), array('ProxyManagerTestAsset\\ClassWithMagicMethods'), array('ProxyManagerTestAsset\\ClassWithByRefMagicMethods'), array('ProxyManagerTestAsset\\ClassWithMixedProperties'), array('ProxyManagerTestAsset\\BaseInterface'), ); } }