index/tests/XDateTimeTest.php

67 lines
2.8 KiB
PHP

<?php
// XDateTimeTest.php
// Created: 2021-06-14
// Updated: 2024-07-31
declare(strict_types=1);
use PHPUnit\Framework\TestCase;
use PHPUnit\Framework\Attributes\CoversClass;
use Index\XDateTime;
#[CoversClass(XDateTime::class)]
final class XDateTimeTest extends TestCase {
public function testToString(): void {
$dateTime = new DateTime('2013-01-27T23:14:44', new DateTimeZone('Europe/Amsterdam'));
$this->assertEquals(XDateTime::toISO8601String($dateTime), '2013-01-27T23:14:44+01:00');
$this->assertEquals(XDateTime::toCookieString($dateTime), 'Sunday, 27-Jan-2013 23:14:44 CET');
$this->assertEquals(XDateTime::toRFC822String($dateTime), 'Sun, 27 Jan 13 23:14:44 +0100');
$dateTime = $dateTime->setTimezone(new DateTimeZone('UTC'));
$this->assertEquals(XDateTime::toISO8601String($dateTime), '2013-01-27T22:14:44+00:00');
$this->assertEquals(XDateTime::toCookieString($dateTime), 'Sunday, 27-Jan-2013 22:14:44 UTC');
$this->assertEquals(XDateTime::toRFC822String($dateTime), 'Sun, 27 Jan 13 22:14:44 +0000');
$this->assertEquals(XDateTime::toISO8601String(1359324884), '2013-01-27T22:14:44+00:00');
$this->assertEquals(XDateTime::toCookieString(1359324884), 'Sunday, 27-Jan-2013 22:14:44 GMT');
$this->assertEquals(XDateTime::toRFC822String(1359324884), 'Sun, 27 Jan 13 22:14:44 +0000');
$this->assertEquals(XDateTime::toISO8601String('January 27th 2013 22:14:44 UTC'), '2013-01-27T22:14:44+00:00');
$this->assertEquals(XDateTime::toCookieString('January 27th 2013 22:14:44 UTC'), 'Sunday, 27-Jan-2013 22:14:44 GMT');
$this->assertEquals(XDateTime::toRFC822String('January 27th 2013 22:14:44 UTC'), 'Sun, 27 Jan 13 22:14:44 +0000');
}
public function testCompare(): void {
$dt1 = '2021-06-14T21:07:14Z';
$dt2 = new DateTimeImmutable('2013-01-27T23:14:44', new DateTimeZone('Europe/Amsterdam'));
$this->assertGreaterThan(0, XDateTime::compare($dt1, $dt2));
$this->assertLessThan(0, XDateTime::compare($dt2, $dt1));
$this->assertEquals(0, XDateTime::compare($dt1, $dt1));
$this->assertEquals(0, XDateTime::compare($dt2, $dt2));
}
public function testTimeZoneOrder(): void {
$timeZones = XDateTime::listTimeZones(true);
$lastOffset = null;
$lastString = null;
$now = XDateTime::now();
foreach($timeZones as $timeZone) {
$offset = $timeZone->getOffset($now);
$string = $timeZone->getName();
if($lastOffset !== null) {
$diff = $lastOffset <=> $offset;
$this->assertLessThanOrEqual(0, $diff);
if($diff === 0)
$this->assertLessThanOrEqual(0, $lastString <=> $string);
}
$lastOffset = $offset;
$lastString = $string;
}
}
}