20
20
21
21
class DateTimeValueResolverTest extends TestCase
22
22
{
23
- private $ defaultTimezone ;
23
+ private readonly string $ defaultTimezone ;
24
24
25
25
protected function setUp (): void
26
26
{
@@ -32,13 +32,20 @@ protected function tearDown(): void
32
32
date_default_timezone_set ($ this ->defaultTimezone );
33
33
}
34
34
35
- public function getTimeZones ()
35
+ public static function getTimeZones ()
36
36
{
37
37
yield ['UTC ' ];
38
38
yield ['Etc/GMT+9 ' ];
39
39
yield ['Etc/GMT-14 ' ];
40
40
}
41
41
42
+ public static function getClasses ()
43
+ {
44
+ yield [\DateTimeInterface::class];
45
+ yield [\DateTime::class];
46
+ yield [FooDateTime::class];
47
+ }
48
+
42
49
public function testSupports ()
43
50
{
44
51
$ resolver = new DateTimeValueResolver ();
@@ -133,19 +140,24 @@ public function testNow(string $timezone)
133
140
$ this ->assertSame ($ timezone , $ results [0 ]->getTimezone ()->getName (), 'Default timezone ' );
134
141
}
135
142
136
- public function testPreviouslyConvertedAttribute ()
143
+ /**
144
+ * @param class-string<\DateTimeInterface> $class
145
+ * @dataProvider getClasses
146
+ */
147
+ public function testPreviouslyConvertedAttribute (string $ class )
137
148
{
138
149
$ resolver = new DateTimeValueResolver ();
139
150
140
- $ argument = new ArgumentMetadata ('dummy ' , \DateTime:: class, false , false , null , true );
151
+ $ argument = new ArgumentMetadata ('dummy ' , $ class , false , false , null , true );
141
152
$ request = self ::requestWithAttributes (['dummy ' => $ datetime = new \DateTime ()]);
142
153
143
154
/** @var \Generator $results */
144
155
$ results = $ resolver ->resolve ($ request , $ argument );
145
156
$ results = iterator_to_array ($ results );
146
157
147
158
$ this ->assertCount (1 , $ results );
148
- $ this ->assertSame ($ datetime , $ results [0 ]);
159
+ $ this ->assertEquals ($ datetime , $ results [0 ], 'The value is the same, but the class can be modified. ' );
160
+ $ this ->assertInstanceOf ($ class , $ results [0 ]);
149
161
}
150
162
151
163
public function testCustomClass ()
@@ -209,7 +221,7 @@ public function testWithFormat(string $timezone)
209
221
$ this ->assertEquals ('2016-09-08 12:34:56 ' , $ results [0 ]->format ('Y-m-d H:i:s ' ));
210
222
}
211
223
212
- public function provideInvalidDates ()
224
+ public static function provideInvalidDates ()
213
225
{
214
226
return [
215
227
'invalid date ' => [
0 commit comments