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\Url;
|
Chris@0
|
15
|
Chris@0
|
16 /**
|
Chris@0
|
17 * @since 2.3
|
Chris@0
|
18 *
|
Chris@0
|
19 * @author Bernhard Schussek <bschussek@gmail.com>
|
Chris@0
|
20 * @author Claudio Zizza <claudio@budgegeria.de>
|
Chris@0
|
21 */
|
Chris@0
|
22 class UrlTest extends \PHPUnit_Framework_TestCase
|
Chris@0
|
23 {
|
Chris@0
|
24 /**
|
Chris@0
|
25 * @dataProvider provideMakeRelativeTests
|
Chris@0
|
26 * @covers Webmozart\PathUtil\Url
|
Chris@0
|
27 */
|
Chris@0
|
28 public function testMakeRelative($absolutePath, $basePath, $relativePath)
|
Chris@0
|
29 {
|
Chris@0
|
30 $host = 'http://example.com';
|
Chris@0
|
31
|
Chris@0
|
32 $relative = Url::makeRelative($host.$absolutePath, $host.$basePath);
|
Chris@0
|
33 $this->assertSame($relativePath, $relative);
|
Chris@0
|
34 $relative = Url::makeRelative($absolutePath, $host.$basePath);
|
Chris@0
|
35 $this->assertSame($relativePath, $relative);
|
Chris@0
|
36 }
|
Chris@0
|
37
|
Chris@0
|
38 /**
|
Chris@0
|
39 * @dataProvider provideMakeRelativeIsAlreadyRelativeTests
|
Chris@0
|
40 * @covers Webmozart\PathUtil\Url
|
Chris@0
|
41 */
|
Chris@0
|
42 public function testMakeRelativeIsAlreadyRelative($absolutePath, $basePath, $relativePath)
|
Chris@0
|
43 {
|
Chris@0
|
44 $host = 'http://example.com';
|
Chris@0
|
45
|
Chris@0
|
46 $relative = Url::makeRelative($absolutePath, $host.$basePath);
|
Chris@0
|
47 $this->assertSame($relativePath, $relative);
|
Chris@0
|
48 }
|
Chris@0
|
49
|
Chris@0
|
50 /**
|
Chris@0
|
51 * @dataProvider provideMakeRelativeTests
|
Chris@0
|
52 * @covers Webmozart\PathUtil\Url
|
Chris@0
|
53 */
|
Chris@0
|
54 public function testMakeRelativeWithFullUrl($absolutePath, $basePath, $relativePath)
|
Chris@0
|
55 {
|
Chris@0
|
56 $host = 'ftp://user:password@example.com:8080';
|
Chris@0
|
57
|
Chris@0
|
58 $relative = Url::makeRelative($host.$absolutePath, $host.$basePath);
|
Chris@0
|
59 $this->assertSame($relativePath, $relative);
|
Chris@0
|
60 }
|
Chris@0
|
61
|
Chris@0
|
62 /**
|
Chris@0
|
63 * @expectedException \InvalidArgumentException
|
Chris@0
|
64 * @expectedExceptionMessage The URL must be a string. Got: array
|
Chris@0
|
65 * @covers Webmozart\PathUtil\Url
|
Chris@0
|
66 */
|
Chris@0
|
67 public function testMakeRelativeFailsIfInvalidUrl()
|
Chris@0
|
68 {
|
Chris@0
|
69 Url::makeRelative(array(), 'http://example.com/webmozart/puli');
|
Chris@0
|
70 }
|
Chris@0
|
71
|
Chris@0
|
72 /**
|
Chris@0
|
73 * @expectedException \InvalidArgumentException
|
Chris@0
|
74 * @expectedExceptionMessage The base URL must be a string. Got: array
|
Chris@0
|
75 * @covers Webmozart\PathUtil\Url
|
Chris@0
|
76 */
|
Chris@0
|
77 public function testMakeRelativeFailsIfInvalidBaseUrl()
|
Chris@0
|
78 {
|
Chris@0
|
79 Url::makeRelative('http://example.com/webmozart/puli/css/style.css', array());
|
Chris@0
|
80 }
|
Chris@0
|
81
|
Chris@0
|
82 /**
|
Chris@0
|
83 * @expectedException \InvalidArgumentException
|
Chris@0
|
84 * @expectedExceptionMessage "webmozart/puli" is not an absolute Url.
|
Chris@0
|
85 * @covers Webmozart\PathUtil\Url
|
Chris@0
|
86 */
|
Chris@0
|
87 public function testMakeRelativeFailsIfBaseUrlNoUrl()
|
Chris@0
|
88 {
|
Chris@0
|
89 Url::makeRelative('http://example.com/webmozart/puli/css/style.css', 'webmozart/puli');
|
Chris@0
|
90 }
|
Chris@0
|
91
|
Chris@0
|
92 /**
|
Chris@0
|
93 * @expectedException \InvalidArgumentException
|
Chris@0
|
94 * @expectedExceptionMessage "" is not an absolute Url.
|
Chris@0
|
95 * @covers Webmozart\PathUtil\Url
|
Chris@0
|
96 */
|
Chris@0
|
97 public function testMakeRelativeFailsIfBaseUrlEmpty()
|
Chris@0
|
98 {
|
Chris@0
|
99 Url::makeRelative('http://example.com/webmozart/puli/css/style.css', '');
|
Chris@0
|
100 }
|
Chris@0
|
101
|
Chris@0
|
102 /**
|
Chris@0
|
103 * @expectedException \InvalidArgumentException
|
Chris@0
|
104 * @expectedExceptionMessage The base URL must be a string. Got: NULL
|
Chris@0
|
105 * @covers Webmozart\PathUtil\Url
|
Chris@0
|
106 */
|
Chris@0
|
107 public function testMakeRelativeFailsIfBaseUrlNull()
|
Chris@0
|
108 {
|
Chris@0
|
109 Url::makeRelative('http://example.com/webmozart/puli/css/style.css', null);
|
Chris@0
|
110 }
|
Chris@0
|
111
|
Chris@0
|
112 /**
|
Chris@0
|
113 * @expectedException \InvalidArgumentException
|
Chris@0
|
114 * @expectedExceptionMessage The URL "http://example.com" cannot be made relative to "http://example2.com" since
|
Chris@0
|
115 * their host names are different.
|
Chris@0
|
116 * @covers Webmozart\PathUtil\Url
|
Chris@0
|
117 */
|
Chris@0
|
118 public function testMakeRelativeFailsIfDifferentDomains()
|
Chris@0
|
119 {
|
Chris@0
|
120 Url::makeRelative('http://example.com/webmozart/puli/css/style.css', 'http://example2.com/webmozart/puli');
|
Chris@0
|
121 }
|
Chris@0
|
122
|
Chris@0
|
123 public function provideMakeRelativeTests()
|
Chris@0
|
124 {
|
Chris@0
|
125 return array(
|
Chris@0
|
126
|
Chris@0
|
127 array('/webmozart/puli/css/style.css', '/webmozart/puli', 'css/style.css'),
|
Chris@0
|
128 array('/webmozart/puli/css/style.css?key=value&key2=value', '/webmozart/puli', 'css/style.css?key=value&key2=value'),
|
Chris@0
|
129 array('/webmozart/puli/css/style.css?key[]=value&key[]=value', '/webmozart/puli', 'css/style.css?key[]=value&key[]=value'),
|
Chris@0
|
130 array('/webmozart/css/style.css', '/webmozart/puli', '../css/style.css'),
|
Chris@0
|
131 array('/css/style.css', '/webmozart/puli', '../../css/style.css'),
|
Chris@0
|
132 array('/', '/', ''),
|
Chris@0
|
133
|
Chris@0
|
134 // relative to root
|
Chris@0
|
135 array('/css/style.css', '/', 'css/style.css'),
|
Chris@0
|
136
|
Chris@0
|
137 // same sub directories in different base directories
|
Chris@0
|
138 array('/puli/css/style.css', '/webmozart/css', '../../puli/css/style.css'),
|
Chris@0
|
139
|
Chris@0
|
140 array('/webmozart/puli/./css/style.css', '/webmozart/puli', 'css/style.css'),
|
Chris@0
|
141 array('/webmozart/puli/../css/style.css', '/webmozart/puli', '../css/style.css'),
|
Chris@0
|
142 array('/webmozart/puli/.././css/style.css', '/webmozart/puli', '../css/style.css'),
|
Chris@0
|
143 array('/webmozart/puli/./../css/style.css', '/webmozart/puli', '../css/style.css'),
|
Chris@0
|
144 array('/webmozart/puli/../../css/style.css', '/webmozart/puli', '../../css/style.css'),
|
Chris@0
|
145 array('/webmozart/puli/css/style.css', '/webmozart/./puli', 'css/style.css'),
|
Chris@0
|
146 array('/webmozart/puli/css/style.css', '/webmozart/../puli', '../webmozart/puli/css/style.css'),
|
Chris@0
|
147 array('/webmozart/puli/css/style.css', '/webmozart/./../puli', '../webmozart/puli/css/style.css'),
|
Chris@0
|
148 array('/webmozart/puli/css/style.css', '/webmozart/.././puli', '../webmozart/puli/css/style.css'),
|
Chris@0
|
149 array('/webmozart/puli/css/style.css', '/webmozart/../../puli', '../webmozart/puli/css/style.css'),
|
Chris@0
|
150
|
Chris@0
|
151 // first argument shorter than second
|
Chris@0
|
152 array('/css', '/webmozart/puli', '../../css'),
|
Chris@0
|
153
|
Chris@0
|
154 // second argument shorter than first
|
Chris@0
|
155 array('/webmozart/puli', '/css', '../webmozart/puli'),
|
Chris@0
|
156
|
Chris@0
|
157 array('', '', ''),
|
Chris@0
|
158 );
|
Chris@0
|
159 }
|
Chris@0
|
160
|
Chris@0
|
161 public function provideMakeRelativeIsAlreadyRelativeTests()
|
Chris@0
|
162 {
|
Chris@0
|
163 return array(
|
Chris@0
|
164 array('css/style.css', '/webmozart/puli', 'css/style.css'),
|
Chris@0
|
165 array('css/style.css', '', 'css/style.css'),
|
Chris@0
|
166 array('css/../style.css', '', 'style.css'),
|
Chris@0
|
167 array('css/./style.css', '', 'css/style.css'),
|
Chris@0
|
168 array('../style.css', '/', 'style.css'),
|
Chris@0
|
169 array('./style.css', '/', 'style.css'),
|
Chris@0
|
170 array('../../style.css', '/', 'style.css'),
|
Chris@0
|
171 array('../../style.css', '', 'style.css'),
|
Chris@0
|
172 array('./style.css', '', 'style.css'),
|
Chris@0
|
173 array('../style.css', '', 'style.css'),
|
Chris@0
|
174 array('./../style.css', '', 'style.css'),
|
Chris@0
|
175 array('css/./../style.css', '', 'style.css'),
|
Chris@0
|
176 array('css//style.css', '', 'css/style.css'),
|
Chris@0
|
177 );
|
Chris@0
|
178 }
|
Chris@0
|
179 }
|