4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\Form\Tests\Extension\Core\DataTransformer
;
14 use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToArrayTransformer
;
16 class DateTimeToArrayTransformerTest
extends DateTimeTestCase
18 public function testTransform()
20 $transformer = new DateTimeToArrayTransformer('UTC', 'UTC');
22 $input = new \
DateTime('2010-02-03 04:05:06 UTC');
33 $this->assertSame($output, $transformer->transform($input));
36 public function testTransformEmpty()
38 $transformer = new DateTimeToArrayTransformer();
49 $this->assertSame($output, $transformer->transform(null));
52 public function testTransformEmptyWithFields()
54 $transformer = new DateTimeToArrayTransformer(null, null, array('year', 'minute', 'second'));
62 $this->assertSame($output, $transformer->transform(null));
65 public function testTransformWithFields()
67 $transformer = new DateTimeToArrayTransformer('UTC', 'UTC', array('year', 'month', 'minute', 'second'));
69 $input = new \
DateTime('2010-02-03 04:05:06 UTC');
78 $this->assertSame($output, $transformer->transform($input));
81 public function testTransformWithPadding()
83 $transformer = new DateTimeToArrayTransformer('UTC', 'UTC', null, true);
85 $input = new \
DateTime('2010-02-03 04:05:06 UTC');
96 $this->assertSame($output, $transformer->transform($input));
99 public function testTransformDifferentTimezones()
101 $transformer = new DateTimeToArrayTransformer('America/New_York', 'Asia/Hong_Kong');
103 $input = new \
DateTime('2010-02-03 04:05:06 America/New_York');
105 $dateTime = new \
DateTime('2010-02-03 04:05:06 America/New_York');
106 $dateTime->setTimezone(new \
DateTimeZone('Asia/Hong_Kong'));
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'),
116 $this->assertSame($output, $transformer->transform($input));
120 * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
122 public function testTransformRequiresDateTime()
124 $transformer = new DateTimeToArrayTransformer();
125 $transformer->reverseTransform('12345');
128 public function testReverseTransform()
130 $transformer = new DateTimeToArrayTransformer('UTC', 'UTC');
141 $output = new \
DateTime('2010-02-03 04:05:06 UTC');
143 $this->assertDateTimeEquals($output, $transformer->reverseTransform($input));
146 public function testReverseTransformWithSomeZero()
148 $transformer = new DateTimeToArrayTransformer('UTC', 'UTC');
159 $output = new \
DateTime('2010-02-03 04:00:00 UTC');
161 $this->assertDateTimeEquals($output, $transformer->reverseTransform($input));
164 public function testReverseTransformCompletelyEmpty()
166 $transformer = new DateTimeToArrayTransformer();
177 $this->assertNull($transformer->reverseTransform($input));
180 public function testReverseTransformCompletelyEmptySubsetOfFields()
182 $transformer = new DateTimeToArrayTransformer(null, null, array('year', 'month', 'day'));
190 $this->assertNull($transformer->reverseTransform($input));
194 * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
196 public function testReverseTransformPartiallyEmptyYear()
198 $transformer = new DateTimeToArrayTransformer();
199 $transformer->reverseTransform(array(
209 * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
211 public function testReverseTransformPartiallyEmptyMonth()
213 $transformer = new DateTimeToArrayTransformer();
214 $transformer->reverseTransform(array(
224 * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
226 public function testReverseTransformPartiallyEmptyDay()
228 $transformer = new DateTimeToArrayTransformer();
229 $transformer->reverseTransform(array(
239 * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
241 public function testReverseTransformPartiallyEmptyHour()
243 $transformer = new DateTimeToArrayTransformer();
244 $transformer->reverseTransform(array(
254 * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
256 public function testReverseTransformPartiallyEmptyMinute()
258 $transformer = new DateTimeToArrayTransformer();
259 $transformer->reverseTransform(array(
269 * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
271 public function testReverseTransformPartiallyEmptySecond()
273 $transformer = new DateTimeToArrayTransformer();
274 $transformer->reverseTransform(array(
283 public function testReverseTransformNull()
285 $transformer = new DateTimeToArrayTransformer();
287 $this->assertNull($transformer->reverseTransform(null));
290 public function testReverseTransformDifferentTimezones()
292 $transformer = new DateTimeToArrayTransformer('America/New_York', 'Asia/Hong_Kong');
303 $output = new \
DateTime('2010-02-03 04:05:06 Asia/Hong_Kong');
304 $output->setTimezone(new \
DateTimeZone('America/New_York'));
306 $this->assertDateTimeEquals($output, $transformer->reverseTransform($input));
309 public function testReverseTransformToDifferentTimezone()
311 $transformer = new DateTimeToArrayTransformer('Asia/Hong_Kong', 'UTC');
322 $output = new \
DateTime('2010-02-03 04:05:06 UTC');
323 $output->setTimezone(new \
DateTimeZone('Asia/Hong_Kong'));
325 $this->assertDateTimeEquals($output, $transformer->reverseTransform($input));
329 * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
331 public function testReverseTransformRequiresArray()
333 $transformer = new DateTimeToArrayTransformer();
334 $transformer->reverseTransform('12345');
338 * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
340 public function testReverseTransformWithNegativeYear()
342 $transformer = new DateTimeToArrayTransformer();
343 $transformer->reverseTransform(array(
354 * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
356 public function testReverseTransformWithNegativeMonth()
358 $transformer = new DateTimeToArrayTransformer();
359 $transformer->reverseTransform(array(
370 * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
372 public function testReverseTransformWithNegativeDay()
374 $transformer = new DateTimeToArrayTransformer();
375 $transformer->reverseTransform(array(
386 * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
388 public function testReverseTransformWithNegativeHour()
390 $transformer = new DateTimeToArrayTransformer();
391 $transformer->reverseTransform(array(
402 * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
404 public function testReverseTransformWithNegativeMinute()
406 $transformer = new DateTimeToArrayTransformer();
407 $transformer->reverseTransform(array(
418 * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
420 public function testReverseTransformWithNegativeSecond()
422 $transformer = new DateTimeToArrayTransformer();
423 $transformer->reverseTransform(array(
434 * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
436 public function testReverseTransformWithInvalidMonth()
438 $transformer = new DateTimeToArrayTransformer();
439 $transformer->reverseTransform(array(
450 * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
452 public function testReverseTransformWithInvalidDay()
454 $transformer = new DateTimeToArrayTransformer();
455 $transformer->reverseTransform(array(
466 * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
468 public function testReverseTransformWithStringDay()
470 $transformer = new DateTimeToArrayTransformer();
471 $transformer->reverseTransform(array(
482 * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
484 public function testReverseTransformWithStringMonth()
486 $transformer = new DateTimeToArrayTransformer();
487 $transformer->reverseTransform(array(
489 'month' => 'bazinga',
498 * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
500 public function testReverseTransformWithStringYear()
502 $transformer = new DateTimeToArrayTransformer();
503 $transformer->reverseTransform(array(