2020
2121class DateTimeValueResolverTest extends TestCase
2222{
23- private $ defaultTimezone ;
23+ private readonly string $ defaultTimezone ;
2424
2525 protected function setUp (): void
2626 {
@@ -32,13 +32,20 @@ protected function tearDown(): void
3232 date_default_timezone_set ($ this ->defaultTimezone );
3333 }
3434
35- public function getTimeZones ()
35+ public static function getTimeZones ()
3636 {
3737 yield ['UTC ' ];
3838 yield ['Etc/GMT+9 ' ];
3939 yield ['Etc/GMT-14 ' ];
4040 }
4141
42+ public static function getClasses ()
43+ {
44+ yield [\DateTimeInterface::class];
45+ yield [\DateTime::class];
46+ yield [FooDateTime::class];
47+ }
48+
4249 public function testSupports ()
4350 {
4451 $ resolver = new DateTimeValueResolver ();
@@ -133,19 +140,25 @@ public function testNow(string $timezone)
133140 $ this ->assertSame ($ timezone , $ results [0 ]->getTimezone ()->getName (), 'Default timezone ' );
134141 }
135142
136- public function testPreviouslyConvertedAttribute ()
143+ /**
144+ * @param class-string<\DateTimeInterface> $class
145+ *
146+ * @dataProvider getClasses
147+ */
148+ public function testPreviouslyConvertedAttribute (string $ class )
137149 {
138150 $ resolver = new DateTimeValueResolver ();
139151
140- $ argument = new ArgumentMetadata ('dummy ' , \DateTime:: class, false , false , null , true );
152+ $ argument = new ArgumentMetadata ('dummy ' , $ class , false , false , null , true );
141153 $ request = self ::requestWithAttributes (['dummy ' => $ datetime = new \DateTime ()]);
142154
143155 /** @var \Generator $results */
144156 $ results = $ resolver ->resolve ($ request , $ argument );
145157 $ results = iterator_to_array ($ results );
146158
147159 $ 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 ]);
149162 }
150163
151164 public function testCustomClass ()
@@ -209,7 +222,7 @@ public function testWithFormat(string $timezone)
209222 $ this ->assertEquals ('2016-09-08 12:34:56 ' , $ results [0 ]->format ('Y-m-d H:i:s ' ));
210223 }
211224
212- public function provideInvalidDates ()
225+ public static function provideInvalidDates ()
213226 {
214227 return [
215228 'invalid date ' => [
0 commit comments