/** * {@inheritDoc} */ public function setUp() { $this->generatedClassName = UniqueIdentifierGenerator::getIdentifier('foo'); $this->config = new Configuration($this->generatedClassName); $generatorStrategy = new EvaluatingGeneratorStrategy(); $reflection = new ReflectionClass('GeneratedHydratorTestAsset\\ClassWithMixedProperties'); $generator = new ClassBuilder(); $traverser = new NodeTraverser(); $renamer = new ClassRenamerVisitor($reflection, $this->generatedClassName); $traverser->addVisitor($renamer); // evaluating the generated class //die(var_dump($traverser->traverse($generator->fromReflection($reflection)))); $ast = $traverser->traverse($generator->fromReflection($reflection)); $generatorStrategy->generate($ast); $this->config->setGeneratorStrategy($generatorStrategy); }
/** * @dataProvider getTestedImplementations * * Verifies that generated code is valid and implements expected interfaces */ public function testGeneratesValidCode($className) { $generator = new HydratorGenerator(); $generatedClassName = UniqueIdentifierGenerator::getIdentifier('HydratorGeneratorTest'); $originalClass = new ReflectionClass($className); $generatorStrategy = new EvaluatingGeneratorStrategy(); $traverser = new NodeTraverser(); $traverser->addVisitor(new ClassRenamerVisitor($originalClass, $generatedClassName)); $generatorStrategy->generate($traverser->traverse($generator->generate($originalClass))); $generatedReflection = new ReflectionClass($generatedClassName); if ($originalClass->isInterface()) { $this->assertTrue($generatedReflection->implementsInterface($className)); } else { $this->assertInstanceOf('ReflectionClass', $generatedReflection->getParentClass()); $this->assertSame($originalClass->getName(), $generatedReflection->getParentClass()->getName()); } $this->assertSame($generatedClassName, $generatedReflection->getName()); foreach ($this->getExpectedImplementedInterfaces() as $interface) { $this->assertTrue($generatedReflection->implementsInterface($interface)); } }