More updates to stop using dev or alpha or beta versions.
[yaffs-website] / web / core / modules / system / src / Tests / Theme / EngineTwigTest.php
1 <?php
2
3 namespace Drupal\system\Tests\Theme;
4
5 use Drupal\Core\Render\Markup;
6 use Drupal\Core\Url;
7 use Drupal\simpletest\WebTestBase;
8
9 /**
10  * Tests Twig-specific theme functionality.
11  *
12  * @group Theme
13  */
14 class EngineTwigTest extends WebTestBase {
15
16   /**
17    * Modules to enable.
18    *
19    * @var array
20    */
21   public static $modules = ['theme_test', 'twig_theme_test'];
22
23   protected function setUp() {
24     parent::setUp();
25     \Drupal::service('theme_handler')->install(['test_theme']);
26   }
27
28   /**
29    * Tests that the Twig engine handles PHP data correctly.
30    */
31   public function testTwigVariableDataTypes() {
32     $this->config('system.theme')
33       ->set('default', 'test_theme')
34       ->save();
35     $this->drupalGet('twig-theme-test/php-variables');
36     foreach (_test_theme_twig_php_values() as $type => $value) {
37       $this->assertRaw('<li>' . $type . ': ' . $value['expected'] . '</li>');
38     }
39   }
40
41   /**
42    * Tests the url and url_generate Twig functions.
43    */
44   public function testTwigUrlGenerator() {
45     $this->drupalGet('twig-theme-test/url-generator');
46     // Find the absolute URL of the current site.
47     $url_generator = $this->container->get('url_generator');
48     $expected = [
49       'path (as route) not absolute: ' . $url_generator->generateFromRoute('user.register'),
50       'url (as route) absolute: ' . $url_generator->generateFromRoute('user.register', [], ['absolute' => TRUE]),
51       'path (as route) not absolute with fragment: ' . $url_generator->generateFromRoute('user.register', [], ['fragment' => 'bottom']),
52       'url (as route) absolute despite option: ' . $url_generator->generateFromRoute('user.register', [], ['absolute' => TRUE]),
53       'url (as route) absolute with fragment: ' . $url_generator->generateFromRoute('user.register', [], ['absolute' => TRUE, 'fragment' => 'bottom']),
54     ];
55
56     // Verify that url() has the ability to bubble cacheability metadata:
57     // absolute URLs should bubble the 'url.site' cache context. (This only
58     // needs to test that cacheability metadata is bubbled *at all*; detailed
59     // tests for *which* cacheability metadata is bubbled live elsewhere.)
60     $this->assertCacheContext('url.site');
61
62     // Make sure we got something.
63     $content = $this->getRawContent();
64     $this->assertFalse(empty($content), 'Page content is not empty');
65     foreach ($expected as $string) {
66       $this->assertRaw('<div>' . $string . '</div>');
67     }
68   }
69
70   /**
71    * Tests the link_generator Twig functions.
72    */
73   public function testTwigLinkGenerator() {
74     $this->drupalGet('twig-theme-test/link-generator');
75
76     /** @var \Drupal\Core\Utility\LinkGenerator $link_generator */
77     $link_generator = $this->container->get('link_generator');
78
79     $generated_url = Url::fromRoute('user.register', [], ['absolute' => TRUE])->toString(TRUE)->getGeneratedUrl();
80     $expected = [
81       'link via the linkgenerator: ' . $link_generator->generate('register', new Url('user.register', [], ['absolute' => TRUE])),
82       'link via the linkgenerator: ' . $link_generator->generate('register', new Url('user.register', [], ['absolute' => TRUE, 'attributes' => ['foo' => 'bar']])),
83       'link via the linkgenerator: ' . $link_generator->generate('register', new Url('user.register', [], ['attributes' => ['foo' => 'bar', 'id' => 'kitten']])),
84       'link via the linkgenerator: ' . $link_generator->generate('register', new Url('user.register', [], ['attributes' => ['id' => 'kitten']])),
85       'link via the linkgenerator: ' . $link_generator->generate('register', new Url('user.register', [], ['attributes' => ['class' => ['llama', 'kitten', 'panda']]])),
86       'link via the linkgenerator: ' . $link_generator->generate(Markup::create('<span>register</span>'), new Url('user.register', [], ['absolute' => TRUE])),
87       'link via the linkgenerator: <a href="' . $generated_url . '"><span>register</span><svg></svg></a>',
88       'link via the linkgenerator: ' . $link_generator->generate('register', new Url('user.register', [], ['attributes' => ['foo' => 'bar']])) . ' ' . $link_generator->generate('register', new Url('user.register', [], ['attributes' => ['foo' => 'bar']])),
89     ];
90
91     // Verify that link() has the ability to bubble cacheability metadata:
92     // absolute URLs should bubble the 'url.site' cache context. (This only
93     // needs to test that cacheability metadata is bubbled *at all*; detailed
94     // tests for *which* cacheability metadata is bubbled live elsewhere.)
95     $this->assertCacheContext('url.site');
96
97     $content = $this->getRawContent();
98     $this->assertFalse(empty($content), 'Page content is not empty');
99     foreach ($expected as $string) {
100       $this->assertRaw('<div>' . $string . '</div>');
101     }
102   }
103
104   /**
105    * Tests the magic url to string Twig functions.
106    *
107    * @see \Drupal\Core\Url
108    */
109   public function testTwigUrlToString() {
110     $this->drupalGet('twig-theme-test/url-to-string');
111
112     $expected = [
113       'rendered url: ' . Url::fromRoute('user.register')->toString(),
114     ];
115
116     $content = $this->getRawContent();
117     $this->assertFalse(empty($content), 'Page content is not empty');
118     foreach ($expected as $string) {
119       $this->assertRaw('<div>' . $string . '</div>');
120     }
121   }
122
123   /**
124    * Tests the automatic/magic calling of toString() on objects, if exists.
125    */
126   public function testTwigFileUrls() {
127     $this->drupalGet('/twig-theme-test/file-url');
128     $filepath = file_url_transform_relative(file_create_url('core/modules/system/tests/modules/twig_theme_test/twig_theme_test.js'));
129     $this->assertRaw('<div>file_url: ' . $filepath . '</div>');
130   }
131
132   /**
133    * Tests the attach of asset libraries.
134    */
135   public function testTwigAttachLibrary() {
136     $this->drupalGet('/twig-theme-test/attach-library');
137     $this->assertRaw('ckeditor.js');
138   }
139
140   /**
141    * Tests the rendering of renderables.
142    */
143   public function testRenderable() {
144     $this->drupalGet('/twig-theme-test/renderable');
145     $this->assertRaw('<div>Example markup</div>');
146   }
147
148 }