@@ -123,17 +123,21 @@ public function testNullableWithEmptyAttribute()
123
123
$ this ->assertNull ($ results [0 ]);
124
124
}
125
125
126
- public function testPreviouslyConvertedAttribute ()
126
+ /**
127
+ * @dataProvider getClasses
128
+ */
129
+ public function testPreviouslyConvertedAttribute (string $ class )
127
130
{
128
131
$ resolver = new DateTimeValueResolver ();
129
132
130
- $ argument = new ArgumentMetadata ('dummy ' , \DateTimeImmutable:: class, false , false , null , true );
133
+ $ argument = new ArgumentMetadata ('dummy ' , $ class , false , false , null , true );
131
134
$ request = self ::requestWithAttributes (['dummy ' => $ datetime = new \DateTimeImmutable ()]);
132
135
133
136
$ results = $ resolver ->resolve ($ request , $ argument );
134
137
135
138
$ this ->assertCount (1 , $ results );
136
- $ this ->assertSame ($ datetime , $ results [0 ]);
139
+ $ this ->assertEquals ($ datetime , $ results [0 ], 'The value is the same, but the class can be modified. ' );
140
+ $ this ->assertInstanceOf ($ class , $ results [0 ]);
137
141
}
138
142
139
143
public function testCustomClass ()
@@ -224,12 +228,29 @@ public function test404Exception(ArgumentMetadata $argument, Request $request)
224
228
225
229
/**
226
230
* @param class-string<\DateTimeInterface> $class
227
- *
228
- * @testWith ["DateTimeInterface"]
229
- * ["DateTimeImmutable"]
230
- * ["DateTime"]
231
+ * @dataProvider getClasses
232
+ */
233
+ public function testNow (string $ class )
234
+ {
235
+ date_default_timezone_set ($ timezone = 'Etc/GMT+9 ' );
236
+ $ resolver = new DateTimeValueResolver ();
237
+
238
+ $ argument = new ArgumentMetadata ('dummy ' , $ class , false , false , null , false );
239
+ $ request = self ::requestWithAttributes (['dummy ' => null ]);
240
+
241
+ $ results = $ resolver ->resolve ($ request , $ argument );
242
+
243
+ $ this ->assertCount (1 , $ results );
244
+ $ this ->assertInstanceOf ($ class , $ results [0 ]);
245
+ $ this ->assertSame ($ timezone , $ results [0 ]->getTimezone ()->getName (), 'Default timezone ' );
246
+ $ this ->assertEquals ('0 ' , $ results [0 ]->diff (new \DateTimeImmutable ())->format ('%s ' ));
247
+ }
248
+
249
+ /**
250
+ * @param class-string<\DateTimeInterface> $class
251
+ * @dataProvider getClasses
231
252
*/
232
- public function testNowFromClock (string $ class )
253
+ public function testNowWithClock (string $ class )
233
254
{
234
255
date_default_timezone_set ($ timezone = 'Etc/GMT+9 ' );
235
256
$ clock = new MockClock ('2022-02-20 22:20:02 ' );
@@ -246,6 +267,13 @@ public function testNowFromClock(string $class)
246
267
$ this ->assertEquals ($ clock ->now (), $ results [0 ]);
247
268
}
248
269
270
+ public function getClasses ()
271
+ {
272
+ yield [\DateTimeInterface::class];
273
+ yield [\DateTime::class];
274
+ yield [FooDateTime::class];
275
+ }
276
+
249
277
private static function requestWithAttributes (array $ attributes ): Request
250
278
{
251
279
$ request = Request::create ('/ ' );
0 commit comments