* @license MIT * * @covers \ProxyManager\ProxyGenerator\RemoteObjectGenerator * @group Coverage */ class RemoteObjectGeneratorTest 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)); } else { $this->assertEmpty( array_diff($originalClass->getInterfaceNames(), $generatedReflection->getInterfaceNames()) ); } $this->assertSame($generatedClassName, $generatedReflection->getName()); foreach ($this->getExpectedImplementedInterfaces() as $interface) { $this->assertTrue($generatedReflection->implementsInterface($interface)); } } /** * {@inheritDoc} */ protected function getProxyGenerator() { return new RemoteObjectGenerator(); } /** * {@inheritDoc} */ protected function getExpectedImplementedInterfaces() { return array( 'ProxyManager\\Proxy\\RemoteObjectInterface', ); } /** * @return array */ public function getTestedImplementations() { return array( array('ProxyManagerTestAsset\\BaseClass'), array('ProxyManagerTestAsset\\ClassWithMagicMethods'), array('ProxyManagerTestAsset\\ClassWithByRefMagicMethods'), array('ProxyManagerTestAsset\\ClassWithMixedProperties'), array('ProxyManagerTestAsset\\BaseInterface'), ); } }