3 namespace Drupal\Tests\views\Kernel\Handler;
5 use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
6 use Drupal\views\Views;
9 * Tests the core Drupal\views\Plugin\views\field\Date handler.
13 class FieldDateTest extends ViewsKernelTestBase {
16 * Views used by this test.
20 public static $testViews = ['test_view'];
25 public function schemaDefinition() {
26 $schema = parent::schemaDefinition();
27 $schema['views_test_data']['fields']['destroyed'] = [
28 'description' => "The destruction date of this record",
40 public function viewsData() {
41 $data = parent::viewsData();
42 $data['views_test_data']['created']['field']['id'] = 'date';
43 $data['views_test_data']['destroyed'] = [
44 'title' => 'Destroyed',
45 'help' => 'Date in future this will be destroyed.',
46 'field' => ['id' => 'date'],
47 'argument' => ['id' => 'date'],
48 'filter' => ['id' => 'date'],
49 'sort' => ['id' => 'date'],
57 public function dataSet() {
58 $datas = parent::dataSet();
59 foreach ($datas as $i => $data) {
60 $datas[$i]['destroyed'] = gmmktime(0, 0, 0, 1, 1, 2050);
66 * Sets up functional test of the views date field.
68 public function testFieldDate() {
69 $view = Views::getView('test_view');
72 $view->displayHandlers->get('default')->overrideOption('fields', [
75 'table' => 'views_test_data',
77 'relationship' => 'none',
78 // ISO 8601 format, see http://php.net/manual/function.date.php
79 'custom_date_format' => 'c',
83 'table' => 'views_test_data',
84 'field' => 'destroyed',
85 'relationship' => 'none',
86 'custom_date_format' => 'c',
89 $time = gmmktime(0, 0, 0, 1, 1, 2000);
91 $this->executeView($view);
99 // Check each date/time in various timezones.
100 foreach ($timezones as $timezone) {
102 'short' => format_date($time, 'short', '', $timezone),
103 'medium' => format_date($time, 'medium', '', $timezone),
104 'long' => format_date($time, 'long', '', $timezone),
105 'custom' => format_date($time, 'custom', 'c', $timezone),
106 'fallback' => format_date($time, 'fallback', '', $timezone),
107 'html_date' => format_date($time, 'html_date', '', $timezone),
108 'html_datetime' => format_date($time, 'html_datetime', '', $timezone),
109 'html_month' => format_date($time, 'html_month', '', $timezone),
110 'html_time' => format_date($time, 'html_time', '', $timezone),
111 'html_week' => format_date($time, 'html_week', '', $timezone),
112 'html_year' => format_date($time, 'html_year', '', $timezone),
113 'html_yearless_date' => format_date($time, 'html_yearless_date', '', $timezone),
115 $this->assertRenderedDatesEqual($view, $dates, $timezone);
118 // Check times in the past.
119 $time_since = $this->container->get('date.formatter')->formatTimeDiffSince($time);
121 'raw time ago' => $time_since,
122 'time ago' => t('%time ago', ['%time' => $time_since]),
123 'raw time span' => $time_since,
124 'inverse time span' => "-$time_since",
125 'time span' => t('%time ago', ['%time' => $time_since]),
127 $this->assertRenderedDatesEqual($view, $intervals);
129 // Check times in the future.
130 $time = gmmktime(0, 0, 0, 1, 1, 2050);
131 $formatted = $this->container->get('date.formatter')->formatTimeDiffUntil($time);
133 'raw time span' => "-$formatted",
134 'time span' => t('%time hence', [
135 '%time' => $formatted,
138 $this->assertRenderedFutureDatesEqual($view, $intervals);
142 * Asserts properly formatted display against 'created' field in view.
148 * @param null $timezone
151 protected function assertRenderedDatesEqual($view, $map, $timezone = NULL) {
152 foreach ($map as $date_format => $expected_result) {
153 $view->field['created']->options['date_format'] = $date_format;
155 '%value' => $expected_result,
156 '%format' => $date_format,
158 if (isset($timezone)) {
159 $t_args['%timezone'] = $timezone;
160 $message = t('Value %value in %format format for timezone %timezone matches.', $t_args);
161 $view->field['created']->options['timezone'] = $timezone;
164 $message = t('Value %value in %format format matches.', $t_args);
166 $actual_result = $view->field['created']->advancedRender($view->result[0]);
167 $this->assertEqual($expected_result, $actual_result, $message);
172 * Asserts properly formatted display against 'destroyed' field in view.
179 protected function assertRenderedFutureDatesEqual($view, $map) {
180 foreach ($map as $format => $result) {
181 $view->field['destroyed']->options['date_format'] = $format;
182 $view_result = $view->field['destroyed']->advancedRender($view->result[0]);
185 '%format' => $format,
186 '%actual' => $view_result,
188 $message = t('Value %value in %format matches %actual', $t_args);
189 $this->assertEqual($view_result, $result, $message);