/** * Fix a race condition that GeneralUtility is not available * during tearDown if fiddling with the autoloader where * backupGlobals is not set up again yet */ public function setUp() { vfsStream::setup('Test'); mkdir('vfs://Test/Packages/Application/Acme.MyApp/Classes/', 0770, TRUE); file_put_contents('vfs://Test/Packages/Application/Acme.MyApp/composer.json', '{"name": "acme/myapp", "type": "flow-test"}'); $package1 = new \TYPO3\Flow\Package\Package($this->getMock('TYPO3\\Flow\\Package\\PackageManager'), 'Acme.MyApp', 'vfs://Test/Packages/Application/Acme.MyApp/', 'Classes'); mkdir('vfs://Test/Packages/Application/Acme.MyAppAddon/Classes/', 0770, TRUE); file_put_contents('vfs://Test/Packages/Application/Acme.MyAppAddon/composer.json', '{"name": "acme/myappaddon", "type": "flow-test"}'); $package2 = new \TYPO3\Flow\Package\Package($this->getMock('TYPO3\\Flow\\Package\\PackageManager'), 'Acme.MyAppAddon', 'vfs://Test/Packages/Application/Acme.MyAppAddon/', 'Classes'); $mockClassAliasMap = $this->getMock('TYPO3\\CMS\\Core\\Core\\ClassAliasMap', array('setPackagesButDontBuildMappingFilesReturnClassNameToAliasMappingInstead', 'buildMappingFiles'), array(), '', FALSE); $mockClassAliasMap->expects($this->any())->method('setPackagesButDontBuildMappingFilesReturnClassNameToAliasMappingInstead')->will($this->returnValue(array())); $this->orinalClassAliasMap = \TYPO3\CMS\Core\Core\Bootstrap::getInstance()->getEarlyInstance('TYPO3\\CMS\\Core\\Core\\ClassAliasMap'); $this->classLoader = new \TYPO3\CMS\Core\Core\ClassLoader(\TYPO3\CMS\Core\Core\Bootstrap::getInstance()->getApplicationContext()); $this->classLoader->injectClassAliasMap($mockClassAliasMap); $this->classLoader->setPackages(array('Acme.MyApp' => $package1, 'Acme.MyAppAddon' => $package2)); }
/** * Updates the class loader with currently active packages. * This method is currently a slot that monitors the after * extension is installed signal to make the class loader * populate its caches again. * Maybe we find a better solution in the future, but as of now * we have to do this as all caches are flushed after an extension * is installed and the current request might fail otherwise. */ public function updatePackagesForClassLoader() { $this->classLoader->setPackages($this->activePackages); }