5 * Contains \Drupal\Tests\Core\Controller\TitleResolverTest.
8 namespace Drupal\Tests\Core\Controller;
10 use Drupal\Core\Controller\TitleResolver;
11 use Drupal\Tests\UnitTestCase;
12 use Symfony\Component\HttpFoundation\ParameterBag;
13 use Symfony\Component\HttpFoundation\Request;
14 use Symfony\Component\Routing\Route;
15 use Drupal\Core\StringTranslation\TranslatableMarkup;
18 * @coversDefaultClass \Drupal\Core\Controller\TitleResolver
21 class TitleResolverTest extends UnitTestCase {
24 * The mocked controller resolver.
26 * @var \Drupal\Core\Controller\ControllerResolverInterface|\PHPUnit_Framework_MockObject_MockObject
28 protected $controllerResolver;
31 * The mocked translation manager.
33 * @var \Drupal\Core\StringTranslation\TranslationInterface|\PHPUnit_Framework_MockObject_MockObject
35 protected $translationManager;
38 * The actual tested title resolver.
40 * @var \Drupal\Core\Controller\TitleResolver
42 protected $titleResolver;
44 protected function setUp() {
45 $this->controllerResolver = $this->getMock('\Drupal\Core\Controller\ControllerResolverInterface');
46 $this->translationManager = $this->getMock('\Drupal\Core\StringTranslation\TranslationInterface');
48 $this->titleResolver = new TitleResolver($this->controllerResolver, $this->translationManager);
52 * Tests a static title without a context.
54 * @see \Drupal\Core\Controller\TitleResolver::getTitle()
56 public function testStaticTitle() {
57 $request = new Request();
58 $route = new Route('/test-route', ['_title' => 'static title']);
59 $this->assertEquals(new TranslatableMarkup('static title', [], [], $this->translationManager), $this->titleResolver->getTitle($request, $route));
63 * Tests a static title with a context.
65 * @see \Drupal\Core\Controller\TitleResolver::getTitle()
67 public function testStaticTitleWithContext() {
68 $request = new Request();
69 $route = new Route('/test-route', ['_title' => 'static title', '_title_context' => 'context']);
70 $this->assertEquals(new TranslatableMarkup('static title', [], ['context' => 'context'], $this->translationManager), $this->titleResolver->getTitle($request, $route));
74 * Tests a static title with a parameter.
76 * @see \Drupal\Core\Controller\TitleResolver::getTitle()
78 * @dataProvider providerTestStaticTitleWithParameter
80 public function testStaticTitleWithParameter($title, $expected_title) {
81 $raw_variables = new ParameterBag(['test' => 'value', 'test2' => 'value2']);
82 $request = new Request();
83 $request->attributes->set('_raw_variables', $raw_variables);
85 $route = new Route('/test-route', ['_title' => $title]);
86 $this->assertEquals($expected_title, $this->titleResolver->getTitle($request, $route));
89 public function providerTestStaticTitleWithParameter() {
90 $translation_manager = $this->getMock('\Drupal\Core\StringTranslation\TranslationInterface');
92 ['static title @test', new TranslatableMarkup('static title @test', ['@test' => 'value', '%test' => 'value', '@test2' => 'value2', '%test2' => 'value2'], [], $translation_manager)],
93 ['static title %test', new TranslatableMarkup('static title %test', ['@test' => 'value', '%test' => 'value', '@test2' => 'value2', '%test2' => 'value2'], [], $translation_manager)],
98 * Tests a dynamic title.
100 * @see \Drupal\Core\Controller\TitleResolver::getTitle()
102 public function testDynamicTitle() {
103 $request = new Request();
104 $route = new Route('/test-route', ['_title' => 'static title', '_title_callback' => 'Drupal\Tests\Core\Controller\TitleCallback::example']);
106 $callable = [new TitleCallback(), 'example'];
107 $this->controllerResolver->expects($this->once())
108 ->method('getControllerFromDefinition')
109 ->with('Drupal\Tests\Core\Controller\TitleCallback::example')
110 ->will($this->returnValue($callable));
111 $this->controllerResolver->expects($this->once())
112 ->method('getArguments')
113 ->with($request, $callable)
114 ->will($this->returnValue(['example']));
116 $this->assertEquals('test example', $this->titleResolver->getTitle($request, $route));
122 * Provides an example title callback for the testDynamicTitle method above.
124 class TitleCallback {
127 * Gets the example string.
129 * @param string $value
133 * Returns the example string.
135 public function example($value) {
136 return 'test ' . $value;