Upgraded drupal core with security updates
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Controller / TitleResolverTest.php
1 <?php
2
3 /**
4  * @file
5  * Contains \Drupal\Tests\Core\Controller\TitleResolverTest.
6  */
7
8 namespace Drupal\Tests\Core\Controller;
9
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;
16
17 /**
18  * @coversDefaultClass \Drupal\Core\Controller\TitleResolver
19  * @group Controller
20  */
21 class TitleResolverTest extends UnitTestCase {
22
23   /**
24    * The mocked controller resolver.
25    *
26    * @var \Drupal\Core\Controller\ControllerResolverInterface|\PHPUnit_Framework_MockObject_MockObject
27    */
28   protected $controllerResolver;
29
30   /**
31    * The mocked translation manager.
32    *
33    * @var \Drupal\Core\StringTranslation\TranslationInterface|\PHPUnit_Framework_MockObject_MockObject
34    */
35   protected $translationManager;
36
37   /**
38    * The actual tested title resolver.
39    *
40    * @var \Drupal\Core\Controller\TitleResolver
41    */
42   protected $titleResolver;
43
44   protected function setUp() {
45     $this->controllerResolver = $this->getMock('\Drupal\Core\Controller\ControllerResolverInterface');
46     $this->translationManager = $this->getMock('\Drupal\Core\StringTranslation\TranslationInterface');
47
48     $this->titleResolver = new TitleResolver($this->controllerResolver, $this->translationManager);
49   }
50
51   /**
52    * Tests a static title without a context.
53    *
54    * @see \Drupal\Core\Controller\TitleResolver::getTitle()
55    */
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));
60   }
61
62   /**
63    * Tests a static title with a context.
64    *
65    * @see \Drupal\Core\Controller\TitleResolver::getTitle()
66    */
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));
71   }
72
73   /**
74    * Tests a static title with a parameter.
75    *
76    * @see \Drupal\Core\Controller\TitleResolver::getTitle()
77    *
78    * @dataProvider providerTestStaticTitleWithParameter
79    */
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);
84
85     $route = new Route('/test-route', ['_title' => $title]);
86     $this->assertEquals($expected_title, $this->titleResolver->getTitle($request, $route));
87   }
88
89   public function providerTestStaticTitleWithParameter() {
90     $translation_manager = $this->getMock('\Drupal\Core\StringTranslation\TranslationInterface');
91     return [
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)],
94     ];
95   }
96
97   /**
98    * Tests a dynamic title.
99    *
100    * @see \Drupal\Core\Controller\TitleResolver::getTitle()
101    */
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']);
105
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']));
115
116     $this->assertEquals('test example', $this->titleResolver->getTitle($request, $route));
117   }
118
119 }
120
121 /**
122  * Provides an example title callback for the testDynamicTitle method above.
123  */
124 class TitleCallback {
125
126   /**
127    * Gets the example string.
128    *
129    * @param string $value
130    *   The dynamic value.
131    *
132    * @return string
133    *   Returns the example string.
134    */
135   public function example($value) {
136     return 'test ' . $value;
137   }
138
139 }