views_handler_field_date.test 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. /**
  3. * @file
  4. * Definition of ViewsHandlerFieldDateTest.
  5. */
  6. /**
  7. * Tests the core views_handler_field_date handler.
  8. */
  9. class ViewsHandlerFieldDateTest extends ViewsSqlTest {
  10. public static function getInfo() {
  11. return array(
  12. 'name' => 'Field: Date',
  13. 'description' => 'Test the core views_handler_field_date handler.',
  14. 'group' => 'Views Handlers',
  15. );
  16. }
  17. function viewsData() {
  18. $data = parent::viewsData();
  19. $data['views_test']['created']['field']['handler'] = 'views_handler_field_date';
  20. return $data;
  21. }
  22. public function testFieldDate() {
  23. $view = $this->getBasicView();
  24. $view->display['default']->handler->override_option('fields', array(
  25. 'created' => array(
  26. 'id' => 'created',
  27. 'table' => 'views_test',
  28. 'field' => 'created',
  29. 'relationship' => 'none',
  30. // c is iso 8601 date format @see http://php.net/manual/en/function.date.php
  31. 'custom_date_format' => 'c',
  32. ),
  33. ));
  34. $time = gmmktime(0, 0, 0, 1, 1, 2000);
  35. $this->executeView($view);
  36. $timezones = array(
  37. NULL,
  38. 'UTC',
  39. 'America/New_York',
  40. );
  41. foreach ($timezones as $timezone) {
  42. $dates = array(
  43. 'small' => format_date($time, 'small', '', $timezone),
  44. 'medium' => format_date($time, 'medium', '', $timezone),
  45. 'large' => format_date($time, 'large', '', $timezone),
  46. 'custom' => format_date($time, 'custom', 'c', $timezone),
  47. );
  48. $this->assertRenderedDatesEqual($view, $dates, $timezone);
  49. }
  50. $intervals = array(
  51. 'raw time ago' => format_interval(REQUEST_TIME - $time, 2),
  52. 'time ago' => t('%time ago', array('%time' => format_interval(REQUEST_TIME - $time, 2))),
  53. // TODO write tests for them
  54. // 'raw time span' => format_interval(REQUEST_TIME - $time, 2),
  55. // 'time span' => t('%time hence', array('%time' => format_interval(REQUEST_TIME - $time, 2))),
  56. );
  57. $this->assertRenderedDatesEqual($view, $intervals);
  58. }
  59. protected function assertRenderedDatesEqual($view, $map, $timezone = NULL) {
  60. foreach ($map as $date_format => $expected_result) {
  61. $view->field['created']->options['date_format'] = $date_format;
  62. $t_args = array(
  63. '%value' => $expected_result,
  64. '%format' => $date_format,
  65. );
  66. if (isset($timezone)) {
  67. $t_args['%timezone'] = $timezone;
  68. $message = t('Value %value in %format format for timezone %timezone matches.', $t_args);
  69. $view->field['created']->options['timezone'] = $timezone;
  70. }
  71. else {
  72. $message = t('Value %value in %format format matches.', $t_args);
  73. }
  74. $actual_result = $view->field['created']->advanced_render($view->result[0]);
  75. $this->assertEqual($expected_result, $actual_result, $message);
  76. }
  77. }
  78. }