3 namespace Drupal\KernelTests\Core\RouteProcessor;
5 use Drupal\Core\Cache\Cache;
6 use Drupal\Core\GeneratedUrl;
7 use Drupal\Core\Render\BubbleableMetadata;
8 use Drupal\KernelTests\KernelTestBase;
9 use Symfony\Cmf\Component\Routing\RouteObjectInterface;
10 use Symfony\Component\HttpFoundation\Request;
11 use Symfony\Component\Routing\Route;
14 * Tests the <none> route processor.
16 * @see system.routing.yml
17 * @see \Drupal\Core\Routing\UrlGenerator
18 * @group route_processor
20 class RouteNoneTest extends KernelTestBase {
25 public static $modules = ['system'];
30 * @var \Drupal\Core\Routing\UrlGeneratorInterface
32 protected $urlGenerator;
37 protected function setUp() {
40 $this->urlGenerator = \Drupal::urlGenerator();
44 * Tests the output process.
46 public function testProcessOutbound() {
47 $expected_cacheability = (new BubbleableMetadata())->setCacheMaxAge(Cache::PERMANENT);
49 $request_stack = \Drupal::requestStack();
50 /** @var \Symfony\Component\Routing\RequestContext $request_context */
51 $request_context = \Drupal::service('router.request_context');
53 // Test request with subdir on homepage.
55 'SCRIPT_NAME' => '/subdir/index.php',
56 'SCRIPT_FILENAME' => $this->root . '/index.php',
57 'SERVER_NAME' => 'http://www.example.com',
59 $request = Request::create('/subdir', 'GET', [], [], [], $server);
60 $request->attributes->set(RouteObjectInterface::ROUTE_NAME, '<front>');
61 $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, new Route('/'));
63 $request_stack->push($request);
64 $request_context->fromRequest($request);
65 $url = GeneratedUrl::createFromObject($expected_cacheability)->setGeneratedUrl('');
66 $this->assertEqual($url, $this->urlGenerator->generateFromRoute('<none>', [], [], TRUE, TRUE));
67 $url = GeneratedUrl::createFromObject($expected_cacheability)->setGeneratedUrl('#test-fragment');
68 $this->assertEqual($url, $this->urlGenerator->generateFromRoute('<none>', [], ['fragment' => 'test-fragment'], TRUE));
70 // Test request with subdir on other page.
72 'SCRIPT_NAME' => '/subdir/index.php',
73 'SCRIPT_FILENAME' => $this->root . '/index.php',
74 'SERVER_NAME' => 'http://www.example.com',
76 $request = Request::create('/subdir/node/add', 'GET', [], [], [], $server);
77 $request->attributes->set(RouteObjectInterface::ROUTE_NAME, 'node.add');
78 $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, new Route('/node/add'));
80 $request_stack->push($request);
81 $request_context->fromRequest($request);
82 $url = GeneratedUrl::createFromObject($expected_cacheability)->setGeneratedUrl('');
83 $this->assertEqual($url, $this->urlGenerator->generateFromRoute('<none>', [], [], TRUE, TRUE));
84 $url = GeneratedUrl::createFromObject($expected_cacheability)->setGeneratedUrl('#test-fragment');
85 $this->assertEqual($url, $this->urlGenerator->generateFromRoute('<none>', [], ['fragment' => 'test-fragment'], TRUE));
87 // Test request without subdir on the homepage.
89 'SCRIPT_NAME' => '/index.php',
90 'SCRIPT_FILENAME' => $this->root . '/index.php',
91 'SERVER_NAME' => 'http://www.example.com',
93 $request = Request::create('/', 'GET', [], [], [], $server);
94 $request->attributes->set(RouteObjectInterface::ROUTE_NAME, '<front>');
95 $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, new Route('/'));
97 $request_stack->push($request);
98 $request_context->fromRequest($request);
99 $url = GeneratedUrl::createFromObject($expected_cacheability)->setGeneratedUrl('');
100 $this->assertEqual($url, $this->urlGenerator->generateFromRoute('<none>', [], [], TRUE, TRUE));
101 $url = GeneratedUrl::createFromObject($expected_cacheability)->setGeneratedUrl('#test-fragment');
102 $this->assertEqual($url, $this->urlGenerator->generateFromRoute('<none>', [], ['fragment' => 'test-fragment'], TRUE));
104 // Test request without subdir on other page.
106 'SCRIPT_NAME' => '/index.php',
107 'SCRIPT_FILENAME' => $this->root . '/index.php',
108 'SERVER_NAME' => 'http://www.example.com',
110 $request = Request::create('/node/add', 'GET', [], [], [], $server);
111 $request->attributes->set(RouteObjectInterface::ROUTE_NAME, 'node.add');
112 $request->attributes->set(RouteObjectInterface::ROUTE_OBJECT, new Route('/node/add'));
114 $request_stack->push($request);
115 $request_context->fromRequest($request);
116 $url = GeneratedUrl::createFromObject($expected_cacheability)->setGeneratedUrl('');
117 $this->assertEqual($url, $this->urlGenerator->generateFromRoute('<none>', [], [], TRUE, TRUE));
118 $url = GeneratedUrl::createFromObject($expected_cacheability)->setGeneratedUrl('#test-fragment');
119 $this->assertEqual($url, $this->urlGenerator->generateFromRoute('<none>', [], ['fragment' => 'test-fragment'], TRUE));