forked from spatie/period
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDateTimeExtensionTest.php
76 lines (64 loc) · 2.35 KB
/
DateTimeExtensionTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
namespace Spatie\Period\Tests;
use DateTimeImmutable;
use DateTimeInterface;
use PHPUnit\Framework\TestCase;
use Spatie\Period\Period;
class DateTimeExtensionTest extends TestCase
{
/** @test */
public function it_should_be_possible_use_date_time_extensions(): void
{
$start = new DateTimeExtension('2019-05-22');
$end = new DateTimeExtension('2019-06-05');
$period = new TestPeriod($start, $end);
$this->assertInstanceOf(DateTimeExtension::class, $period->getStart());
$this->assertInstanceOf(DateTimeExtension::class, $period->getEnd());
$this->assertInstanceOf(DateTimeExtension::class, $period->getIncludedStart());
$this->assertInstanceOf(DateTimeExtension::class, $period->getIncludedEnd());
}
/** @test */
public function it_should_be_possible_to_use_period_extension_to_force_date_time_extension(): void
{
$period = TestPeriod::make('2019-05-01', '2019-05-31');
$this->assertInstanceOf(TestPeriod::class, $period);
$this->assertInstanceOf(DateTimeExtension::class, $period->getStart());
}
}
/**
* In real life this would be Carbon or Chronos.
*/
class DateTimeExtension extends DateTimeImmutable
{
public static function instance(DateTimeImmutable $dateTime): self
{
return new static($dateTime->format('Y-m-d H:i:s.u'), $dateTime->getTimezone());
}
}
/**
* @method DateTimeExtension getStart
* @method DateTimeExtension getIncludedStart
* @method DateTimeExtension getEnd
* @method DateTimeExtension getIncludedEnd
*/
class TestPeriod extends Period
{
/** @var DateTimeExtension */
protected $start;
/** @var DateTimeExtension */
protected $end;
public function __construct(DateTimeExtension $start, DateTimeExtension $end, ?int $precisionMask = null, ?int $boundaryExclusionMask = null)
{
parent::__construct($start, $end, $precisionMask, $boundaryExclusionMask);
}
/** @return DateTimeExtension */
protected static function resolveDate($date, ?string $format): DateTimeImmutable
{
return DateTimeExtension::instance(parent::resolveDate($date, $format));
}
/** @return DateTimeExtension */
protected function roundDate(DateTimeInterface $date, int $precision): DateTimeImmutable
{
return DateTimeExtension::instance(parent::roundDate($date, $precision));
}
}