TimeTest.php 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <?php
  2. declare(strict_types=1);
  3. namespace ZipStream\Test;
  4. use DateTimeImmutable;
  5. use PHPUnit\Framework\TestCase;
  6. use ZipStream\Exception\DosTimeOverflowException;
  7. use ZipStream\Time;
  8. class TimeTest extends TestCase
  9. {
  10. public function testNormalDateToDosTime(): void
  11. {
  12. $this->assertSame(
  13. Time::dateTimeToDosTime(new DateTimeImmutable('2014-11-17T17:46:08Z')),
  14. 1165069764
  15. );
  16. // January 1 1980 - DOS Epoch.
  17. $this->assertSame(
  18. Time::dateTimeToDosTime(new DateTimeImmutable('1980-01-01T00:00:00+00:00')),
  19. 2162688
  20. );
  21. // Local timezone different than UTC.
  22. $prevLocalTimezone = date_default_timezone_get();
  23. date_default_timezone_set('Europe/Berlin');
  24. $this->assertSame(
  25. Time::dateTimeToDosTime(new DateTimeImmutable('1980-01-01T00:00:00+00:00')),
  26. 2162688
  27. );
  28. date_default_timezone_set($prevLocalTimezone);
  29. }
  30. public function testTooEarlyDateToDosTime(): void
  31. {
  32. $this->expectException(DosTimeOverflowException::class);
  33. // January 1 1980 is the minimum DOS Epoch.
  34. Time::dateTimeToDosTime(new DateTimeImmutable('1970-01-01T00:00:00+00:00'));
  35. }
  36. }