2 declare(strict_types = 1);
18 use org\bovigo\vfs\vfsStream;
19 use org\bovigo\vfs\vfsStreamDirectory;
20 use PHPUnit\Framework\MockObject\MockObject;
25 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
34 protected function setUp()
38 $fixturePath = __DIR__ .
'/Fixtures';
40 $this->
addFiles($structure, [
'file.ai',
'file.ai.jpg'], $fixturePath .
'/file.ai');
41 $this->
addFiles($structure, [
'file.bmp',
'file.bmp.jpg'], $fixturePath .
'/file.bmp');
42 $this->
addFiles($structure, [
'file.gif',
'file.gif.jpg'], $fixturePath .
'/file.gif');
43 $this->
addFiles($structure, [
'file.fax',
'file.fax.jpg'], $fixturePath .
'/file.fax');
44 $this->
addFiles($structure, [
'file.jpg',
'file.jpg.png'], $fixturePath .
'/file.jpg');
45 $this->
addFiles($structure, [
'file.png',
'file.png.jpg'], $fixturePath .
'/file.png');
46 $this->
addFiles($structure, [
'file.svg',
'file.svg.jpg'], $fixturePath .
'/file.svg');
47 $this->
addFiles($structure, [
'file.tif',
'file.tif.jpg'], $fixturePath .
'/file.tif');
48 $this->
addFiles($structure, [
'file.webp',
'file.webp.jpg'], $fixturePath .
'/file.webp');
49 $this->
addFiles($structure, [
'file.pdf',
'file.pdf.jpg'], $fixturePath .
'/file.pdf');
50 $this->
addFiles($structure, [
'file.ps',
'file.ps.jpg'], $fixturePath .
'/file.ps');
51 $this->
addFiles($structure, [
'file.eps',
'file.eps.jpg'], $fixturePath .
'/file.eps');
52 $this->directory = vfsStream::setup(
'root',
null, $structure);
57 unset($this->directory);
67 'file.pdf' => [
'file.pdf',
null,
'\'pdf:{directory}/file.pdf\
''],
68 'file.pdf[0]' => [
'file.pdf', 0,
'\'pdf:{directory}/file.pdf[0]\
''],
83 $filePath = sprintf(
'%s/%s', $this->directory->url(), $fileName);
85 self::assertSame($expectation, (
string)$file);
94 if (DIRECTORY_SEPARATOR ===
'\\') {
96 'without frame' => [
'file.pdf',
null,
'"pdf:{directory}/file.pdf"'],
97 'with first frame' => [
'file.pdf', 0,
'"pdf:{directory}/file.pdf[0]"'],
98 'special literals' => [
'\'`%$!
".png', 0, '"png:{directory}/\
'` $ .png[0]"'],
103 'without frame' => [
'file.pdf',
null,
'\'pdf:{directory}/file.pdf\
''],
104 'with first frame' => [
'file.pdf', 0,
'\'pdf:{directory}/file.pdf[0]\
''],
105 'special literals' => [
'\'`%$!
".png', 0, '\'png:{directory}/\'\\\'\'`%$!".png[0]\
''],
117 public function resultIsEscaped(
string $fileName, ?
int $frame,
string $expectation)
120 $filePath = sprintf(
'%s/%s', $this->directory->url(), $fileName);
122 self::assertSame($expectation, (
string)$file);
131 'file.ai' => [
'file.ai',
'\'pdf:{directory}/file.ai\
''],
132 'file.ai.jpg' => [
'file.ai.jpg',
'\'pdf:{directory}/file.ai.jpg\
''],
133 'file.gif' => [
'file.gif',
'\'gif:{directory}/file.gif\
''],
134 'file.gif.jpg' => [
'file.gif.jpg',
'\'gif:{directory}/file.gif.jpg\
''],
135 'file.jpg' => [
'file.jpg',
'\'jpg:{directory}/file.jpg\
''],
136 'file.jpg.png' => [
'file.jpg.png',
'\'jpg:{directory}/file.jpg.png\
''],
137 'file.png' => [
'file.png',
'\'png:{directory}/file.png\
''],
138 'file.png.jpg' => [
'file.png.jpg',
'\'png:{directory}/file.png.jpg\
''],
139 'file.svg' => [
'file.svg',
'\'svg:{directory}/file.svg\
''],
140 'file.svg.jpg' => [
'file.svg.jpg',
'\'svg:{directory}/file.svg.jpg\
''],
141 'file.tif' => [
'file.tif',
'\'tif:{directory}/file.tif\
''],
142 'file.tif.jpg' => [
'file.tif.jpg',
'\'tif:{directory}/file.tif.jpg\
''],
143 'file.webp' => [
'file.webp',
'\'webp:{directory}/file.webp\
''],
144 'file.webp.jpg' => [
'file.webp.jpg',
'\'webp:{directory}/file.webp.jpg\
''],
145 'file.pdf' => [
'file.pdf',
'\'pdf:{directory}/file.pdf\
''],
146 'file.pdf.jpg' => [
'file.pdf.jpg',
'\'pdf:{directory}/file.pdf.jpg\
''],
148 'file.ps.jpg' => [
'file.ps.jpg',
'\'jpg:{directory}/file.ps.jpg\
''],
149 'file.eps.jpg' => [
'file.eps.jpg',
'\'jpg:{directory}/file.eps.jpg\
''],
163 $filePath = sprintf(
'%s/%s', $this->directory->url(), $fileName);
165 self::assertSame($expectation, (
string)$file);
177 'file.ai.jpg' => [
'file.ai.jpg',
'\'jpg:{directory}/file.ai.jpg\
'',
'inode/x-empty'],
178 'file.bmp.jpg' => [
'file.bmp.jpg',
'\'jpg:{directory}/file.bmp.jpg\
'',
'inode/x-empty'],
179 'file.fax.jpg' => [
'file.fax.jpg',
'\'jpg:{directory}/file.fax.jpg\
'',
'inode/x-empty'],
180 'file.gif.jpg' => [
'file.gif.jpg',
'\'jpg:{directory}/file.gif.jpg\
'',
'inode/x-empty'],
181 'file.jpg' => [
'file.jpg',
'\'jpg:{directory}/file.jpg\
'',
'inode/x-empty'],
182 'file.jpg.png' => [
'file.jpg.png',
'\'png:{directory}/file.jpg.png\
'',
'inode/x-empty'],
183 'file.png' => [
'file.png',
'\'png:{directory}/file.png\
'',
'inode/x-empty'],
184 'file.png.jpg' => [
'file.png.jpg',
'\'jpg:{directory}/file.png.jpg\
'',
'inode/x-empty'],
185 'file.svg.jpg' => [
'file.svg.jpg',
'\'jpg:{directory}/file.svg.jpg\
'',
'inode/x-empty'],
186 'file.tif' => [
'file.tif',
'\'tif:{directory}/file.tif\
'',
'inode/x-empty'],
187 'file.tif.jpg' => [
'file.tif.jpg',
'\'jpg:{directory}/file.tif.jpg\
'',
'inode/x-empty'],
188 'file.webp' => [
'file.webp',
'\'webp:{directory}/file.webp\
'',
'inode/x-empty'],
189 'file.webp.jpg' => [
'file.webp.jpg',
'\'jpg:{directory}/file.webp.jpg\
'',
'inode/x-empty'],
190 'file.pdf.jpg' => [
'file.pdf.jpg',
'\'jpg:{directory}/file.pdf.jpg\
'',
'inode/x-empty'],
206 $filePath = sprintf(
'%s/%s', $this->directory->url(), $fileName);
208 self::assertSame($expectation, (
string)$file);
217 'file.fax' => [
'file.fax',
'\'g3:{directory}/file.fax\
''],
218 'file.bmp' => [
'file.bmp',
'\'dib:{directory}/file.bmp\
''],
231 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'FileInfo'][
'fileExtensionToMimeType'][
'g3'] =
'image/g3fax';
232 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'FileInfo'][
'fileExtensionToMimeType'][
'fax'] =
'image/g3fax';
233 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'FileInfo'][
'fileExtensionToMimeType'][
'dib'] =
'image/x-ms-bmp';
234 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'FileInfo'][
'fileExtensionToMimeType'][
'bmp'] =
'image/x-ms-bmp';
237 $filePath = sprintf(
'%s/%s', $this->directory->url(), $fileName);
239 self::assertSame($expectation, (
string)$file);
248 'file.ps' => [
'file.ps'],
249 'file.eps' => [
'file.eps'],
251 'file.ai' => [
'file.ai',
'inode/x-empty'],
252 'file.svg' => [
'file.svg',
'inode/x-empty'],
253 'file.pdf' => [
'file.pdf',
'inode/x-empty'],
266 self::expectException(Exception::class);
267 self::expectExceptionCode(1550060977);
269 if ($mimeType !==
null) {
273 $filePath = sprintf(
'%s/%s', $this->directory->url(), $fileName);
283 'file.ps' => [
'file.ps'],
284 'file.eps' => [
'file.eps'],
296 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'FileInfo'][
'fileExtensionToMimeType'][
'ps'] =
'image/x-see-no-evil';
297 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'FileInfo'][
'fileExtensionToMimeType'][
'eps'] =
'image/x-see-no-evil';
299 self::expectException(Exception::class);
300 self::expectExceptionCode(1550060977);
302 $filePath = sprintf(
'%s/%s', $this->directory->url(), $fileName);
311 private function addFiles(array &$structure, array $fileNames,
string $sourcePath): void
313 $structure = array_merge(
317 file_get_contents($sourcePath)
330 [$this->directory->url()],
342 $fileInfo = $this->getAccessibleMock(
344 [
'getMimeType',
'getMimeExtensions'],
349 $fileInfo->expects(self::atLeastOnce())->method(
'getMimeType')->willReturn($mimeType);
350 $fileInfo->expects(self::atLeastOnce())->method(
'getMimeExtensions')->willReturn($mimeExtensions);
351 GeneralUtility::addInstance(FileInfo::class, $fileInfo);