function FieldDateTest::testFieldDate

Same name in other branches
  1. 9 core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php \Drupal\Tests\views\Kernel\Handler\FieldDateTest::testFieldDate()
  2. 8.9.x core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php \Drupal\Tests\views\Kernel\Handler\FieldDateTest::testFieldDate()
  3. 10 core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php \Drupal\Tests\views\Kernel\Handler\FieldDateTest::testFieldDate()

Sets up functional test of the views date field.

File

core/modules/views/tests/src/Kernel/Handler/FieldDateTest.php, line 72

Class

FieldDateTest
Tests the core Drupal\views\Plugin\views\field\Date handler.

Namespace

Drupal\Tests\views\Kernel\Handler

Code

public function testFieldDate() : void {
    $view = Views::getView('test_view');
    $view->setDisplay();
    $view->displayHandlers
        ->get('default')
        ->overrideOption('fields', [
        'created' => [
            'id' => 'created',
            'table' => 'views_test_data',
            'field' => 'created',
            'relationship' => 'none',
            // ISO 8601 format, see https://www.php.net/manual/datetime.format.php
'custom_date_format' => 'c',
        ],
        'destroyed' => [
            'id' => 'destroyed',
            'table' => 'views_test_data',
            'field' => 'destroyed',
            'relationship' => 'none',
            'custom_date_format' => 'c',
        ],
    ]);
    $time = gmmktime(0, 0, 0, 1, 1, 2000);
    $this->executeView($view);
    $timezones = [
        NULL,
        'UTC',
        'America/New_York',
    ];
    
    /** @var \Drupal\Core\Datetime\DateFormatterInterface $date_formatter */
    $date_formatter = $this->container
        ->get('date.formatter');
    // Check each date/time in various timezones.
    foreach ($timezones as $timezone) {
        $dates = [
            'short' => $date_formatter->format($time, 'short', '', $timezone),
            'medium' => $date_formatter->format($time, 'medium', '', $timezone),
            'long' => $date_formatter->format($time, 'long', '', $timezone),
            'custom' => $date_formatter->format($time, 'custom', 'c', $timezone),
            'fallback' => $date_formatter->format($time, 'fallback', '', $timezone),
            'html_date' => $date_formatter->format($time, 'html_date', '', $timezone),
            'html_datetime' => $date_formatter->format($time, 'html_datetime', '', $timezone),
            'html_month' => $date_formatter->format($time, 'html_month', '', $timezone),
            'html_time' => $date_formatter->format($time, 'html_time', '', $timezone),
            'html_week' => $date_formatter->format($time, 'html_week', '', $timezone),
            'html_year' => $date_formatter->format($time, 'html_year', '', $timezone),
            'html_yearless_date' => $date_formatter->format($time, 'html_yearless_date', '', $timezone),
        ];
        $this->assertRenderedDatesEqual($view, $dates, $timezone);
    }
    // Check times in the past.
    $time_since = $date_formatter->formatTimeDiffSince($time);
    $intervals = [
        'raw time ago' => $time_since,
        'time ago' => "{$time_since} ago",
        'raw time span' => $time_since,
        'inverse time span' => "-{$time_since}",
        'time span' => "{$time_since} ago",
    ];
    $this->assertRenderedDatesEqual($view, $intervals);
    // Check times in the future.
    $time = gmmktime(0, 0, 0, 1, 1, 2050);
    $formatted = $date_formatter->formatTimeDiffUntil($time);
    $intervals = [
        'raw time span' => "-{$formatted}",
        'time span' => "{$formatted} hence",
    ];
    $this->assertRenderedFutureDatesEqual($view, $intervals);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.