37 foreach ($this->fakedExtensions as $extension => $dummy) {
40 foreach ($this->resourcesToRemove as $resource) {
41 if (file_exists($resource) && is_file($resource)) {
43 } elseif(file_exists($resource) && is_dir($resource)) {
58 $extKey = strtolower($this->
getUniqueId(
'testing'));
59 $absExtPath = PATH_site .
'typo3conf/ext/' . $extKey .
'/';
60 $relPath =
'typo3conf/ext/' . $extKey .
'/';
61 $this->fakedExtensions[$extKey] = array(
62 'siteRelPath' => $relPath,
63 'siteAbsPath' => $absExtPath
65 if ($extkeyOnly === TRUE) {
78 $fileHandlerMock = $this->
getAccessibleMock(
'TYPO3\\CMS\\Extensionmanager\\Utility\\FileHandlingUtility', array(
'removeDirectory',
'addDirectory'));
79 $fileHandlerMock->expects($this->once())->method(
'removeDirectory')->with(PATH_site .
'typo3conf/ext/' . $extKey .
'/');
80 $fileHandlerMock->_call(
'makeAndClearExtensionDir', $extKey);
91 array(
'foo/bar' . chr(0)),
102 $fileHandlerMock = $this->
getAccessibleMock(
'TYPO3\\CMS\\Extensionmanager\\Utility\\FileHandlingUtility', array(
'dummy'));
103 $fileHandlerMock->_call(
'getAbsolutePath', $invalidRelativePath);
111 array(
'foo/../bar', PATH_site .
'bar'),
112 array(
'bas', PATH_site .
'bas'),
123 $fileHandlerMock = $this->
getAccessibleMock(
'TYPO3\\CMS\\Extensionmanager\\Utility\\FileHandlingUtility', array(
'dummy'));
124 $this->assertSame($expectedAbsolutePath, $fileHandlerMock->_call(
'getAbsolutePath', $validRelativePath));
133 $fileHandlerMock = $this->
getAccessibleMock(
'TYPO3\\CMS\\Extensionmanager\\Utility\\FileHandlingUtility', array(
'removeDirectory',
'addDirectory'));
134 $fileHandlerMock->expects($this->once())->method(
'addDirectory')->with(PATH_site .
'typo3conf/ext/' . $extKey .
'/');
135 $fileHandlerMock->_call(
'makeAndClearExtensionDir', $extKey);
144 $fileHandlerMock = $this->
getAccessibleMock(
'TYPO3\\CMS\\Extensionmanager\\Utility\\FileHandlingUtility', array(
'removeDirectory',
'addDirectory'));
145 $fileHandlerMock->_call(
'makeAndClearExtensionDir',
'testing123',
'fakepath');
154 $fileHandlerMock = $this->
getAccessibleMock(
'TYPO3\\CMS\\Extensionmanager\\Utility\\FileHandlingUtility', array(
'dummy'));
155 $this->assertFalse(is_dir($extDirPath));
156 $fileHandlerMock->_call(
'addDirectory', $extDirPath);
157 $this->assertTrue(is_dir($extDirPath));
166 $fileHandlerMock = $this->
getAccessibleMock(
'TYPO3\\CMS\\Extensionmanager\\Utility\\FileHandlingUtility', array(
'dummy'));
167 $this->assertTrue(is_dir($extDirPath));
168 $fileHandlerMock->_call(
'removeDirectory', $extDirPath);
169 $this->assertFalse(is_dir($extDirPath));
177 $absoluteSymlinkPath = PATH_site .
'typo3temp/' . $this->
getUniqueId(
'test_symlink_');
178 $absoluteFilePath = PATH_site .
'typo3temp/' . $this->
getUniqueId(
'test_file_');
179 touch($absoluteFilePath);
180 $this->resourcesToRemove[] = $absoluteFilePath;
181 symlink($absoluteFilePath, $absoluteSymlinkPath);
182 $fileHandler = new \TYPO3\CMS\Extensionmanager\Utility\FileHandlingUtility();
183 $fileHandler->removeDirectory($absoluteSymlinkPath);
184 $this->assertFalse(is_link($absoluteSymlinkPath));
192 $absoluteSymlinkPath = PATH_site .
'typo3temp/' . $this->
getUniqueId(
'test_symlink_');
193 $absoluteDirectoryPath = PATH_site .
'typo3temp/' . $this->
getUniqueId(
'test_dir_') .
'/';
194 $relativeFilePath = $this->
getUniqueId(
'test_file_');
196 mkdir($absoluteDirectoryPath);
197 touch($absoluteDirectoryPath . $relativeFilePath);
199 $this->resourcesToRemove[] = $absoluteDirectoryPath . $relativeFilePath;
200 $this->resourcesToRemove[] = $absoluteDirectoryPath;
202 symlink($absoluteDirectoryPath, $absoluteSymlinkPath);
204 $fileHandler = new \TYPO3\CMS\Extensionmanager\Utility\FileHandlingUtility();
205 $fileHandler->removeDirectory($absoluteSymlinkPath);
206 $this->assertTrue(is_file($absoluteDirectoryPath . $relativeFilePath));
214 $extensionData = array(
217 $fileHandlerMock = $this->
getAccessibleMock(
'TYPO3\\CMS\\Extensionmanager\\Utility\\FileHandlingUtility', array(
218 'makeAndClearExtensionDir',
220 'extractFilesArrayFromExtensionData',
221 'extractDirectoriesFromExtensionData',
222 'createDirectoriesForExtensionFiles',
223 'writeExtensionFiles' 225 $fileHandlerMock->expects($this->once())->method(
'extractFilesArrayFromExtensionData')->will($this->returnValue(array()));
226 $fileHandlerMock->expects($this->once())->method(
'extractDirectoriesFromExtensionData')->will($this->returnValue(array()));
227 $fileHandlerMock->expects($this->once())->method(
'makeAndClearExtensionDir')->with($extensionData[
'extKey']);
228 $fileHandlerMock->_call(
'unpackExtensionFromExtensionDataArray', $extensionData);
236 $extensionData = array(
240 'ChangeLog' => array(
241 'name' =>
'ChangeLog',
243 'mtime' => 1219448527,
244 'is_executable' => FALSE,
245 'content' =>
'some content to write' 250 'mtime' => 1219448527,
251 'is_executable' => FALSE,
254 'doc/ChangeLog' => array(
255 'name' =>
'ChangeLog',
257 'mtime' => 1219448527,
258 'is_executable' => FALSE,
259 'content' =>
'some content to write' 262 $cleanedFiles = array(
263 'ChangeLog' => array(
264 'name' =>
'ChangeLog',
266 'mtime' => 1219448527,
267 'is_executable' => FALSE,
268 'content' =>
'some content to write' 270 'doc/ChangeLog' => array(
271 'name' =>
'ChangeLog',
273 'mtime' => 1219448527,
274 'is_executable' => FALSE,
275 'content' =>
'some content to write' 278 $directories = array(
283 $fileHandlerMock = $this->
getAccessibleMock(
'TYPO3\\CMS\\Extensionmanager\\Utility\\FileHandlingUtility', array(
284 'makeAndClearExtensionDir',
286 'extractFilesArrayFromExtensionData',
287 'extractDirectoriesFromExtensionData',
288 'createDirectoriesForExtensionFiles',
289 'writeExtensionFiles' 291 $fileHandlerMock->expects($this->once())->method(
'extractFilesArrayFromExtensionData')->will($this->returnValue($files));
292 $fileHandlerMock->expects($this->once())->method(
'extractDirectoriesFromExtensionData')->will($this->returnValue($directories));
293 $fileHandlerMock->expects($this->once())->method(
'createDirectoriesForExtensionFiles')->with($directories);
294 $fileHandlerMock->expects($this->once())->method(
'writeExtensionFiles')->with($cleanedFiles);
295 $fileHandlerMock->_call(
'unpackExtensionFromExtensionDataArray', $extensionData);
303 $extensionData = array(
306 'filename1' =>
'dummycontent',
307 'filename2' =>
'dummycontent2' 310 $fileHandlerMock = $this->
getAccessibleMock(
'TYPO3\\CMS\\Extensionmanager\\Utility\\FileHandlingUtility', array(
'makeAndClearExtensionDir'));
311 $extractedFiles = $fileHandlerMock->_call(
'extractFilesArrayFromExtensionData', $extensionData);
312 $this->assertArrayHasKey(
'filename1', $extractedFiles);
313 $this->assertArrayHasKey(
'filename2', $extractedFiles);
322 'ChangeLog' => array(
323 'name' =>
'ChangeLog',
325 'mtime' => 1219448527,
326 'is_executable' => FALSE,
327 'content' =>
'some content to write' 332 'mtime' => 1219448533,
333 'is_executable' => FALSE,
334 'content' =>
'FEEL FREE TO ADD SOME DOCUMENTATION HERE' 337 $rootPath = ($extDirPath = $this->fakedExtensions[$this->
createFakeExtension()][
'siteAbsPath']);
338 $fileHandlerMock = $this->
getAccessibleMock(
'TYPO3\\CMS\\Extensionmanager\\Utility\\FileHandlingUtility', array(
'makeAndClearExtensionDir'));
339 $fileHandlerMock->_call(
'writeExtensionFiles', $files, $rootPath);
340 $this->assertTrue(file_exists($rootPath .
'ChangeLog'));
349 'ChangeLog' => array(
350 'name' =>
'ChangeLog',
352 'mtime' => 1219448527,
353 'is_executable' => FALSE,
354 'content' =>
'some content to write' 359 'mtime' => 1219448527,
360 'is_executable' => FALSE,
363 'doc/ChangeLog' => array(
364 'name' =>
'ChangeLog',
366 'mtime' => 1219448527,
367 'is_executable' => FALSE,
368 'content' =>
'some content to write' 370 'doc/README' => array(
373 'mtime' => 1219448533,
374 'is_executable' => FALSE,
375 'content' =>
'FEEL FREE TO ADD SOME DOCUMENTATION HERE' 377 'mod/doc/README' => array(
380 'mtime' => 1219448533,
381 'is_executable' => FALSE,
382 'content' =>
'FEEL FREE TO ADD SOME DOCUMENTATION HERE' 385 $fileHandlerMock = $this->
getAccessibleMock(
'TYPO3\\CMS\\Extensionmanager\\Utility\\FileHandlingUtility', array(
'makeAndClearExtensionDir'));
386 $extractedDirectories = $fileHandlerMock->_call(
'extractDirectoriesFromExtensionData', $files);
391 $this->assertSame($expected, array_values($extractedDirectories));
400 $directories = array(
404 $fileHandlerMock = $this->
getAccessibleMock(
'TYPO3\\CMS\\Extensionmanager\\Utility\\FileHandlingUtility', array(
'makeAndClearExtensionDir'));
405 $this->assertFalse(is_dir($rootPath .
'doc/'));
406 $this->assertFalse(is_dir($rootPath .
'mod/doc/'));
407 $fileHandlerMock->_call(
'createDirectoriesForExtensionFiles', $directories, $rootPath);
408 $this->assertTrue(is_dir($rootPath .
'doc/'));
409 $this->assertTrue(is_dir($rootPath .
'mod/doc/'));
418 $extensionData = array(
421 'title' =>
'Plugin cache engine',
422 'description' =>
'Provides an interface to cache plugin content elements based on 4.3 caching framework',
423 'category' =>
'Frontend',
427 $rootPath = $this->fakedExtensions[$extKey][
'siteAbsPath'];
428 $emConfUtilityMock = $this->
getAccessibleMock(
'TYPO3\\CMS\\Extensionmanager\\Utility\\EmConfUtility', array(
'constructEmConf'));
429 $emConfUtilityMock->expects($this->once())->method(
'constructEmConf')->with($extensionData)->will($this->returnValue(var_export($extensionData[
'EM_CONF'], TRUE)));
430 $fileHandlerMock = $this->
getAccessibleMock(
'TYPO3\\CMS\\Extensionmanager\\Utility\\FileHandlingUtility', array(
'makeAndClearExtensionDir'));
431 $fileHandlerMock->_set(
'emConfUtility', $emConfUtilityMock);
432 $fileHandlerMock->_call(
'writeEmConfToFile', $extensionData, $rootPath);
433 $this->assertTrue(file_exists($rootPath .
'ext_emconf.php'));
439 protected function getPreparedFileHandlingMockForDirectoryCreationTests() {
441 $fileHandlerMock = $this->getMock(
'TYPO3\\CMS\\Extensionmanager\\Utility\\FileHandlingUtility', array(
'createNestedDirectory',
'getAbsolutePath',
'directoryExists'));
442 $fileHandlerMock->expects($this->any())
443 ->method(
'getAbsolutePath')
444 ->will($this->returnArgument(0));
445 return $fileHandlerMock;
452 $fileHandlerMock = $this->getPreparedFileHandlingMockForDirectoryCreationTests();
453 $fileHandlerMock->expects($this->never())
454 ->method(
'createNestedDirectory');
455 $fileHandlerMock->ensureConfiguredDirectoriesExist(array(
466 $fileHandlerMock = $this->getPreparedFileHandlingMockForDirectoryCreationTests();
467 $fileHandlerMock->expects($this->never())
468 ->method(
'createNestedDirectory');
469 $fileHandlerMock->ensureConfiguredDirectoriesExist(array(
480 $fileHandlerMock = $this->getPreparedFileHandlingMockForDirectoryCreationTests();
481 $fileHandlerMock->expects($this->once())
482 ->method(
'createNestedDirectory')
483 ->with(
'uploads/tx_foobar/');
484 $fileHandlerMock->ensureConfiguredDirectoriesExist(array(
495 $fileHandlerMock = $this->getPreparedFileHandlingMockForDirectoryCreationTests();
496 $fileHandlerMock->expects($this->exactly(2))
497 ->method(
'createNestedDirectory')
498 ->will($this->returnCallback(
function($path) {
499 if (!in_array($path, array(
'foo/bar',
'baz/foo'))) {
500 throw new \Exception(
'Path "' . $path .
'" is not expected to be created');
505 $fileHandlerMock->ensureConfiguredDirectoriesExist(array(
507 'createDirs' =>
'foo/bar, baz/foo',
516 $fileHandlerMock = $this->getPreparedFileHandlingMockForDirectoryCreationTests();
517 $fileHandlerMock->expects($this->exactly(3))
518 ->method(
'directoryExists')
519 ->will($this->returnValue(TRUE));
520 $fileHandlerMock->expects($this->never())
521 ->method(
'createNestedDirectory');
522 $fileHandlerMock->ensureConfiguredDirectoriesExist(array(
525 'createDirs' =>
'foo/bar, baz/foo',
538 $extensionRoot = $this->fakedExtensions[$extKey][
'siteAbsPath'];
542 'TYPO3\\CMS\\Extensionmanager\\Utility\\FileHandlingUtility',
543 array(
'getAbsoluteExtensionPath',
'getExtensionVersion')
545 $fileHandlerMock->expects($this->any())
546 ->method(
'getAbsoluteExtensionPath')
547 ->will($this->returnValue($extensionRoot));
548 $fileHandlerMock->expects($this->any())
549 ->method(
'getExtensionVersion')
550 ->will($this->returnValue(
'0.0.0'));
553 touch($extensionRoot .
'emptyFile.txt');
554 file_put_contents($extensionRoot .
'notEmptyFile.txt',
'content');
555 touch($extensionRoot .
'.hiddenFile');
556 mkdir($extensionRoot .
'emptyDir');
557 mkdir($extensionRoot .
'notEmptyDir');
558 touch($extensionRoot .
'notEmptyDir/file.txt');
561 $filename = $fileHandlerMock->_call(
'createZipFileFromExtension', $extKey);
563 $expectedFilename = PATH_site .
'typo3temp/' . $extKey .
'_0.0.0_' . date(
'YmdHi') .
'.zip';
564 $this->assertEquals($expectedFilename, $filename,
'Archive file name differs from expectation');
567 $this->assertTrue(file_exists($filename),
'Zip file not created');
568 $this->resourcesToRemove[] = $filename;
571 $archive = new \ZipArchive();
572 $this->assertTrue($archive->open($filename),
'Unable to open archive');
573 $this->assertEquals($archive->statName(
'emptyFile.txt')->size, 0,
'Empty file not in archive');
574 $this->assertEquals($archive->getFromName(
'notEmptyFile.txt'),
'content',
'Expected content not found');
575 $this->assertFalse($archive->statName(
'.hiddenFile'),
'Hidden file not in archive');
576 $this->assertTrue(is_array($archive->statName(
'emptyDir/')),
'Empty directory not in archive');
577 $this->assertTrue(is_array($archive->statName(
'notEmptyDir/')),
'Not empty directory not in archive');
578 $this->assertTrue(is_array($archive->statName(
'notEmptyDir/file.txt')),
'File within directory not in archive');
581 $this->assertEquals($archive->numFiles, 5,
'Too many or too less files in archive');
makeAndClearExtensionDirAddsDir()
makeAndClearExtensionDirRemovesExtensionDirIfAlreadyExists()
makeAndClearExtensionDirThrowsExceptionOnInvalidPath()
invalidRelativePathDataProvider()
unpackExtensionFromExtensionDataArrayStripsDirectoriesFromFilesArray()
writeExtensionFilesWritesFiles()
validRelativePathDataProvider()
removeDirectoryRemovesSymlink()
static rmdir($path, $removeNonEmpty=FALSE)
unpackExtensionFromExtensionDataArrayCreatesTheExtensionDirectory()
createZipFileFromExtensionGeneratesCorrectArchive()
getAbsolutePathThrowsExceptionForInvalidRelativePaths($invalidRelativePath)
writeEmConfWritesEmConfFile()
createFakeExtension($extkeyOnly=FALSE)
configuredUploadFolderIsCreatedIfRequested()
uploadFolderIsNotCreatedIfNotRequested()
createDirectoriesForExtensionFilesCreatesDirectories()
getAccessibleMock( $originalClassName, array $methods=array(), array $arguments=array(), $mockClassName='', $callOriginalConstructor=TRUE, $callOriginalClone=TRUE, $callAutoload=TRUE)
removeDirectoryRemovesDirectory()
addDirectoryAddsDirectory()
removeDirectoryDoesNotRemoveContentOfSymlinkedTargetDirectory()
extractFilesArrayFromExtensionDataReturnsFileArray()
getAbsolutePathReturnsAbsolutePathForValidRelativePaths($validRelativePath, $expectedAbsolutePath)
configuredDirectoriesAreNotCreatedIfTheyAlreadyExist()
configuredAdditionalDirectoriesAreCreatedIfRequested()
additionalFoldersAreNotCreatedIfNotRequested()
extractDirectoriesFromExtensionDataExtractsDirectories()