View source
<?php
namespace Drupal\views\Tests\Handler;
use Drupal\Core\Render\RenderContext;
use Drupal\views\Tests\ViewKernelTestBase;
use Drupal\views\Plugin\views\field\FieldPluginBase;
use Drupal\views\Views;
class FieldKernelTest extends ViewKernelTestBase {
public static $modules = array(
'user',
);
public static $testViews = array(
'test_view',
'test_field_tokens',
'test_field_argument_tokens',
'test_field_output',
);
protected $columnMap = array(
'views_test_data_name' => 'name',
);
protected function viewsData() {
$data = parent::viewsData();
$data['views_test_data']['job']['field']['id'] = 'test_field';
$data['views_test_data']['job']['field']['click sortable'] = FALSE;
$data['views_test_data']['id']['field']['click sortable'] = TRUE;
return $data;
}
public function testRender() {
$renderer = \Drupal::service('renderer');
$view = Views::getView('test_field_tokens');
$this
->executeView($view);
$random_text = $this
->randomMachineName();
$view->field['job']
->setTestValue($random_text);
$output = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['job']
->theme($view->result[0]);
});
$this
->assertEqual($output, $random_text, 'Make sure the render method rendered the manual set value.');
}
public function testQuery() {
$view = Views::getView('test_view');
$view
->initHandlers();
$id_field = $view->field['id'];
$id_field->additional_fields['job'] = 'job';
$id_field->additional_fields['created_test'] = array(
'table' => 'views_test_data',
'field' => 'created',
);
$view
->build();
$this
->assertEqual($id_field->aliases['job'], 'views_test_data_job');
$this
->assertEqual($id_field->aliases['created_test'], 'views_test_data_created');
$this
->executeView($view);
foreach ($this
->dataSet() as $key => $row) {
$id = $key + 1;
$result = $view->result[$key];
$this
->assertEqual($id_field
->getValue($result), $id);
$this
->assertEqual($id_field
->getValue($result, 'job'), $row['job']);
$this
->assertEqual($id_field
->getValue($result, 'created_test'), $row['created']);
}
}
protected function assertSubString($haystack, $needle, $message = '', $group = 'Other') {
return $this
->assertTrue(strpos($haystack, $needle) !== FALSE, $message, $group);
}
protected function assertNotSubString($haystack, $needle, $message = '', $group = 'Other') {
return $this
->assertTrue(strpos($haystack, $needle) === FALSE, $message, $group);
}
public function testRewrite() {
$renderer = \Drupal::service('renderer');
$view = Views::getView('test_view');
$view
->initHandlers();
$this
->executeView($view);
$row = $view->result[0];
$id_field = $view->field['id'];
$id_field->options['alter']['text'] = $random_text = $this
->randomMachineName();
$output = $renderer
->executeInRenderContext(new RenderContext(), function () use ($id_field, $row) {
return $id_field
->theme($row);
});
$this
->assertNotSubString($output, $random_text);
$id_field->options['alter']['alter_text'] = TRUE;
$output = $renderer
->executeInRenderContext(new RenderContext(), function () use ($id_field, $row) {
return $id_field
->theme($row);
});
$this
->assertSubString($output, $random_text);
}
public function testArgumentTokens() {
$renderer = \Drupal::service('renderer');
$view = Views::getView('test_field_argument_tokens');
$this
->executeView($view, [
'{{ { "#pre_render": ["views_test_data_test_pre_render_function"]} }}',
]);
$name_field_0 = $view->field['name'];
$name_field_0->options['alter']['alter_text'] = TRUE;
$name_field_0->options['alter']['text'] = '%1 !1';
$row = $view->result[0];
$output = $renderer
->executeInRenderContext(new RenderContext(), function () use ($name_field_0, $row) {
return $name_field_0
->advancedRender($row);
});
$this
->assertFalse(strpos((string) $output, 'views_test_data_test_pre_render_function executed') !== FALSE, 'Ensure that the pre_render function was not executed');
$this
->assertEqual('%1 !1', (string) $output, "Ensure that old style placeholders aren't replaced");
$name_field_0->options['alter']['alter_text'] = TRUE;
$name_field_0->options['alter']['text'] = '{{ arguments.null }} {{ raw_arguments.null }}';
$row = $view->result[0];
$output = $renderer
->executeInRenderContext(new RenderContext(), function () use ($name_field_0, $row) {
return $name_field_0
->advancedRender($row);
});
$this
->assertFalse(strpos((string) $output, 'views_test_data_test_pre_render_function executed') !== FALSE, 'Ensure that the pre_render function was not executed');
$this
->assertEqual('{{ { "#pre_render": ["views_test_data_test_pre_render_function"]} }} {{ { "#pre_render": ["views_test_data_test_pre_render_function"]} }}', (string) $output, 'Ensure that new style placeholders are replaced');
}
public function testFieldTokens() {
$renderer = \Drupal::service('renderer');
$view = Views::getView('test_field_tokens');
$this
->executeView($view);
$name_field_0 = $view->field['name'];
$name_field_1 = $view->field['name_1'];
$name_field_2 = $view->field['name_2'];
$row = $view->result[0];
$name_field_0->options['alter']['alter_text'] = TRUE;
$name_field_0->options['alter']['text'] = '{{ name }}';
$name_field_1->options['alter']['alter_text'] = TRUE;
$name_field_1->options['alter']['text'] = '{{ name_1 }} {{ name }}';
$name_field_2->options['alter']['alter_text'] = TRUE;
$name_field_2->options['alter']['text'] = '{% if name_2|length > 3 %}{{ name_2 }} {{ name_1 }}{% endif %}';
foreach ($view->result as $row) {
$expected_output_0 = $row->views_test_data_name;
$expected_output_1 = "{$row->views_test_data_name} {$row->views_test_data_name}";
$expected_output_2 = "{$row->views_test_data_name} {$row->views_test_data_name} {$row->views_test_data_name}";
$output = $renderer
->executeInRenderContext(new RenderContext(), function () use ($name_field_0, $row) {
return $name_field_0
->advancedRender($row);
});
$this
->assertEqual($output, $expected_output_0, format_string('Test token replacement: "@token" gave "@output"', [
'@token' => $name_field_0->options['alter']['text'],
'@output' => $output,
]));
$output = $renderer
->executeInRenderContext(new RenderContext(), function () use ($name_field_1, $row) {
return $name_field_1
->advancedRender($row);
});
$this
->assertEqual($output, $expected_output_1, format_string('Test token replacement: "@token" gave "@output"', [
'@token' => $name_field_1->options['alter']['text'],
'@output' => $output,
]));
$output = $renderer
->executeInRenderContext(new RenderContext(), function () use ($name_field_2, $row) {
return $name_field_2
->advancedRender($row);
});
$this
->assertEqual($output, $expected_output_2, format_string('Test token replacement: "@token" gave "@output"', [
'@token' => $name_field_2->options['alter']['text'],
'@output' => $output,
]));
}
$job_field = $view->field['job'];
$job_field->options['alter']['alter_text'] = TRUE;
$job_field->options['alter']['text'] = '{{ job }}';
$random_text = $this
->randomMachineName();
$job_field
->setTestValue($random_text);
$output = $renderer
->executeInRenderContext(new RenderContext(), function () use ($job_field, $row) {
return $job_field
->advancedRender($row);
});
$this
->assertSubString($output, $random_text, format_string('Make sure the self token (@token => @value) appears in the output (@output)', [
'@value' => $random_text,
'@output' => $output,
'@token' => $job_field->options['alter']['text'],
]));
$old_token = '[job]';
$job_field->options['alter']['text'] = $old_token;
$random_text = $this
->randomMachineName();
$job_field
->setTestValue($random_text);
$output = $renderer
->executeInRenderContext(new RenderContext(), function () use ($job_field, $row) {
return $job_field
->advancedRender($row);
});
$this
->assertEqual($output, $old_token, format_string('Make sure the old token style (@token => @value) is not changed in the output (@output)', [
'@value' => $random_text,
'@output' => $output,
'@token' => $job_field->options['alter']['text'],
]));
$job_field->options['alter']['text'] = '<h1>{{ job }}</h1>';
$random_text = $this
->randomMachineName();
$job_field
->setTestValue('<span>' . $random_text . '</span>');
$output = $renderer
->executeInRenderContext(new RenderContext(), function () use ($job_field, $row) {
return $job_field
->advancedRender($row);
});
$this
->assertEqual($output, '<h1><span>' . $random_text . '</span></h1>', 'Valid tags are allowed in rewrite templates and token replacements.');
$rewrite_template = '<script>alert("malicious");</script>';
$job_field->options['alter']['text'] = $rewrite_template;
$random_text = $this
->randomMachineName();
$job_field
->setTestValue($random_text);
$output = $renderer
->executeInRenderContext(new RenderContext(), function () use ($job_field, $row) {
return $job_field
->advancedRender($row);
});
$this
->assertNotSubString($output, '<script>', 'Ensure a script tag in the rewrite template is removed.');
$rewrite_template = '<script>{{ job }}</script>';
$job_field->options['alter']['text'] = $rewrite_template;
$random_text = $this
->randomMachineName();
$job_field
->setTestValue($random_text);
$output = $renderer
->executeInRenderContext(new RenderContext(), function () use ($job_field, $row) {
return $job_field
->advancedRender($row);
});
$this
->assertEqual($output, $random_text, format_string('Make sure a script tag in the template (@template) is removed, leaving only the replaced token in the output (@output)', [
'@output' => $output,
'@template' => $rewrite_template,
]));
}
public function testExclude() {
$renderer = $this->container
->get('renderer');
$view = Views::getView('test_field_output');
$view
->initHandlers();
$view->field['name']->options['exclude'] = TRUE;
$output = $view
->preview();
$output = $renderer
->renderRoot($output);
foreach ($this
->dataSet() as $entry) {
$this
->assertNotSubString($output, $entry['name']);
}
$view->field['name']->options['exclude'] = FALSE;
$output = $view
->preview();
$output = $renderer
->renderRoot($output);
foreach ($this
->dataSet() as $entry) {
$this
->assertSubString($output, $entry['name']);
}
}
function testEmpty() {
$this
->_testHideIfEmpty();
$this
->_testEmptyText();
}
function _testHideIfEmpty() {
$renderer = \Drupal::service('renderer');
$view = Views::getView('test_view');
$view
->initDisplay();
$this
->executeView($view);
$column_map_reversed = array_flip($this->columnMap);
$view->row_index = 0;
$random_name = $this
->randomMachineName();
$random_value = $this
->randomMachineName();
$view->field['name']->options['hide_alter_empty'] = FALSE;
$view->field['name']->options['hide_empty'] = FALSE;
$view->field['name']->options['empty_zero'] = FALSE;
$view->result[0]->{$column_map_reversed['name']} = $random_name;
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, $random_name, 'By default, a string should not be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = "";
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical($render, "", 'By default, "" should not be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = 0;
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, '0', 'By default, 0 should not be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = "0";
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, "0", 'By default, "0" should not be treated as empty.');
$view->field['name']->options['hide_alter_empty'] = TRUE;
$view->field['name']->options['hide_empty'] = TRUE;
$view->field['name']->options['empty_zero'] = FALSE;
$view->result[0]->{$column_map_reversed['name']} = $random_name;
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, $random_name, 'If hide_empty is checked, a string should not be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = "";
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical($render, "", 'If hide_empty is checked, "" should be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = 0;
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, '0', 'If hide_empty is checked, but not empty_zero, 0 should not be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = "0";
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, "0", 'If hide_empty is checked, but not empty_zero, "0" should not be treated as empty.');
$view->field['name']->options['hide_alter_empty'] = TRUE;
$view->field['name']->options['hide_empty'] = TRUE;
$view->field['name']->options['empty_zero'] = TRUE;
$view->result[0]->{$column_map_reversed['name']} = 0;
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical($render, "", 'If hide_empty and empty_zero are checked, 0 should be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = "0";
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical($render, "", 'If hide_empty and empty_zero are checked, "0" should be treated as empty.');
$view->field['name']->options['hide_alter_empty'] = FALSE;
$view->field['name']->options['hide_empty'] = TRUE;
$view->field['name']->options['empty_zero'] = FALSE;
$view->field['name']->options['alter']['alter_text'] = TRUE;
$view->field['name']->options['alter']['text'] = $random_name;
$view->result[0]->{$column_map_reversed['name']} = $random_value;
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, $random_name, 'If the rewritten string is not empty, it should not be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = "";
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, $random_name, 'If the rewritten string is not empty, "" should not be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = 0;
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, $random_name, 'If the rewritten string is not empty, 0 should not be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = "0";
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, $random_name, 'If the rewritten string is not empty, "0" should not be treated as empty.');
$view->field['name']->options['hide_alter_empty'] = TRUE;
$view->field['name']->options['hide_empty'] = TRUE;
$view->field['name']->options['empty_zero'] = FALSE;
$view->field['name']->options['alter']['alter_text'] = TRUE;
$view->field['name']->options['alter']['text'] = "";
$view->result[0]->{$column_map_reversed['name']} = $random_name;
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, $random_name, 'If the rewritten string is empty, it should not be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = "";
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical($render, "", 'If the rewritten string is empty, "" should be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = 0;
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, '0', 'If the rewritten string is empty, 0 should not be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = "0";
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, "0", 'If the rewritten string is empty, "0" should not be treated as empty.');
$view->field['name']->options['hide_alter_empty'] = FALSE;
$view->field['name']->options['hide_empty'] = TRUE;
$view->field['name']->options['empty_zero'] = FALSE;
$view->field['name']->options['alter']['alter_text'] = TRUE;
$view->field['name']->options['alter']['text'] = "0";
$view->result[0]->{$column_map_reversed['name']} = $random_name;
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, "0", 'If the rewritten string is zero and empty_zero is not checked, the string rewritten as 0 should not be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = "";
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, "0", 'If the rewritten string is zero and empty_zero is not checked, "" rewritten as 0 should not be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = 0;
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, "0", 'If the rewritten string is zero and empty_zero is not checked, 0 should not be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = "0";
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, "0", 'If the rewritten string is zero and empty_zero is not checked, "0" should not be treated as empty.');
$view->field['name']->options['hide_alter_empty'] = TRUE;
$view->field['name']->options['hide_empty'] = TRUE;
$view->field['name']->options['empty_zero'] = FALSE;
$view->field['name']->options['alter']['alter_text'] = TRUE;
$view->field['name']->options['alter']['text'] = $random_value;
$view->result[0]->{$column_map_reversed['name']} = $random_name;
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, $random_value, 'If the original and rewritten strings are valid, it should not be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = "";
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical($render, "", 'If either the original or rewritten string is invalid, "" should be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = 0;
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, $random_value, 'If the original and rewritten strings are valid, 0 should not be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = "0";
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, $random_value, 'If the original and rewritten strings are valid, "0" should not be treated as empty.');
$view->field['name']->options['hide_alter_empty'] = TRUE;
$view->field['name']->options['hide_empty'] = TRUE;
$view->field['name']->options['empty_zero'] = TRUE;
$view->field['name']->options['alter']['alter_text'] = TRUE;
$view->field['name']->options['alter']['text'] = "0";
$view->result[0]->{$column_map_reversed['name']} = $random_name;
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, "", 'If the rewritten string is zero, it should be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = "";
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical($render, "", 'If the rewritten string is zero, "" should be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = 0;
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical($render, "", 'If the rewritten string is zero, 0 should not be treated as empty.');
$view->result[0]->{$column_map_reversed['name']} = "0";
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical($render, "", 'If the rewritten string is zero, "0" should not be treated as empty.');
}
function _testEmptyText() {
$renderer = \Drupal::service('renderer');
$view = Views::getView('test_view');
$view
->initDisplay();
$this
->executeView($view);
$column_map_reversed = array_flip($this->columnMap);
$view->row_index = 0;
$empty_text = $view->field['name']->options['empty'] = $this
->randomMachineName();
$view->result[0]->{$column_map_reversed['name']} = "";
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, $empty_text, 'If a field is empty, the empty text should be used for the output.');
$view->result[0]->{$column_map_reversed['name']} = "0";
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, "0", 'If a field is 0 and empty_zero is not checked, the empty text should not be used for the output.');
$view->result[0]->{$column_map_reversed['name']} = "0";
$view->field['name']->options['empty_zero'] = TRUE;
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, $empty_text, 'If a field is 0 and empty_zero is checked, the empty text should be used for the output.');
$view->result[0]->{$column_map_reversed['name']} = "";
$view->field['name']->options['alter']['alter_text'] = TRUE;
$alter_text = $view->field['name']->options['alter']['text'] = $this
->randomMachineName();
$view->field['name']->options['hide_alter_empty'] = FALSE;
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, $alter_text, 'If a field is empty, some rewrite text exists, but hide_alter_empty is not checked, render the rewrite text.');
$view->field['name']->options['hide_alter_empty'] = TRUE;
$render = $renderer
->executeInRenderContext(new RenderContext(), function () use ($view) {
return $view->field['name']
->advancedRender($view->result[0]);
});
$this
->assertIdentical((string) $render, $empty_text, 'If a field is empty, some rewrite text exists, and hide_alter_empty is checked, use the empty text.');
}
function testIsValueEmpty() {
$view = Views::getView('test_view');
$view
->initHandlers();
$field = $view->field['name'];
$this
->assertFalse($field
->isValueEmpty("not empty", TRUE), 'A normal string is not empty.');
$this
->assertTrue($field
->isValueEmpty("not empty", TRUE, FALSE), 'A normal string which skips empty() can be seen as empty.');
$this
->assertTrue($field
->isValueEmpty("", TRUE), '"" is considered as empty.');
$this
->assertTrue($field
->isValueEmpty('0', TRUE), '"0" is considered as empty if empty_zero is TRUE.');
$this
->assertTrue($field
->isValueEmpty(0, TRUE), '0 is considered as empty if empty_zero is TRUE.');
$this
->assertFalse($field
->isValueEmpty('0', FALSE), '"0" is considered not as empty if empty_zero is FALSE.');
$this
->assertFalse($field
->isValueEmpty(0, FALSE), '0 is considered not as empty if empty_zero is FALSE.');
$this
->assertTrue($field
->isValueEmpty(NULL, TRUE, TRUE), 'Null should be always seen as empty, regardless of no_skip_empty.');
$this
->assertTrue($field
->isValueEmpty(NULL, TRUE, FALSE), 'Null should be always seen as empty, regardless of no_skip_empty.');
}
public function testClickSortable() {
$item = array(
'table' => 'views_test_data',
'field' => 'name',
);
$plugin = $this->container
->get('plugin.manager.views.field')
->getHandler($item);
$this
->assertTrue($plugin
->clickSortable(), 'TRUE as a default value is correct.');
$item['field'] = 'id';
$plugin = $this->container
->get('plugin.manager.views.field')
->getHandler($item);
$this
->assertTrue($plugin
->clickSortable(), 'TRUE as a views data value is correct.');
$item['field'] = 'job';
$plugin = $this->container
->get('plugin.manager.views.field')
->getHandler($item);
$this
->assertFalse($plugin
->clickSortable(), 'FALSE as a views data value is correct.');
}
public function testTrimText() {
$text = array(
'Tuy nhiên, những hi vọng',
'Giả sử chúng tôi có 3 Apple',
'siêu nhỏ này là bộ xử lý',
'Di động của nhà sản xuất Phần Lan',
'khoảng cách từ đại lí đến',
'của hãng bao gồm ba dòng',
'сд асд асд ас',
'асд асд асд ас',
);
$alter = array(
'max_length' => 10,
);
$expect = array(
'Tuy nhiên,',
'Giả sử chú',
'siêu nhỏ n',
'Di động củ',
'khoảng các',
'của hãng b',
'сд асд асд',
'асд асд ас',
);
foreach ($text as $key => $line) {
$result_text = FieldPluginBase::trimText($alter, $line);
$this
->assertEqual($result_text, $expect[$key]);
}
$alter['word_boundary'] = TRUE;
$expect = array(
'Tuy nhiên',
'Giả sử',
'siêu nhỏ',
'Di động',
'khoảng',
'của hãng',
'сд асд',
'асд асд',
);
foreach ($text as $key => $line) {
$result_text = FieldPluginBase::trimText($alter, $line);
$this
->assertEqual($result_text, $expect[$key]);
}
}
}