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 * Data provider for testFromUri().
|
Chris@0
|
78 */
|
Chris@0
|
79 public function providerFromUri() {
|
Chris@0
|
80 return [
|
Chris@0
|
81 // [$uri, $is_external]
|
Chris@0
|
82 // An external URI.
|
Chris@0
|
83 ['https://www.drupal.org', TRUE],
|
Chris@0
|
84 // A protocol-relative URL.
|
Chris@0
|
85 ['//www.drupal.org', TRUE],
|
Chris@0
|
86 // An internal, unrouted, base-relative URI.
|
Chris@0
|
87 ['base:robots.txt', FALSE],
|
Chris@0
|
88 // Base-relative URIs with special characters.
|
Chris@0
|
89 ['base:AKI@&hO@', FALSE],
|
Chris@0
|
90 ['base:(:;2&+h^', FALSE],
|
Chris@0
|
91 // Various token formats.
|
Chris@0
|
92 ['base:node/[token]', FALSE],
|
Chris@0
|
93 ['base:node/%', FALSE],
|
Chris@0
|
94 ['base:node/[token:token]', FALSE],
|
Chris@0
|
95 ['base:node/{{ token }}', FALSE],
|
Chris@0
|
96 ];
|
Chris@0
|
97 }
|
Chris@0
|
98
|
Chris@0
|
99 /**
|
Chris@0
|
100 * Tests the fromUri() method.
|
Chris@0
|
101 *
|
Chris@0
|
102 * @covers ::fromUri
|
Chris@0
|
103 * @dataProvider providerFromInvalidUri
|
Chris@0
|
104 */
|
Chris@0
|
105 public function testFromInvalidUri($uri) {
|
Chris@0
|
106 $this->setExpectedException(\InvalidArgumentException::class);
|
Chris@0
|
107 $url = Url::fromUri($uri);
|
Chris@0
|
108 }
|
Chris@0
|
109
|
Chris@0
|
110 /**
|
Chris@0
|
111 * Data provider for testFromInvalidUri().
|
Chris@0
|
112 */
|
Chris@0
|
113 public function providerFromInvalidUri() {
|
Chris@0
|
114 return [
|
Chris@0
|
115 // Schemeless paths.
|
Chris@0
|
116 ['test'],
|
Chris@0
|
117 ['/test'],
|
Chris@0
|
118 // Schemeless path with a query string.
|
Chris@0
|
119 ['foo?bar'],
|
Chris@0
|
120 // Only a query string.
|
Chris@0
|
121 ['?bar'],
|
Chris@0
|
122 // Only a fragment.
|
Chris@0
|
123 ['#foo'],
|
Chris@0
|
124 // Disallowed characters in the authority (host name) that are valid
|
Chris@0
|
125 // elsewhere in the path.
|
Chris@0
|
126 ['base://(:;2&+h^'],
|
Chris@0
|
127 ['base://AKI@&hO@'],
|
Chris@0
|
128 ];
|
Chris@0
|
129 }
|
Chris@0
|
130
|
Chris@0
|
131 /**
|
Chris@0
|
132 * Tests the createFromRequest method.
|
Chris@0
|
133 *
|
Chris@0
|
134 * @covers ::createFromRequest
|
Chris@0
|
135 */
|
Chris@0
|
136 public function testCreateFromRequest() {
|
Chris@0
|
137 $request = Request::create('/test-path');
|
Chris@0
|
138
|
Chris@0
|
139 $this->router->expects($this->once())
|
Chris@0
|
140 ->method('matchRequest')
|
Chris@0
|
141 ->with($request)
|
Chris@0
|
142 ->will($this->throwException(new ResourceNotFoundException()));
|
Chris@0
|
143
|
Chris@0
|
144 $this->setExpectedException(ResourceNotFoundException::class);
|
Chris@0
|
145 Url::createFromRequest($request);
|
Chris@0
|
146 }
|
Chris@0
|
147
|
Chris@0
|
148 /**
|
Chris@0
|
149 * Tests the isExternal() method.
|
Chris@0
|
150 *
|
Chris@0
|
151 * @depends testFromUri
|
Chris@0
|
152 * @dataProvider providerFromUri
|
Chris@0
|
153 *
|
Chris@0
|
154 * @covers ::isExternal
|
Chris@0
|
155 */
|
Chris@0
|
156 public function testIsExternal($uri, $is_external) {
|
Chris@0
|
157 $url = Url::fromUri($uri);
|
Chris@0
|
158 $this->assertSame($url->isExternal(), $is_external);
|
Chris@0
|
159 }
|
Chris@0
|
160
|
Chris@0
|
161 /**
|
Chris@0
|
162 * Tests the toString() method.
|
Chris@0
|
163 *
|
Chris@0
|
164 * @depends testFromUri
|
Chris@0
|
165 * @dataProvider providerFromUri
|
Chris@0
|
166 *
|
Chris@0
|
167 * @covers ::toString
|
Chris@0
|
168 */
|
Chris@0
|
169 public function testToString($uri) {
|
Chris@0
|
170 $url = Url::fromUri($uri);
|
Chris@0
|
171 $this->assertSame($uri, $url->toString());
|
Chris@0
|
172 }
|
Chris@0
|
173
|
Chris@0
|
174 /**
|
Chris@0
|
175 * Tests the getRouteName() method.
|
Chris@0
|
176 *
|
Chris@0
|
177 * @depends testFromUri
|
Chris@0
|
178 * @dataProvider providerFromUri
|
Chris@0
|
179 *
|
Chris@0
|
180 * @covers ::getRouteName
|
Chris@0
|
181 */
|
Chris@0
|
182 public function testGetRouteName($uri) {
|
Chris@0
|
183 $url = Url::fromUri($uri);
|
Chris@0
|
184 $this->setExpectedException(\UnexpectedValueException::class);
|
Chris@0
|
185 $url->getRouteName();
|
Chris@0
|
186 }
|
Chris@0
|
187
|
Chris@0
|
188 /**
|
Chris@0
|
189 * Tests the getRouteParameters() method.
|
Chris@0
|
190 *
|
Chris@0
|
191 * @depends testFromUri
|
Chris@0
|
192 * @dataProvider providerFromUri
|
Chris@0
|
193 *
|
Chris@0
|
194 * @covers ::getRouteParameters
|
Chris@0
|
195 */
|
Chris@0
|
196 public function testGetRouteParameters($uri) {
|
Chris@0
|
197 $url = Url::fromUri($uri);
|
Chris@0
|
198 $this->setExpectedException(\UnexpectedValueException::class);
|
Chris@0
|
199 $url->getRouteParameters();
|
Chris@0
|
200 }
|
Chris@0
|
201
|
Chris@0
|
202 /**
|
Chris@0
|
203 * Tests the getInternalPath() method.
|
Chris@0
|
204 *
|
Chris@0
|
205 * @depends testFromUri
|
Chris@0
|
206 * @dataProvider providerFromUri
|
Chris@0
|
207 *
|
Chris@0
|
208 * @covers ::getInternalPath
|
Chris@0
|
209 */
|
Chris@0
|
210 public function testGetInternalPath($uri) {
|
Chris@0
|
211 $url = Url::fromUri($uri);
|
Chris@0
|
212 $this->setExpectedException(\Exception::class);
|
Chris@0
|
213 $url->getInternalPath();
|
Chris@0
|
214 }
|
Chris@0
|
215
|
Chris@0
|
216 /**
|
Chris@0
|
217 * Tests the getPath() method.
|
Chris@0
|
218 *
|
Chris@0
|
219 * @depends testFromUri
|
Chris@0
|
220 * @dataProvider providerFromUri
|
Chris@0
|
221 *
|
Chris@0
|
222 * @covers ::getUri
|
Chris@0
|
223 */
|
Chris@0
|
224 public function testGetUri($uri) {
|
Chris@0
|
225 $url = Url::fromUri($uri);
|
Chris@0
|
226 $this->assertNotNull($url->getUri());
|
Chris@0
|
227 }
|
Chris@0
|
228
|
Chris@0
|
229 /**
|
Chris@0
|
230 * Tests the getOptions() method.
|
Chris@0
|
231 *
|
Chris@0
|
232 * @depends testFromUri
|
Chris@0
|
233 * @dataProvider providerFromUri
|
Chris@0
|
234 *
|
Chris@0
|
235 * @covers ::getOptions
|
Chris@0
|
236 */
|
Chris@0
|
237 public function testGetOptions($uri) {
|
Chris@0
|
238 $url = Url::fromUri($uri);
|
Chris@0
|
239 $this->assertInternalType('array', $url->getOptions());
|
Chris@0
|
240 }
|
Chris@0
|
241
|
Chris@0
|
242 }
|