* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Form\Tests\Extension\Core\DataTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateIntervalToArrayTransformer; use Symfony\Component\Form\Exception\TransformationFailedException; use Symfony\Component\Form\Exception\UnexpectedTypeException; /** * @author Steffen Roßkamp */ class DateIntervalToArrayTransformerTest extends DateIntervalTestCase { public function testTransform() { $transformer = new DateIntervalToArrayTransformer(); $input = new \DateInterval('P1Y2M3DT4H5M6S'); $output = array( 'years' => '1', 'months' => '2', 'days' => '3', 'hours' => '4', 'minutes' => '5', 'seconds' => '6', 'invert' => false, ); $this->assertSame($output, $transformer->transform($input)); } public function testTransformEmpty() { $transformer = new DateIntervalToArrayTransformer(); $output = array( 'years' => '', 'months' => '', 'days' => '', 'hours' => '', 'minutes' => '', 'seconds' => '', 'invert' => false, ); $this->assertSame($output, $transformer->transform(null)); } public function testTransformEmptyWithFields() { $transformer = new DateIntervalToArrayTransformer(array('years', 'weeks', 'minutes', 'seconds')); $output = array( 'years' => '', 'weeks' => '', 'minutes' => '', 'seconds' => '', ); $this->assertSame($output, $transformer->transform(null)); } public function testTransformWithFields() { $transformer = new DateIntervalToArrayTransformer(array('years', 'minutes', 'seconds')); $input = new \DateInterval('P1Y2M3DT4H5M6S'); $output = array( 'years' => '1', 'minutes' => '5', 'seconds' => '6', ); $this->assertSame($output, $transformer->transform($input)); } public function testTransformWithWeek() { $transformer = new DateIntervalToArrayTransformer(array('weeks', 'minutes', 'seconds')); $input = new \DateInterval('P1Y2M3WT4H5M6S'); $output = array( 'weeks' => '3', 'minutes' => '5', 'seconds' => '6', ); $input = $transformer->transform($input); ksort($input); ksort($output); $this->assertSame($output, $input); } public function testTransformDaysToWeeks() { $transformer = new DateIntervalToArrayTransformer(array('weeks', 'minutes', 'seconds')); $input = new \DateInterval('P1Y2M23DT4H5M6S'); $output = array( 'weeks' => '3', 'minutes' => '5', 'seconds' => '6', ); $input = $transformer->transform($input); ksort($input); ksort($output); $this->assertSame($output, $input); } public function testTransformDaysNotOverflowingToWeeks() { $transformer = new DateIntervalToArrayTransformer(array('days', 'minutes', 'seconds')); $input = new \DateInterval('P1Y2M23DT4H5M6S'); $output = array( 'days' => '23', 'minutes' => '5', 'seconds' => '6', ); $this->assertSame($output, $transformer->transform($input)); } public function testTransformWithInvert() { $transformer = new DateIntervalToArrayTransformer(array('years', 'invert')); $input = new \DateInterval('P1Y'); $input->invert = 1; $output = array( 'years' => '1', 'invert' => true, ); $this->assertSame($output, $transformer->transform($input)); } public function testTransformWithPadding() { $transformer = new DateIntervalToArrayTransformer(null, true); $input = new \DateInterval('P1Y2M3DT4H5M6S'); $output = array( 'years' => '01', 'months' => '02', 'days' => '03', 'hours' => '04', 'minutes' => '05', 'seconds' => '06', 'invert' => false, ); $this->assertSame($output, $transformer->transform($input)); } public function testTransformWithFieldsAndPadding() { $transformer = new DateIntervalToArrayTransformer(array('years', 'minutes', 'seconds'), true); $input = new \DateInterval('P1Y2M3DT4H5M6S'); $output = array( 'years' => '01', 'minutes' => '05', 'seconds' => '06', ); $this->assertSame($output, $transformer->transform($input)); } public function testReverseTransformRequiresDateTime() { $transformer = new DateIntervalToArrayTransformer(); $this->assertNull($transformer->reverseTransform(null)); $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}(UnexpectedTypeException::class); $transformer->reverseTransform('12345'); } public function testReverseTransformWithUnsetFields() { $transformer = new DateIntervalToArrayTransformer(); $input = array('years' => '1'); $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}(TransformationFailedException::class); $transformer->reverseTransform($input); } public function testReverseTransformWithEmptyFields() { $transformer = new DateIntervalToArrayTransformer(array('years', 'minutes', 'seconds')); $input = array( 'years' => '1', 'minutes' => '', 'seconds' => '6', ); if (method_exists($this, 'expectException')) { $this->expectException(TransformationFailedException::class); $this->expectExceptionMessage('This amount of "minutes" is invalid'); } else { $this->setExpectedException(TransformationFailedException::class, 'This amount of "minutes" is invalid'); } $transformer->reverseTransform($input); } public function testReverseTransformWithWrongInvertType() { $transformer = new DateIntervalToArrayTransformer(array('invert')); $input = array( 'invert' => '1', ); if (method_exists($this, 'expectException')) { $this->expectException(TransformationFailedException::class); $this->expectExceptionMessage('The value of "invert" must be boolean'); } else { $this->setExpectedException(TransformationFailedException::class, 'The value of "invert" must be boolean'); } $transformer->reverseTransform($input); } public function testReverseTransform() { $transformer = new DateIntervalToArrayTransformer(); $input = array( 'years' => '1', 'months' => '2', 'days' => '3', 'hours' => '4', 'minutes' => '5', 'seconds' => '6', 'invert' => false, ); $output = new \DateInterval('P01Y02M03DT04H05M06S'); $this->assertDateIntervalEquals($output, $transformer->reverseTransform($input)); } public function testReverseTransformWithWeek() { $transformer = new DateIntervalToArrayTransformer( array('years', 'months', 'weeks', 'hours', 'minutes', 'seconds') ); $input = array( 'years' => '1', 'months' => '2', 'weeks' => '3', 'hours' => '4', 'minutes' => '5', 'seconds' => '6', ); $output = new \DateInterval('P1Y2M21DT4H5M6S'); $this->assertDateIntervalEquals($output, $transformer->reverseTransform($input)); } public function testReverseTransformWithFields() { $transformer = new DateIntervalToArrayTransformer(array('years', 'minutes', 'seconds')); $input = array( 'years' => '1', 'minutes' => '5', 'seconds' => '6', ); $output = new \DateInterval('P1Y0M0DT0H5M6S'); $this->assertDateIntervalEquals($output, $transformer->reverseTransform($input)); } public function testBothTransformsWithWeek() { $transformer = new DateIntervalToArrayTransformer( array('years', 'months', 'weeks', 'hours', 'minutes', 'seconds') ); $interval = new \DateInterval('P1Y2M21DT4H5M6S'); $array = array( 'years' => '1', 'months' => '2', 'weeks' => '3', 'hours' => '4', 'minutes' => '5', 'seconds' => '6', ); $input = $transformer->transform($interval); ksort($input); ksort($array); $this->assertSame($array, $input); $interval = new \DateInterval('P1Y2M0DT4H5M6S'); $input['weeks'] = '0'; $this->assertDateIntervalEquals($interval, $transformer->reverseTransform($input)); } } __halt_compiler();----SIGNATURE:----WGjr4EWlxW6eQK8Mlo4+5y80zCWUgm6wgrIhCo/uyapxkaZsc6L8l0Pfk4RHiaf92G8LctPnAeqIY9YRL7yJkog7mIA9bqFC0tw8TSJtB0mtql4KNQSLeYtAn2cXFVf6Zt8xmK7hdWVWpH7KjciFS7yW/xBVobLD8bW0O8/y+Etv/1Byt7XjzoaxmhEAlNV/VlqJbhptcii3GlwmOJJ+bWAFUjq0t81LajHFjnwF7bLRm1ix4MWDrNCcj8pw582BrybeMtCTKPU0rNW1t2/10W2mwcAaGdES3EoJ0LiD7iF2iTMxL889ji6eLQP7a3ffg9CYpN3LhiPMe/tiUM3x249oLD6/6kKG3C6aZbAY0SzYQG+QT/iBSjSP4eowSLhqC1dtS7bSTbjy98HRZyj3ayUeOMsRjnEU1KwtAme0OBpFKMme/8OQKpEkQLddGfdPR36ri3wEDvcR625kguvYWx7imFwOqxV28iRduZhkYWYrNYaOirbAJ+kak79VQaUnmvjHXYa6hRB1bk3ipa3+Pysv2bFQje3O0ZA3kEsVtK33hdOA7gZ6+RAQxrFnlyB0rhQjS3dDd9vavAu//kKpbzZHvSGmrBXJ5dy8uyaayqSc+dwe53xfi+bhhtcOOO1LwQFp3qjVd2kJk52yGqBDXz7nWOCcHiMw3OL7nreI88s=----ATTACHMENT:----NjEyNzMxMDQ1Mzk3NTY4NSAyNjIzNTg5Mjg0NTQzNzUyIDM4NzY3OTE3NTEzNjIwMzQ=