2 declare(strict_types = 1);
18 use PHPUnit\Framework\MockObject\MockObject;
26 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
38 'simple page - old style' => [
49 'page with type - old style' => [
56 't3://page?uid=13&type=31'
58 'page with type and fragment - old style' => [
64 'fragment' =>
'uncool'
66 't3://page?uid=13&type=31#uncool'
68 'page with type and parameters and fragment - old style' => [
69 '13,31?unbel=ievable#uncool',
74 'parameters' =>
'unbel=ievable',
75 'fragment' =>
'uncool'
77 't3://page?uid=13&type=31&unbel=ievable#uncool'
79 'page with type and parameters as another parameter and fragment - old style' => [
80 '13,31,&unbel=ievable&but=possibly#uncool',
85 'parameters' =>
'unbel=ievable&but=possibly',
86 'fragment' =>
'uncool'
88 't3://page?uid=13&type=31&unbel=ievable&but=possibly#uncool'
90 'page with type and parameters as third parameter and explicitly allow type=0' => [
96 'parameters' =>
'param=2',
98 't3://page?uid=1&type=0¶m=2'
100 'page with alias - old style' => [
104 'pagealias' =>
'alias13'
106 't3://page?alias=alias13'
108 'record of table - old 2-part identifier' => [
109 'record:tx_myext_entity:456',
112 'identifier' =>
'tx_myext_entity',
113 'table' =>
'tx_myext_entity',
115 'url' =>
'record:tx_myext_entity:456',
116 'value' =>
'tx_myext_entity:456'
118 't3://record?identifier=tx_myext_entity&uid=456'
120 'record of table - old 3-part identifier' => [
121 'record:usage1:tx_myext_entity:456',
124 'identifier' =>
'usage1',
125 'table' =>
'tx_myext_entity',
127 'url' =>
'record:usage1:tx_myext_entity:456',
128 'value' =>
'usage1:tx_myext_entity:456'
130 't3://record?identifier=usage1&uid=456'
146 $this->assertEquals($expected, $subject->resolve($input));
162 $this->assertEquals($expected, $subject->asString($parameters));
181 'file without FAL - VERY old style' => [
182 'fileadmin/on/steroids.png',
185 'file' =>
'fileadmin/on/steroids.png'
187 't3://file?identifier=fileadmin%2Fon%2Fsteroids.png'
189 'file without FAL and anchor - VERY old style' => [
190 'fileadmin/on/steroids.png#page-23',
193 'file' =>
'fileadmin/on/steroids.png',
194 'fragment' =>
'page-23'
196 't3://file?identifier=fileadmin%2Fon%2Fsteroids.png#page-23'
198 'file without FAL with file prefix - VERY old style' => [
199 'file:fileadmin/on/steroids.png',
202 'file' =>
'fileadmin/on/steroids.png'
204 't3://file?identifier=fileadmin%2Fon%2Fsteroids.png'
206 'file without FAL with file prefix and anchor - VERY old style' => [
207 'file:fileadmin/on/steroids.png#page-13',
210 'file' =>
'fileadmin/on/steroids.png',
211 'fragment' =>
'page-13'
213 't3://file?identifier=fileadmin%2Fon%2Fsteroids.png#page-13'
215 'file with FAL uid - old style' => [
223 'file with FAL uid and anchor - old style' => [
228 'fragment' =>
'page-13',
230 't3://file?uid=23#page-13'
232 'folder without FAL - VERY old style' => [
233 'fileadmin/myimages/',
236 'folder' =>
'fileadmin/myimages/'
238 't3://folder?storage=0&identifier=%2Ffileadmin%2Fmyimages%2F'
240 'folder with combined identifier and file prefix (FAL) - old style' => [
244 'folder' =>
'2:/myimages/'
246 't3://folder?storage=2&identifier=%2Fmyimages%2F'
264 $storage = $this->getMockBuilder(ResourceStorage::class)
265 ->disableOriginalConstructor()
268 $factory = $this->getMockBuilder(ResourceFactory::class)
269 ->disableOriginalConstructor()
274 $fileObject =
new File([
'identifier' => $expected[
'file']], $storage);
275 $factory->expects($this->any())->method(
'getFileObjectFromCombinedIdentifier')->with($expected[
'file'])
276 ->willReturn($fileObject);
277 $factory->expects($this->any())->method(
'retrieveFileOrFolderObject')->with($expected[
'file'])
278 ->willReturn($fileObject);
279 $factory->expects($this->any())->method(
'getFileObject')->with($expected[
'file'])->willReturn($fileObject);
280 $expected[
'file'] = $fileObject;
284 if (strpos($expected[
'folder'],
'file:') === 0) {
285 $expected[
'folder'] = substr($expected[
'folder'], 5);
287 $folderObject =
new Folder($storage, $expected[
'folder'], $expected[
'folder']);
288 $factory->expects($this->any())->method(
'retrieveFileOrFolderObject')->with($expected[
'folder'])
289 ->willReturn($folderObject);
290 $factory->expects($this->any())->method(
'getFolderObjectFromCombinedIdentifier')->with($expected[
'folder'])
291 ->willReturn($folderObject);
292 $expected[
'folder'] = $folderObject;
296 $subject = $this->getAccessibleMock(LegacyLinkNotationConverter::class, [
'dummy']);
297 $subject->_set(
'resourceFactory', $factory);
298 $this->assertEquals($expected, $subject->resolve($input));
317 $fileObject = $this->getMockBuilder(File::class)
318 ->setMethods([
'getUid',
'getIdentifier'])
319 ->disableOriginalConstructor()
323 $uid = $parameters[
'file'];
325 $fileObject->expects($this->once())->method(
'getUid')->willReturn($uid);
326 $fileObject->expects($this->any())->method(
'getIdentifier')->willReturn($parameters[
'file']);
327 $parameters[
'file'] = $fileObject;
331 if (strpos($parameters[
'folder'],
'file:') === 0) {
332 $parameters[
'folder'] = substr($parameters[
'folder'], 5);
336 $parameters[
'folder'] =
'0:' . $parameters[
'folder'];
338 $folderObject = $this->getMockBuilder(Folder::class)
339 ->setMethods([
'getCombinedIdentifier',
'getStorage',
'getIdentifier'])
340 ->disableOriginalConstructor()
342 $folderObject->expects($this->any())->method(
'getCombinedIdentifier')->willReturn($parameters[
'folder']);
343 $folderData = explode(
':', $parameters[
'folder']);
345 $storage = $this->getMockBuilder(ResourceStorage::class)
346 ->setMethods([
'getUid'])
347 ->disableOriginalConstructor()
349 $storage->method(
'getUid')->willReturn($folderData[0]);
350 $folderObject->expects($this->any())->method(
'getStorage')->willReturn($storage);
351 $folderObject->expects($this->any())->method(
'getIdentifier')->willReturn($folderData[1]);
352 $parameters[
'folder'] = $folderObject;
356 $this->assertEquals($expected, $subject->asString($parameters));
365 'URL encoded local' => [
366 'phar%3a//some-file.jpg',
368 'URL encoded absolute' => [
369 'phar%3a///path/some-file.jpg',
371 'not URL encoded local' => [
372 'phar://some-file.jpg',
374 'not URL encoded absolute' => [
375 'phar:///path/some-file.jpg',
389 $this->expectException(\RuntimeException::class);
390 $this->expectExceptionCode(1530030673);