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 }
|