]>
Commit | Line | Data |
---|---|---|
4f5b44bd NL |
1 | <?php |
2 | ||
3 | /* | |
4 | * This file is part of the Symfony package. | |
5 | * | |
6 | * (c) Fabien Potencier <fabien@symfony.com> | |
7 | * | |
8 | * For the full copyright and license information, please view the LICENSE | |
9 | * file that was distributed with this source code. | |
10 | */ | |
11 | ||
12 | namespace Symfony\Component\Form\Tests\Extension\Core\DataTransformer; | |
13 | ||
14 | use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToArrayTransformer; | |
15 | ||
16 | class DateTimeToArrayTransformerTest extends DateTimeTestCase | |
17 | { | |
18 | public function testTransform() | |
19 | { | |
20 | $transformer = new DateTimeToArrayTransformer('UTC', 'UTC'); | |
21 | ||
22 | $input = new \DateTime('2010-02-03 04:05:06 UTC'); | |
23 | ||
24 | $output = array( | |
25 | 'year' => '2010', | |
26 | 'month' => '2', | |
27 | 'day' => '3', | |
28 | 'hour' => '4', | |
29 | 'minute' => '5', | |
30 | 'second' => '6', | |
31 | ); | |
32 | ||
33 | $this->assertSame($output, $transformer->transform($input)); | |
34 | } | |
35 | ||
36 | public function testTransformEmpty() | |
37 | { | |
38 | $transformer = new DateTimeToArrayTransformer(); | |
39 | ||
40 | $output = array( | |
41 | 'year' => '', | |
42 | 'month' => '', | |
43 | 'day' => '', | |
44 | 'hour' => '', | |
45 | 'minute' => '', | |
46 | 'second' => '', | |
47 | ); | |
48 | ||
49 | $this->assertSame($output, $transformer->transform(null)); | |
50 | } | |
51 | ||
52 | public function testTransformEmptyWithFields() | |
53 | { | |
54 | $transformer = new DateTimeToArrayTransformer(null, null, array('year', 'minute', 'second')); | |
55 | ||
56 | $output = array( | |
57 | 'year' => '', | |
58 | 'minute' => '', | |
59 | 'second' => '', | |
60 | ); | |
61 | ||
62 | $this->assertSame($output, $transformer->transform(null)); | |
63 | } | |
64 | ||
65 | public function testTransformWithFields() | |
66 | { | |
67 | $transformer = new DateTimeToArrayTransformer('UTC', 'UTC', array('year', 'month', 'minute', 'second')); | |
68 | ||
69 | $input = new \DateTime('2010-02-03 04:05:06 UTC'); | |
70 | ||
71 | $output = array( | |
72 | 'year' => '2010', | |
73 | 'month' => '2', | |
74 | 'minute' => '5', | |
75 | 'second' => '6', | |
76 | ); | |
77 | ||
78 | $this->assertSame($output, $transformer->transform($input)); | |
79 | } | |
80 | ||
81 | public function testTransformWithPadding() | |
82 | { | |
83 | $transformer = new DateTimeToArrayTransformer('UTC', 'UTC', null, true); | |
84 | ||
85 | $input = new \DateTime('2010-02-03 04:05:06 UTC'); | |
86 | ||
87 | $output = array( | |
88 | 'year' => '2010', | |
89 | 'month' => '02', | |
90 | 'day' => '03', | |
91 | 'hour' => '04', | |
92 | 'minute' => '05', | |
93 | 'second' => '06', | |
94 | ); | |
95 | ||
96 | $this->assertSame($output, $transformer->transform($input)); | |
97 | } | |
98 | ||
99 | public function testTransformDifferentTimezones() | |
100 | { | |
101 | $transformer = new DateTimeToArrayTransformer('America/New_York', 'Asia/Hong_Kong'); | |
102 | ||
103 | $input = new \DateTime('2010-02-03 04:05:06 America/New_York'); | |
104 | ||
105 | $dateTime = new \DateTime('2010-02-03 04:05:06 America/New_York'); | |
106 | $dateTime->setTimezone(new \DateTimeZone('Asia/Hong_Kong')); | |
107 | $output = array( | |
108 | 'year' => (string) (int) $dateTime->format('Y'), | |
109 | 'month' => (string) (int) $dateTime->format('m'), | |
110 | 'day' => (string) (int) $dateTime->format('d'), | |
111 | 'hour' => (string) (int) $dateTime->format('H'), | |
112 | 'minute' => (string) (int) $dateTime->format('i'), | |
113 | 'second' => (string) (int) $dateTime->format('s'), | |
114 | ); | |
115 | ||
116 | $this->assertSame($output, $transformer->transform($input)); | |
117 | } | |
118 | ||
119 | /** | |
120 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | |
121 | */ | |
122 | public function testTransformRequiresDateTime() | |
123 | { | |
124 | $transformer = new DateTimeToArrayTransformer(); | |
125 | $transformer->reverseTransform('12345'); | |
126 | } | |
127 | ||
128 | public function testReverseTransform() | |
129 | { | |
130 | $transformer = new DateTimeToArrayTransformer('UTC', 'UTC'); | |
131 | ||
132 | $input = array( | |
133 | 'year' => '2010', | |
134 | 'month' => '2', | |
135 | 'day' => '3', | |
136 | 'hour' => '4', | |
137 | 'minute' => '5', | |
138 | 'second' => '6', | |
139 | ); | |
140 | ||
141 | $output = new \DateTime('2010-02-03 04:05:06 UTC'); | |
142 | ||
143 | $this->assertDateTimeEquals($output, $transformer->reverseTransform($input)); | |
144 | } | |
145 | ||
146 | public function testReverseTransformWithSomeZero() | |
147 | { | |
148 | $transformer = new DateTimeToArrayTransformer('UTC', 'UTC'); | |
149 | ||
150 | $input = array( | |
151 | 'year' => '2010', | |
152 | 'month' => '2', | |
153 | 'day' => '3', | |
154 | 'hour' => '4', | |
155 | 'minute' => '0', | |
156 | 'second' => '0', | |
157 | ); | |
158 | ||
159 | $output = new \DateTime('2010-02-03 04:00:00 UTC'); | |
160 | ||
161 | $this->assertDateTimeEquals($output, $transformer->reverseTransform($input)); | |
162 | } | |
163 | ||
164 | public function testReverseTransformCompletelyEmpty() | |
165 | { | |
166 | $transformer = new DateTimeToArrayTransformer(); | |
167 | ||
168 | $input = array( | |
169 | 'year' => '', | |
170 | 'month' => '', | |
171 | 'day' => '', | |
172 | 'hour' => '', | |
173 | 'minute' => '', | |
174 | 'second' => '', | |
175 | ); | |
176 | ||
177 | $this->assertNull($transformer->reverseTransform($input)); | |
178 | } | |
179 | ||
180 | public function testReverseTransformCompletelyEmptySubsetOfFields() | |
181 | { | |
182 | $transformer = new DateTimeToArrayTransformer(null, null, array('year', 'month', 'day')); | |
183 | ||
184 | $input = array( | |
185 | 'year' => '', | |
186 | 'month' => '', | |
187 | 'day' => '', | |
188 | ); | |
189 | ||
190 | $this->assertNull($transformer->reverseTransform($input)); | |
191 | } | |
192 | ||
193 | /** | |
194 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | |
195 | */ | |
196 | public function testReverseTransformPartiallyEmptyYear() | |
197 | { | |
198 | $transformer = new DateTimeToArrayTransformer(); | |
199 | $transformer->reverseTransform(array( | |
200 | 'month' => '2', | |
201 | 'day' => '3', | |
202 | 'hour' => '4', | |
203 | 'minute' => '5', | |
204 | 'second' => '6', | |
205 | )); | |
206 | } | |
207 | ||
208 | /** | |
209 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | |
210 | */ | |
211 | public function testReverseTransformPartiallyEmptyMonth() | |
212 | { | |
213 | $transformer = new DateTimeToArrayTransformer(); | |
214 | $transformer->reverseTransform(array( | |
215 | 'year' => '2010', | |
216 | 'day' => '3', | |
217 | 'hour' => '4', | |
218 | 'minute' => '5', | |
219 | 'second' => '6', | |
220 | )); | |
221 | } | |
222 | ||
223 | /** | |
224 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | |
225 | */ | |
226 | public function testReverseTransformPartiallyEmptyDay() | |
227 | { | |
228 | $transformer = new DateTimeToArrayTransformer(); | |
229 | $transformer->reverseTransform(array( | |
230 | 'year' => '2010', | |
231 | 'month' => '2', | |
232 | 'hour' => '4', | |
233 | 'minute' => '5', | |
234 | 'second' => '6', | |
235 | )); | |
236 | } | |
237 | ||
238 | /** | |
239 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | |
240 | */ | |
241 | public function testReverseTransformPartiallyEmptyHour() | |
242 | { | |
243 | $transformer = new DateTimeToArrayTransformer(); | |
244 | $transformer->reverseTransform(array( | |
245 | 'year' => '2010', | |
246 | 'month' => '2', | |
247 | 'day' => '3', | |
248 | 'minute' => '5', | |
249 | 'second' => '6', | |
250 | )); | |
251 | } | |
252 | ||
253 | /** | |
254 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | |
255 | */ | |
256 | public function testReverseTransformPartiallyEmptyMinute() | |
257 | { | |
258 | $transformer = new DateTimeToArrayTransformer(); | |
259 | $transformer->reverseTransform(array( | |
260 | 'year' => '2010', | |
261 | 'month' => '2', | |
262 | 'day' => '3', | |
263 | 'hour' => '4', | |
264 | 'second' => '6', | |
265 | )); | |
266 | } | |
267 | ||
268 | /** | |
269 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | |
270 | */ | |
271 | public function testReverseTransformPartiallyEmptySecond() | |
272 | { | |
273 | $transformer = new DateTimeToArrayTransformer(); | |
274 | $transformer->reverseTransform(array( | |
275 | 'year' => '2010', | |
276 | 'month' => '2', | |
277 | 'day' => '3', | |
278 | 'hour' => '4', | |
279 | 'minute' => '5', | |
280 | )); | |
281 | } | |
282 | ||
283 | public function testReverseTransformNull() | |
284 | { | |
285 | $transformer = new DateTimeToArrayTransformer(); | |
286 | ||
287 | $this->assertNull($transformer->reverseTransform(null)); | |
288 | } | |
289 | ||
290 | public function testReverseTransformDifferentTimezones() | |
291 | { | |
292 | $transformer = new DateTimeToArrayTransformer('America/New_York', 'Asia/Hong_Kong'); | |
293 | ||
294 | $input = array( | |
295 | 'year' => '2010', | |
296 | 'month' => '2', | |
297 | 'day' => '3', | |
298 | 'hour' => '4', | |
299 | 'minute' => '5', | |
300 | 'second' => '6', | |
301 | ); | |
302 | ||
303 | $output = new \DateTime('2010-02-03 04:05:06 Asia/Hong_Kong'); | |
304 | $output->setTimezone(new \DateTimeZone('America/New_York')); | |
305 | ||
306 | $this->assertDateTimeEquals($output, $transformer->reverseTransform($input)); | |
307 | } | |
308 | ||
309 | public function testReverseTransformToDifferentTimezone() | |
310 | { | |
311 | $transformer = new DateTimeToArrayTransformer('Asia/Hong_Kong', 'UTC'); | |
312 | ||
313 | $input = array( | |
314 | 'year' => '2010', | |
315 | 'month' => '2', | |
316 | 'day' => '3', | |
317 | 'hour' => '4', | |
318 | 'minute' => '5', | |
319 | 'second' => '6', | |
320 | ); | |
321 | ||
322 | $output = new \DateTime('2010-02-03 04:05:06 UTC'); | |
323 | $output->setTimezone(new \DateTimeZone('Asia/Hong_Kong')); | |
324 | ||
325 | $this->assertDateTimeEquals($output, $transformer->reverseTransform($input)); | |
326 | } | |
327 | ||
328 | /** | |
329 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | |
330 | */ | |
331 | public function testReverseTransformRequiresArray() | |
332 | { | |
333 | $transformer = new DateTimeToArrayTransformer(); | |
334 | $transformer->reverseTransform('12345'); | |
335 | } | |
336 | ||
337 | /** | |
338 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | |
339 | */ | |
340 | public function testReverseTransformWithNegativeYear() | |
341 | { | |
342 | $transformer = new DateTimeToArrayTransformer(); | |
343 | $transformer->reverseTransform(array( | |
344 | 'year' => '-1', | |
345 | 'month' => '2', | |
346 | 'day' => '3', | |
347 | 'hour' => '4', | |
348 | 'minute' => '5', | |
349 | 'second' => '6', | |
350 | )); | |
351 | } | |
352 | ||
353 | /** | |
354 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | |
355 | */ | |
356 | public function testReverseTransformWithNegativeMonth() | |
357 | { | |
358 | $transformer = new DateTimeToArrayTransformer(); | |
359 | $transformer->reverseTransform(array( | |
360 | 'year' => '2010', | |
361 | 'month' => '-1', | |
362 | 'day' => '3', | |
363 | 'hour' => '4', | |
364 | 'minute' => '5', | |
365 | 'second' => '6', | |
366 | )); | |
367 | } | |
368 | ||
369 | /** | |
370 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | |
371 | */ | |
372 | public function testReverseTransformWithNegativeDay() | |
373 | { | |
374 | $transformer = new DateTimeToArrayTransformer(); | |
375 | $transformer->reverseTransform(array( | |
376 | 'year' => '2010', | |
377 | 'month' => '2', | |
378 | 'day' => '-1', | |
379 | 'hour' => '4', | |
380 | 'minute' => '5', | |
381 | 'second' => '6', | |
382 | )); | |
383 | } | |
384 | ||
385 | /** | |
386 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | |
387 | */ | |
388 | public function testReverseTransformWithNegativeHour() | |
389 | { | |
390 | $transformer = new DateTimeToArrayTransformer(); | |
391 | $transformer->reverseTransform(array( | |
392 | 'year' => '2010', | |
393 | 'month' => '2', | |
394 | 'day' => '3', | |
395 | 'hour' => '-1', | |
396 | 'minute' => '5', | |
397 | 'second' => '6', | |
398 | )); | |
399 | } | |
400 | ||
401 | /** | |
402 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | |
403 | */ | |
404 | public function testReverseTransformWithNegativeMinute() | |
405 | { | |
406 | $transformer = new DateTimeToArrayTransformer(); | |
407 | $transformer->reverseTransform(array( | |
408 | 'year' => '2010', | |
409 | 'month' => '2', | |
410 | 'day' => '3', | |
411 | 'hour' => '4', | |
412 | 'minute' => '-1', | |
413 | 'second' => '6', | |
414 | )); | |
415 | } | |
416 | ||
417 | /** | |
418 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | |
419 | */ | |
420 | public function testReverseTransformWithNegativeSecond() | |
421 | { | |
422 | $transformer = new DateTimeToArrayTransformer(); | |
423 | $transformer->reverseTransform(array( | |
424 | 'year' => '2010', | |
425 | 'month' => '2', | |
426 | 'day' => '3', | |
427 | 'hour' => '4', | |
428 | 'minute' => '5', | |
429 | 'second' => '-1', | |
430 | )); | |
431 | } | |
432 | ||
433 | /** | |
434 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | |
435 | */ | |
436 | public function testReverseTransformWithInvalidMonth() | |
437 | { | |
438 | $transformer = new DateTimeToArrayTransformer(); | |
439 | $transformer->reverseTransform(array( | |
440 | 'year' => '2010', | |
441 | 'month' => '13', | |
442 | 'day' => '3', | |
443 | 'hour' => '4', | |
444 | 'minute' => '5', | |
445 | 'second' => '6', | |
446 | )); | |
447 | } | |
448 | ||
449 | /** | |
450 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | |
451 | */ | |
452 | public function testReverseTransformWithInvalidDay() | |
453 | { | |
454 | $transformer = new DateTimeToArrayTransformer(); | |
455 | $transformer->reverseTransform(array( | |
456 | 'year' => '2010', | |
457 | 'month' => '2', | |
458 | 'day' => '31', | |
459 | 'hour' => '4', | |
460 | 'minute' => '5', | |
461 | 'second' => '6', | |
462 | )); | |
463 | } | |
464 | ||
465 | /** | |
466 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | |
467 | */ | |
468 | public function testReverseTransformWithStringDay() | |
469 | { | |
470 | $transformer = new DateTimeToArrayTransformer(); | |
471 | $transformer->reverseTransform(array( | |
472 | 'year' => '2010', | |
473 | 'month' => '2', | |
474 | 'day' => 'bazinga', | |
475 | 'hour' => '4', | |
476 | 'minute' => '5', | |
477 | 'second' => '6', | |
478 | )); | |
479 | } | |
480 | ||
481 | /** | |
482 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | |
483 | */ | |
484 | public function testReverseTransformWithStringMonth() | |
485 | { | |
486 | $transformer = new DateTimeToArrayTransformer(); | |
487 | $transformer->reverseTransform(array( | |
488 | 'year' => '2010', | |
489 | 'month' => 'bazinga', | |
490 | 'day' => '31', | |
491 | 'hour' => '4', | |
492 | 'minute' => '5', | |
493 | 'second' => '6', | |
494 | )); | |
495 | } | |
496 | ||
497 | /** | |
498 | * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException | |
499 | */ | |
500 | public function testReverseTransformWithStringYear() | |
501 | { | |
502 | $transformer = new DateTimeToArrayTransformer(); | |
503 | $transformer->reverseTransform(array( | |
504 | 'year' => 'bazinga', | |
505 | 'month' => '2', | |
506 | 'day' => '31', | |
507 | 'hour' => '4', | |
508 | 'minute' => '5', | |
509 | 'second' => '6', | |
510 | )); | |
511 | } | |
512 | } |