3 namespace Drupal\Tests\views\Kernel\Handler;
5 use Drupal\Component\Utility\Xss;
6 use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
7 use Drupal\views\Views;
10 * Tests the core Drupal\views\Plugin\views\field\Custom handler.
14 class FieldCustomTest extends ViewsKernelTestBase {
17 * Views used by this test.
21 public static $testViews = ['test_view'];
26 public function viewsData() {
27 $data = parent::viewsData();
28 $data['views_test_data']['name']['field']['id'] = 'custom';
33 * Ensure that custom fields work and doesn't escape unnecessary markup.
35 public function testFieldCustom() {
36 $view = Views::getView('test_view');
39 // Alter the text of the field to a random string.
40 $random = '<div>' . $this->randomMachineName() . '</div>';
41 $view->displayHandlers->get('default')->overrideOption('fields', [
44 'table' => 'views_test_data',
46 'relationship' => 'none',
53 $this->executeView($view);
55 $this->assertEqual($random, $view->style_plugin->getField(0, 'name'));
59 * Ensure that custom fields can use tokens.
61 public function testFieldCustomTokens() {
62 $view = Views::getView('test_view');
65 $view->displayHandlers->get('default')->overrideOption('fields', [
69 'table' => 'views_test_data',
74 'table' => 'views_test_data',
76 'relationship' => 'none',
78 'text' => 'Amount of kittens: {{ age }}',
83 /** @var \Drupal\Core\Render\RendererInterface $renderer */
84 $renderer = \Drupal::service('renderer');
85 $preview = $view->preview();
86 $output = $renderer->renderRoot($preview);
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.');
93 * Ensure that custom field content is XSS filtered.
95 public function testCustomFieldXss() {
96 $view = Views::getView('test_view');
99 // Alter the text of the field to include XSS.
100 $text = '<script>alert("kittens")</script>';
101 $view->displayHandlers->get('default')->overrideOption('fields', [
104 'table' => 'views_test_data',
106 'relationship' => 'none',
112 $this->executeView($view);
113 $this->assertEqual(Xss::filter($text), $view->style_plugin->getField(0, 'name'));