/** * @inheritDoc */ public function __invoke($file, $namespace, $commandName) { $commandName = ucfirst($commandName); require $file; $reflectionClass = new FileReflection($file); $fileGenerator = FileGenerator::fromReflection($reflectionClass); $fileGenerator->setFilename($file); $classGenerator = $fileGenerator->getClass(); /* @var $method MethodGenerator */ foreach ($classGenerator->getMethods() as $method) { if (strpos($method->getName(), 'when') !== 0) { continue; } /* @var $parameter ParameterGenerator */ foreach ($method->getParameters() as $parameter) { $fileGenerator->setUse($parameter->getType()); } } $namespace = ltrim($namespace, '\\') . '\\'; $fileGenerator->setUse($namespace . $commandName); // workaround for import namespace if ($classToExtend = $classGenerator->getExtendedClass()) { $classGenerator->setExtendedClass(substr($classToExtend, strrpos($classToExtend, '\\') + 1)); } $classGenerator->addMethodFromGenerator($this->methodWhenEvent($commandName, $namespace)); return $fileGenerator; }
public function testFromFileReflection() { $this->markTestIncomplete('Some scanning capabilities are incomplete, including file DocBlock comment retrieval and method scanning'); $file = __DIR__ . '/TestAsset/TestSampleSingleClass.php'; require_once $file; $codeGenFileFromDisk = FileGenerator::fromReflection($fileRefl = new FileReflection($file)); $codeGenFileFromDisk->getClass()->addMethod('foobar'); $expectedOutput = <<<EOS <?php /** * File header here * * @author Ralph Schindler <*****@*****.**> */ /* Zend_Code_Generator_FileGenerator-ClassMarker: {ZendTest\\Code\\Generator\\TestAsset\\TestSampleSingleClass} */ namespace ZendTest\\Code\\Generator\\TestAsset; /** * class docblock * * @package Zend_Reflection_TestSampleSingleClass * */ class TestSampleSingleClass { /** * Enter description here... * * @return bool * */ public function someMethod() { /* test test */ } public function foobar() { } } EOS; $this->assertEquals($expectedOutput, $codeGenFileFromDisk->generate()); }
public function testFromFileReflection() { //$this->markTestSkipped('Must support namespaces'); $file = __DIR__ . '/TestAsset/TestSampleSingleClass.php'; require_once $file; $codeGenFileFromDisk = FileGenerator::fromReflection(new FileReflection($file)); $codeGenFileFromDisk->getClass()->setMethod(array('name' => 'foobar')); $expectedOutput = <<<EOS <?php /** * File header here * * @author Ralph Schindler <*****@*****.**> * */ /** * @namespace */ namespace ZendTest\\Code\\Generator\\TestAsset; /** * class docblock * * @package Zend_Reflection_TestSampleSingleClass * */ class TestSampleSingleClass { /** * Enter description here... * * @return bool * */ public function someMethod() { /* test test */ } public function foobar() { } } EOS; $this->assertEquals($expectedOutput, $codeGenFileFromDisk->generate()); }