|
6 | 6 |
|
7 | 7 | namespace Joomla\Filesystem\Tests; |
8 | 8 |
|
| 9 | +use Joomla\Filesystem\Exception\FilesystemException; |
9 | 10 | use Joomla\Filesystem\File; |
10 | 11 | use Joomla\Filesystem\Path; |
11 | 12 |
|
@@ -362,4 +363,87 @@ public function testFind() |
362 | 363 | Path::find(__DIR__, 'PathTest.php') |
363 | 364 | ); |
364 | 365 | } |
| 366 | + |
| 367 | + /** |
| 368 | + * Test resolve method |
| 369 | + * |
| 370 | + * @param string $path test path |
| 371 | + * @param string $expectedResult expected path |
| 372 | + * |
| 373 | + * @return void |
| 374 | + * |
| 375 | + * @since 1.4.0 |
| 376 | + * |
| 377 | + * @dataProvider getResolveData |
| 378 | + */ |
| 379 | + public function testResolve($path, $expectedResult) |
| 380 | + { |
| 381 | + $this->assertEquals(str_replace("_DS_", DIRECTORY_SEPARATOR, $expectedResult), Path::resolve($path)); |
| 382 | + } |
| 383 | + |
| 384 | + /** |
| 385 | + * Test resolve method |
| 386 | +
|
| 387 | + * @param string $path test path |
| 388 | + * |
| 389 | + * @expectedException Joomla\Filesystem\Exception\FilesystemException |
| 390 | + * @expectedExceptionMessage Path is outside of the defined root |
| 391 | + * |
| 392 | + * @return void |
| 393 | + * |
| 394 | + * @since 1.4.0 |
| 395 | + * |
| 396 | + * @dataProvider getResolveExceptionData |
| 397 | + */ |
| 398 | + public function testResolveThrowsExceptionIfRootIsLeft($path) |
| 399 | + { |
| 400 | + Path::resolve($path); |
| 401 | + } |
| 402 | + |
| 403 | + /** |
| 404 | + * Data provider for testResolve() method. |
| 405 | + * |
| 406 | + * @return array |
| 407 | + * |
| 408 | + * @since 1.0 |
| 409 | + */ |
| 410 | + public function getResolveData() |
| 411 | + { |
| 412 | + return array( |
| 413 | + array("/", "_DS_"), |
| 414 | + array("a", "a"), |
| 415 | + array("/test/", "_DS_test"), |
| 416 | + array("C:/", "C:"), |
| 417 | + array("/var/www/joomla", "_DS_var_DS_www_DS_joomla"), |
| 418 | + array("C:/iis/www/joomla", "C:_DS_iis_DS_www_DS_joomla"), |
| 419 | + array("var/www/joomla", "var_DS_www_DS_joomla"), |
| 420 | + array("./var/www/joomla", "var_DS_www_DS_joomla"), |
| 421 | + array("/var/www/foo/../joomla", "_DS_var_DS_www_DS_joomla"), |
| 422 | + array("C:/var/www/foo/../joomla", "C:_DS_var_DS_www_DS_joomla"), |
| 423 | + array("/var/www/../foo/../joomla", "_DS_var_DS_joomla"), |
| 424 | + array("C:/var/www/..foo../joomla", "C:_DS_var_DS_www_DS_..foo.._DS_joomla"), |
| 425 | + array("c:/var/www/..foo../joomla", "c:_DS_var_DS_www_DS_..foo.._DS_joomla"), |
| 426 | + array("/var/www///joomla", "_DS_var_DS_www_DS_joomla"), |
| 427 | + array("/var///www///joomla", "_DS_var_DS_www_DS_joomla"), |
| 428 | + array("C:/var///www///joomla", "C:_DS_var_DS_www_DS_joomla"), |
| 429 | + array("/var/\/../www///joomla", "_DS_www_DS_joomla"), |
| 430 | + array("C:/var///www///joomla", "C:_DS_var_DS_www_DS_joomla"), |
| 431 | + array("/var\\www///joomla", "_DS_var_DS_www_DS_joomla") |
| 432 | + ); |
| 433 | + } |
| 434 | + |
| 435 | + /** |
| 436 | + * Data provider for testResolve() method. |
| 437 | + * |
| 438 | + * @return array |
| 439 | + * |
| 440 | + * @since 1.0 |
| 441 | + */ |
| 442 | + public function getResolveExceptionData() |
| 443 | + { |
| 444 | + return array( |
| 445 | + array("../var/www/joomla"), |
| 446 | + array("/var/../../../www/joomla") |
| 447 | + ); |
| 448 | + } |
365 | 449 | } |
0 commit comments