1 date_themes.test | public DateThemeTestCase::testDateDisplayCombination() |
Test date_display_combination theme function.
File
- core/
modules/ date/ tests/ date_themes.test, line 52 - Test Date module theme functions.
Class
- DateThemeTestCase
- Testing date theme functions to render dates correctly.
Code
public function testDateDisplayCombination() {
// Start and end date on same day, with timezone.
// We don't need a full entity, stdClass is sufficient here.
$stdobj = new stdClass();
$stdobj->date_id = '';
$variables = array(
'entity' => $stdobj,
'entity_type' => 'stdobj',
'dates' => array(
'value' => array(
'formatted' => '2019-03-20 10:00',
'formatted_date' => '2019-03-20',
'formatted_time' => '10:00',
'formatted_timezone' => 'Europe/Berlin',
),
'value2' => array(
'formatted' => '2019-03-20 16:00',
'formatted_date' => '2019-03-20',
'formatted_time' => '16:00',
),
),
'field' => array(
'field_name' => 'date_test_field',
'settings' => array(
'granularity' => array('year', 'month', 'day', 'hour', 'minute'),
),
),
'display' => array(
'label' => 'above',
'type' => 'date_default',
'settings' => array(
'format_type' => 'long',
'show_repeat_rule' => 'show',
'multiple_number' => '',
'multiple_from' => '',
'multiple_to' => '',
'fromto' => 'both',
),
'module' => 'date',
'weight' => 0,
),
'show_remaining_days' => '',
);
$expected = '<span class="date-display-single">2019-03-20 <span class="date-display-range">';
$expected .= '<span class="date-display-start">10:00</span> to <span class="date-display-end">16:00 Europe/Berlin</span></span></span>';
$output = theme('date_display_combination', $variables);
$success = $this->assertEqual($expected, $output, 'Start and end date on same day with timezone renders correctly.');
if (!$success) {
$this->verbose('<br />Expected:<pre>' . check_plain($expected) . '</pre>Got:<pre>' . check_plain($output) . '</pre>');
}
// Start and end date on different days, with offset.
$variables['dates']['value']['formatted'] = '2019-03-12T12:00+0100';
$variables['dates']['value']['formatted_date'] = '2019-03-12';
$variables['dates']['value']['formatted_time'] = '12:00';
$variables['dates']['value']['formatted_timezone'] = '+0200';
$variables['dates']['value2']['formatted'] = '2019-04-12T12:00+0200';
$variables['dates']['value2']['formatted_date'] = '2019-04-12';
$variables['dates']['value2']['formatted_time'] = '12:00';
$expected = '<span class="date-display-range"><span class="date-display-start">2019-03-12T12:00+0100</span> to ';
$expected .= '<span class="date-display-end">2019-04-12T12:00+0200</span></span>';
$output = theme('date_display_combination', $variables);
$success = $this->assertEqual($expected, $output, 'Start and end date on different days, with offset is rendered correctly.');
if (!$success) {
$this->verbose('<br />Expected:<pre>' . check_plain($expected) . '</pre>Got:<pre>' . check_plain($output) . '</pre>');
}
// Start and end date on same day, 7 days in future,
// with timezone identifier, with remaining days.
$timezone = date_default_timezone();
$dateTimeStart = new DateTime('now', new DateTimeZone($timezone));
$currentHour = $dateTimeStart->format('G');
if ($currentHour > 22) {
// Make sure start and end are the same day.
$dateTimeStart->modify('- 1 hour');
$days_remaining = 6; // Because it's one week less one hour.
}
else {
$days_remaining = 7;
}
$dateTimeStart->modify('+ 1 week');
$dateTimeEnd = clone $dateTimeStart;
$dateTimeEnd->modify('+ 1 hour');
$variables['dates']['value']['formatted'] = $dateTimeStart->format('d.m.Y - H:i e');
$variables['dates']['value']['formatted_date'] = $dateTimeStart->format('d.m.Y');
$variables['dates']['value']['formatted_time'] = $dateTimeStart->format('H:i');
$variables['dates']['value']['formatted_timezone'] = $timezone;
$variables['dates']['value']['formatted_iso'] = $dateTimeStart->format('Y-m-d\TH:i:sO');
$variables['dates']['value2']['formatted'] = $dateTimeEnd->format('d.m.Y - H:i e');
$variables['dates']['value2']['formatted_date'] = $dateTimeEnd->format('d.m.Y');
$variables['dates']['value2']['formatted_time'] = $dateTimeEnd->format('H:i');
$variables['show_remaining_days'] = 1;
$expected = '<span class="date-display-single">' . $dateTimeStart->format('d.m.Y') . ' - <span class="date-display-range">';
$expected .= '<span class="date-display-start">' . $dateTimeStart->format('H:i') . '</span> to ';
$expected .= '<span class="date-display-end">' . $dateTimeEnd->format('H:i e') . '</span></span> </span>';
$expected .= '<div class="date-display-remaining"><span class="date-display-remaining">' . $days_remaining . ' days remaining to event.</span></div>';
$output = theme('date_display_combination', $variables);
$success = $this->assertEqual($expected, $output, 'Start and end date on same day with timezone, with remaining days is rendered correctly.');
if (!$success) {
$this->verbose('<br />Expected:<pre>' . check_plain($expected) . '</pre>Got:<pre>' . check_plain($output) . '</pre>');
}
}