annotate core/tests/Drupal/Tests/Core/UnroutedUrlTest.php @ 0:c75dbcec494b

Initial commit from drush-created site
author Chris Cannam
date Thu, 05 Jul 2018 14:24:15 +0000
parents
children a9cd425dd02b
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 /**
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 }