annotate vendor/webmozart/path-util/tests/PathTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of the webmozart/path-util package.
Chris@0 5 *
Chris@0 6 * (c) Bernhard Schussek <bschussek@gmail.com>
Chris@0 7 *
Chris@0 8 * For the full copyright and license information, please view the LICENSE
Chris@0 9 * file that was distributed with this source code.
Chris@0 10 */
Chris@0 11
Chris@0 12 namespace Webmozart\PathUtil\Tests;
Chris@0 13
Chris@0 14 use Webmozart\PathUtil\Path;
Chris@0 15
Chris@0 16 /**
Chris@0 17 * @since 1.0
Chris@0 18 *
Chris@0 19 * @author Bernhard Schussek <bschussek@gmail.com>
Chris@0 20 * @author Thomas Schulz <mail@king2500.net>
Chris@0 21 */
Chris@0 22 class PathTest extends \PHPUnit_Framework_TestCase
Chris@0 23 {
Chris@0 24 protected $storedEnv = array();
Chris@0 25
Chris@0 26 public function setUp()
Chris@0 27 {
Chris@0 28 $this->storedEnv['HOME'] = getenv('HOME');
Chris@0 29 $this->storedEnv['HOMEDRIVE'] = getenv('HOMEDRIVE');
Chris@0 30 $this->storedEnv['HOMEPATH'] = getenv('HOMEPATH');
Chris@0 31
Chris@0 32 putenv('HOME=/home/webmozart');
Chris@0 33 putenv('HOMEDRIVE=');
Chris@0 34 putenv('HOMEPATH=');
Chris@0 35 }
Chris@0 36
Chris@0 37 public function tearDown()
Chris@0 38 {
Chris@0 39 putenv('HOME='.$this->storedEnv['HOME']);
Chris@0 40 putenv('HOMEDRIVE='.$this->storedEnv['HOMEDRIVE']);
Chris@0 41 putenv('HOMEPATH='.$this->storedEnv['HOMEPATH']);
Chris@0 42 }
Chris@0 43
Chris@0 44 public function provideCanonicalizationTests()
Chris@0 45 {
Chris@0 46 return array(
Chris@0 47 // relative paths (forward slash)
Chris@0 48 array('css/./style.css', 'css/style.css'),
Chris@0 49 array('css/../style.css', 'style.css'),
Chris@0 50 array('css/./../style.css', 'style.css'),
Chris@0 51 array('css/.././style.css', 'style.css'),
Chris@0 52 array('css/../../style.css', '../style.css'),
Chris@0 53 array('./css/style.css', 'css/style.css'),
Chris@0 54 array('../css/style.css', '../css/style.css'),
Chris@0 55 array('./../css/style.css', '../css/style.css'),
Chris@0 56 array('.././css/style.css', '../css/style.css'),
Chris@0 57 array('../../css/style.css', '../../css/style.css'),
Chris@0 58 array('', ''),
Chris@0 59 array('.', ''),
Chris@0 60 array('..', '..'),
Chris@0 61 array('./..', '..'),
Chris@0 62 array('../.', '..'),
Chris@0 63 array('../..', '../..'),
Chris@0 64
Chris@0 65 // relative paths (backslash)
Chris@0 66 array('css\\.\\style.css', 'css/style.css'),
Chris@0 67 array('css\\..\\style.css', 'style.css'),
Chris@0 68 array('css\\.\\..\\style.css', 'style.css'),
Chris@0 69 array('css\\..\\.\\style.css', 'style.css'),
Chris@0 70 array('css\\..\\..\\style.css', '../style.css'),
Chris@0 71 array('.\\css\\style.css', 'css/style.css'),
Chris@0 72 array('..\\css\\style.css', '../css/style.css'),
Chris@0 73 array('.\\..\\css\\style.css', '../css/style.css'),
Chris@0 74 array('..\\.\\css\\style.css', '../css/style.css'),
Chris@0 75 array('..\\..\\css\\style.css', '../../css/style.css'),
Chris@0 76
Chris@0 77 // absolute paths (forward slash, UNIX)
Chris@0 78 array('/css/style.css', '/css/style.css'),
Chris@0 79 array('/css/./style.css', '/css/style.css'),
Chris@0 80 array('/css/../style.css', '/style.css'),
Chris@0 81 array('/css/./../style.css', '/style.css'),
Chris@0 82 array('/css/.././style.css', '/style.css'),
Chris@0 83 array('/./css/style.css', '/css/style.css'),
Chris@0 84 array('/../css/style.css', '/css/style.css'),
Chris@0 85 array('/./../css/style.css', '/css/style.css'),
Chris@0 86 array('/.././css/style.css', '/css/style.css'),
Chris@0 87 array('/../../css/style.css', '/css/style.css'),
Chris@0 88
Chris@0 89 // absolute paths (backslash, UNIX)
Chris@0 90 array('\\css\\style.css', '/css/style.css'),
Chris@0 91 array('\\css\\.\\style.css', '/css/style.css'),
Chris@0 92 array('\\css\\..\\style.css', '/style.css'),
Chris@0 93 array('\\css\\.\\..\\style.css', '/style.css'),
Chris@0 94 array('\\css\\..\\.\\style.css', '/style.css'),
Chris@0 95 array('\\.\\css\\style.css', '/css/style.css'),
Chris@0 96 array('\\..\\css\\style.css', '/css/style.css'),
Chris@0 97 array('\\.\\..\\css\\style.css', '/css/style.css'),
Chris@0 98 array('\\..\\.\\css\\style.css', '/css/style.css'),
Chris@0 99 array('\\..\\..\\css\\style.css', '/css/style.css'),
Chris@0 100
Chris@0 101 // absolute paths (forward slash, Windows)
Chris@0 102 array('C:/css/style.css', 'C:/css/style.css'),
Chris@0 103 array('C:/css/./style.css', 'C:/css/style.css'),
Chris@0 104 array('C:/css/../style.css', 'C:/style.css'),
Chris@0 105 array('C:/css/./../style.css', 'C:/style.css'),
Chris@0 106 array('C:/css/.././style.css', 'C:/style.css'),
Chris@0 107 array('C:/./css/style.css', 'C:/css/style.css'),
Chris@0 108 array('C:/../css/style.css', 'C:/css/style.css'),
Chris@0 109 array('C:/./../css/style.css', 'C:/css/style.css'),
Chris@0 110 array('C:/.././css/style.css', 'C:/css/style.css'),
Chris@0 111 array('C:/../../css/style.css', 'C:/css/style.css'),
Chris@0 112
Chris@0 113 // absolute paths (backslash, Windows)
Chris@0 114 array('C:\\css\\style.css', 'C:/css/style.css'),
Chris@0 115 array('C:\\css\\.\\style.css', 'C:/css/style.css'),
Chris@0 116 array('C:\\css\\..\\style.css', 'C:/style.css'),
Chris@0 117 array('C:\\css\\.\\..\\style.css', 'C:/style.css'),
Chris@0 118 array('C:\\css\\..\\.\\style.css', 'C:/style.css'),
Chris@0 119 array('C:\\.\\css\\style.css', 'C:/css/style.css'),
Chris@0 120 array('C:\\..\\css\\style.css', 'C:/css/style.css'),
Chris@0 121 array('C:\\.\\..\\css\\style.css', 'C:/css/style.css'),
Chris@0 122 array('C:\\..\\.\\css\\style.css', 'C:/css/style.css'),
Chris@0 123 array('C:\\..\\..\\css\\style.css', 'C:/css/style.css'),
Chris@0 124
Chris@0 125 // Windows special case
Chris@0 126 array('C:', 'C:/'),
Chris@0 127
Chris@0 128 // Don't change malformed path
Chris@0 129 array('C:css/style.css', 'C:css/style.css'),
Chris@0 130
Chris@0 131 // absolute paths (stream, UNIX)
Chris@0 132 array('phar:///css/style.css', 'phar:///css/style.css'),
Chris@0 133 array('phar:///css/./style.css', 'phar:///css/style.css'),
Chris@0 134 array('phar:///css/../style.css', 'phar:///style.css'),
Chris@0 135 array('phar:///css/./../style.css', 'phar:///style.css'),
Chris@0 136 array('phar:///css/.././style.css', 'phar:///style.css'),
Chris@0 137 array('phar:///./css/style.css', 'phar:///css/style.css'),
Chris@0 138 array('phar:///../css/style.css', 'phar:///css/style.css'),
Chris@0 139 array('phar:///./../css/style.css', 'phar:///css/style.css'),
Chris@0 140 array('phar:///.././css/style.css', 'phar:///css/style.css'),
Chris@0 141 array('phar:///../../css/style.css', 'phar:///css/style.css'),
Chris@0 142
Chris@0 143 // absolute paths (stream, Windows)
Chris@0 144 array('phar://C:/css/style.css', 'phar://C:/css/style.css'),
Chris@0 145 array('phar://C:/css/./style.css', 'phar://C:/css/style.css'),
Chris@0 146 array('phar://C:/css/../style.css', 'phar://C:/style.css'),
Chris@0 147 array('phar://C:/css/./../style.css', 'phar://C:/style.css'),
Chris@0 148 array('phar://C:/css/.././style.css', 'phar://C:/style.css'),
Chris@0 149 array('phar://C:/./css/style.css', 'phar://C:/css/style.css'),
Chris@0 150 array('phar://C:/../css/style.css', 'phar://C:/css/style.css'),
Chris@0 151 array('phar://C:/./../css/style.css', 'phar://C:/css/style.css'),
Chris@0 152 array('phar://C:/.././css/style.css', 'phar://C:/css/style.css'),
Chris@0 153 array('phar://C:/../../css/style.css', 'phar://C:/css/style.css'),
Chris@0 154
Chris@0 155 // paths with "~" UNIX
Chris@0 156 array('~/css/style.css', '/home/webmozart/css/style.css'),
Chris@0 157 array('~/css/./style.css', '/home/webmozart/css/style.css'),
Chris@0 158 array('~/css/../style.css', '/home/webmozart/style.css'),
Chris@0 159 array('~/css/./../style.css', '/home/webmozart/style.css'),
Chris@0 160 array('~/css/.././style.css', '/home/webmozart/style.css'),
Chris@0 161 array('~/./css/style.css', '/home/webmozart/css/style.css'),
Chris@0 162 array('~/../css/style.css', '/home/css/style.css'),
Chris@0 163 array('~/./../css/style.css', '/home/css/style.css'),
Chris@0 164 array('~/.././css/style.css', '/home/css/style.css'),
Chris@0 165 array('~/../../css/style.css', '/css/style.css'),
Chris@0 166 );
Chris@0 167 }
Chris@0 168
Chris@0 169 /**
Chris@0 170 * @dataProvider provideCanonicalizationTests
Chris@0 171 */
Chris@0 172 public function testCanonicalize($path, $canonicalized)
Chris@0 173 {
Chris@0 174 $this->assertSame($canonicalized, Path::canonicalize($path));
Chris@0 175 }
Chris@0 176
Chris@0 177 /**
Chris@0 178 * @expectedException \InvalidArgumentException
Chris@0 179 * @expectedExceptionMessage The path must be a string. Got: array
Chris@0 180 */
Chris@0 181 public function testCanonicalizeFailsIfInvalidPath()
Chris@0 182 {
Chris@0 183 Path::canonicalize(array());
Chris@0 184 }
Chris@0 185
Chris@0 186 public function provideGetDirectoryTests()
Chris@0 187 {
Chris@0 188 return array(
Chris@0 189 array('/webmozart/puli/style.css', '/webmozart/puli'),
Chris@0 190 array('/webmozart/puli', '/webmozart'),
Chris@0 191 array('/webmozart', '/'),
Chris@0 192 array('/', '/'),
Chris@0 193 array('', ''),
Chris@0 194
Chris@0 195 array('\\webmozart\\puli\\style.css', '/webmozart/puli'),
Chris@0 196 array('\\webmozart\\puli', '/webmozart'),
Chris@0 197 array('\\webmozart', '/'),
Chris@0 198 array('\\', '/'),
Chris@0 199
Chris@0 200 array('C:/webmozart/puli/style.css', 'C:/webmozart/puli'),
Chris@0 201 array('C:/webmozart/puli', 'C:/webmozart'),
Chris@0 202 array('C:/webmozart', 'C:/'),
Chris@0 203 array('C:/', 'C:/'),
Chris@0 204 array('C:', 'C:/'),
Chris@0 205
Chris@0 206 array('C:\\webmozart\\puli\\style.css', 'C:/webmozart/puli'),
Chris@0 207 array('C:\\webmozart\\puli', 'C:/webmozart'),
Chris@0 208 array('C:\\webmozart', 'C:/'),
Chris@0 209 array('C:\\', 'C:/'),
Chris@0 210
Chris@0 211 array('phar:///webmozart/puli/style.css', 'phar:///webmozart/puli'),
Chris@0 212 array('phar:///webmozart/puli', 'phar:///webmozart'),
Chris@0 213 array('phar:///webmozart', 'phar:///'),
Chris@0 214 array('phar:///', 'phar:///'),
Chris@0 215
Chris@0 216 array('phar://C:/webmozart/puli/style.css', 'phar://C:/webmozart/puli'),
Chris@0 217 array('phar://C:/webmozart/puli', 'phar://C:/webmozart'),
Chris@0 218 array('phar://C:/webmozart', 'phar://C:/'),
Chris@0 219 array('phar://C:/', 'phar://C:/'),
Chris@0 220
Chris@0 221 array('webmozart/puli/style.css', 'webmozart/puli'),
Chris@0 222 array('webmozart/puli', 'webmozart'),
Chris@0 223 array('webmozart', ''),
Chris@0 224
Chris@0 225 array('webmozart\\puli\\style.css', 'webmozart/puli'),
Chris@0 226 array('webmozart\\puli', 'webmozart'),
Chris@0 227 array('webmozart', ''),
Chris@0 228
Chris@0 229 array('/webmozart/./puli/style.css', '/webmozart/puli'),
Chris@0 230 array('/webmozart/../puli/style.css', '/puli'),
Chris@0 231 array('/webmozart/./../puli/style.css', '/puli'),
Chris@0 232 array('/webmozart/.././puli/style.css', '/puli'),
Chris@0 233 array('/webmozart/../../puli/style.css', '/puli'),
Chris@0 234 array('/.', '/'),
Chris@0 235 array('/..', '/'),
Chris@0 236
Chris@0 237 array('C:webmozart', ''),
Chris@0 238 );
Chris@0 239 }
Chris@0 240
Chris@0 241 /**
Chris@0 242 * @dataProvider provideGetDirectoryTests
Chris@0 243 */
Chris@0 244 public function testGetDirectory($path, $directory)
Chris@0 245 {
Chris@0 246 $this->assertSame($directory, Path::getDirectory($path));
Chris@0 247 }
Chris@0 248
Chris@0 249 /**
Chris@0 250 * @expectedException \InvalidArgumentException
Chris@0 251 * @expectedExceptionMessage The path must be a string. Got: array
Chris@0 252 */
Chris@0 253 public function testGetDirectoryFailsIfInvalidPath()
Chris@0 254 {
Chris@0 255 Path::getDirectory(array());
Chris@0 256 }
Chris@0 257
Chris@0 258 public function provideGetFilenameTests()
Chris@0 259 {
Chris@0 260 return array(
Chris@0 261 array('/webmozart/puli/style.css', 'style.css'),
Chris@0 262 array('/webmozart/puli/STYLE.CSS', 'STYLE.CSS'),
Chris@0 263 array('/webmozart/puli/style.css/', 'style.css'),
Chris@0 264 array('/webmozart/puli/', 'puli'),
Chris@0 265 array('/webmozart/puli', 'puli'),
Chris@0 266 array('/', ''),
Chris@0 267 array('', ''),
Chris@0 268 );
Chris@0 269 }
Chris@0 270
Chris@0 271 /**
Chris@0 272 * @dataProvider provideGetFilenameTests
Chris@0 273 */
Chris@0 274 public function testGetFilename($path, $filename)
Chris@0 275 {
Chris@0 276 $this->assertSame($filename, Path::getFilename($path));
Chris@0 277 }
Chris@0 278
Chris@0 279 /**
Chris@0 280 * @expectedException \InvalidArgumentException
Chris@0 281 * @expectedExceptionMessage The path must be a string. Got: array
Chris@0 282 */
Chris@0 283 public function testGetFilenameFailsIfInvalidPath()
Chris@0 284 {
Chris@0 285 Path::getFilename(array());
Chris@0 286 }
Chris@0 287
Chris@0 288 public function provideGetFilenameWithoutExtensionTests()
Chris@0 289 {
Chris@0 290 return array(
Chris@0 291 array('/webmozart/puli/style.css.twig', null, 'style.css'),
Chris@0 292 array('/webmozart/puli/style.css.', null, 'style.css'),
Chris@0 293 array('/webmozart/puli/style.css', null, 'style'),
Chris@0 294 array('/webmozart/puli/.style.css', null, '.style'),
Chris@0 295 array('/webmozart/puli/', null, 'puli'),
Chris@0 296 array('/webmozart/puli', null, 'puli'),
Chris@0 297 array('/', null, ''),
Chris@0 298 array('', null, ''),
Chris@0 299
Chris@0 300 array('/webmozart/puli/style.css', 'css', 'style'),
Chris@0 301 array('/webmozart/puli/style.css', '.css', 'style'),
Chris@0 302 array('/webmozart/puli/style.css', 'twig', 'style.css'),
Chris@0 303 array('/webmozart/puli/style.css', '.twig', 'style.css'),
Chris@0 304 array('/webmozart/puli/style.css', '', 'style.css'),
Chris@0 305 array('/webmozart/puli/style.css.', '', 'style.css'),
Chris@0 306 array('/webmozart/puli/style.css.', '.', 'style.css'),
Chris@0 307 array('/webmozart/puli/style.css.', '.css', 'style.css'),
Chris@0 308 array('/webmozart/puli/.style.css', 'css', '.style'),
Chris@0 309 array('/webmozart/puli/.style.css', '.css', '.style'),
Chris@0 310 );
Chris@0 311 }
Chris@0 312
Chris@0 313 /**
Chris@0 314 * @dataProvider provideGetFilenameWithoutExtensionTests
Chris@0 315 */
Chris@0 316 public function testGetFilenameWithoutExtension($path, $extension, $filename)
Chris@0 317 {
Chris@0 318 $this->assertSame($filename, Path::getFilenameWithoutExtension($path, $extension));
Chris@0 319 }
Chris@0 320
Chris@0 321 /**
Chris@0 322 * @expectedException \InvalidArgumentException
Chris@0 323 * @expectedExceptionMessage The path must be a string. Got: array
Chris@0 324 */
Chris@0 325 public function testGetFilenameWithoutExtensionFailsIfInvalidPath()
Chris@0 326 {
Chris@0 327 Path::getFilenameWithoutExtension(array(), '.css');
Chris@0 328 }
Chris@0 329
Chris@0 330 /**
Chris@0 331 * @expectedException \InvalidArgumentException
Chris@0 332 * @expectedExceptionMessage The extension must be a string or null. Got: array
Chris@0 333 */
Chris@0 334 public function testGetFilenameWithoutExtensionFailsIfInvalidExtension()
Chris@0 335 {
Chris@0 336 Path::getFilenameWithoutExtension('/style.css', array());
Chris@0 337 }
Chris@0 338
Chris@0 339 public function provideGetExtensionTests()
Chris@0 340 {
Chris@0 341 $tests = array(
Chris@0 342 array('/webmozart/puli/style.css.twig', false, 'twig'),
Chris@0 343 array('/webmozart/puli/style.css', false, 'css'),
Chris@0 344 array('/webmozart/puli/style.css.', false, ''),
Chris@0 345 array('/webmozart/puli/', false, ''),
Chris@0 346 array('/webmozart/puli', false, ''),
Chris@0 347 array('/', false, ''),
Chris@0 348 array('', false, ''),
Chris@0 349
Chris@0 350 array('/webmozart/puli/style.CSS', false, 'CSS'),
Chris@0 351 array('/webmozart/puli/style.CSS', true, 'css'),
Chris@0 352 array('/webmozart/puli/style.ÄÖÜ', false, 'ÄÖÜ'),
Chris@0 353 );
Chris@0 354
Chris@0 355 if (extension_loaded('mbstring')) {
Chris@0 356 // This can only be tested, when mbstring is installed
Chris@0 357 $tests[] = array('/webmozart/puli/style.ÄÖÜ', true, 'äöü');
Chris@0 358 }
Chris@0 359
Chris@0 360 return $tests;
Chris@0 361 }
Chris@0 362
Chris@0 363 /**
Chris@0 364 * @dataProvider provideGetExtensionTests
Chris@0 365 */
Chris@0 366 public function testGetExtension($path, $forceLowerCase, $extension)
Chris@0 367 {
Chris@0 368 $this->assertSame($extension, Path::getExtension($path, $forceLowerCase));
Chris@0 369 }
Chris@0 370
Chris@0 371 /**
Chris@0 372 * @expectedException \InvalidArgumentException
Chris@0 373 * @expectedExceptionMessage The path must be a string. Got: array
Chris@0 374 */
Chris@0 375 public function testGetExtensionFailsIfInvalidPath()
Chris@0 376 {
Chris@0 377 Path::getExtension(array());
Chris@0 378 }
Chris@0 379
Chris@0 380 public function provideHasExtensionTests()
Chris@0 381 {
Chris@0 382 $tests = array(
Chris@0 383 array(true, '/webmozart/puli/style.css.twig', null, false),
Chris@0 384 array(true, '/webmozart/puli/style.css', null, false),
Chris@0 385 array(false, '/webmozart/puli/style.css.', null, false),
Chris@0 386 array(false, '/webmozart/puli/', null, false),
Chris@0 387 array(false, '/webmozart/puli', null, false),
Chris@0 388 array(false, '/', null, false),
Chris@0 389 array(false, '', null, false),
Chris@0 390
Chris@0 391 array(true, '/webmozart/puli/style.css.twig', 'twig', false),
Chris@0 392 array(false, '/webmozart/puli/style.css.twig', 'css', false),
Chris@0 393 array(true, '/webmozart/puli/style.css', 'css', false),
Chris@0 394 array(true, '/webmozart/puli/style.css', '.css', false),
Chris@0 395 array(true, '/webmozart/puli/style.css.', '', false),
Chris@0 396 array(false, '/webmozart/puli/', 'ext', false),
Chris@0 397 array(false, '/webmozart/puli', 'ext', false),
Chris@0 398 array(false, '/', 'ext', false),
Chris@0 399 array(false, '', 'ext', false),
Chris@0 400
Chris@0 401 array(false, '/webmozart/puli/style.css', 'CSS', false),
Chris@0 402 array(true, '/webmozart/puli/style.css', 'CSS', true),
Chris@0 403 array(false, '/webmozart/puli/style.CSS', 'css', false),
Chris@0 404 array(true, '/webmozart/puli/style.CSS', 'css', true),
Chris@0 405 array(true, '/webmozart/puli/style.ÄÖÜ', 'ÄÖÜ', false),
Chris@0 406
Chris@0 407 array(true, '/webmozart/puli/style.css', array('ext', 'css'), false),
Chris@0 408 array(true, '/webmozart/puli/style.css', array('.ext', '.css'), false),
Chris@0 409 array(true, '/webmozart/puli/style.css.', array('ext', ''), false),
Chris@0 410 array(false, '/webmozart/puli/style.css', array('foo', 'bar', ''), false),
Chris@0 411 array(false, '/webmozart/puli/style.css', array('.foo', '.bar', ''), false),
Chris@0 412 );
Chris@0 413
Chris@0 414 if (extension_loaded('mbstring')) {
Chris@0 415 // This can only be tested, when mbstring is installed
Chris@0 416 $tests[] = array(true, '/webmozart/puli/style.ÄÖÜ', 'äöü', true);
Chris@0 417 $tests[] = array(true, '/webmozart/puli/style.ÄÖÜ', array('äöü'), true);
Chris@0 418 }
Chris@0 419
Chris@0 420 return $tests;
Chris@0 421 }
Chris@0 422
Chris@0 423 /**
Chris@0 424 * @dataProvider provideHasExtensionTests
Chris@0 425 */
Chris@0 426 public function testHasExtension($hasExtension, $path, $extension, $ignoreCase)
Chris@0 427 {
Chris@0 428 $this->assertSame($hasExtension, Path::hasExtension($path, $extension, $ignoreCase));
Chris@0 429 }
Chris@0 430
Chris@0 431 /**
Chris@0 432 * @expectedException \InvalidArgumentException
Chris@0 433 * @expectedExceptionMessage The path must be a string. Got: array
Chris@0 434 */
Chris@0 435 public function testHasExtensionFailsIfInvalidPath()
Chris@0 436 {
Chris@0 437 Path::hasExtension(array());
Chris@0 438 }
Chris@0 439
Chris@0 440 /**
Chris@0 441 * @expectedException \InvalidArgumentException
Chris@0 442 * @expectedExceptionMessage The extensions must be strings. Got: stdClass
Chris@0 443 */
Chris@0 444 public function testHasExtensionFailsIfInvalidExtension()
Chris@0 445 {
Chris@0 446 Path::hasExtension('/style.css', (object) array());
Chris@0 447 }
Chris@0 448
Chris@0 449 public function provideChangeExtensionTests()
Chris@0 450 {
Chris@0 451 return array(
Chris@0 452 array('/webmozart/puli/style.css.twig', 'html', '/webmozart/puli/style.css.html'),
Chris@0 453 array('/webmozart/puli/style.css', 'sass', '/webmozart/puli/style.sass'),
Chris@0 454 array('/webmozart/puli/style.css', '.sass', '/webmozart/puli/style.sass'),
Chris@0 455 array('/webmozart/puli/style.css', '', '/webmozart/puli/style.'),
Chris@0 456 array('/webmozart/puli/style.css.', 'twig', '/webmozart/puli/style.css.twig'),
Chris@0 457 array('/webmozart/puli/style.css.', '', '/webmozart/puli/style.css.'),
Chris@0 458 array('/webmozart/puli/style.css', 'äöü', '/webmozart/puli/style.äöü'),
Chris@0 459 array('/webmozart/puli/style.äöü', 'css', '/webmozart/puli/style.css'),
Chris@0 460 array('/webmozart/puli/', 'css', '/webmozart/puli/'),
Chris@0 461 array('/webmozart/puli', 'css', '/webmozart/puli.css'),
Chris@0 462 array('/', 'css', '/'),
Chris@0 463 array('', 'css', ''),
Chris@0 464 );
Chris@0 465 }
Chris@0 466
Chris@0 467 /**
Chris@0 468 * @dataProvider provideChangeExtensionTests
Chris@0 469 */
Chris@0 470 public function testChangeExtension($path, $extension, $pathExpected)
Chris@0 471 {
Chris@0 472 static $call = 0;
Chris@0 473 $this->assertSame($pathExpected, Path::changeExtension($path, $extension));
Chris@0 474 ++$call;
Chris@0 475 }
Chris@0 476
Chris@0 477 /**
Chris@0 478 * @expectedException \InvalidArgumentException
Chris@0 479 * @expectedExceptionMessage The path must be a string. Got: array
Chris@0 480 */
Chris@0 481 public function testChangeExtensionFailsIfInvalidPath()
Chris@0 482 {
Chris@0 483 Path::changeExtension(array(), '.sass');
Chris@0 484 }
Chris@0 485
Chris@0 486 /**
Chris@0 487 * @expectedException \InvalidArgumentException
Chris@0 488 * @expectedExceptionMessage The extension must be a string. Got: array
Chris@0 489 */
Chris@0 490 public function testChangeExtensionFailsIfInvalidExtension()
Chris@0 491 {
Chris@0 492 Path::changeExtension('/style.css', array());
Chris@0 493 }
Chris@0 494
Chris@0 495 public function provideIsAbsolutePathTests()
Chris@0 496 {
Chris@0 497 return array(
Chris@0 498 array('/css/style.css', true),
Chris@0 499 array('/', true),
Chris@0 500 array('css/style.css', false),
Chris@0 501 array('', false),
Chris@0 502
Chris@0 503 array('\\css\\style.css', true),
Chris@0 504 array('\\', true),
Chris@0 505 array('css\\style.css', false),
Chris@0 506
Chris@0 507 array('C:/css/style.css', true),
Chris@0 508 array('D:/', true),
Chris@0 509
Chris@0 510 array('E:\\css\\style.css', true),
Chris@0 511 array('F:\\', true),
Chris@0 512
Chris@0 513 array('phar:///css/style.css', true),
Chris@0 514 array('phar:///', true),
Chris@0 515
Chris@0 516 // Windows special case
Chris@0 517 array('C:', true),
Chris@0 518
Chris@0 519 // Not considered absolute
Chris@0 520 array('C:css/style.css', false),
Chris@0 521 );
Chris@0 522 }
Chris@0 523
Chris@0 524 /**
Chris@0 525 * @dataProvider provideIsAbsolutePathTests
Chris@0 526 */
Chris@0 527 public function testIsAbsolute($path, $isAbsolute)
Chris@0 528 {
Chris@0 529 $this->assertSame($isAbsolute, Path::isAbsolute($path));
Chris@0 530 }
Chris@0 531
Chris@0 532 /**
Chris@0 533 * @expectedException \InvalidArgumentException
Chris@0 534 * @expectedExceptionMessage The path must be a string. Got: array
Chris@0 535 */
Chris@0 536 public function testIsAbsoluteFailsIfInvalidPath()
Chris@0 537 {
Chris@0 538 Path::isAbsolute(array());
Chris@0 539 }
Chris@0 540
Chris@0 541 /**
Chris@0 542 * @dataProvider provideIsAbsolutePathTests
Chris@0 543 */
Chris@0 544 public function testIsRelative($path, $isAbsolute)
Chris@0 545 {
Chris@0 546 $this->assertSame(!$isAbsolute, Path::isRelative($path));
Chris@0 547 }
Chris@0 548
Chris@0 549 /**
Chris@0 550 * @expectedException \InvalidArgumentException
Chris@0 551 * @expectedExceptionMessage The path must be a string. Got: array
Chris@0 552 */
Chris@0 553 public function testIsRelativeFailsIfInvalidPath()
Chris@0 554 {
Chris@0 555 Path::isRelative(array());
Chris@0 556 }
Chris@0 557
Chris@0 558 public function provideGetRootTests()
Chris@0 559 {
Chris@0 560 return array(
Chris@0 561 array('/css/style.css', '/'),
Chris@0 562 array('/', '/'),
Chris@0 563 array('css/style.css', ''),
Chris@0 564 array('', ''),
Chris@0 565
Chris@0 566 array('\\css\\style.css', '/'),
Chris@0 567 array('\\', '/'),
Chris@0 568 array('css\\style.css', ''),
Chris@0 569
Chris@0 570 array('C:/css/style.css', 'C:/'),
Chris@0 571 array('C:/', 'C:/'),
Chris@0 572 array('C:', 'C:/'),
Chris@0 573
Chris@0 574 array('D:\\css\\style.css', 'D:/'),
Chris@0 575 array('D:\\', 'D:/'),
Chris@0 576
Chris@0 577 array('phar:///css/style.css', 'phar:///'),
Chris@0 578 array('phar:///', 'phar:///'),
Chris@0 579
Chris@0 580 array('phar://C:/css/style.css', 'phar://C:/'),
Chris@0 581 array('phar://C:/', 'phar://C:/'),
Chris@0 582 array('phar://C:', 'phar://C:/'),
Chris@0 583 );
Chris@0 584 }
Chris@0 585
Chris@0 586 /**
Chris@0 587 * @dataProvider provideGetRootTests
Chris@0 588 */
Chris@0 589 public function testGetRoot($path, $root)
Chris@0 590 {
Chris@0 591 $this->assertSame($root, Path::getRoot($path));
Chris@0 592 }
Chris@0 593
Chris@0 594 /**
Chris@0 595 * @expectedException \InvalidArgumentException
Chris@0 596 * @expectedExceptionMessage The path must be a string. Got: array
Chris@0 597 */
Chris@0 598 public function testGetRootFailsIfInvalidPath()
Chris@0 599 {
Chris@0 600 Path::getRoot(array());
Chris@0 601 }
Chris@0 602
Chris@0 603 public function providePathTests()
Chris@0 604 {
Chris@0 605 return array(
Chris@0 606 // relative to absolute path
Chris@0 607 array('css/style.css', '/webmozart/puli', '/webmozart/puli/css/style.css'),
Chris@0 608 array('../css/style.css', '/webmozart/puli', '/webmozart/css/style.css'),
Chris@0 609 array('../../css/style.css', '/webmozart/puli', '/css/style.css'),
Chris@0 610
Chris@0 611 // relative to root
Chris@0 612 array('css/style.css', '/', '/css/style.css'),
Chris@0 613 array('css/style.css', 'C:', 'C:/css/style.css'),
Chris@0 614 array('css/style.css', 'C:/', 'C:/css/style.css'),
Chris@0 615
Chris@0 616 // same sub directories in different base directories
Chris@0 617 array('../../puli/css/style.css', '/webmozart/css', '/puli/css/style.css'),
Chris@0 618
Chris@0 619 array('', '/webmozart/puli', '/webmozart/puli'),
Chris@0 620 array('..', '/webmozart/puli', '/webmozart'),
Chris@0 621 );
Chris@0 622 }
Chris@0 623
Chris@0 624 public function provideMakeAbsoluteTests()
Chris@0 625 {
Chris@0 626 return array_merge($this->providePathTests(), array(
Chris@0 627 // collapse dots
Chris@0 628 array('css/./style.css', '/webmozart/puli', '/webmozart/puli/css/style.css'),
Chris@0 629 array('css/../style.css', '/webmozart/puli', '/webmozart/puli/style.css'),
Chris@0 630 array('css/./../style.css', '/webmozart/puli', '/webmozart/puli/style.css'),
Chris@0 631 array('css/.././style.css', '/webmozart/puli', '/webmozart/puli/style.css'),
Chris@0 632 array('./css/style.css', '/webmozart/puli', '/webmozart/puli/css/style.css'),
Chris@0 633
Chris@0 634 array('css\\.\\style.css', '\\webmozart\\puli', '/webmozart/puli/css/style.css'),
Chris@0 635 array('css\\..\\style.css', '\\webmozart\\puli', '/webmozart/puli/style.css'),
Chris@0 636 array('css\\.\\..\\style.css', '\\webmozart\\puli', '/webmozart/puli/style.css'),
Chris@0 637 array('css\\..\\.\\style.css', '\\webmozart\\puli', '/webmozart/puli/style.css'),
Chris@0 638 array('.\\css\\style.css', '\\webmozart\\puli', '/webmozart/puli/css/style.css'),
Chris@0 639
Chris@0 640 // collapse dots on root
Chris@0 641 array('./css/style.css', '/', '/css/style.css'),
Chris@0 642 array('../css/style.css', '/', '/css/style.css'),
Chris@0 643 array('../css/./style.css', '/', '/css/style.css'),
Chris@0 644 array('../css/../style.css', '/', '/style.css'),
Chris@0 645 array('../css/./../style.css', '/', '/style.css'),
Chris@0 646 array('../css/.././style.css', '/', '/style.css'),
Chris@0 647
Chris@0 648 array('.\\css\\style.css', '\\', '/css/style.css'),
Chris@0 649 array('..\\css\\style.css', '\\', '/css/style.css'),
Chris@0 650 array('..\\css\\.\\style.css', '\\', '/css/style.css'),
Chris@0 651 array('..\\css\\..\\style.css', '\\', '/style.css'),
Chris@0 652 array('..\\css\\.\\..\\style.css', '\\', '/style.css'),
Chris@0 653 array('..\\css\\..\\.\\style.css', '\\', '/style.css'),
Chris@0 654
Chris@0 655 array('./css/style.css', 'C:/', 'C:/css/style.css'),
Chris@0 656 array('../css/style.css', 'C:/', 'C:/css/style.css'),
Chris@0 657 array('../css/./style.css', 'C:/', 'C:/css/style.css'),
Chris@0 658 array('../css/../style.css', 'C:/', 'C:/style.css'),
Chris@0 659 array('../css/./../style.css', 'C:/', 'C:/style.css'),
Chris@0 660 array('../css/.././style.css', 'C:/', 'C:/style.css'),
Chris@0 661
Chris@0 662 array('.\\css\\style.css', 'C:\\', 'C:/css/style.css'),
Chris@0 663 array('..\\css\\style.css', 'C:\\', 'C:/css/style.css'),
Chris@0 664 array('..\\css\\.\\style.css', 'C:\\', 'C:/css/style.css'),
Chris@0 665 array('..\\css\\..\\style.css', 'C:\\', 'C:/style.css'),
Chris@0 666 array('..\\css\\.\\..\\style.css', 'C:\\', 'C:/style.css'),
Chris@0 667 array('..\\css\\..\\.\\style.css', 'C:\\', 'C:/style.css'),
Chris@0 668
Chris@0 669 array('./css/style.css', 'phar:///', 'phar:///css/style.css'),
Chris@0 670 array('../css/style.css', 'phar:///', 'phar:///css/style.css'),
Chris@0 671 array('../css/./style.css', 'phar:///', 'phar:///css/style.css'),
Chris@0 672 array('../css/../style.css', 'phar:///', 'phar:///style.css'),
Chris@0 673 array('../css/./../style.css', 'phar:///', 'phar:///style.css'),
Chris@0 674 array('../css/.././style.css', 'phar:///', 'phar:///style.css'),
Chris@0 675
Chris@0 676 array('./css/style.css', 'phar://C:/', 'phar://C:/css/style.css'),
Chris@0 677 array('../css/style.css', 'phar://C:/', 'phar://C:/css/style.css'),
Chris@0 678 array('../css/./style.css', 'phar://C:/', 'phar://C:/css/style.css'),
Chris@0 679 array('../css/../style.css', 'phar://C:/', 'phar://C:/style.css'),
Chris@0 680 array('../css/./../style.css', 'phar://C:/', 'phar://C:/style.css'),
Chris@0 681 array('../css/.././style.css', 'phar://C:/', 'phar://C:/style.css'),
Chris@0 682
Chris@0 683 // absolute paths
Chris@0 684 array('/css/style.css', '/webmozart/puli', '/css/style.css'),
Chris@0 685 array('\\css\\style.css', '/webmozart/puli', '/css/style.css'),
Chris@0 686 array('C:/css/style.css', 'C:/webmozart/puli', 'C:/css/style.css'),
Chris@0 687 array('D:\\css\\style.css', 'D:/webmozart/puli', 'D:/css/style.css'),
Chris@0 688 ));
Chris@0 689 }
Chris@0 690
Chris@0 691 /**
Chris@0 692 * @dataProvider provideMakeAbsoluteTests
Chris@0 693 */
Chris@0 694 public function testMakeAbsolute($relativePath, $basePath, $absolutePath)
Chris@0 695 {
Chris@0 696 $this->assertSame($absolutePath, Path::makeAbsolute($relativePath, $basePath));
Chris@0 697 }
Chris@0 698
Chris@0 699 /**
Chris@0 700 * @expectedException \InvalidArgumentException
Chris@0 701 * @expectedExceptionMessage The path must be a string. Got: array
Chris@0 702 */
Chris@0 703 public function testMakeAbsoluteFailsIfInvalidPath()
Chris@0 704 {
Chris@0 705 Path::makeAbsolute(array(), '/webmozart/puli');
Chris@0 706 }
Chris@0 707
Chris@0 708 /**
Chris@0 709 * @expectedException \InvalidArgumentException
Chris@0 710 * @expectedExceptionMessage The base path must be a non-empty string. Got: array
Chris@0 711 */
Chris@0 712 public function testMakeAbsoluteFailsIfInvalidBasePath()
Chris@0 713 {
Chris@0 714 Path::makeAbsolute('css/style.css', array());
Chris@0 715 }
Chris@0 716
Chris@0 717 /**
Chris@0 718 * @expectedException \InvalidArgumentException
Chris@0 719 * @expectedExceptionMessage The base path "webmozart/puli" is not an absolute path.
Chris@0 720 */
Chris@0 721 public function testMakeAbsoluteFailsIfBasePathNotAbsolute()
Chris@0 722 {
Chris@0 723 Path::makeAbsolute('css/style.css', 'webmozart/puli');
Chris@0 724 }
Chris@0 725
Chris@0 726 /**
Chris@0 727 * @expectedException \InvalidArgumentException
Chris@0 728 * @expectedExceptionMessage The base path must be a non-empty string. Got: ""
Chris@0 729 */
Chris@0 730 public function testMakeAbsoluteFailsIfBasePathEmpty()
Chris@0 731 {
Chris@0 732 Path::makeAbsolute('css/style.css', '');
Chris@0 733 }
Chris@0 734
Chris@0 735 /**
Chris@0 736 * @expectedException \InvalidArgumentException
Chris@0 737 * @expectedExceptionMessage The base path must be a non-empty string. Got: NULL
Chris@0 738 */
Chris@0 739 public function testMakeAbsoluteFailsIfBasePathNull()
Chris@0 740 {
Chris@0 741 Path::makeAbsolute('css/style.css', null);
Chris@0 742 }
Chris@0 743
Chris@0 744 public function provideAbsolutePathsWithDifferentRoots()
Chris@0 745 {
Chris@0 746 return array(
Chris@0 747 array('C:/css/style.css', '/webmozart/puli'),
Chris@0 748 array('C:/css/style.css', '\\webmozart\\puli'),
Chris@0 749 array('C:\\css\\style.css', '/webmozart/puli'),
Chris@0 750 array('C:\\css\\style.css', '\\webmozart\\puli'),
Chris@0 751
Chris@0 752 array('/css/style.css', 'C:/webmozart/puli'),
Chris@0 753 array('/css/style.css', 'C:\\webmozart\\puli'),
Chris@0 754 array('\\css\\style.css', 'C:/webmozart/puli'),
Chris@0 755 array('\\css\\style.css', 'C:\\webmozart\\puli'),
Chris@0 756
Chris@0 757 array('D:/css/style.css', 'C:/webmozart/puli'),
Chris@0 758 array('D:/css/style.css', 'C:\\webmozart\\puli'),
Chris@0 759 array('D:\\css\\style.css', 'C:/webmozart/puli'),
Chris@0 760 array('D:\\css\\style.css', 'C:\\webmozart\\puli'),
Chris@0 761
Chris@0 762 array('phar:///css/style.css', '/webmozart/puli'),
Chris@0 763 array('/css/style.css', 'phar:///webmozart/puli'),
Chris@0 764
Chris@0 765 array('phar://C:/css/style.css', 'C:/webmozart/puli'),
Chris@0 766 array('phar://C:/css/style.css', 'C:\\webmozart\\puli'),
Chris@0 767 array('phar://C:\\css\\style.css', 'C:/webmozart/puli'),
Chris@0 768 array('phar://C:\\css\\style.css', 'C:\\webmozart\\puli'),
Chris@0 769 );
Chris@0 770 }
Chris@0 771
Chris@0 772 /**
Chris@0 773 * @dataProvider provideAbsolutePathsWithDifferentRoots
Chris@0 774 */
Chris@0 775 public function testMakeAbsoluteDoesNotFailIfDifferentRoot($basePath, $absolutePath)
Chris@0 776 {
Chris@0 777 // If a path in partition D: is passed, but $basePath is in partition
Chris@0 778 // C:, the path should be returned unchanged
Chris@0 779 $this->assertSame(Path::canonicalize($absolutePath), Path::makeAbsolute($absolutePath, $basePath));
Chris@0 780 }
Chris@0 781
Chris@0 782 public function provideMakeRelativeTests()
Chris@0 783 {
Chris@0 784 $paths = array_map(function (array $arguments) {
Chris@0 785 return array($arguments[2], $arguments[1], $arguments[0]);
Chris@0 786 }, $this->providePathTests());
Chris@0 787
Chris@0 788 return array_merge($paths, array(
Chris@0 789 array('/webmozart/puli/./css/style.css', '/webmozart/puli', 'css/style.css'),
Chris@0 790 array('/webmozart/puli/../css/style.css', '/webmozart/puli', '../css/style.css'),
Chris@0 791 array('/webmozart/puli/.././css/style.css', '/webmozart/puli', '../css/style.css'),
Chris@0 792 array('/webmozart/puli/./../css/style.css', '/webmozart/puli', '../css/style.css'),
Chris@0 793 array('/webmozart/puli/../../css/style.css', '/webmozart/puli', '../../css/style.css'),
Chris@0 794 array('/webmozart/puli/css/style.css', '/webmozart/./puli', 'css/style.css'),
Chris@0 795 array('/webmozart/puli/css/style.css', '/webmozart/../puli', '../webmozart/puli/css/style.css'),
Chris@0 796 array('/webmozart/puli/css/style.css', '/webmozart/./../puli', '../webmozart/puli/css/style.css'),
Chris@0 797 array('/webmozart/puli/css/style.css', '/webmozart/.././puli', '../webmozart/puli/css/style.css'),
Chris@0 798 array('/webmozart/puli/css/style.css', '/webmozart/../../puli', '../webmozart/puli/css/style.css'),
Chris@0 799
Chris@0 800 // first argument shorter than second
Chris@0 801 array('/css', '/webmozart/puli', '../../css'),
Chris@0 802
Chris@0 803 // second argument shorter than first
Chris@0 804 array('/webmozart/puli', '/css', '../webmozart/puli'),
Chris@0 805
Chris@0 806 array('\\webmozart\\puli\\css\\style.css', '\\webmozart\\puli', 'css/style.css'),
Chris@0 807 array('\\webmozart\\css\\style.css', '\\webmozart\\puli', '../css/style.css'),
Chris@0 808 array('\\css\\style.css', '\\webmozart\\puli', '../../css/style.css'),
Chris@0 809
Chris@0 810 array('C:/webmozart/puli/css/style.css', 'C:/webmozart/puli', 'css/style.css'),
Chris@0 811 array('C:/webmozart/css/style.css', 'C:/webmozart/puli', '../css/style.css'),
Chris@0 812 array('C:/css/style.css', 'C:/webmozart/puli', '../../css/style.css'),
Chris@0 813
Chris@0 814 array('C:\\webmozart\\puli\\css\\style.css', 'C:\\webmozart\\puli', 'css/style.css'),
Chris@0 815 array('C:\\webmozart\\css\\style.css', 'C:\\webmozart\\puli', '../css/style.css'),
Chris@0 816 array('C:\\css\\style.css', 'C:\\webmozart\\puli', '../../css/style.css'),
Chris@0 817
Chris@0 818 array('phar:///webmozart/puli/css/style.css', 'phar:///webmozart/puli', 'css/style.css'),
Chris@0 819 array('phar:///webmozart/css/style.css', 'phar:///webmozart/puli', '../css/style.css'),
Chris@0 820 array('phar:///css/style.css', 'phar:///webmozart/puli', '../../css/style.css'),
Chris@0 821
Chris@0 822 array('phar://C:/webmozart/puli/css/style.css', 'phar://C:/webmozart/puli', 'css/style.css'),
Chris@0 823 array('phar://C:/webmozart/css/style.css', 'phar://C:/webmozart/puli', '../css/style.css'),
Chris@0 824 array('phar://C:/css/style.css', 'phar://C:/webmozart/puli', '../../css/style.css'),
Chris@0 825
Chris@0 826 // already relative + already in root basepath
Chris@0 827 array('../style.css', '/', 'style.css'),
Chris@0 828 array('./style.css', '/', 'style.css'),
Chris@0 829 array('../../style.css', '/', 'style.css'),
Chris@0 830 array('..\\style.css', 'C:\\', 'style.css'),
Chris@0 831 array('.\\style.css', 'C:\\', 'style.css'),
Chris@0 832 array('..\\..\\style.css', 'C:\\', 'style.css'),
Chris@0 833 array('../style.css', 'C:/', 'style.css'),
Chris@0 834 array('./style.css', 'C:/', 'style.css'),
Chris@0 835 array('../../style.css', 'C:/', 'style.css'),
Chris@0 836 array('..\\style.css', '\\', 'style.css'),
Chris@0 837 array('.\\style.css', '\\', 'style.css'),
Chris@0 838 array('..\\..\\style.css', '\\', 'style.css'),
Chris@0 839 array('../style.css', 'phar:///', 'style.css'),
Chris@0 840 array('./style.css', 'phar:///', 'style.css'),
Chris@0 841 array('../../style.css', 'phar:///', 'style.css'),
Chris@0 842 array('..\\style.css', 'phar://C:\\', 'style.css'),
Chris@0 843 array('.\\style.css', 'phar://C:\\', 'style.css'),
Chris@0 844 array('..\\..\\style.css', 'phar://C:\\', 'style.css'),
Chris@0 845
Chris@0 846 array('css/../style.css', '/', 'style.css'),
Chris@0 847 array('css/./style.css', '/', 'css/style.css'),
Chris@0 848 array('css\\..\\style.css', 'C:\\', 'style.css'),
Chris@0 849 array('css\\.\\style.css', 'C:\\', 'css/style.css'),
Chris@0 850 array('css/../style.css', 'C:/', 'style.css'),
Chris@0 851 array('css/./style.css', 'C:/', 'css/style.css'),
Chris@0 852 array('css\\..\\style.css', '\\', 'style.css'),
Chris@0 853 array('css\\.\\style.css', '\\', 'css/style.css'),
Chris@0 854 array('css/../style.css', 'phar:///', 'style.css'),
Chris@0 855 array('css/./style.css', 'phar:///', 'css/style.css'),
Chris@0 856 array('css\\..\\style.css', 'phar://C:\\', 'style.css'),
Chris@0 857 array('css\\.\\style.css', 'phar://C:\\', 'css/style.css'),
Chris@0 858
Chris@0 859 // already relative
Chris@0 860 array('css/style.css', '/webmozart/puli', 'css/style.css'),
Chris@0 861 array('css\\style.css', '\\webmozart\\puli', 'css/style.css'),
Chris@0 862
Chris@0 863 // both relative
Chris@0 864 array('css/style.css', 'webmozart/puli', '../../css/style.css'),
Chris@0 865 array('css\\style.css', 'webmozart\\puli', '../../css/style.css'),
Chris@0 866
Chris@0 867 // relative to empty
Chris@0 868 array('css/style.css', '', 'css/style.css'),
Chris@0 869 array('css\\style.css', '', 'css/style.css'),
Chris@0 870
Chris@0 871 // different slashes in path and base path
Chris@0 872 array('/webmozart/puli/css/style.css', '\\webmozart\\puli', 'css/style.css'),
Chris@0 873 array('\\webmozart\\puli\\css\\style.css', '/webmozart/puli', 'css/style.css'),
Chris@0 874 ));
Chris@0 875 }
Chris@0 876
Chris@0 877 /**
Chris@0 878 * @dataProvider provideMakeRelativeTests
Chris@0 879 */
Chris@0 880 public function testMakeRelative($absolutePath, $basePath, $relativePath)
Chris@0 881 {
Chris@0 882 $this->assertSame($relativePath, Path::makeRelative($absolutePath, $basePath));
Chris@0 883 }
Chris@0 884
Chris@0 885 /**
Chris@0 886 * @expectedException \InvalidArgumentException
Chris@0 887 * @expectedExceptionMessage The path must be a string. Got: array
Chris@0 888 */
Chris@0 889 public function testMakeRelativeFailsIfInvalidPath()
Chris@0 890 {
Chris@0 891 Path::makeRelative(array(), '/webmozart/puli');
Chris@0 892 }
Chris@0 893
Chris@0 894 /**
Chris@0 895 * @expectedException \InvalidArgumentException
Chris@0 896 * @expectedExceptionMessage The base path must be a string. Got: array
Chris@0 897 */
Chris@0 898 public function testMakeRelativeFailsIfInvalidBasePath()
Chris@0 899 {
Chris@0 900 Path::makeRelative('/webmozart/puli/css/style.css', array());
Chris@0 901 }
Chris@0 902
Chris@0 903 /**
Chris@0 904 * @expectedException \InvalidArgumentException
Chris@0 905 * @expectedExceptionMessage The absolute path "/webmozart/puli/css/style.css" cannot be made relative to the relative path "webmozart/puli". You should provide an absolute base path instead.
Chris@0 906 */
Chris@0 907 public function testMakeRelativeFailsIfAbsolutePathAndBasePathNotAbsolute()
Chris@0 908 {
Chris@0 909 Path::makeRelative('/webmozart/puli/css/style.css', 'webmozart/puli');
Chris@0 910 }
Chris@0 911
Chris@0 912 /**
Chris@0 913 * @expectedException \InvalidArgumentException
Chris@0 914 * @expectedExceptionMessage The absolute path "/webmozart/puli/css/style.css" cannot be made relative to the relative path "". You should provide an absolute base path instead.
Chris@0 915 */
Chris@0 916 public function testMakeRelativeFailsIfAbsolutePathAndBasePathEmpty()
Chris@0 917 {
Chris@0 918 Path::makeRelative('/webmozart/puli/css/style.css', '');
Chris@0 919 }
Chris@0 920
Chris@0 921 /**
Chris@0 922 * @expectedException \InvalidArgumentException
Chris@0 923 * @expectedExceptionMessage The base path must be a string. Got: NULL
Chris@0 924 */
Chris@0 925 public function testMakeRelativeFailsIfBasePathNull()
Chris@0 926 {
Chris@0 927 Path::makeRelative('/webmozart/puli/css/style.css', null);
Chris@0 928 }
Chris@0 929
Chris@0 930 /**
Chris@0 931 * @dataProvider provideAbsolutePathsWithDifferentRoots
Chris@0 932 * @expectedException \InvalidArgumentException
Chris@0 933 */
Chris@0 934 public function testMakeRelativeFailsIfDifferentRoot($absolutePath, $basePath)
Chris@0 935 {
Chris@0 936 Path::makeRelative($absolutePath, $basePath);
Chris@0 937 }
Chris@0 938
Chris@0 939 public function provideIsLocalTests()
Chris@0 940 {
Chris@0 941 return array(
Chris@0 942 array('/bg.png', true),
Chris@0 943 array('bg.png', true),
Chris@0 944 array('http://example.com/bg.png', false),
Chris@0 945 array('http://example.com', false),
Chris@0 946 array('', false),
Chris@0 947 );
Chris@0 948 }
Chris@0 949
Chris@0 950 /**
Chris@0 951 * @dataProvider provideIsLocalTests
Chris@0 952 */
Chris@0 953 public function testIsLocal($path, $isLocal)
Chris@0 954 {
Chris@0 955 $this->assertSame($isLocal, Path::isLocal($path));
Chris@0 956 }
Chris@0 957
Chris@0 958 /**
Chris@0 959 * @expectedException \InvalidArgumentException
Chris@0 960 * @expectedExceptionMessage The path must be a string. Got: array
Chris@0 961 */
Chris@0 962 public function testIsLocalFailsIfInvalidPath()
Chris@0 963 {
Chris@0 964 Path::isLocal(array());
Chris@0 965 }
Chris@0 966
Chris@0 967 public function provideGetLongestCommonBasePathTests()
Chris@0 968 {
Chris@0 969 return array(
Chris@0 970 // same paths
Chris@0 971 array(array('/base/path', '/base/path'), '/base/path'),
Chris@0 972 array(array('C:/base/path', 'C:/base/path'), 'C:/base/path'),
Chris@0 973 array(array('C:\\base\\path', 'C:\\base\\path'), 'C:/base/path'),
Chris@0 974 array(array('C:/base/path', 'C:\\base\\path'), 'C:/base/path'),
Chris@0 975 array(array('phar:///base/path', 'phar:///base/path'), 'phar:///base/path'),
Chris@0 976 array(array('phar://C:/base/path', 'phar://C:/base/path'), 'phar://C:/base/path'),
Chris@0 977
Chris@0 978 // trailing slash
Chris@0 979 array(array('/base/path/', '/base/path'), '/base/path'),
Chris@0 980 array(array('C:/base/path/', 'C:/base/path'), 'C:/base/path'),
Chris@0 981 array(array('C:\\base\\path\\', 'C:\\base\\path'), 'C:/base/path'),
Chris@0 982 array(array('C:/base/path/', 'C:\\base\\path'), 'C:/base/path'),
Chris@0 983 array(array('phar:///base/path/', 'phar:///base/path'), 'phar:///base/path'),
Chris@0 984 array(array('phar://C:/base/path/', 'phar://C:/base/path'), 'phar://C:/base/path'),
Chris@0 985
Chris@0 986 array(array('/base/path', '/base/path/'), '/base/path'),
Chris@0 987 array(array('C:/base/path', 'C:/base/path/'), 'C:/base/path'),
Chris@0 988 array(array('C:\\base\\path', 'C:\\base\\path\\'), 'C:/base/path'),
Chris@0 989 array(array('C:/base/path', 'C:\\base\\path\\'), 'C:/base/path'),
Chris@0 990 array(array('phar:///base/path', 'phar:///base/path/'), 'phar:///base/path'),
Chris@0 991 array(array('phar://C:/base/path', 'phar://C:/base/path/'), 'phar://C:/base/path'),
Chris@0 992
Chris@0 993 // first in second
Chris@0 994 array(array('/base/path/sub', '/base/path'), '/base/path'),
Chris@0 995 array(array('C:/base/path/sub', 'C:/base/path'), 'C:/base/path'),
Chris@0 996 array(array('C:\\base\\path\\sub', 'C:\\base\\path'), 'C:/base/path'),
Chris@0 997 array(array('C:/base/path/sub', 'C:\\base\\path'), 'C:/base/path'),
Chris@0 998 array(array('phar:///base/path/sub', 'phar:///base/path'), 'phar:///base/path'),
Chris@0 999 array(array('phar://C:/base/path/sub', 'phar://C:/base/path'), 'phar://C:/base/path'),
Chris@0 1000
Chris@0 1001 // second in first
Chris@0 1002 array(array('/base/path', '/base/path/sub'), '/base/path'),
Chris@0 1003 array(array('C:/base/path', 'C:/base/path/sub'), 'C:/base/path'),
Chris@0 1004 array(array('C:\\base\\path', 'C:\\base\\path\\sub'), 'C:/base/path'),
Chris@0 1005 array(array('C:/base/path', 'C:\\base\\path\\sub'), 'C:/base/path'),
Chris@0 1006 array(array('phar:///base/path', 'phar:///base/path/sub'), 'phar:///base/path'),
Chris@0 1007 array(array('phar://C:/base/path', 'phar://C:/base/path/sub'), 'phar://C:/base/path'),
Chris@0 1008
Chris@0 1009 // first is prefix
Chris@0 1010 array(array('/base/path/di', '/base/path/dir'), '/base/path'),
Chris@0 1011 array(array('C:/base/path/di', 'C:/base/path/dir'), 'C:/base/path'),
Chris@0 1012 array(array('C:\\base\\path\\di', 'C:\\base\\path\\dir'), 'C:/base/path'),
Chris@0 1013 array(array('C:/base/path/di', 'C:\\base\\path\\dir'), 'C:/base/path'),
Chris@0 1014 array(array('phar:///base/path/di', 'phar:///base/path/dir'), 'phar:///base/path'),
Chris@0 1015 array(array('phar://C:/base/path/di', 'phar://C:/base/path/dir'), 'phar://C:/base/path'),
Chris@0 1016
Chris@0 1017 // second is prefix
Chris@0 1018 array(array('/base/path/dir', '/base/path/di'), '/base/path'),
Chris@0 1019 array(array('C:/base/path/dir', 'C:/base/path/di'), 'C:/base/path'),
Chris@0 1020 array(array('C:\\base\\path\\dir', 'C:\\base\\path\\di'), 'C:/base/path'),
Chris@0 1021 array(array('C:/base/path/dir', 'C:\\base\\path\\di'), 'C:/base/path'),
Chris@0 1022 array(array('phar:///base/path/dir', 'phar:///base/path/di'), 'phar:///base/path'),
Chris@0 1023 array(array('phar://C:/base/path/dir', 'phar://C:/base/path/di'), 'phar://C:/base/path'),
Chris@0 1024
Chris@0 1025 // root is common base path
Chris@0 1026 array(array('/first', '/second'), '/'),
Chris@0 1027 array(array('C:/first', 'C:/second'), 'C:/'),
Chris@0 1028 array(array('C:\\first', 'C:\\second'), 'C:/'),
Chris@0 1029 array(array('C:/first', 'C:\\second'), 'C:/'),
Chris@0 1030 array(array('phar:///first', 'phar:///second'), 'phar:///'),
Chris@0 1031 array(array('phar://C:/first', 'phar://C:/second'), 'phar://C:/'),
Chris@0 1032
Chris@0 1033 // windows vs unix
Chris@0 1034 array(array('/base/path', 'C:/base/path'), null),
Chris@0 1035 array(array('C:/base/path', '/base/path'), null),
Chris@0 1036 array(array('/base/path', 'C:\\base\\path'), null),
Chris@0 1037 array(array('phar:///base/path', 'phar://C:/base/path'), null),
Chris@0 1038
Chris@0 1039 // different partitions
Chris@0 1040 array(array('C:/base/path', 'D:/base/path'), null),
Chris@0 1041 array(array('C:/base/path', 'D:\\base\\path'), null),
Chris@0 1042 array(array('C:\\base\\path', 'D:\\base\\path'), null),
Chris@0 1043 array(array('phar://C:/base/path', 'phar://D:/base/path'), null),
Chris@0 1044
Chris@0 1045 // three paths
Chris@0 1046 array(array('/base/path/foo', '/base/path', '/base/path/bar'), '/base/path'),
Chris@0 1047 array(array('C:/base/path/foo', 'C:/base/path', 'C:/base/path/bar'), 'C:/base/path'),
Chris@0 1048 array(array('C:\\base\\path\\foo', 'C:\\base\\path', 'C:\\base\\path\\bar'), 'C:/base/path'),
Chris@0 1049 array(array('C:/base/path//foo', 'C:/base/path', 'C:\\base\\path\\bar'), 'C:/base/path'),
Chris@0 1050 array(array('phar:///base/path/foo', 'phar:///base/path', 'phar:///base/path/bar'), 'phar:///base/path'),
Chris@0 1051 array(array('phar://C:/base/path/foo', 'phar://C:/base/path', 'phar://C:/base/path/bar'), 'phar://C:/base/path'),
Chris@0 1052
Chris@0 1053 // three paths with root
Chris@0 1054 array(array('/base/path/foo', '/', '/base/path/bar'), '/'),
Chris@0 1055 array(array('C:/base/path/foo', 'C:/', 'C:/base/path/bar'), 'C:/'),
Chris@0 1056 array(array('C:\\base\\path\\foo', 'C:\\', 'C:\\base\\path\\bar'), 'C:/'),
Chris@0 1057 array(array('C:/base/path//foo', 'C:/', 'C:\\base\\path\\bar'), 'C:/'),
Chris@0 1058 array(array('phar:///base/path/foo', 'phar:///', 'phar:///base/path/bar'), 'phar:///'),
Chris@0 1059 array(array('phar://C:/base/path/foo', 'phar://C:/', 'phar://C:/base/path/bar'), 'phar://C:/'),
Chris@0 1060
Chris@0 1061 // three paths, different roots
Chris@0 1062 array(array('/base/path/foo', 'C:/base/path', '/base/path/bar'), null),
Chris@0 1063 array(array('/base/path/foo', 'C:\\base\\path', '/base/path/bar'), null),
Chris@0 1064 array(array('C:/base/path/foo', 'D:/base/path', 'C:/base/path/bar'), null),
Chris@0 1065 array(array('C:\\base\\path\\foo', 'D:\\base\\path', 'C:\\base\\path\\bar'), null),
Chris@0 1066 array(array('C:/base/path//foo', 'D:/base/path', 'C:\\base\\path\\bar'), null),
Chris@0 1067 array(array('phar:///base/path/foo', 'phar://C:/base/path', 'phar:///base/path/bar'), null),
Chris@0 1068 array(array('phar://C:/base/path/foo', 'phar://D:/base/path', 'phar://C:/base/path/bar'), null),
Chris@0 1069
Chris@0 1070 // only one path
Chris@0 1071 array(array('/base/path'), '/base/path'),
Chris@0 1072 array(array('C:/base/path'), 'C:/base/path'),
Chris@0 1073 array(array('C:\\base\\path'), 'C:/base/path'),
Chris@0 1074 array(array('phar:///base/path'), 'phar:///base/path'),
Chris@0 1075 array(array('phar://C:/base/path'), 'phar://C:/base/path'),
Chris@0 1076 );
Chris@0 1077 }
Chris@0 1078
Chris@0 1079 /**
Chris@0 1080 * @dataProvider provideGetLongestCommonBasePathTests
Chris@0 1081 */
Chris@0 1082 public function testGetLongestCommonBasePath(array $paths, $basePath)
Chris@0 1083 {
Chris@0 1084 $this->assertSame($basePath, Path::getLongestCommonBasePath($paths));
Chris@0 1085 }
Chris@0 1086
Chris@0 1087 /**
Chris@0 1088 * @expectedException \InvalidArgumentException
Chris@0 1089 * @expectedExceptionMessage The paths must be strings. Got: array
Chris@0 1090 */
Chris@0 1091 public function testGetLongestCommonBasePathFailsIfInvalidPath()
Chris@0 1092 {
Chris@0 1093 Path::getLongestCommonBasePath(array(array()));
Chris@0 1094 }
Chris@0 1095
Chris@0 1096 public function provideIsBasePathTests()
Chris@0 1097 {
Chris@0 1098 return array(
Chris@0 1099 // same paths
Chris@0 1100 array('/base/path', '/base/path', true),
Chris@0 1101 array('C:/base/path', 'C:/base/path', true),
Chris@0 1102 array('C:\\base\\path', 'C:\\base\\path', true),
Chris@0 1103 array('C:/base/path', 'C:\\base\\path', true),
Chris@0 1104 array('phar:///base/path', 'phar:///base/path', true),
Chris@0 1105 array('phar://C:/base/path', 'phar://C:/base/path', true),
Chris@0 1106
Chris@0 1107 // trailing slash
Chris@0 1108 array('/base/path/', '/base/path', true),
Chris@0 1109 array('C:/base/path/', 'C:/base/path', true),
Chris@0 1110 array('C:\\base\\path\\', 'C:\\base\\path', true),
Chris@0 1111 array('C:/base/path/', 'C:\\base\\path', true),
Chris@0 1112 array('phar:///base/path/', 'phar:///base/path', true),
Chris@0 1113 array('phar://C:/base/path/', 'phar://C:/base/path', true),
Chris@0 1114
Chris@0 1115 array('/base/path', '/base/path/', true),
Chris@0 1116 array('C:/base/path', 'C:/base/path/', true),
Chris@0 1117 array('C:\\base\\path', 'C:\\base\\path\\', true),
Chris@0 1118 array('C:/base/path', 'C:\\base\\path\\', true),
Chris@0 1119 array('phar:///base/path', 'phar:///base/path/', true),
Chris@0 1120 array('phar://C:/base/path', 'phar://C:/base/path/', true),
Chris@0 1121
Chris@0 1122 // first in second
Chris@0 1123 array('/base/path/sub', '/base/path', false),
Chris@0 1124 array('C:/base/path/sub', 'C:/base/path', false),
Chris@0 1125 array('C:\\base\\path\\sub', 'C:\\base\\path', false),
Chris@0 1126 array('C:/base/path/sub', 'C:\\base\\path', false),
Chris@0 1127 array('phar:///base/path/sub', 'phar:///base/path', false),
Chris@0 1128 array('phar://C:/base/path/sub', 'phar://C:/base/path', false),
Chris@0 1129
Chris@0 1130 // second in first
Chris@0 1131 array('/base/path', '/base/path/sub', true),
Chris@0 1132 array('C:/base/path', 'C:/base/path/sub', true),
Chris@0 1133 array('C:\\base\\path', 'C:\\base\\path\\sub', true),
Chris@0 1134 array('C:/base/path', 'C:\\base\\path\\sub', true),
Chris@0 1135 array('phar:///base/path', 'phar:///base/path/sub', true),
Chris@0 1136 array('phar://C:/base/path', 'phar://C:/base/path/sub', true),
Chris@0 1137
Chris@0 1138 // first is prefix
Chris@0 1139 array('/base/path/di', '/base/path/dir', false),
Chris@0 1140 array('C:/base/path/di', 'C:/base/path/dir', false),
Chris@0 1141 array('C:\\base\\path\\di', 'C:\\base\\path\\dir', false),
Chris@0 1142 array('C:/base/path/di', 'C:\\base\\path\\dir', false),
Chris@0 1143 array('phar:///base/path/di', 'phar:///base/path/dir', false),
Chris@0 1144 array('phar://C:/base/path/di', 'phar://C:/base/path/dir', false),
Chris@0 1145
Chris@0 1146 // second is prefix
Chris@0 1147 array('/base/path/dir', '/base/path/di', false),
Chris@0 1148 array('C:/base/path/dir', 'C:/base/path/di', false),
Chris@0 1149 array('C:\\base\\path\\dir', 'C:\\base\\path\\di', false),
Chris@0 1150 array('C:/base/path/dir', 'C:\\base\\path\\di', false),
Chris@0 1151 array('phar:///base/path/dir', 'phar:///base/path/di', false),
Chris@0 1152 array('phar://C:/base/path/dir', 'phar://C:/base/path/di', false),
Chris@0 1153
Chris@0 1154 // root
Chris@0 1155 array('/', '/second', true),
Chris@0 1156 array('C:/', 'C:/second', true),
Chris@0 1157 array('C:', 'C:/second', true),
Chris@0 1158 array('C:\\', 'C:\\second', true),
Chris@0 1159 array('C:/', 'C:\\second', true),
Chris@0 1160 array('phar:///', 'phar:///second', true),
Chris@0 1161 array('phar://C:/', 'phar://C:/second', true),
Chris@0 1162
Chris@0 1163 // windows vs unix
Chris@0 1164 array('/base/path', 'C:/base/path', false),
Chris@0 1165 array('C:/base/path', '/base/path', false),
Chris@0 1166 array('/base/path', 'C:\\base\\path', false),
Chris@0 1167 array('/base/path', 'phar:///base/path', false),
Chris@0 1168 array('phar:///base/path', 'phar://C:/base/path', false),
Chris@0 1169
Chris@0 1170 // different partitions
Chris@0 1171 array('C:/base/path', 'D:/base/path', false),
Chris@0 1172 array('C:/base/path', 'D:\\base\\path', false),
Chris@0 1173 array('C:\\base\\path', 'D:\\base\\path', false),
Chris@0 1174 array('C:/base/path', 'phar://C:/base/path', false),
Chris@0 1175 array('phar://C:/base/path', 'phar://D:/base/path', false),
Chris@0 1176 );
Chris@0 1177 }
Chris@0 1178
Chris@0 1179 /**
Chris@0 1180 * @dataProvider provideIsBasePathTests
Chris@0 1181 */
Chris@0 1182 public function testIsBasePath($path, $ofPath, $result)
Chris@0 1183 {
Chris@0 1184 $this->assertSame($result, Path::isBasePath($path, $ofPath));
Chris@0 1185 }
Chris@0 1186
Chris@0 1187 /**
Chris@0 1188 * @expectedException \InvalidArgumentException
Chris@0 1189 * @expectedExceptionMessage The base path must be a string. Got: array
Chris@0 1190 */
Chris@0 1191 public function testIsBasePathFailsIfInvalidBasePath()
Chris@0 1192 {
Chris@0 1193 Path::isBasePath(array(), '/base/path');
Chris@0 1194 }
Chris@0 1195
Chris@0 1196 /**
Chris@0 1197 * @expectedException \InvalidArgumentException
Chris@0 1198 * @expectedExceptionMessage The path must be a string. Got: array
Chris@0 1199 */
Chris@0 1200 public function testIsBasePathFailsIfInvalidPath()
Chris@0 1201 {
Chris@0 1202 Path::isBasePath('/base/path', array());
Chris@0 1203 }
Chris@0 1204
Chris@0 1205 public function provideJoinTests()
Chris@0 1206 {
Chris@0 1207 return array(
Chris@0 1208 array('', '', ''),
Chris@0 1209 array('/path/to/test', '', '/path/to/test'),
Chris@0 1210 array('/path/to//test', '', '/path/to/test'),
Chris@0 1211 array('', '/path/to/test', '/path/to/test'),
Chris@0 1212 array('', '/path/to//test', '/path/to/test'),
Chris@0 1213
Chris@0 1214 array('/path/to/test', 'subdir', '/path/to/test/subdir'),
Chris@0 1215 array('/path/to/test/', 'subdir', '/path/to/test/subdir'),
Chris@0 1216 array('/path/to/test', '/subdir', '/path/to/test/subdir'),
Chris@0 1217 array('/path/to/test/', '/subdir', '/path/to/test/subdir'),
Chris@0 1218 array('/path/to/test', './subdir', '/path/to/test/subdir'),
Chris@0 1219 array('/path/to/test/', './subdir', '/path/to/test/subdir'),
Chris@0 1220 array('/path/to/test/', '../parentdir', '/path/to/parentdir'),
Chris@0 1221 array('/path/to/test', '../parentdir', '/path/to/parentdir'),
Chris@0 1222 array('path/to/test/', '/subdir', 'path/to/test/subdir'),
Chris@0 1223 array('path/to/test', '/subdir', 'path/to/test/subdir'),
Chris@0 1224 array('../path/to/test', '/subdir', '../path/to/test/subdir'),
Chris@0 1225 array('path', '../../subdir', '../subdir'),
Chris@0 1226 array('/path', '../../subdir', '/subdir'),
Chris@0 1227 array('../path', '../../subdir', '../../subdir'),
Chris@0 1228
Chris@0 1229 array(array('/path/to/test', 'subdir'), '', '/path/to/test/subdir'),
Chris@0 1230 array(array('/path/to/test', '/subdir'), '', '/path/to/test/subdir'),
Chris@0 1231 array(array('/path/to/test/', 'subdir'), '', '/path/to/test/subdir'),
Chris@0 1232 array(array('/path/to/test/', '/subdir'), '', '/path/to/test/subdir'),
Chris@0 1233
Chris@0 1234 array(array('/path'), '', '/path'),
Chris@0 1235 array(array('/path', 'to', '/test'), '', '/path/to/test'),
Chris@0 1236 array(array('/path', '', '/test'), '', '/path/test'),
Chris@0 1237 array(array('path', 'to', 'test'), '', 'path/to/test'),
Chris@0 1238 array(array(), '', ''),
Chris@0 1239
Chris@0 1240 array('base/path', 'to/test', 'base/path/to/test'),
Chris@0 1241
Chris@0 1242 array('C:\\path\\to\\test', 'subdir', 'C:/path/to/test/subdir'),
Chris@0 1243 array('C:\\path\\to\\test\\', 'subdir', 'C:/path/to/test/subdir'),
Chris@0 1244 array('C:\\path\\to\\test', '/subdir', 'C:/path/to/test/subdir'),
Chris@0 1245 array('C:\\path\\to\\test\\', '/subdir', 'C:/path/to/test/subdir'),
Chris@0 1246
Chris@0 1247 array('/', 'subdir', '/subdir'),
Chris@0 1248 array('/', '/subdir', '/subdir'),
Chris@0 1249 array('C:/', 'subdir', 'C:/subdir'),
Chris@0 1250 array('C:/', '/subdir', 'C:/subdir'),
Chris@0 1251 array('C:\\', 'subdir', 'C:/subdir'),
Chris@0 1252 array('C:\\', '/subdir', 'C:/subdir'),
Chris@0 1253 array('C:', 'subdir', 'C:/subdir'),
Chris@0 1254 array('C:', '/subdir', 'C:/subdir'),
Chris@0 1255
Chris@0 1256 array('phar://', '/path/to/test', 'phar:///path/to/test'),
Chris@0 1257 array('phar:///', '/path/to/test', 'phar:///path/to/test'),
Chris@0 1258 array('phar:///path/to/test', 'subdir', 'phar:///path/to/test/subdir'),
Chris@0 1259 array('phar:///path/to/test', 'subdir/', 'phar:///path/to/test/subdir'),
Chris@0 1260 array('phar:///path/to/test', '/subdir', 'phar:///path/to/test/subdir'),
Chris@0 1261 array('phar:///path/to/test/', 'subdir', 'phar:///path/to/test/subdir'),
Chris@0 1262 array('phar:///path/to/test/', '/subdir', 'phar:///path/to/test/subdir'),
Chris@0 1263
Chris@0 1264 array('phar://', 'C:/path/to/test', 'phar://C:/path/to/test'),
Chris@0 1265 array('phar://', 'C:\\path\\to\\test', 'phar://C:/path/to/test'),
Chris@0 1266 array('phar://C:/path/to/test', 'subdir', 'phar://C:/path/to/test/subdir'),
Chris@0 1267 array('phar://C:/path/to/test', 'subdir/', 'phar://C:/path/to/test/subdir'),
Chris@0 1268 array('phar://C:/path/to/test', '/subdir', 'phar://C:/path/to/test/subdir'),
Chris@0 1269 array('phar://C:/path/to/test/', 'subdir', 'phar://C:/path/to/test/subdir'),
Chris@0 1270 array('phar://C:/path/to/test/', '/subdir', 'phar://C:/path/to/test/subdir'),
Chris@0 1271 array('phar://C:', 'path/to/test', 'phar://C:/path/to/test'),
Chris@0 1272 array('phar://C:', '/path/to/test', 'phar://C:/path/to/test'),
Chris@0 1273 array('phar://C:/', 'path/to/test', 'phar://C:/path/to/test'),
Chris@0 1274 array('phar://C:/', '/path/to/test', 'phar://C:/path/to/test'),
Chris@0 1275 );
Chris@0 1276 }
Chris@0 1277
Chris@0 1278 /**
Chris@0 1279 * @dataProvider provideJoinTests
Chris@0 1280 */
Chris@0 1281 public function testJoin($path1, $path2, $result)
Chris@0 1282 {
Chris@0 1283 $this->assertSame($result, Path::join($path1, $path2));
Chris@0 1284 }
Chris@0 1285
Chris@0 1286 public function testJoinVarArgs()
Chris@0 1287 {
Chris@0 1288 $this->assertSame('/path', Path::join('/path'));
Chris@0 1289 $this->assertSame('/path/to', Path::join('/path', 'to'));
Chris@0 1290 $this->assertSame('/path/to/test', Path::join('/path', 'to', '/test'));
Chris@0 1291 $this->assertSame('/path/to/test/subdir', Path::join('/path', 'to', '/test', 'subdir/'));
Chris@0 1292 }
Chris@0 1293
Chris@0 1294 /**
Chris@0 1295 * @expectedException \InvalidArgumentException
Chris@0 1296 * @expectedExceptionMessage The paths must be strings. Got: array
Chris@0 1297 */
Chris@0 1298 public function testJoinFailsIfInvalidPath()
Chris@0 1299 {
Chris@0 1300 Path::join('/path', array());
Chris@0 1301 }
Chris@0 1302
Chris@0 1303 /**
Chris@0 1304 * @expectedException \RuntimeException
Chris@0 1305 * @expectedExceptionMessage Your environment or operation system isn't supported
Chris@0 1306 */
Chris@0 1307 public function testGetHomeDirectoryFailsIfNotSupportedOperationSystem()
Chris@0 1308 {
Chris@0 1309 putenv('HOME=');
Chris@0 1310
Chris@0 1311 Path::getHomeDirectory();
Chris@0 1312 }
Chris@0 1313
Chris@0 1314 public function testGetHomeDirectoryForUnix()
Chris@0 1315 {
Chris@0 1316 $this->assertEquals('/home/webmozart', Path::getHomeDirectory());
Chris@0 1317 }
Chris@0 1318
Chris@0 1319 public function testGetHomeDirectoryForWindows()
Chris@0 1320 {
Chris@0 1321 putenv('HOME=');
Chris@0 1322 putenv('HOMEDRIVE=C:');
Chris@0 1323 putenv('HOMEPATH=/users/webmozart');
Chris@0 1324
Chris@0 1325 $this->assertEquals('C:/users/webmozart', Path::getHomeDirectory());
Chris@0 1326 }
Chris@0 1327
Chris@0 1328 public function testNormalize()
Chris@0 1329 {
Chris@0 1330 $this->assertSame('C:/Foo/Bar/test', Path::normalize('C:\\Foo\\Bar/test'));
Chris@0 1331 }
Chris@0 1332
Chris@0 1333 /**
Chris@0 1334 * @expectedException \InvalidArgumentException
Chris@0 1335 */
Chris@0 1336 public function testNormalizeFailsIfNoString()
Chris@0 1337 {
Chris@0 1338 Path::normalize(true);
Chris@0 1339 }
Chris@0 1340 }