Version 1
[yaffs-website] / web / core / modules / views / tests / src / Kernel / Handler / FieldCustomTest.php
1 <?php
2
3 namespace Drupal\Tests\views\Kernel\Handler;
4
5 use Drupal\Component\Utility\Xss;
6 use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
7 use Drupal\views\Views;
8
9 /**
10  * Tests the core Drupal\views\Plugin\views\field\Custom handler.
11  *
12  * @group views
13  */
14 class FieldCustomTest extends ViewsKernelTestBase {
15
16   /**
17    * Views used by this test.
18    *
19    * @var array
20    */
21   public static $testViews = ['test_view'];
22
23   /**
24    * {@inheritdoc}
25    */
26   public function viewsData() {
27     $data = parent::viewsData();
28     $data['views_test_data']['name']['field']['id'] = 'custom';
29     return $data;
30   }
31
32   /**
33    * Ensure that custom fields work and doesn't escape unnecessary markup.
34    */
35   public function testFieldCustom() {
36     $view = Views::getView('test_view');
37     $view->setDisplay();
38
39     // Alter the text of the field to a random string.
40     $random = '<div>' . $this->randomMachineName() . '</div>';
41     $view->displayHandlers->get('default')->overrideOption('fields', [
42       'name' => [
43         'id' => 'name',
44         'table' => 'views_test_data',
45         'field' => 'name',
46         'relationship' => 'none',
47         'alter' => [
48           'text' => $random,
49         ],
50       ],
51     ]);
52
53     $this->executeView($view);
54
55     $this->assertEqual($random, $view->style_plugin->getField(0, 'name'));
56   }
57
58   /**
59    * Ensure that custom fields can use tokens.
60    */
61   public function testFieldCustomTokens() {
62     $view = Views::getView('test_view');
63     $view->setDisplay();
64
65     $view->displayHandlers->get('default')->overrideOption('fields', [
66       'age' => [
67         'id' => 'age',
68         'exclude' => TRUE,
69         'table' => 'views_test_data',
70         'field' => 'age',
71       ],
72       'name' => [
73         'id' => 'name',
74         'table' => 'views_test_data',
75         'field' => 'name',
76         'relationship' => 'none',
77         'alter' => [
78           'text' => 'Amount of kittens: {{ age }}',
79         ],
80       ],
81     ]);
82
83     /** @var \Drupal\Core\Render\RendererInterface $renderer */
84     $renderer = \Drupal::service('renderer');
85     $preview = $view->preview();
86     $output = $renderer->renderRoot($preview);
87
88     $expected_text = 'Amount of kittens: ' . $view->style_plugin->getField(0, 'age');
89     $this->assertTrue(strpos((string) $output, $expected_text), 'The views token has been successfully replaced.');
90   }
91
92   /**
93    * Ensure that custom field content is XSS filtered.
94    */
95   public function testCustomFieldXss() {
96     $view = Views::getView('test_view');
97     $view->setDisplay();
98
99     // Alter the text of the field to include XSS.
100     $text = '<script>alert("kittens")</script>';
101     $view->displayHandlers->get('default')->overrideOption('fields', [
102       'name' => [
103         'id' => 'name',
104         'table' => 'views_test_data',
105         'field' => 'name',
106         'relationship' => 'none',
107         'alter' => [
108           'text' => $text,
109         ],
110       ],
111     ]);
112     $this->executeView($view);
113     $this->assertEqual(Xss::filter($text), $view->style_plugin->getField(0, 'name'));
114   }
115
116 }