Chris@0: urlAssembler = $this->getMock('Drupal\Core\Utility\UnroutedUrlAssemblerInterface'); Chris@0: $this->urlAssembler->expects($this->any()) Chris@0: ->method('assemble') Chris@0: ->will($this->returnArgument(0)); Chris@0: Chris@0: $this->router = $this->getMock('Drupal\Tests\Core\Routing\TestRouterInterface'); Chris@0: $container = new ContainerBuilder(); Chris@0: $container->set('router.no_access_checks', $this->router); Chris@0: $container->set('unrouted_url_assembler', $this->urlAssembler); Chris@0: \Drupal::setContainer($container); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests the fromUri() method. Chris@0: * Chris@0: * @covers ::fromUri Chris@0: * Chris@0: * @dataProvider providerFromUri Chris@0: */ Chris@0: public function testFromUri($uri, $is_external) { Chris@0: $url = Url::fromUri($uri); Chris@0: Chris@0: $this->assertInstanceOf('Drupal\Core\Url', $url); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Data provider for testFromUri(). Chris@0: */ Chris@0: public function providerFromUri() { Chris@0: return [ Chris@0: // [$uri, $is_external] Chris@0: // An external URI. Chris@0: ['https://www.drupal.org', TRUE], Chris@0: // A protocol-relative URL. Chris@0: ['//www.drupal.org', TRUE], Chris@0: // An internal, unrouted, base-relative URI. Chris@0: ['base:robots.txt', FALSE], Chris@0: // Base-relative URIs with special characters. Chris@0: ['base:AKI@&hO@', FALSE], Chris@0: ['base:(:;2&+h^', FALSE], Chris@0: // Various token formats. Chris@0: ['base:node/[token]', FALSE], Chris@0: ['base:node/%', FALSE], Chris@0: ['base:node/[token:token]', FALSE], Chris@0: ['base:node/{{ token }}', FALSE], Chris@0: ]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests the fromUri() method. Chris@0: * Chris@0: * @covers ::fromUri Chris@0: * @dataProvider providerFromInvalidUri Chris@0: */ Chris@0: public function testFromInvalidUri($uri) { Chris@0: $this->setExpectedException(\InvalidArgumentException::class); Chris@0: $url = Url::fromUri($uri); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Data provider for testFromInvalidUri(). Chris@0: */ Chris@0: public function providerFromInvalidUri() { Chris@0: return [ Chris@0: // Schemeless paths. Chris@0: ['test'], Chris@0: ['/test'], Chris@0: // Schemeless path with a query string. Chris@0: ['foo?bar'], Chris@0: // Only a query string. Chris@0: ['?bar'], Chris@0: // Only a fragment. Chris@0: ['#foo'], Chris@0: // Disallowed characters in the authority (host name) that are valid Chris@0: // elsewhere in the path. Chris@0: ['base://(:;2&+h^'], Chris@0: ['base://AKI@&hO@'], Chris@0: ]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests the createFromRequest method. Chris@0: * Chris@0: * @covers ::createFromRequest Chris@0: */ Chris@0: public function testCreateFromRequest() { Chris@0: $request = Request::create('/test-path'); Chris@0: Chris@0: $this->router->expects($this->once()) Chris@0: ->method('matchRequest') Chris@0: ->with($request) Chris@0: ->will($this->throwException(new ResourceNotFoundException())); Chris@0: Chris@0: $this->setExpectedException(ResourceNotFoundException::class); Chris@0: Url::createFromRequest($request); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests the isExternal() method. Chris@0: * Chris@0: * @depends testFromUri Chris@0: * @dataProvider providerFromUri Chris@0: * Chris@0: * @covers ::isExternal Chris@0: */ Chris@0: public function testIsExternal($uri, $is_external) { Chris@0: $url = Url::fromUri($uri); Chris@0: $this->assertSame($url->isExternal(), $is_external); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests the toString() method. Chris@0: * Chris@0: * @depends testFromUri Chris@0: * @dataProvider providerFromUri Chris@0: * Chris@0: * @covers ::toString Chris@0: */ Chris@0: public function testToString($uri) { Chris@0: $url = Url::fromUri($uri); Chris@0: $this->assertSame($uri, $url->toString()); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests the getRouteName() method. Chris@0: * Chris@0: * @depends testFromUri Chris@0: * @dataProvider providerFromUri Chris@0: * Chris@0: * @covers ::getRouteName Chris@0: */ Chris@0: public function testGetRouteName($uri) { Chris@0: $url = Url::fromUri($uri); Chris@0: $this->setExpectedException(\UnexpectedValueException::class); Chris@0: $url->getRouteName(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests the getRouteParameters() method. Chris@0: * Chris@0: * @depends testFromUri Chris@0: * @dataProvider providerFromUri Chris@0: * Chris@0: * @covers ::getRouteParameters Chris@0: */ Chris@0: public function testGetRouteParameters($uri) { Chris@0: $url = Url::fromUri($uri); Chris@0: $this->setExpectedException(\UnexpectedValueException::class); Chris@0: $url->getRouteParameters(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests the getInternalPath() method. Chris@0: * Chris@0: * @depends testFromUri Chris@0: * @dataProvider providerFromUri Chris@0: * Chris@0: * @covers ::getInternalPath Chris@0: */ Chris@0: public function testGetInternalPath($uri) { Chris@0: $url = Url::fromUri($uri); Chris@0: $this->setExpectedException(\Exception::class); Chris@0: $url->getInternalPath(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests the getPath() method. Chris@0: * Chris@0: * @depends testFromUri Chris@0: * @dataProvider providerFromUri Chris@0: * Chris@0: * @covers ::getUri Chris@0: */ Chris@0: public function testGetUri($uri) { Chris@0: $url = Url::fromUri($uri); Chris@0: $this->assertNotNull($url->getUri()); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests the getOptions() method. Chris@0: * Chris@0: * @depends testFromUri Chris@0: * @dataProvider providerFromUri Chris@0: * Chris@0: * @covers ::getOptions Chris@0: */ Chris@0: public function testGetOptions($uri) { Chris@0: $url = Url::fromUri($uri); Chris@0: $this->assertInternalType('array', $url->getOptions()); Chris@0: } Chris@0: Chris@0: }