コード例 #1
0
 /**
  * Retrieves the generated hydrator FQCN
  *
  * @return string
  */
 public function getHydratorClass()
 {
     $inflector = $this->configuration->getClassNameInflector();
     $realClassName = $inflector->getUserClassName($this->configuration->getHydratedClassName());
     $hydratorClassName = $inflector->getGeneratedClassName($realClassName, array('factory' => get_class($this)));
     if (!class_exists($hydratorClassName) && $this->configuration->doesAutoGenerateProxies()) {
         $generator = new HydratorGenerator();
         $originalClass = new ReflectionClass($realClassName);
         $generatedAst = $generator->generate($originalClass);
         $traverser = new NodeTraverser();
         $traverser->addVisitor(new ClassRenamerVisitor($originalClass, $hydratorClassName));
         $this->configuration->getGeneratorStrategy()->generate($traverser->traverse($generatedAst));
         $this->configuration->getGeneratedClassAutoloader()->__invoke($hydratorClassName);
     }
     return $hydratorClassName;
 }
コード例 #2
0
 /**
  * @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));
     }
 }