@@ -65,15 +65,16 @@ public function testFullDate(string $timezone)
65
65
$ resolver = new DateTimeValueResolver ();
66
66
67
67
$ argument = new ArgumentMetadata ('dummy ' , \DateTime::class, false , false , null );
68
- $ request = self ::requestWithAttributes (['dummy ' => '2012-07-21 00:00:00+0000 ' ]);
68
+ $ request = self ::requestWithAttributes (['dummy ' => '2012-07-21 00:00:00 +05:00 ' ]);
69
69
70
70
/** @var \Generator $results */
71
71
$ results = $ resolver ->resolve ($ request , $ argument );
72
72
$ results = iterator_to_array ($ results );
73
73
74
74
$ this ->assertCount (1 , $ results );
75
75
$ this ->assertInstanceOf (\DateTime::class, $ results [0 ]);
76
- $ this ->assertEquals ('2012-07-21 ' , $ results [0 ]->format ('Y-m-d ' ));
76
+ $ this ->assertSame ('+00:00 ' , $ results [0 ]->getTimezone ()->getName ());
77
+ $ this ->assertEquals ('2012-07-20 19:00:00 ' , $ results [0 ]->format ('Y-m-d H:i:s ' ));
77
78
}
78
79
79
80
/**
@@ -93,6 +94,7 @@ public function testUnixTimestamp(string $timezone)
93
94
94
95
$ this ->assertCount (1 , $ results );
95
96
$ this ->assertInstanceOf (\DateTime::class, $ results [0 ]);
97
+ $ this ->assertSame ('+00:00 ' , $ results [0 ]->getTimezone ()->getName ());
96
98
$ this ->assertEquals ('2001-05-11 ' , $ results [0 ]->format ('Y-m-d ' ));
97
99
}
98
100
@@ -113,19 +115,20 @@ public function testNullableWithEmptyAttribute()
113
115
114
116
public function testCustomClass ()
115
117
{
116
- date_default_timezone_set ('UTC ' );
118
+ date_default_timezone_set ('Etc/GMT+9 ' );
117
119
$ resolver = new DateTimeValueResolver ();
118
120
119
121
$ argument = new ArgumentMetadata ('dummy ' , FooDateTime::class, false , false , null );
120
- $ request = self ::requestWithAttributes (['dummy ' => '2016-09-08 00:00:00 ' ]);
122
+ $ request = self ::requestWithAttributes (['dummy ' => '2016-09-08 00:00:00 -04:00 ' ]);
121
123
122
124
/** @var \Generator $results */
123
125
$ results = $ resolver ->resolve ($ request , $ argument );
124
126
$ results = iterator_to_array ($ results );
125
127
126
128
$ this ->assertCount (1 , $ results );
127
129
$ this ->assertInstanceOf (FooDateTime::class, $ results [0 ]);
128
- $ this ->assertEquals ('2016-09-08 ' , $ results [0 ]->format ('Y-m-d ' ));
130
+ $ this ->assertSame ('+00:00 ' , $ results [0 ]->getTimezone ()->getName ());
131
+ $ this ->assertEquals ('2016-09-08 04:00:00 ' , $ results [0 ]->format ('Y-m-d H:i:s ' ));
129
132
}
130
133
131
134
/**
@@ -145,15 +148,84 @@ public function testDateTimeImmutable(string $timezone)
145
148
146
149
$ this ->assertCount (1 , $ results );
147
150
$ this ->assertInstanceOf (\DateTimeImmutable::class, $ results [0 ]);
151
+ $ this ->assertSame ('+00:00 ' , $ results [0 ]->getTimezone ()->getName ());
148
152
$ this ->assertEquals ('2016-09-08 ' , $ results [0 ]->format ('Y-m-d ' ));
149
153
}
150
154
155
+ /**
156
+ * @dataProvider getTimeZones
157
+ */
158
+ public function testWithFormat (string $ timezone )
159
+ {
160
+ date_default_timezone_set ($ timezone );
161
+ $ resolver = new DateTimeValueResolver ();
162
+
163
+ $ argument = new ArgumentMetadata ('dummy ' , \DateTimeInterface::class, false , false , null , false , [
164
+ MapDateTime::class => new MapDateTime ('m-d-y H:i:s ' ),
165
+ ]);
166
+ $ request = self ::requestWithAttributes (['dummy ' => '09-08-16 12:34:56 ' ]);
167
+
168
+ /** @var \Generator $results */
169
+ $ results = $ resolver ->resolve ($ request , $ argument );
170
+ $ results = iterator_to_array ($ results );
171
+
172
+ $ this ->assertCount (1 , $ results );
173
+ $ this ->assertInstanceOf (\DateTimeImmutable::class, $ results [0 ]);
174
+ $ this ->assertSame ($ timezone , $ results [0 ]->getTimezone ()->getName ());
175
+ $ this ->assertEquals ('2016-09-08 12:34:56 ' , $ results [0 ]->format ('Y-m-d H:i:s ' ));
176
+ }
177
+
178
+ /**
179
+ * @dataProvider getTimeZones
180
+ */
181
+ public function testWithTimezone (string $ timezone )
182
+ {
183
+ date_default_timezone_set ($ timezone );
184
+ $ resolver = new DateTimeValueResolver ();
185
+
186
+ $ argument = new ArgumentMetadata ('dummy ' , \DateTimeInterface::class, false , false , null , false , [
187
+ MapDateTime::class => new MapDateTime (null , 'Antarctica/Troll ' ),
188
+ ]);
189
+ $ request = self ::requestWithAttributes (['dummy ' => '2016-09-08 12:34:56 ' ]);
190
+
191
+ /** @var \Generator $results */
192
+ $ results = $ resolver ->resolve ($ request , $ argument );
193
+ $ results = iterator_to_array ($ results );
194
+
195
+ $ this ->assertCount (1 , $ results );
196
+ $ this ->assertInstanceOf (\DateTimeImmutable::class, $ results [0 ]);
197
+ $ this ->assertSame ('Antarctica/Troll ' , $ results [0 ]->getTimezone ()->getName ());
198
+ $ this ->assertEquals ('2016-09-08 12:34:56 +02:00 ' , $ results [0 ]->format ('Y-m-d H:i:s P ' ));
199
+ }
200
+
201
+ /**
202
+ * @dataProvider getTimeZones
203
+ */
204
+ public function testWithFormatAndTimezone (string $ timezone )
205
+ {
206
+ date_default_timezone_set ($ timezone );
207
+ $ resolver = new DateTimeValueResolver ();
208
+
209
+ $ argument = new ArgumentMetadata ('dummy ' , \DateTimeInterface::class, false , false , null , false , [
210
+ MapDateTime::class => new MapDateTime ('m-d-y H:i:s ' , 'Antarctica/Troll ' ),
211
+ ]);
212
+ $ request = self ::requestWithAttributes (['dummy ' => '09-08-16 12:34:56 ' ]);
213
+
214
+ /** @var \Generator $results */
215
+ $ results = $ resolver ->resolve ($ request , $ argument );
216
+ $ results = iterator_to_array ($ results );
217
+
218
+ $ this ->assertCount (1 , $ results );
219
+ $ this ->assertInstanceOf (\DateTimeImmutable::class, $ results [0 ]);
220
+ $ this ->assertEquals ('2016-09-08 12:34:56 +02:00 ' , $ results [0 ]->format ('Y-m-d H:i:s P ' ));
221
+ }
222
+
151
223
public function provideInvalidDates ()
152
224
{
153
225
return [
154
226
'invalid date ' => [
155
227
new ArgumentMetadata ('dummy ' , \DateTime::class, false , false , null ),
156
- self ::requestWithAttributes (['dummy ' => 'Invalid DateTime Format ' ])
228
+ self ::requestWithAttributes (['dummy ' => 'Invalid DateTime Format ' ]),
157
229
],
158
230
'invalid format '
3F47
span> => [
159
231
new ArgumentMetadata ('dummy ' , \DateTime::class, false , false , null , false , [new MapDateTime (format: 'd.m.Y ' )]),
0 commit comments