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,25 @@ 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
+ *
146
+ * @dataProvider getClasses
147
+ */
148
+ public function testPreviouslyConvertedAttribute (string $ class )
137
149
{
138
150
$ resolver = new DateTimeValueResolver ();
139
151
140
- $ argument = new ArgumentMetadata ('dummy ' , \DateTime:: class, false , false , null , true );
152
+ $ argument = new ArgumentMetadata ('dummy ' , $ class , false , false , null , true );
141
153
$ request = self ::requestWithAttributes (['dummy ' => $ datetime = new \DateTime ()]);
142
154
143
155
/** @var \Generator $results */
144
156
$ results = $ resolver ->resolve ($ request , $ argument );
145
157
$ results = iterator_to_array ($ results );
146
158
147
159
$ this ->assertCount (1 , $ results );
148
- $ this ->assertSame ($ datetime , $ results [0 ]);
160
+ $ this ->assertEquals ($ datetime , $ results [0 ], 'The value is the same, but the class can be modified. ' );
161
+ $ this ->assertInstanceOf ($ class , $ results [0 ]);
149
162
}
150
163
151
164
public function testCustomClass ()
@@ -209,7 +222,7 @@ public function testWithFormat(string $timezone)
209
222
$ this ->assertEquals ('2016-09-08 12:34:56 ' , $ results [0 ]->format ('Y-m-d H:i:s ' ));
210
223
}
211
224
212
- public function provideInvalidDates ()
225
+ public static function provideInvalidDates ()
213
226
{
214
227
return [
215
228
'invalid date ' => [
0 commit comments