PageRenderTime 48ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php

https://gitlab.com/reasonat/test8
PHP | 193 lines | 132 code | 17 blank | 44 comment | 2 complexity | 60254c84b00cdb5019645047143d1d3d MD5 | raw file
  1. <?php
  2. namespace Drupal\Tests\views\Kernel\Handler;
  3. use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
  4. use Drupal\views\Views;
  5. /**
  6. * Tests the core Drupal\views\Plugin\views\field\Date handler.
  7. *
  8. * @group views
  9. */
  10. class FieldDateTest extends ViewsKernelTestBase {
  11. /**
  12. * Views used by this test.
  13. *
  14. * @var array
  15. */
  16. public static $testViews = array('test_view');
  17. /**
  18. * {@inheritdoc}
  19. */
  20. public function schemaDefinition() {
  21. $schema = parent::schemaDefinition();
  22. $schema['views_test_data']['fields']['destroyed'] = array(
  23. 'description' => "The destruction date of this record",
  24. 'type' => 'int',
  25. 'unsigned' => TRUE,
  26. 'not null' => FALSE,
  27. 'default' => 0,
  28. );
  29. return $schema;
  30. }
  31. /**
  32. * {@inheritdoc}
  33. */
  34. public function viewsData() {
  35. $data = parent::viewsData();
  36. $data['views_test_data']['created']['field']['id'] = 'date';
  37. $data['views_test_data']['destroyed'] = array(
  38. 'title' => 'Destroyed',
  39. 'help' => 'Date in future this will be destroyed.',
  40. 'field' => array('id' => 'date'),
  41. 'argument' => array('id' => 'date'),
  42. 'filter' => array('id' => 'date'),
  43. 'sort' => array('id' => 'date'),
  44. );
  45. return $data;
  46. }
  47. /**
  48. * {@inheritdoc}
  49. */
  50. public function dataSet() {
  51. $datas = parent::dataSet();
  52. foreach ($datas as $i => $data) {
  53. $datas[$i]['destroyed'] = gmmktime(0, 0, 0, 1, 1, 2050);
  54. }
  55. return $datas;
  56. }
  57. /**
  58. * Sets up functional test of the views date field.
  59. */
  60. public function testFieldDate() {
  61. $view = Views::getView('test_view');
  62. $view->setDisplay();
  63. $view->displayHandlers->get('default')->overrideOption('fields', array(
  64. 'created' => array(
  65. 'id' => 'created',
  66. 'table' => 'views_test_data',
  67. 'field' => 'created',
  68. 'relationship' => 'none',
  69. // ISO 8601 format, see http://php.net/manual/function.date.php
  70. 'custom_date_format' => 'c',
  71. ),
  72. 'destroyed' => array(
  73. 'id' => 'destroyed',
  74. 'table' => 'views_test_data',
  75. 'field' => 'destroyed',
  76. 'relationship' => 'none',
  77. 'custom_date_format' => 'c',
  78. ),
  79. ));
  80. $time = gmmktime(0, 0, 0, 1, 1, 2000);
  81. $this->executeView($view);
  82. $timezones = array(
  83. NULL,
  84. 'UTC',
  85. 'America/New_York',
  86. );
  87. // Check each date/time in various timezones.
  88. foreach ($timezones as $timezone) {
  89. $dates = array(
  90. 'short' => format_date($time, 'short', '', $timezone),
  91. 'medium' => format_date($time, 'medium', '', $timezone),
  92. 'long' => format_date($time, 'long', '', $timezone),
  93. 'custom' => format_date($time, 'custom', 'c', $timezone),
  94. 'fallback' => format_date($time, 'fallback', '', $timezone),
  95. 'html_date' => format_date($time, 'html_date', '', $timezone),
  96. 'html_datetime' => format_date($time, 'html_datetime', '', $timezone),
  97. 'html_month' => format_date($time, 'html_month', '', $timezone),
  98. 'html_time' => format_date($time, 'html_time', '', $timezone),
  99. 'html_week' => format_date($time, 'html_week', '', $timezone),
  100. 'html_year' => format_date($time, 'html_year', '', $timezone),
  101. 'html_yearless_date' => format_date($time, 'html_yearless_date', '', $timezone),
  102. );
  103. $this->assertRenderedDatesEqual($view, $dates, $timezone);
  104. }
  105. // Check times in the past.
  106. $time_since = $this->container->get('date.formatter')->formatTimeDiffSince($time);
  107. $intervals = array(
  108. 'raw time ago' => $time_since,
  109. 'time ago' => t('%time ago', array('%time' => $time_since)),
  110. 'raw time span' => $time_since,
  111. 'inverse time span' => "-$time_since",
  112. 'time span' => t('%time ago', array('%time' => $time_since)),
  113. );
  114. $this->assertRenderedDatesEqual($view, $intervals);
  115. // Check times in the future.
  116. $time = gmmktime(0, 0, 0, 1, 1, 2050);
  117. $formatted = $this->container->get('date.formatter')->formatTimeDiffUntil($time);
  118. $intervals = array(
  119. 'raw time span' => "-$formatted",
  120. 'time span' => t('%time hence', array(
  121. '%time' => $formatted,
  122. )),
  123. );
  124. $this->assertRenderedFutureDatesEqual($view, $intervals);
  125. }
  126. /**
  127. * Asserts properly formatted display against 'created' field in view.
  128. *
  129. * @param mixed $view
  130. * View to be tested.
  131. * @param array $map
  132. * Data map.
  133. * @param null $timezone
  134. * Optional timezone.
  135. */
  136. protected function assertRenderedDatesEqual($view, $map, $timezone = NULL) {
  137. foreach ($map as $date_format => $expected_result) {
  138. $view->field['created']->options['date_format'] = $date_format;
  139. $t_args = array(
  140. '%value' => $expected_result,
  141. '%format' => $date_format,
  142. );
  143. if (isset($timezone)) {
  144. $t_args['%timezone'] = $timezone;
  145. $message = t('Value %value in %format format for timezone %timezone matches.', $t_args);
  146. $view->field['created']->options['timezone'] = $timezone;
  147. }
  148. else {
  149. $message = t('Value %value in %format format matches.', $t_args);
  150. }
  151. $actual_result = $view->field['created']->advancedRender($view->result[0]);
  152. $this->assertEqual($expected_result, $actual_result, $message);
  153. }
  154. }
  155. /**
  156. * Asserts properly formatted display against 'destroyed' field in view.
  157. *
  158. * @param mixed $view
  159. * View to be tested.
  160. * @param array $map
  161. * Data map.
  162. */
  163. protected function assertRenderedFutureDatesEqual($view, $map) {
  164. foreach ($map as $format => $result) {
  165. $view->field['destroyed']->options['date_format'] = $format;
  166. $view_result = $view->field['destroyed']->advancedRender($view->result[0]);
  167. $t_args = array(
  168. '%value' => $result,
  169. '%format' => $format,
  170. '%actual' => $view_result,
  171. );
  172. $message = t('Value %value in %format matches %actual', $t_args);
  173. $this->assertEqual($view_result, $result, $message);
  174. }
  175. }
  176. }