/**
  * {@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));
     }
 }