public function testCompilerCompilesAgainstConstructorInjectionAssets() { $definition = new CompilerDefinition; $definition->addDirectory(__DIR__ . '/../TestAsset/CompilerClasses'); $definition->compile(); $this->assertTrue($definition->hasClass('ZendTest\Di\TestAsset\CompilerClasses\A')); $assertClasses = array( 'ZendTest\Di\TestAsset\CompilerClasses\A', 'ZendTest\Di\TestAsset\CompilerClasses\B', 'ZendTest\Di\TestAsset\CompilerClasses\C', 'ZendTest\Di\TestAsset\CompilerClasses\D', ); $classes = $definition->getClasses(); foreach ($assertClasses as $assertClass) { $this->assertContains($assertClass, $classes); } // @todo this needs to be resolved, not the short name // $this->assertContains('ZendTest\Di\TestAsset\CompilerClasses\C', $definition->getClassSupertypes('ZendTest\Di\TestAsset\CompilerClasses\D')); $this->assertEquals('__construct', $definition->getInstantiator('ZendTest\Di\TestAsset\CompilerClasses\A')); $this->assertTrue($definition->hasMethods('ZendTest\Di\TestAsset\CompilerClasses\C')); $this->assertArrayHasKey('setB', $definition->getMethods('ZendTest\Di\TestAsset\CompilerClasses\C')); $this->assertTrue($definition->hasMethod('ZendTest\Di\TestAsset\CompilerClasses\C', 'setB')); $this->assertEquals( array('ZendTest\Di\TestAsset\CompilerClasses\C::setB:0' => array('b', 'ZendTest\Di\TestAsset\CompilerClasses\B', true)), $definition->getMethodParameters('ZendTest\Di\TestAsset\CompilerClasses\C', 'setB') ); }
public function testCompilerAllowReflectionException() { $definition = new CompilerDefinition(); $definition->setAllowReflectionExceptions(); $definition->addDirectory(__DIR__ . '/../TestAsset/InvalidCompilerClasses'); $definition->compile(); $parameters = $definition->getMethodParameters('ZendTest\\Di\\TestAsset\\InvalidCompilerClasses\\InvalidClass', '__construct'); // The exception gets caught before the parameter's class is set $this->assertCount(1, current($parameters)); }
public function testCompilerFileScanner() { $definition = new CompilerDefinition; $definition->addCodeScannerFile(new FileScanner(__DIR__ . '/../TestAsset/CompilerClasses/C.php')); $definition->addCodeScannerFile(new FileScanner(__DIR__ . '/../TestAsset/CompilerClasses/D.php')); $definition->addCodeScannerFile(new FileScanner(__DIR__ . '/../TestAsset/CompilerClasses/E.php')); $definition->compile(); $this->assertContains('ZendTest\Di\TestAsset\CompilerClasses\C', $definition->getClassSupertypes('ZendTest\Di\TestAsset\CompilerClasses\D')); $this->assertContains('ZendTest\Di\TestAsset\CompilerClasses\C', $definition->getClassSupertypes('ZendTest\Di\TestAsset\CompilerClasses\E')); $this->assertContains('ZendTest\Di\TestAsset\CompilerClasses\D', $definition->getClassSupertypes('ZendTest\Di\TestAsset\CompilerClasses\E')); }
/** * Compile Di definitions * * @return array */ private function getDefinition() { if (!file_exists(CACHE_PATH . $this->definitionFile)) { $diCompiler = new CompilerDefinition(); $diCompiler->addDirectory(ROOT_PATH . 'system/mobicms'); $diCompiler->compile(); $definition = $diCompiler->toArrayDefinition()->toArray(); file_put_contents(CACHE_PATH . $this->definitionFile, '<?php return ' . var_export($definition, true) . ';'); return $definition; } else { return include CACHE_PATH . $this->definitionFile; } }
/** * @group ZF2-308 */ public function testStaticMethodsNotIncludedInDefinitions() { $definition = new CompilerDefinition(); $definition->addDirectory(__DIR__ . '/../TestAsset/SetterInjection'); $definition->compile(); $this->assertTrue($definition->hasMethod('ZendTest\\Di\\TestAsset\\SetterInjection\\StaticSetter', 'setFoo')); $this->assertFalse($definition->hasMethod('ZendTest\\Di\\TestAsset\\SetterInjection\\StaticSetter', 'setName')); }
#!/usr/bin/env php <?php use Zend\Code\Scanner\FileScanner as CodeFileScanner; use Zend\Di\Definition\CompilerDefinition; // Autoloader $vendorDirname = __DIR__ . '/../._test/ZendSkeletonApplication/vendor'; $loader = (require $vendorDirname . '/autoload.php'); $loader->add('WebinoImageThumb', __DIR__ . '/../src'); // Compile Di Definition $diCompiler = new CompilerDefinition(); $diCompiler->addDirectory(__DIR__ . '/../src'); foreach (array() as $file) { $diCompiler->addCodeScannerFile(new CodeFileScanner($file)); } $diCompiler->compile(); $definition = $diCompiler->toArrayDefinition()->toArray(); $dir = __DIR__ . '/../data/di'; is_dir($dir) or mkdir($dir); file_put_contents($dir . '/definition.php', '<?php ' . PHP_EOL . 'return ' . var_export($definition, true) . ';' . PHP_EOL);
public function testHasMethodParameters() { $definition = new CompilerDefinition(); $definition->addDirectory(__DIR__ . '/../TestAsset/ConstructorInjection'); $definition->addDirectory(__DIR__ . '/../TestAsset/SetterInjection'); $definition->addDirectory(__DIR__ . '/../TestAsset/CompilerClasses'); $definition->compile(); // constructor injection $this->assertTrue($definition->hasMethodParameters('ZendTest\\Di\\TestAsset\\ConstructorInjection\\B', '__construct')); // setter injection $this->assertTrue($definition->hasMethodParameters('ZendTest\\Di\\TestAsset\\SetterInjection\\B', 'setA')); // setter injection with method from derived class $this->assertTrue($definition->hasMethodParameters('ZendTest\\Di\\TestAsset\\CompilerClasses\\D', 'setB')); // class does not exist $this->assertFalse($definition->hasMethodParameters('ZendTest\\Di\\TestAsset\\ConstructorInjection\\BB', '__construct')); // method not existing $this->assertFalse($definition->hasMethodParameters('ZendTest\\Di\\TestAsset\\SetterInjection\\B', 'setB')); // method exists but has no parameters $this->assertFalse($definition->hasMethodParameters('ZendTest\\Di\\TestAsset\\SetterInjection\\StaticSetter', 'setFoo')); }