Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\Core;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Core\DependencyInjection\ContainerBuilder;
|
Chris@0
|
6 use Drupal\Core\Url;
|
Chris@0
|
7 use Drupal\Tests\UnitTestCase;
|
Chris@0
|
8 use Symfony\Component\HttpFoundation\Request;
|
Chris@0
|
9 use Symfony\Component\Routing\Exception\ResourceNotFoundException;
|
Chris@0
|
10
|
Chris@0
|
11 /**
|
Chris@0
|
12 * @coversDefaultClass \Drupal\Core\Url
|
Chris@0
|
13 * @group UrlTest
|
Chris@0
|
14 */
|
Chris@0
|
15 class UnroutedUrlTest extends UnitTestCase {
|
Chris@0
|
16
|
Chris@0
|
17 /**
|
Chris@0
|
18 * The URL assembler
|
Chris@0
|
19 *
|
Chris@0
|
20 * @var \Drupal\Core\Utility\UnroutedUrlAssemblerInterface|\PHPUnit_Framework_MockObject_MockObject
|
Chris@0
|
21 */
|
Chris@0
|
22 protected $urlAssembler;
|
Chris@0
|
23
|
Chris@0
|
24 /**
|
Chris@0
|
25 * The router.
|
Chris@0
|
26 *
|
Chris@0
|
27 * @var \Drupal\Tests\Core\Routing\TestRouterInterface|\PHPUnit_Framework_MockObject_MockObject
|
Chris@0
|
28 */
|
Chris@0
|
29 protected $router;
|
Chris@0
|
30
|
Chris@0
|
31 /**
|
Chris@0
|
32 * An unrouted, external URL to test.
|
Chris@0
|
33 *
|
Chris@0
|
34 * @var string
|
Chris@0
|
35 */
|
Chris@0
|
36 protected $unroutedExternal = 'https://www.drupal.org';
|
Chris@0
|
37
|
Chris@0
|
38 /**
|
Chris@0
|
39 * An unrouted, internal URL to test.
|
Chris@0
|
40 *
|
Chris@0
|
41 * @var string
|
Chris@0
|
42 */
|
Chris@0
|
43 protected $unroutedInternal = 'base:robots.txt';
|
Chris@0
|
44
|
Chris@0
|
45 /**
|
Chris@0
|
46 * {@inheritdoc}
|
Chris@0
|
47 */
|
Chris@0
|
48 protected function setUp() {
|
Chris@0
|
49 parent::setUp();
|
Chris@0
|
50
|
Chris@0
|
51 $this->urlAssembler = $this->getMock('Drupal\Core\Utility\UnroutedUrlAssemblerInterface');
|
Chris@0
|
52 $this->urlAssembler->expects($this->any())
|
Chris@0
|
53 ->method('assemble')
|
Chris@0
|
54 ->will($this->returnArgument(0));
|
Chris@0
|
55
|
Chris@0
|
56 $this->router = $this->getMock('Drupal\Tests\Core\Routing\TestRouterInterface');
|
Chris@0
|
57 $container = new ContainerBuilder();
|
Chris@0
|
58 $container->set('router.no_access_checks', $this->router);
|
Chris@0
|
59 $container->set('unrouted_url_assembler', $this->urlAssembler);
|
Chris@0
|
60 \Drupal::setContainer($container);
|
Chris@0
|
61 }
|
Chris@0
|
62
|
Chris@0
|
63 /**
|
Chris@0
|
64 * Tests the fromUri() method.
|
Chris@0
|
65 *
|
Chris@0
|
66 * @covers ::fromUri
|
Chris@0
|
67 *
|
Chris@0
|
68 * @dataProvider providerFromUri
|
Chris@0
|
69 */
|
Chris@0
|
70 public function testFromUri($uri, $is_external) {
|
Chris@0
|
71 $url = Url::fromUri($uri);
|
Chris@0
|
72
|
Chris@0
|
73 $this->assertInstanceOf('Drupal\Core\Url', $url);
|
Chris@0
|
74 }
|
Chris@0
|
75
|
Chris@0
|
76
|
Chris@0
|
77 /**
|
Chris@0
|
78 * Data provider for testFromUri().
|
Chris@0
|
79 */
|
Chris@0
|
80 public function providerFromUri() {
|
Chris@0
|
81 return [
|
Chris@0
|
82 // [$uri, $is_external]
|
Chris@0
|
83 // An external URI.
|
Chris@0
|
84 ['https://www.drupal.org', TRUE],
|
Chris@0
|
85 // A protocol-relative URL.
|
Chris@0
|
86 ['//www.drupal.org', TRUE],
|
Chris@0
|
87 // An internal, unrouted, base-relative URI.
|
Chris@0
|
88 ['base:robots.txt', FALSE],
|
Chris@0
|
89 // Base-relative URIs with special characters.
|
Chris@0
|
90 ['base:AKI@&hO@', FALSE],
|
Chris@0
|
91 ['base:(:;2&+h^', FALSE],
|
Chris@0
|
92 // Various token formats.
|
Chris@0
|
93 ['base:node/[token]', FALSE],
|
Chris@0
|
94 ['base:node/%', FALSE],
|
Chris@0
|
95 ['base:node/[token:token]', FALSE],
|
Chris@0
|
96 ['base:node/{{ token }}', FALSE],
|
Chris@0
|
97 ];
|
Chris@0
|
98 }
|
Chris@0
|
99
|
Chris@0
|
100 /**
|
Chris@0
|
101 * Tests the fromUri() method.
|
Chris@0
|
102 *
|
Chris@0
|
103 * @covers ::fromUri
|
Chris@0
|
104 * @dataProvider providerFromInvalidUri
|
Chris@0
|
105 */
|
Chris@0
|
106 public function testFromInvalidUri($uri) {
|
Chris@0
|
107 $this->setExpectedException(\InvalidArgumentException::class);
|
Chris@0
|
108 $url = Url::fromUri($uri);
|
Chris@0
|
109 }
|
Chris@0
|
110
|
Chris@0
|
111 /**
|
Chris@0
|
112 * Data provider for testFromInvalidUri().
|
Chris@0
|
113 */
|
Chris@0
|
114 public function providerFromInvalidUri() {
|
Chris@0
|
115 return [
|
Chris@0
|
116 // Schemeless paths.
|
Chris@0
|
117 ['test'],
|
Chris@0
|
118 ['/test'],
|
Chris@0
|
119 // Schemeless path with a query string.
|
Chris@0
|
120 ['foo?bar'],
|
Chris@0
|
121 // Only a query string.
|
Chris@0
|
122 ['?bar'],
|
Chris@0
|
123 // Only a fragment.
|
Chris@0
|
124 ['#foo'],
|
Chris@0
|
125 // Disallowed characters in the authority (host name) that are valid
|
Chris@0
|
126 // elsewhere in the path.
|
Chris@0
|
127 ['base://(:;2&+h^'],
|
Chris@0
|
128 ['base://AKI@&hO@'],
|
Chris@0
|
129 ];
|
Chris@0
|
130 }
|
Chris@0
|
131
|
Chris@0
|
132 /**
|
Chris@0
|
133 * Tests the createFromRequest method.
|
Chris@0
|
134 *
|
Chris@0
|
135 * @covers ::createFromRequest
|
Chris@0
|
136 */
|
Chris@0
|
137 public function testCreateFromRequest() {
|
Chris@0
|
138 $request = Request::create('/test-path');
|
Chris@0
|
139
|
Chris@0
|
140 $this->router->expects($this->once())
|
Chris@0
|
141 ->method('matchRequest')
|
Chris@0
|
142 ->with($request)
|
Chris@0
|
143 ->will($this->throwException(new ResourceNotFoundException()));
|
Chris@0
|
144
|
Chris@0
|
145 $this->setExpectedException(ResourceNotFoundException::class);
|
Chris@0
|
146 Url::createFromRequest($request);
|
Chris@0
|
147 }
|
Chris@0
|
148
|
Chris@0
|
149 /**
|
Chris@0
|
150 * Tests the isExternal() method.
|
Chris@0
|
151 *
|
Chris@0
|
152 * @depends testFromUri
|
Chris@0
|
153 * @dataProvider providerFromUri
|
Chris@0
|
154 *
|
Chris@0
|
155 * @covers ::isExternal
|
Chris@0
|
156 */
|
Chris@0
|
157 public function testIsExternal($uri, $is_external) {
|
Chris@0
|
158 $url = Url::fromUri($uri);
|
Chris@0
|
159 $this->assertSame($url->isExternal(), $is_external);
|
Chris@0
|
160 }
|
Chris@0
|
161
|
Chris@0
|
162 /**
|
Chris@0
|
163 * Tests the toString() method.
|
Chris@0
|
164 *
|
Chris@0
|
165 * @depends testFromUri
|
Chris@0
|
166 * @dataProvider providerFromUri
|
Chris@0
|
167 *
|
Chris@0
|
168 * @covers ::toString
|
Chris@0
|
169 */
|
Chris@0
|
170 public function testToString($uri) {
|
Chris@0
|
171 $url = Url::fromUri($uri);
|
Chris@0
|
172 $this->assertSame($uri, $url->toString());
|
Chris@0
|
173 }
|
Chris@0
|
174
|
Chris@0
|
175 /**
|
Chris@0
|
176 * Tests the getRouteName() method.
|
Chris@0
|
177 *
|
Chris@0
|
178 * @depends testFromUri
|
Chris@0
|
179 * @dataProvider providerFromUri
|
Chris@0
|
180 *
|
Chris@0
|
181 * @covers ::getRouteName
|
Chris@0
|
182 */
|
Chris@0
|
183 public function testGetRouteName($uri) {
|
Chris@0
|
184 $url = Url::fromUri($uri);
|
Chris@0
|
185 $this->setExpectedException(\UnexpectedValueException::class);
|
Chris@0
|
186 $url->getRouteName();
|
Chris@0
|
187 }
|
Chris@0
|
188
|
Chris@0
|
189 /**
|
Chris@0
|
190 * Tests the getRouteParameters() method.
|
Chris@0
|
191 *
|
Chris@0
|
192 * @depends testFromUri
|
Chris@0
|
193 * @dataProvider providerFromUri
|
Chris@0
|
194 *
|
Chris@0
|
195 * @covers ::getRouteParameters
|
Chris@0
|
196 */
|
Chris@0
|
197 public function testGetRouteParameters($uri) {
|
Chris@0
|
198 $url = Url::fromUri($uri);
|
Chris@0
|
199 $this->setExpectedException(\UnexpectedValueException::class);
|
Chris@0
|
200 $url->getRouteParameters();
|
Chris@0
|
201 }
|
Chris@0
|
202
|
Chris@0
|
203 /**
|
Chris@0
|
204 * Tests the getInternalPath() method.
|
Chris@0
|
205 *
|
Chris@0
|
206 * @depends testFromUri
|
Chris@0
|
207 * @dataProvider providerFromUri
|
Chris@0
|
208 *
|
Chris@0
|
209 * @covers ::getInternalPath
|
Chris@0
|
210 */
|
Chris@0
|
211 public function testGetInternalPath($uri) {
|
Chris@0
|
212 $url = Url::fromUri($uri);
|
Chris@0
|
213 $this->setExpectedException(\Exception::class);
|
Chris@0
|
214 $url->getInternalPath();
|
Chris@0
|
215 }
|
Chris@0
|
216
|
Chris@0
|
217 /**
|
Chris@0
|
218 * Tests the getPath() method.
|
Chris@0
|
219 *
|
Chris@0
|
220 * @depends testFromUri
|
Chris@0
|
221 * @dataProvider providerFromUri
|
Chris@0
|
222 *
|
Chris@0
|
223 * @covers ::getUri
|
Chris@0
|
224 */
|
Chris@0
|
225 public function testGetUri($uri) {
|
Chris@0
|
226 $url = Url::fromUri($uri);
|
Chris@0
|
227 $this->assertNotNull($url->getUri());
|
Chris@0
|
228 }
|
Chris@0
|
229
|
Chris@0
|
230 /**
|
Chris@0
|
231 * Tests the getOptions() method.
|
Chris@0
|
232 *
|
Chris@0
|
233 * @depends testFromUri
|
Chris@0
|
234 * @dataProvider providerFromUri
|
Chris@0
|
235 *
|
Chris@0
|
236 * @covers ::getOptions
|
Chris@0
|
237 */
|
Chris@0
|
238 public function testGetOptions($uri) {
|
Chris@0
|
239 $url = Url::fromUri($uri);
|
Chris@0
|
240 $this->assertInternalType('array', $url->getOptions());
|
Chris@0
|
241 }
|
Chris@0
|
242
|
Chris@0
|
243 }
|