Chris@0: container->get('router.builder')->rebuild();
Chris@0: }
Chris@0:
Chris@0: /**
Chris@17: * Gets arguments for FormattableMarkup based on Url::fromUri() parameters.
Chris@0: *
Chris@0: * @param string $uri
Chris@0: * The URI of the resource.
Chris@0: * @param array $options
Chris@0: * The options to pass to Url::fromUri().
Chris@0: *
Chris@0: * @return array
Chris@0: * Array containing:
Chris@0: * - ':url': A URL string.
Chris@17: *
Chris@17: * @see \Drupal\Component\Render\FormattableMarkup
Chris@0: */
Chris@0: protected static function getSafeMarkupUriArgs($uri, $options = []) {
Chris@0: $args[':url'] = Url::fromUri($uri, $options)->toString();
Chris@0: return $args;
Chris@0: }
Chris@0:
Chris@0: /**
Chris@17: * Tests URL ":placeholders" in \Drupal\Component\Render\FormattableMarkup.
Chris@0: *
Chris@0: * @dataProvider providerTestSafeMarkupUri
Chris@0: */
Chris@0: public function testSafeMarkupUri($string, $uri, $options, $expected) {
Chris@0: $args = self::getSafeMarkupUriArgs($uri, $options);
Chris@17: $this->assertEquals($expected, new FormattableMarkup($string, $args));
Chris@0: }
Chris@0:
Chris@0: /**
Chris@0: * @return array
Chris@0: */
Chris@0: public function providerTestSafeMarkupUri() {
Chris@0: $data = [];
Chris@0: $data['routed-url'] = [
Chris@0: 'Hey giraffe MUUUH',
Chris@0: 'route:system.admin',
Chris@0: [],
Chris@0: 'Hey giraffe MUUUH',
Chris@0: ];
Chris@0: $data['routed-with-query'] = [
Chris@0: 'Hey giraffe MUUUH',
Chris@0: 'route:system.admin',
Chris@0: ['query' => ['bar' => 'baz#']],
Chris@0: 'Hey giraffe MUUUH',
Chris@0: ];
Chris@0: $data['routed-with-fragment'] = [
Chris@0: 'Hey giraffe MUUUH',
Chris@0: 'route:system.admin',
Chris@0: ['fragment' => 'bar<'],
Chris@0: 'Hey giraffe MUUUH',
Chris@0: ];
Chris@0: $data['unrouted-url'] = [
Chris@0: 'Hey giraffe MUUUH',
Chris@0: 'base://foo',
Chris@0: [],
Chris@0: 'Hey giraffe MUUUH',
Chris@0: ];
Chris@0: $data['unrouted-with-query'] = [
Chris@0: 'Hey giraffe MUUUH',
Chris@0: 'base://foo',
Chris@0: ['query' => ['bar' => 'baz#']],
Chris@0: 'Hey giraffe MUUUH',
Chris@0: ];
Chris@0: $data['unrouted-with-fragment'] = [
Chris@0: 'Hey giraffe MUUUH',
Chris@0: 'base://foo',
Chris@0: ['fragment' => 'bar<'],
Chris@0: 'Hey giraffe MUUUH',
Chris@0: ];
Chris@0: $data['mailto-protocol'] = [
Chris@0: 'Hey giraffe MUUUH',
Chris@0: 'mailto:test@example.com',
Chris@0: [],
Chris@0: 'Hey giraffe MUUUH',
Chris@0: ];
Chris@0:
Chris@0: return $data;
Chris@0: }
Chris@0:
Chris@0: /**
Chris@0: * @dataProvider providerTestSafeMarkupUriWithException
Chris@0: */
Chris@0: public function testSafeMarkupUriWithExceptionUri($string, $uri) {
Chris@0: // Should throw an \InvalidArgumentException, due to Uri::toString().
Chris@0: $this->setExpectedException(\InvalidArgumentException::class);
Chris@0: $args = self::getSafeMarkupUriArgs($uri);
Chris@0:
Chris@17: new FormattableMarkup($string, $args);
Chris@0: }
Chris@0:
Chris@0: /**
Chris@0: * @return array
Chris@0: */
Chris@0: public function providerTestSafeMarkupUriWithException() {
Chris@0: $data = [];
Chris@0: $data['js-protocol'] = [
Chris@0: 'Hey giraffe MUUUH',
Chris@0: "javascript:alert('xss')",
Chris@0: ];
Chris@0: $data['js-with-fromCharCode'] = [
Chris@0: 'Hey giraffe MUUUH',
Chris@0: "javascript:alert(String.fromCharCode(88,83,83))",
Chris@0: ];
Chris@0: $data['non-url-with-colon'] = [
Chris@0: 'Hey giraffe MUUUH',
Chris@0: "llamas: they are not URLs",
Chris@0: ];
Chris@0: $data['non-url-with-html'] = [
Chris@0: 'Hey giraffe MUUUH',
Chris@0: 'not a url',
Chris@0: ];
Chris@0:
Chris@0: return $data;
Chris@0: }
Chris@0:
Chris@0: }