55namespace Plook \Tests \TypeGuard \Convert ;
66
77use DateTimeImmutable ;
8+ use DateTimeZone ;
89use PHPUnit \Framework \Attributes \CoversClass ;
910use PHPUnit \Framework \Attributes \CoversFunction ;
1011use PHPUnit \Framework \TestCase ;
2223#[CoversFunction('\Plook\TypeGuard\Convert\asString ' )]
2324final class AsDateTimeImmutableTest extends TestCase
2425{
26+ private readonly DateTimeZone $ originalTimeZone ;
27+
28+ protected function setUp (): void
29+ {
30+ $ this ->originalTimeZone = Convert::timeZone ();
31+ }
32+
33+ protected function tearDown (): void
34+ {
35+ Convert::timeZone ($ this ->originalTimeZone );
36+ }
37+
2538 public function testConvertsStrings (): void
2639 {
2740 $ result = asDateTimeImmutable ('2010-09-08T07:06:05+02:00 ' );
@@ -40,20 +53,40 @@ public function testConvertsStringables(): void
4053
4154 public function testConvertsDateTimeImmutableWithSameTimeZone (): void
4255 {
43- $ dateTimeZone = asDateTimeImmutable (new DateTimeImmutable ())->getTimezone ();
44-
45- $ result = asDateTimeImmutable (new DateTimeImmutable ('2010-09-08T07:06:05+00:00 ' , $ dateTimeZone ));
56+ $ result = asDateTimeImmutable (new DateTimeImmutable ('2010-09-08T07:06:05 ' , Convert::timeZone ()));
4657
4758 self ::assertInstanceOf (DateTimeImmutable::class, $ result );
4859 self ::assertSame ('2010-09-08T07:06:05+00:00 ' , $ result ->format ('c ' ));
4960 }
5061
5162 public function testConvertsDateTimeImmutableWithDifferentTimeZone (): void
5263 {
53- $ result = asDateTimeImmutable (new DateTimeImmutable ('2010-09-08T07:06:05+02:00 ' ));
64+ $ dateTimeZone = new DateTimeZone ('Australia/Adelaide ' );
65+
66+ $ result = asDateTimeImmutable (new DateTimeImmutable ('2010-09-08T07:06:05 ' , $ dateTimeZone ));
67+
68+ self ::assertInstanceOf (DateTimeImmutable::class, $ result );
69+ self ::assertSame ('2010-09-07T21:36:05+00:00 ' , $ result ->format ('c ' ));
70+ }
71+
72+ public function testConvertsDateTimeImmutableDefaultTimeZoneCanBeChangedByDateTimeZone (): void
73+ {
74+ Convert::timeZone (new DateTimeZone ('Australia/Adelaide ' ));
75+
76+ $ result = asDateTimeImmutable (new DateTimeImmutable ('2010-09-08T07:06:05+00:00 ' ));
77+
78+ self ::assertInstanceOf (DateTimeImmutable::class, $ result );
79+ self ::assertSame ('2010-09-08T16:36:05+09:30 ' , $ result ->format ('c ' ));
80+ }
81+
82+ public function testConvertsDateTimeImmutableDefaultTimeZoneCanBeChangedByTimeZoneName (): void
83+ {
84+ Convert::timeZone ('Australia/Adelaide ' );
85+
86+ $ result = asDateTimeImmutable (new DateTimeImmutable ('2010-09-08T07:06:05+00:00 ' ));
5487
5588 self ::assertInstanceOf (DateTimeImmutable::class, $ result );
56- self ::assertSame ('2010-09-08T05:06 :05+00:00 ' , $ result ->format ('c ' ));
89+ self ::assertSame ('2010-09-08T16:36 :05+09:30 ' , $ result ->format ('c ' ));
5790 }
5891
5992 public function testDoesNotTouchNull (): void
0 commit comments