‪TYPO3CMS  ‪main
PathUtilityTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use PHPUnit\Framework\Attributes\DataProvider;
21 use PHPUnit\Framework\Attributes\Test;
24 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
25 
29 final class ‪PathUtilityTest extends UnitTestCase
30 {
31  protected bool ‪$backupEnvironment = true;
32 
36  #[DataProvider('isCommonPrefixResolvedCorrectlyDataProvider')]
37  #[Test]
38  public function ‪isCommonPrefixResolvedCorrectly(array $paths, $expected): void
39  {
40  $commonPrefix = ‪PathUtility::getCommonPrefix($paths);
41  self::assertEquals($expected, $commonPrefix);
42  }
43 
44  public static function ‪isCommonPrefixResolvedCorrectlyDataProvider(): array
45  {
46  return [
47  [
48  [
49  '/var/www/myhost.com/t3lib/',
50  ],
51  '/var/www/myhost.com/t3lib/',
52  ],
53  [
54  [
55  '/var/www/myhost.com/t3lib/',
56  '/var/www/myhost.com/t3lib/',
57  ],
58  '/var/www/myhost.com/t3lib/',
59  ],
60  [
61  [
62  '/var/www/myhost.com/typo3/',
63  '/var/www/myhost.com/t3lib/',
64  ],
65  '/var/www/myhost.com/',
66  ],
67  [
68  [
69  '/var/www/myhost.com/typo3/',
70  '/var/www/myhost.com/typo3',
71  ],
72  '/var/www/myhost.com/typo3/',
73  ],
74  [
75  [
76  '/var/www/myhost.com/typo3',
77  '/var/www/myhost.com/typo3',
78  ],
79  '/var/www/myhost.com/typo3/',
80  ],
81  [
82  [
83  '/var/www/myhost.com/uploads/',
84  '/var/www/myhost.com/typo3/',
85  '/var/www/myhost.com/t3lib/',
86  ],
87  '/var/www/myhost.com/',
88  ],
89  [
90  [
91  '/var/www/myhost.com/uploads/directory/',
92  '/var/www/myhost.com/typo3/sysext/',
93  '/var/www/myhost.com/t3lib/utility/',
94  ],
95  '/var/www/myhost.com/',
96  ],
97  [
98  [
99  'C:\\www\\myhost.com\\t3lib\\',
100  ],
101  'C:/www/myhost.com/t3lib/',
102  ],
103  [
104  [
105  'C:\\www\\myhost.com\\t3lib\\',
106  'C:\\www\\myhost.com\\t3lib\\',
107  ],
108  'C:/www/myhost.com/t3lib/',
109  ],
110  [
111  [
112  'C:\\www\\myhost.com\\typo3\\',
113  'C:\\www\\myhost.com\\t3lib\\',
114  ],
115  'C:/www/myhost.com/',
116  ],
117  [
118  [
119  'C:\\www\\myhost.com\\uploads\\',
120  'C:\\www\\myhost.com\\typo3\\',
121  'C:\\www\\myhost.com\\t3lib\\',
122  ],
123  'C:/www/myhost.com/',
124  ],
125  [
126  [
127  'C:\\www\\myhost.com\\uploads\\directory\\',
128  'C:\\www\\myhost.com\\typo3\\sysext\\',
129  'C:\\www\\myhost.com\\t3lib\\utility\\',
130  ],
131  'C:/www/myhost.com/',
132  ],
133  ];
134  }
135 
141  #[DataProvider('isRelativePathResolvedCorrectlyDataProvider')]
142  #[Test]
143  public function ‪isRelativePathResolvedCorrectly($source, $target, $expected): void
144  {
145  $relativePath = ‪PathUtility::getRelativePath($source, $target);
146  self::assertEquals($expected, $relativePath);
147  }
148 
149  public static function ‪isRelativePathResolvedCorrectlyDataProvider(): array
150  {
151  return [
152  [
153  '/',
154  ‪Environment::getPublicPath() . '/directory',
155  null,
156  ],
157  [
158  ‪Environment::getPublicPath() . '/t3lib/',
159  ‪Environment::getPublicPath() . '/t3lib/',
160  '',
161  ],
162  [
163  ‪Environment::getPublicPath() . '/typo3/',
164  ‪Environment::getPublicPath() . '/t3lib/',
165  '../t3lib/',
166  ],
167  [
169  ‪Environment::getPublicPath() . '/t3lib/',
170  't3lib/',
171  ],
172  [
173  ‪Environment::getPublicPath() . '/t3lib/',
174  ‪Environment::getPublicPath() . '/t3lib/stddb/',
175  'stddb/',
176  ],
177  [
178  ‪Environment::getPublicPath() . '/typo3/sysext/frontend/',
179  ‪Environment::getPublicPath() . '/t3lib/utility/',
180  '../../../t3lib/utility/',
181  ],
182  ];
183  }
184 
190  #[DataProvider('isTrailingSeparatorSanitizedCorrectlyDataProvider')]
191  #[Test]
192  public function ‪isTrailingSeparatorSanitizedCorrectly($path, $separator, $expected): void
193  {
194  $sanitizedPath = ‪PathUtility::sanitizeTrailingSeparator($path, $separator);
195  self::assertEquals($expected, $sanitizedPath);
196  }
197 
199  {
200  return [
201  ['/var/www//', '/', '/var/www/'],
202  ['/var/www/', '/', '/var/www/'],
203  ['/var/www', '/', '/var/www/'],
204  ];
205  }
206 
211  {
212  return [
213  'basic' => [
214  '/abc/def/one.txt',
215  '../two.txt',
216  '/abc/two.txt',
217  ],
218  'same folder' => [
219  '/abc/one.txt',
220  './two.txt',
221  '/abc/two.txt',
222  ],
223  'preserve relative path if path goes above start path' => [
224  'abc/one.txt',
225  '../../two.txt',
226  '../two.txt',
227  ],
228  'preserve absolute path even if path goes above start path' => [
229  '/abc/one.txt',
230  '../../two.txt',
231  '/two.txt',
232  ],
233  'base folder with same folder path' => [
234  '/abc/',
235  './two.txt',
236  '/abc/two.txt',
237  ],
238  'base folder with parent folder path' => [
239  '/abc/bar/',
240  '../foo.txt',
241  '/abc/foo.txt',
242  ],
243  ];
244  }
245 
246  #[DataProvider('getAbsolutePathOfRelativeReferencedFileOrPathResolvesFileCorrectlyDataProvider')]
247  #[Test]
248  public function ‪getAbsolutePathOfRelativeReferencedFileOrPathResolvesFileCorrectly(string $baseFileName, string $includeFileName, string $expectedFileName): void
249  {
250  $resolvedFilename = ‪PathUtility::getAbsolutePathOfRelativeReferencedFileOrPath($baseFileName, $includeFileName);
251  self::assertEquals($expectedFileName, $resolvedFilename);
252  }
253 
260  {
261  return [
262  'removes single-dot-elements' => [
263  'abc/./def/././ghi',
264  'abc/def/ghi',
265  ],
266  'removes ./ at beginning' => [
267  './abc/def/ghi',
268  'abc/def/ghi',
269  ],
270  'removes double-slashes' => [
271  'abc//def/ghi',
272  'abc/def/ghi',
273  ],
274  'removes double-slashes from front, but keeps absolute path' => [
275  '//abc/def/ghi',
276  '/abc/def/ghi',
277  ],
278  'makes double-dot-elements go one level higher, test #1' => [
279  'abc/def/ghi/../..',
280  'abc',
281  ],
282  'makes double-dot-elements go one level higher, test #2' => [
283  'abc/def/ghi/../123/456/..',
284  'abc/def/123',
285  ],
286  'makes double-dot-elements go one level higher, test #3' => [
287  'abc/../../def/ghi',
288  '../def/ghi',
289  ],
290  'makes double-dot-elements go one level higher, test #4' => [
291  'abc/def/ghi//../123/456/..',
292  'abc/def/123',
293  ],
294  'truncates slash at the end' => [
295  'abc/def/ghi/',
296  'abc/def/ghi',
297  ],
298  'keeps slash in front of absolute paths' => [
299  '/abc/def/ghi',
300  '/abc/def/ghi',
301  ],
302  'keeps slash in front of absolute paths even if double-dot-elements want to go higher' => [
303  '/abc/../../def/ghi',
304  '/def/ghi',
305  ],
306  'double-dot-elements want to go higher, more than one segment' => [
307  '/abc/../../../../def/ghi',
308  '/def/ghi',
309  ],
310  'works with EXT-syntax-paths' => [
311  'EXT:abc/def/ghi/',
312  'EXT:abc/def/ghi',
313  ],
314  'truncates ending slash with space' => [
315  'abc/def/ ',
316  'abc/def',
317  ],
318  'truncates ending space' => [
319  'abc/def ',
320  'abc/def',
321  ],
322  'truncates ending dot' => [
323  'abc/def/.',
324  'abc/def',
325  ],
326  'does not truncates ending dot if part of name' => [
327  'abc/def.',
328  'abc/def.',
329  ],
330  'protocol is not removed' => [
331  'vfs://def/../text.txt',
332  'vfs://text.txt',
333  ],
334  'works with filenames' => [
335  '/def/../text.txt',
336  '/text.txt',
337  ],
338  'absolute windows path' => [
339  'C:\def\..\..\test.txt',
340  'C:/test.txt',
341  ],
342  'absolute windows path with more segments' => [
343  'C:\def\def2\def3\..\..\folder\subfolder\test.txt',
344  'C:/def/folder/subfolder/test.txt',
345  ],
346  'double slashaes' => [
347  'abc//def',
348  'abc/def',
349  ],
350  'multiple slashes' => [
351  'abc///////def',
352  'abc/def',
353  ],
354  ];
355  }
356 
357  #[DataProvider('getCanonicalPathCorrectlyCleansPathDataProvider')]
358  #[Test]
359  public function ‪getCanonicalPathCorrectlyCleansPath(string $inputName, string $expectedResult): void
360  {
361  // Ensure Environment runs as Windows test
364  true,
365  false,
371  'WINDOWS'
372  );
373  self::assertSame(
374  $expectedResult,
376  );
377  }
378 
385  {
386  return [
387  'relative path' => [
388  'abc/def/ghi',
389  'abc/def',
390  ],
391  'absolute path 1' => [
392  '/var/www/html/index.php',
393  '/var/www/html',
394  ],
395  'absolute path 2' => [
396  '/var/www/html/typo3/index.php',
397  '/var/www/html/typo3',
398  ],
399  'windows path' => [
400  'C:\\inetpub\\index.php',
401  'C:\\inetpub',
402  ],
403  ];
404  }
405 
406  #[DataProvider('dirnameDuringBootstrapCorrectlyFetchesParentDataProvider')]
407  #[Test]
408  public function ‪dirnameDuringBootstrapCorrectlyFetchesParent(string $inputPath, string $expectedResult): void
409  {
410  self::assertSame(
411  $expectedResult,
413  );
414  }
415 
420  {
421  return [
422  'relative path' => [
423  'abc/def/ghi',
424  'ghi',
425  ],
426  'absolute path 1' => [
427  '/var/www/html/index.php',
428  'index.php',
429  ],
430  'absolute path 2' => [
431  '/var/www/html/typo3/index.php',
432  'index.php',
433  ],
434  'windows path' => [
435  'C:\\inetpub\\index.php',
436  'index.php',
437  ],
438  ];
439  }
440 
441  #[DataProvider('basenameDuringBootstrapCorrectlyFetchesBasenameDataProvider')]
442  #[Test]
443  public function ‪basenameDuringBootstrapCorrectlyFetchesBasename(string $inputPath, string $expectedResult): void
444  {
445  self::assertSame(
446  $expectedResult,
448  );
449  }
450 
457  {
458  return [
459  'starting slash' => [
460  '/path',
461  false,
462  true,
463  ],
464  'starting slash on windows' => [
465  '/path',
466  true,
467  true,
468  ],
469  'no match' => [
470  'path',
471  false,
472  false,
473  ],
474  'no match on windows' => [
475  'path',
476  true,
477  false,
478  ],
479  'path starts with C:/' => [
480  'C:/folder',
481  false,
482  false,
483  ],
484  'path starts with C:/ on windows' => [
485  'C:/folder',
486  true,
487  true,
488  ],
489  'path starts with C:\\' => [
490  'C:\\folder',
491  false,
492  false,
493  ],
494  'path starts with C:\\ on windows' => [
495  'C:\\folder',
496  true,
497  true,
498  ],
499  'path empty' => [
500  '',
501  false,
502  false,
503  ],
504  ];
505  }
506 
507  #[DataProvider('isAbsolutePathRespectsAllOperatingSystemsPathDataProvider')]
508  #[Test]
509  public function ‪isAbsolutePathRespectsAllOperatingSystems(string $inputPath, bool $isWindows, bool $expectedResult): void
510  {
511  if ($isWindows) {
512  // Ensure Environment runs as Windows test
515  true,
516  false,
522  'WINDOWS'
523  );
524  }
525 
526  self::assertSame($expectedResult, ‪PathUtility::isAbsolutePath($inputPath));
527  }
528 
529  public static function ‪hasProtocolAndSchemeDataProvider(): array
530  {
531  return [
532  ['//example.com/demo.html', true],
533  ['http://example.com/demo.html', true],
534  ['https://example.com/demo.html', true],
535  ['f://example.com/demo.html', true],
536  ['f:/example.com/demo.html', false],
537  ['://example.com/demo.html', false],
538  [':/example.com/demo.html', false],
539  ['/example.com/demo.html', false],
540  ['example.com/demo.html', false],
541  ['demo.html', false],
542  ['\\\\server\\unc-path\\demo.html', false],
543  ['\\\\example.com\\demo.html', false],
544  ];
545  }
546 
547  #[DataProvider('hasProtocolAndSchemeDataProvider')]
548  #[Test]
549  public function ‪hasProtocolAndScheme(string ‪$url, bool $result): void
550  {
551  self::assertSame($result, ‪PathUtility::hasProtocolAndScheme(‪$url));
552  }
553 
554  public static function ‪allowedAdditionalPathsAreEvaluatedDataProvider(): \Generator
555  {
556  // empty settings
557  yield [null, '/var/shared', false];
558  yield ['', '/var/shared', false];
559  yield [' ', '/var/shared', false];
560  yield [[], '/var/shared', false];
561  yield [[''], '/var/shared', false];
562  yield [[' '], '/var/shared', false];
563  // string settings
564  yield ['/var', '/var/shared', true];
565  yield ['/var/shared/', '/var/shared', true];
566  yield ['/var/shared', '/var/shared/', true];
567  yield ['/var/shared/', '/var/shared/', true];
568  yield ['/var/shared/', '/var/shared/file.png', true];
569  yield ['/var/shared/', '/var/shared-secret', false];
570  yield ['/var/shared/', '/var', false];
571  // array settings
572  yield [['/var'], '/var/shared', true];
573  yield [['/var/shared/'], '/var/shared', true];
574  yield [['/var/shared'], '/var/shared/', true];
575  yield [['/var/shared/'], '/var/shared/', true];
576  yield [['/var/shared/'], '/var/shared/file.png', true];
577  yield [['/var/shared/'], '/var/shared-secret', false];
578  yield [['/var/shared/'], '/var', false];
579  }
580 
581  #[DataProvider('allowedAdditionalPathsAreEvaluatedDataProvider')]
582  #[Test]
583  public function ‪allowedAdditionalPathsAreEvaluated(mixed $lockRootPath, string $path, bool $expectation): void
584  {
585  ‪$GLOBALS['TYPO3_CONF_VARS']['BE']['lockRootPath'] = $lockRootPath;
586  self::assertSame($expectation, ‪PathUtility::isAllowedAdditionalPath($path));
587  }
588 }
‪TYPO3\CMS\Core\Utility\PathUtility\getCanonicalPath
‪static string getCanonicalPath(string $path)
Definition: PathUtility.php:364
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest
Definition: PathUtilityTest.php:30
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\dirnameDuringBootstrapCorrectlyFetchesParent
‪dirnameDuringBootstrapCorrectlyFetchesParent(string $inputPath, string $expectedResult)
Definition: PathUtilityTest.php:408
‪TYPO3\CMS\Core\Utility\PathUtility
Definition: PathUtility.php:27
‪TYPO3\CMS\Core\Utility\PathUtility\isAbsolutePath
‪static isAbsolutePath(string $path)
Definition: PathUtility.php:286
‪TYPO3\CMS\Core\Utility\PathUtility\sanitizeTrailingSeparator
‪static sanitizeTrailingSeparator(string $path, string $separator='/')
Definition: PathUtility.php:203
‪TYPO3\CMS\Core\Utility\PathUtility\isAllowedAdditionalPath
‪static isAllowedAdditionalPath(string $path)
Definition: PathUtility.php:457
‪TYPO3\CMS\Core\Core\Environment\getPublicPath
‪static getPublicPath()
Definition: Environment.php:187
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\isTrailingSeparatorSanitizedCorrectly
‪isTrailingSeparatorSanitizedCorrectly($path, $separator, $expected)
Definition: PathUtilityTest.php:192
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\getAbsolutePathOfRelativeReferencedFileOrPathResolvesFileCorrectlyDataProvider
‪static getAbsolutePathOfRelativeReferencedFileOrPathResolvesFileCorrectlyDataProvider()
Definition: PathUtilityTest.php:210
‪TYPO3\CMS\Core\Tests\Unit\Utility
‪TYPO3\CMS\Core\Core\Environment\getCurrentScript
‪static getCurrentScript()
Definition: Environment.php:220
‪TYPO3\CMS\Core\Utility\PathUtility\getCommonPrefix
‪static getCommonPrefix(array $paths)
Definition: PathUtility.php:165
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\isAbsolutePathRespectsAllOperatingSystemsPathDataProvider
‪static array[] isAbsolutePathRespectsAllOperatingSystemsPathDataProvider()
Definition: PathUtilityTest.php:456
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\dirnameDuringBootstrapCorrectlyFetchesParentDataProvider
‪static string[][] dirnameDuringBootstrapCorrectlyFetchesParentDataProvider()
Definition: PathUtilityTest.php:384
‪TYPO3\CMS\Core\Core\Environment\getVarPath
‪static getVarPath()
Definition: Environment.php:197
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\isAbsolutePathRespectsAllOperatingSystems
‪isAbsolutePathRespectsAllOperatingSystems(string $inputPath, bool $isWindows, bool $expectedResult)
Definition: PathUtilityTest.php:509
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\allowedAdditionalPathsAreEvaluated
‪allowedAdditionalPathsAreEvaluated(mixed $lockRootPath, string $path, bool $expectation)
Definition: PathUtilityTest.php:583
‪TYPO3\CMS\Core\Core\Environment\getConfigPath
‪static getConfigPath()
Definition: Environment.php:212
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\basenameDuringBootstrapCorrectlyFetchesBasenameDataProvider
‪static basenameDuringBootstrapCorrectlyFetchesBasenameDataProvider()
Definition: PathUtilityTest.php:419
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\isRelativePathResolvedCorrectlyDataProvider
‪static isRelativePathResolvedCorrectlyDataProvider()
Definition: PathUtilityTest.php:149
‪TYPO3\CMS\Core\Utility\PathUtility\getAbsolutePathOfRelativeReferencedFileOrPath
‪static string getAbsolutePathOfRelativeReferencedFileOrPath(string $baseFilenameOrPath, string $includeFileName)
Definition: PathUtility.php:319
‪TYPO3\CMS\Core\Core\Environment\getProjectPath
‪static string getProjectPath()
Definition: Environment.php:160
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\basenameDuringBootstrapCorrectlyFetchesBasename
‪basenameDuringBootstrapCorrectlyFetchesBasename(string $inputPath, string $expectedResult)
Definition: PathUtilityTest.php:443
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\allowedAdditionalPathsAreEvaluatedDataProvider
‪static allowedAdditionalPathsAreEvaluatedDataProvider()
Definition: PathUtilityTest.php:554
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\getAbsolutePathOfRelativeReferencedFileOrPathResolvesFileCorrectly
‪getAbsolutePathOfRelativeReferencedFileOrPathResolvesFileCorrectly(string $baseFileName, string $includeFileName, string $expectedFileName)
Definition: PathUtilityTest.php:248
‪TYPO3\CMS\Core\Utility\PathUtility\getRelativePath
‪static getRelativePath(string $sourcePath, string $targetPath)
Definition: PathUtility.php:129
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\isRelativePathResolvedCorrectly
‪isRelativePathResolvedCorrectly($source, $target, $expected)
Definition: PathUtilityTest.php:143
‪TYPO3\CMS\Core\Utility\PathUtility\basenameDuringBootstrap
‪static basenameDuringBootstrap(string $path)
Definition: PathUtility.php:348
‪TYPO3\CMS\Core\Utility\PathUtility\dirnameDuringBootstrap
‪static string dirnameDuringBootstrap(string $path)
Definition: PathUtility.php:337
‪TYPO3\CMS\Core\Core\Environment\initialize
‪static initialize(ApplicationContext $context, bool $cli, bool $composerMode, string $projectPath, string $publicPath, string $varPath, string $configPath, string $currentScript, string $os)
Definition: Environment.php:100
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\isCommonPrefixResolvedCorrectlyDataProvider
‪static isCommonPrefixResolvedCorrectlyDataProvider()
Definition: PathUtilityTest.php:44
‪TYPO3\CMS\Webhooks\Message\$url
‪identifier readonly UriInterface $url
Definition: LoginErrorOccurredMessage.php:36
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Core\Core\Environment
Definition: Environment.php:41
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\$backupEnvironment
‪bool $backupEnvironment
Definition: PathUtilityTest.php:31
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\isCommonPrefixResolvedCorrectly
‪isCommonPrefixResolvedCorrectly(array $paths, $expected)
Definition: PathUtilityTest.php:38
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\hasProtocolAndScheme
‪hasProtocolAndScheme(string $url, bool $result)
Definition: PathUtilityTest.php:549
‪TYPO3\CMS\Core\Utility\PathUtility\hasProtocolAndScheme
‪static hasProtocolAndScheme(string $path)
Definition: PathUtility.php:445
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\hasProtocolAndSchemeDataProvider
‪static hasProtocolAndSchemeDataProvider()
Definition: PathUtilityTest.php:529
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\getCanonicalPathCorrectlyCleansPathDataProvider
‪static string[][] getCanonicalPathCorrectlyCleansPathDataProvider()
Definition: PathUtilityTest.php:259
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\isTrailingSeparatorSanitizedCorrectlyDataProvider
‪static isTrailingSeparatorSanitizedCorrectlyDataProvider()
Definition: PathUtilityTest.php:198
‪TYPO3\CMS\Core\Core\Environment\getContext
‪static getContext()
Definition: Environment.php:128
‪TYPO3\CMS\Core\Tests\Unit\Utility\PathUtilityTest\getCanonicalPathCorrectlyCleansPath
‪getCanonicalPathCorrectlyCleansPath(string $inputName, string $expectedResult)
Definition: PathUtilityTest.php:359