/** * @test */ public function url_statTest() { $path = 'mockScheme1://foo/bar'; $flags = STREAM_URL_STAT_LINK; $this->streamWrapperAdapter->expects($this->once())->method('createStreamWrapper')->with($path); $this->mockStreamWrapper->expects($this->once())->method('pathStat')->with($path, $flags)->will($this->returnValue(true)); $this->assertTrue($this->streamWrapperAdapter->url_stat($path, $flags)); }
/** * This test indeed messes with some of the static stuff concerning our * StreamWrapperAdapter setup. But since the dummy stream wrapper is removed again, * this does not do any harm. And registering the "real" wrappers a second * time doesn't do harm, either. * * What is an issue is the static object manager being set to a mocked one, * be careful... * * @test */ public function initializeRegistersFoundStreamWrappers() { $wrapperClassName = 'MockWrapper' . md5(uniqid(mt_rand(), TRUE)); $wrapperSchemeName = $wrapperClassName . 'scheme'; eval('class ' . $wrapperClassName . ' extends \\TYPO3\\Flow\\Resource\\Streams\\ResourceStreamWrapper { static public function getScheme() { return \'' . $wrapperSchemeName . '\'; } }'); $mockStreamWrapperAdapter = new $wrapperClassName(); $mockReflectionService = $this->getMock('TYPO3\\Flow\\Reflection\\ReflectionService'); $mockReflectionService->expects($this->once())->method('getAllImplementationClassNamesForInterface')->with('TYPO3\\Flow\\Resource\\Streams\\StreamWrapperInterface')->will($this->returnValue(array(get_class($mockStreamWrapperAdapter)))); $mockObjectManager = $this->getMock('TYPO3\\Flow\\Object\\ObjectManagerInterface'); $mockObjectManager->expects($this->any())->method('get')->with('TYPO3\\Flow\\Reflection\\ReflectionService')->will($this->returnValue($mockReflectionService)); $resourceManager = new \TYPO3\Flow\Resource\ResourceManager(); $this->inject($resourceManager, 'objectManager', $mockObjectManager); $resourceManager->initialize(); $this->assertContains(get_class($mockStreamWrapperAdapter), \TYPO3\Flow\Resource\Streams\StreamWrapperAdapter::getRegisteredStreamWrappers()); $this->assertArrayHasKey($wrapperSchemeName, \TYPO3\Flow\Resource\Streams\StreamWrapperAdapter::getRegisteredStreamWrappers()); $this->assertContains($wrapperSchemeName, stream_get_wrappers()); stream_wrapper_unregister($wrapperSchemeName); }
/** * Registers a Stream Wrapper Adapter for the resource:// scheme. * * @return void */ protected function initializeStreamWrapper() { $streamWrapperClassNames = static::getStreamWrapperImplementationClassNames($this->objectManager); foreach ($streamWrapperClassNames as $streamWrapperClassName) { $scheme = $streamWrapperClassName::getScheme(); if (in_array($scheme, stream_get_wrappers())) { stream_wrapper_unregister($scheme); } stream_wrapper_register($scheme, \TYPO3\Flow\Resource\Streams\StreamWrapperAdapter::class); StreamWrapperAdapter::registerStreamWrapper($scheme, $streamWrapperClassName); } }
/** * Initialize the stream wrappers. * * @param Bootstrap $bootstrap * @return void */ public static function initializeResources(Bootstrap $bootstrap) { StreamWrapperAdapter::initializeStreamWrapper($bootstrap->getObjectManager()); }
/** * Check for implementations of TYPO3\Flow\Resource\Streams\StreamWrapperInterface and * register them. * * @return void */ public function initialize() { $streamWrapperClassNames = static::getStreamWrapperImplementationClassNames($this->objectManager); foreach ($streamWrapperClassNames as $streamWrapperClassName) { $scheme = $streamWrapperClassName::getScheme(); if (in_array($scheme, stream_get_wrappers())) { stream_wrapper_unregister($scheme); } stream_wrapper_register($scheme, '\\TYPO3\\Flow\\Resource\\Streams\\StreamWrapperAdapter'); \TYPO3\Flow\Resource\Streams\StreamWrapperAdapter::registerStreamWrapper($scheme, $streamWrapperClassName); } // For now this URI is hardcoded, but might be manageable in the future // if additional persistent resources storages are supported. $this->persistentResourcesStorageBaseUri = FLOW_PATH_DATA . 'Persistent/Resources/'; \TYPO3\Flow\Utility\Files::createDirectoryRecursively($this->persistentResourcesStorageBaseUri); $this->importedResources = new \SplObjectStorage(); }