annotate core/tests/Drupal/Tests/Core/UnroutedUrlTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
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 }