From 10b49c357514c85d68689100381456c405fc15f1 Mon Sep 17 00:00:00 2001 From: Valentin Date: Fri, 22 Dec 2017 17:02:25 +0300 Subject: [PATCH 1/7] Added input=datetime_immutable for DateType, TimeType, DateTimeType. --- ...DateTimeImmutableToDateTimeTransformer.php | 67 +++++++++++++++++ .../Form/Extension/Core/Type/DateTimeType.php | 6 +- .../Form/Extension/Core/Type/DateType.php | 6 +- .../Form/Extension/Core/Type/TimeType.php | 6 +- .../Component/Form/Test/TypeTestCase.php | 5 ++ .../DataTransformer/DateIntervalTestCase.php | 5 ++ ...TimeImmutableToDateTimeTransformerTest.php | 71 +++++++++++++++++++ .../Extension/Core/Type/DateTimeTypeTest.php | 47 ++++++++++++ .../Extension/Core/Type/DateTypeTest.php | 21 ++++++ .../Extension/Core/Type/TimeTypeTest.php | 21 ++++++ 10 files changed, 252 insertions(+), 3 deletions(-) create mode 100644 src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php create mode 100644 src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformerTest.php diff --git a/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php b/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php new file mode 100644 index 0000000000000..eae8c79e82ec4 --- /dev/null +++ b/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php @@ -0,0 +1,67 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Form\Extension\Core\DataTransformer; + +use Symfony\Component\Form\DataTransformerInterface; +use Symfony\Component\Form\Exception\TransformationFailedException; + +/** + * Transforms between a DateTimeImmutable object and a DateTime object. + * + * @author Valentin Udaltsov + */ +class DateTimeImmutableToDateTimeTransformer implements DataTransformerInterface +{ + /** + * Transforms a DateTimeImmutable into a DateTime object. + * + * @param \DateTimeImmutable|null $value A DateTimeImmutable object + * + * @return \DateTime|null A \DateTime object + * + * @throws TransformationFailedException If the given value is not a \DateTimeImmutable + */ + public function transform($value): ?\DateTime + { + if (null === $value) { + return null; + } + + if (!$value instanceof \DateTimeImmutable) { + throw new TransformationFailedException('Expected a \DateTimeImmutable.'); + } + + return new \DateTime($value->format(\DateTime::RFC3339)); + } + + /** + * Transforms a DateTime object into a DateTimeImmutable object. + * + * @param \DateTime|null $value A DateTime object + * + * @return \DateTimeImmutable|null A DateTimeImmutable object + * + * @throws TransformationFailedException If the given value is not a \DateTime + */ + public function reverseTransform($value): ?\DateTimeImmutable + { + if (null === $value) { + return null; + } + + if (!$value instanceof \DateTime) { + throw new TransformationFailedException('Expected a \DateTime.'); + } + + return \DateTimeImmutable::createFromMutable($value); + } +} diff --git a/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php b/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php index d34d1c210044c..06d085d30c1d7 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php @@ -18,6 +18,7 @@ use Symfony\Component\Form\FormView; use Symfony\Component\Form\ReversedTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DataTransformerChain; +use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeImmutableToDateTimeTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToArrayTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToStringTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToLocalizedStringTransformer; @@ -165,7 +166,9 @@ public function buildForm(FormBuilderInterface $builder, array $options) ; } - if ('string' === $options['input']) { + if ('datetime_immutable' === $options['input']) { + $builder->addModelTransformer(new DateTimeImmutableToDateTimeTransformer()); + } elseif ('string' === $options['input']) { $builder->addModelTransformer(new ReversedTransformer( new DateTimeToStringTransformer($options['model_timezone'], $options['model_timezone']) )); @@ -254,6 +257,7 @@ public function configureOptions(OptionsResolver $resolver) $resolver->setAllowedValues('input', array( 'datetime', + 'datetime_immutable', 'string', 'timestamp', 'array', diff --git a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php index bf51b15b6a4dc..91aa8e383926d 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php @@ -15,6 +15,7 @@ use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormView; +use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeImmutableToDateTimeTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToLocalizedStringTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToArrayTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToStringTransformer; @@ -123,7 +124,9 @@ class_exists('IntlTimeZone', false) ? \IntlTimeZone::createDefault() : null, ; } - if ('string' === $options['input']) { + if ('datetime_immutable' === $options['input']) { + $builder->addModelTransformer(new DateTimeImmutableToDateTimeTransformer()); + } elseif ('string' === $options['input']) { $builder->addModelTransformer(new ReversedTransformer( new DateTimeToStringTransformer($options['model_timezone'], $options['model_timezone'], 'Y-m-d') )); @@ -258,6 +261,7 @@ public function configureOptions(OptionsResolver $resolver) $resolver->setAllowedValues('input', array( 'datetime', + 'datetime_immutable', 'string', 'timestamp', 'array', diff --git a/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php b/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php index d1c04f73d9278..df8973d932e2c 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php @@ -18,6 +18,7 @@ use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\ReversedTransformer; use Symfony\Component\Form\Exception\InvalidConfigurationException; +use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeImmutableToDateTimeTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToStringTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToTimestampTransformer; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToArrayTransformer; @@ -133,7 +134,9 @@ public function buildForm(FormBuilderInterface $builder, array $options) $builder->addViewTransformer(new DateTimeToArrayTransformer($options['model_timezone'], $options['view_timezone'], $parts, 'text' === $options['widget'])); } - if ('string' === $options['input']) { + if ('datetime_immutable' === $options['input']) { + $builder->addModelTransformer(new DateTimeImmutableToDateTimeTransformer()); + } elseif ('string' === $options['input']) { $builder->addModelTransformer(new ReversedTransformer( new DateTimeToStringTransformer($options['model_timezone'], $options['model_timezone'], 'H:i:s') )); @@ -252,6 +255,7 @@ public function configureOptions(OptionsResolver $resolver) $resolver->setAllowedValues('input', array( 'datetime', + 'datetime_immutable', 'string', 'timestamp', 'array', diff --git a/src/Symfony/Component/Form/Test/TypeTestCase.php b/src/Symfony/Component/Form/Test/TypeTestCase.php index 346dc61648896..66e00371d0cd5 100644 --- a/src/Symfony/Component/Form/Test/TypeTestCase.php +++ b/src/Symfony/Component/Form/Test/TypeTestCase.php @@ -58,6 +58,11 @@ public static function assertDateTimeEquals(\DateTime $expected, \DateTime $actu self::assertEquals($expected->format('c'), $actual->format('c')); } + public static function assertDateTimeImmutableEquals(\DateTimeImmutable $expected, \DateTimeImmutable $actual) + { + self::assertEquals($expected->format('c'), $actual->format('c')); + } + public static function assertDateIntervalEquals(\DateInterval $expected, \DateInterval $actual) { self::assertEquals($expected->format('%RP%yY%mM%dDT%hH%iM%sS'), $actual->format('%RP%yY%mM%dDT%hH%iM%sS')); diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateIntervalTestCase.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateIntervalTestCase.php index d4435d273e049..dbad61515d4f4 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateIntervalTestCase.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateIntervalTestCase.php @@ -19,4 +19,9 @@ public static function assertDateIntervalEquals(\DateInterval $expected, \DateIn { self::assertEquals($expected->format('%RP%yY%mM%dDT%hH%iM%sS'), $actual->format('%RP%yY%mM%dDT%hH%iM%sS')); } + + public static function assertDateTimeImmutableEquals(\DateTimeImmutable $expected, \DateTimeImmutable $actual) + { + self::assertEquals($expected->format('U'), $actual->format('U')); + } } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformerTest.php new file mode 100644 index 0000000000000..c5adea85fbbd9 --- /dev/null +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformerTest.php @@ -0,0 +1,71 @@ + + * + * 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\DateTimeImmutableToDateTimeTransformer; + +class DateTimeImmutableToDateTimeTransformerTest extends DateTimeTestCase +{ + public function testTransform() + { + $transformer = new DateTimeImmutableToDateTimeTransformer(); + + $input = new \DateTimeImmutable('2010-02-03 04:05:06 UTC'); + $output = new \DateTime('2010-02-03 04:05:06 UTC'); + + $this->assertDateTimeEquals($output, $transformer->transform($input)); + } + + public function testTransformEmpty() + { + $transformer = new DateTimeImmutableToDateTimeTransformer(); + + $this->assertNull($transformer->transform(null)); + } + + /** + * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException + * @expectedExceptionMessage Expected a \DateTimeImmutable. + */ + public function testTransformFail() + { + $transformer = new DateTimeImmutableToDateTimeTransformer(); + $transformer->transform(new \DateTime()); + } + + public function testReverseTransform() + { + $transformer = new DateTimeImmutableToDateTimeTransformer(); + + $input = new \DateTime('2010-02-03 04:05:06 UTC'); + $output = new \DateTimeImmutable('2010-02-03 04:05:06 UTC'); + + $this->assertDateTimeImmutableEquals($output, $transformer->reverseTransform($input)); + } + + public function testReverseTransformEmpty() + { + $transformer = new DateTimeImmutableToDateTimeTransformer(); + + $this->assertNull($transformer->reverseTransform(null)); + } + + /** + * @expectedException \Symfony\Component\Form\Exception\TransformationFailedException + * @expectedExceptionMessage Expected a \DateTime. + */ + public function testReverseTransformFail() + { + $transformer = new DateTimeImmutableToDateTimeTransformer(); + $transformer->reverseTransform(new \DateTimeImmutable()); + } +} diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php index a22da49ac5137..8aea5dcad396d 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php @@ -52,6 +52,34 @@ public function testSubmitDateTime() $this->assertEquals($dateTime, $form->getData()); } + public function testSubmitDateTimeImmutable() + { + $form = $this->factory->create(static::TESTED_TYPE, null, array( + 'model_timezone' => 'UTC', + 'view_timezone' => 'UTC', + 'date_widget' => 'choice', + 'years' => array(2010), + 'time_widget' => 'choice', + 'input' => 'datetime_immutable', + )); + + $form->submit(array( + 'date' => array( + 'day' => '2', + 'month' => '6', + 'year' => '2010', + ), + 'time' => array( + 'hour' => '3', + 'minute' => '4', + ), + )); + + $dateTime = new \DateTimeImmutable('2010-06-02 03:04:00 UTC'); + + $this->assertDateTimeImmutableEquals($dateTime, $form->getData()); + } + public function testSubmitString() { $form = $this->factory->create(static::TESTED_TYPE, null, array( @@ -219,6 +247,25 @@ public function testSubmitDifferentTimezonesDateTime() $this->assertEquals('2010-06-02T03:04:00-10:00', $form->getViewData()); } + public function testSubmitDifferentTimezonesDateTimeImmutable() + { + $form = $this->factory->create(static::TESTED_TYPE, null, array( + 'model_timezone' => 'America/New_York', + 'view_timezone' => 'Pacific/Tahiti', + 'widget' => 'single_text', + 'input' => 'datetime_immutable', + )); + + $outputTime = new \DateTimeImmutable('2010-06-02 03:04:00 Pacific/Tahiti'); + + $form->submit('2010-06-02T03:04:00-10:00'); + + $outputTime = $outputTime->setTimezone(new \DateTimeZone('America/New_York')); + + $this->assertDateTimeImmutableEquals($outputTime, $form->getData()); + $this->assertEquals('2010-06-02T03:04:00-10:00', $form->getViewData()); + } + public function testSubmitStringSingleText() { $form = $this->factory->create(static::TESTED_TYPE, null, array( diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php index 3a0289a4f34e8..dc9ee0c738714 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php @@ -105,6 +105,27 @@ public function testSubmitFromSingleTextDateTime() $this->assertEquals('02.06.2010', $form->getViewData()); } + public function testSubmitFromSingleTextDateTimeImmutable() + { + // we test against "de_DE", so we need the full implementation + IntlTestHelper::requireFullIntl($this, false); + + \Locale::setDefault('de_DE'); + + $form = $this->factory->create(static::TESTED_TYPE, null, array( + 'format' => \IntlDateFormatter::MEDIUM, + 'model_timezone' => 'UTC', + 'view_timezone' => 'UTC', + 'widget' => 'single_text', + 'input' => 'datetime_immutable', + )); + + $form->submit('2.6.2010'); + + $this->assertDateTimeImmutableEquals(new \DateTimeImmutable('2010-06-02 UTC'), $form->getData()); + $this->assertEquals('02.06.2010', $form->getViewData()); + } + public function testSubmitFromSingleTextString() { // we test against "de_DE", so we need the full implementation diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php index 56b1d14774cd2..6b4c5814c0f1c 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php @@ -39,6 +39,27 @@ public function testSubmitDateTime() $this->assertEquals($input, $form->getViewData()); } + public function testSubmitDateTimeImmutable() + { + $form = $this->factory->create(static::TESTED_TYPE, null, array( + 'model_timezone' => 'UTC', + 'view_timezone' => 'UTC', + 'input' => 'datetime_immutable', + )); + + $input = array( + 'hour' => '3', + 'minute' => '4', + ); + + $form->submit($input); + + $dateTime = new \DateTimeImmutable('1970-01-01 03:04:00 UTC'); + + $this->assertDateTimeImmutableEquals($dateTime, $form->getData()); + $this->assertEquals($input, $form->getViewData()); + } + public function testSubmitString() { $form = $this->factory->create(static::TESTED_TYPE, null, array( From 6c07eb546582e67d60752888f10e69b93c3697d1 Mon Sep 17 00:00:00 2001 From: Valentin Date: Fri, 22 Dec 2017 17:30:29 +0300 Subject: [PATCH 2/7] Use createFromFormat when transforming DateTimeImmutable -> DateTime. --- .../DataTransformer/DateTimeImmutableToDateTimeTransformer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php b/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php index eae8c79e82ec4..d7d5aa8d6281a 100644 --- a/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php +++ b/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php @@ -40,7 +40,7 @@ public function transform($value): ?\DateTime throw new TransformationFailedException('Expected a \DateTimeImmutable.'); } - return new \DateTime($value->format(\DateTime::RFC3339)); + return \DateTime::createFromFormat(\DateTime::RFC3339, $value->format(\DateTime::RFC3339)); } /** From 1590140c735e0ec5e878054ad96d402e52bdb2e7 Mon Sep 17 00:00:00 2001 From: Valentin Date: Mon, 8 Jan 2018 13:26:17 +0300 Subject: [PATCH 3/7] Removed return typehints in DateTimeImmutableToDateTimeTransformer. --- .../DateTimeImmutableToDateTimeTransformer.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php b/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php index d7d5aa8d6281a..6c0957ab7a676 100644 --- a/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php +++ b/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php @@ -30,7 +30,7 @@ class DateTimeImmutableToDateTimeTransformer implements DataTransformerInterface * * @throws TransformationFailedException If the given value is not a \DateTimeImmutable */ - public function transform($value): ?\DateTime + public function transform($value) { if (null === $value) { return null; @@ -52,7 +52,7 @@ public function transform($value): ?\DateTime * * @throws TransformationFailedException If the given value is not a \DateTime */ - public function reverseTransform($value): ?\DateTimeImmutable + public function reverseTransform($value) { if (null === $value) { return null; From a0a8e64bdc394536ab70ced36847d72362cafebd Mon Sep 17 00:00:00 2001 From: Valentin Date: Sat, 13 Jan 2018 19:12:20 +0300 Subject: [PATCH 4/7] Marked DateTimeImmutableToDateTimeTransformer as final. --- .../DataTransformer/DateTimeImmutableToDateTimeTransformer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php b/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php index 6c0957ab7a676..b0737393e4e3f 100644 --- a/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php +++ b/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php @@ -19,7 +19,7 @@ * * @author Valentin Udaltsov */ -class DateTimeImmutableToDateTimeTransformer implements DataTransformerInterface +final class DateTimeImmutableToDateTimeTransformer implements DataTransformerInterface { /** * Transforms a DateTimeImmutable into a DateTime object. From 83697db8cec0aabbfa9e7895ff695c0f8e0f5658 Mon Sep 17 00:00:00 2001 From: Valentin Date: Tue, 6 Feb 2018 08:37:01 +0300 Subject: [PATCH 5/7] Use assertEquals to compare \DateTimeImmutable. --- src/Symfony/Component/Form/Test/TypeTestCase.php | 5 ----- .../Core/DataTransformer/DateIntervalTestCase.php | 5 ----- .../DateTimeImmutableToDateTimeTransformerTest.php | 7 ++++--- .../Form/Tests/Extension/Core/Type/DateTimeTypeTest.php | 4 ++-- .../Form/Tests/Extension/Core/Type/DateTypeTest.php | 2 +- .../Form/Tests/Extension/Core/Type/TimeTypeTest.php | 2 +- 6 files changed, 8 insertions(+), 17 deletions(-) diff --git a/src/Symfony/Component/Form/Test/TypeTestCase.php b/src/Symfony/Component/Form/Test/TypeTestCase.php index 66e00371d0cd5..346dc61648896 100644 --- a/src/Symfony/Component/Form/Test/TypeTestCase.php +++ b/src/Symfony/Component/Form/Test/TypeTestCase.php @@ -58,11 +58,6 @@ public static function assertDateTimeEquals(\DateTime $expected, \DateTime $actu self::assertEquals($expected->format('c'), $actual->format('c')); } - public static function assertDateTimeImmutableEquals(\DateTimeImmutable $expected, \DateTimeImmutable $actual) - { - self::assertEquals($expected->format('c'), $actual->format('c')); - } - public static function assertDateIntervalEquals(\DateInterval $expected, \DateInterval $actual) { self::assertEquals($expected->format('%RP%yY%mM%dDT%hH%iM%sS'), $actual->format('%RP%yY%mM%dDT%hH%iM%sS')); diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateIntervalTestCase.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateIntervalTestCase.php index dbad61515d4f4..d4435d273e049 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateIntervalTestCase.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateIntervalTestCase.php @@ -19,9 +19,4 @@ public static function assertDateIntervalEquals(\DateInterval $expected, \DateIn { self::assertEquals($expected->format('%RP%yY%mM%dDT%hH%iM%sS'), $actual->format('%RP%yY%mM%dDT%hH%iM%sS')); } - - public static function assertDateTimeImmutableEquals(\DateTimeImmutable $expected, \DateTimeImmutable $actual) - { - self::assertEquals($expected->format('U'), $actual->format('U')); - } } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformerTest.php index c5adea85fbbd9..30e8885a78a9f 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformerTest.php @@ -11,9 +11,10 @@ namespace Symfony\Component\Form\Tests\Extension\Core\DataTransformer; +use PHPUnit\Framework\TestCase; use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeImmutableToDateTimeTransformer; -class DateTimeImmutableToDateTimeTransformerTest extends DateTimeTestCase +class DateTimeImmutableToDateTimeTransformerTest extends TestCase { public function testTransform() { @@ -22,7 +23,7 @@ public function testTransform() $input = new \DateTimeImmutable('2010-02-03 04:05:06 UTC'); $output = new \DateTime('2010-02-03 04:05:06 UTC'); - $this->assertDateTimeEquals($output, $transformer->transform($input)); + $this->assertEquals($output, $transformer->transform($input)); } public function testTransformEmpty() @@ -49,7 +50,7 @@ public function testReverseTransform() $input = new \DateTime('2010-02-03 04:05:06 UTC'); $output = new \DateTimeImmutable('2010-02-03 04:05:06 UTC'); - $this->assertDateTimeImmutableEquals($output, $transformer->reverseTransform($input)); + $this->assertEquals($output, $transformer->reverseTransform($input)); } public function testReverseTransformEmpty() diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php index 8aea5dcad396d..9badb4f6f2ff0 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php @@ -77,7 +77,7 @@ public function testSubmitDateTimeImmutable() $dateTime = new \DateTimeImmutable('2010-06-02 03:04:00 UTC'); - $this->assertDateTimeImmutableEquals($dateTime, $form->getData()); + $this->assertEquals($dateTime, $form->getData()); } public function testSubmitString() @@ -262,7 +262,7 @@ public function testSubmitDifferentTimezonesDateTimeImmutable() $outputTime = $outputTime->setTimezone(new \DateTimeZone('America/New_York')); - $this->assertDateTimeImmutableEquals($outputTime, $form->getData()); + $this->assertEquals($outputTime, $form->getData()); $this->assertEquals('2010-06-02T03:04:00-10:00', $form->getViewData()); } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php index dc9ee0c738714..5748e758abb06 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php @@ -122,7 +122,7 @@ public function testSubmitFromSingleTextDateTimeImmutable() $form->submit('2.6.2010'); - $this->assertDateTimeImmutableEquals(new \DateTimeImmutable('2010-06-02 UTC'), $form->getData()); + $this->assertEquals(new \DateTimeImmutable('2010-06-02 UTC'), $form->getData()); $this->assertEquals('02.06.2010', $form->getViewData()); } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php index 6b4c5814c0f1c..a1f1635580050 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php @@ -56,7 +56,7 @@ public function testSubmitDateTimeImmutable() $dateTime = new \DateTimeImmutable('1970-01-01 03:04:00 UTC'); - $this->assertDateTimeImmutableEquals($dateTime, $form->getData()); + $this->assertEquals($dateTime, $form->getData()); $this->assertEquals($input, $form->getViewData()); } From 7721aed2c1a551e3a7bcb3d70d33fad97150cf46 Mon Sep 17 00:00:00 2001 From: Valentin Date: Tue, 6 Feb 2018 08:38:46 +0300 Subject: [PATCH 6/7] Added line to CHANGELOG. --- src/Symfony/Component/Form/CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Symfony/Component/Form/CHANGELOG.md b/src/Symfony/Component/Form/CHANGELOG.md index 5d01cb38931c9..537ba84286885 100644 --- a/src/Symfony/Component/Form/CHANGELOG.md +++ b/src/Symfony/Component/Form/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +4.1.0 +----- + + * added `input=datetime_immutable` to DateType, TimeType, DateTimeType + 4.0.0 ----- From 1eff2b5963e0c7875b1d45012b801a5a71ef3af8 Mon Sep 17 00:00:00 2001 From: Valentin Date: Tue, 6 Feb 2018 12:22:55 +0300 Subject: [PATCH 7/7] Added instanceof assertions. --- .../DateTimeImmutableToDateTimeTransformerTest.php | 12 ++++++++---- .../Tests/Extension/Core/Type/DateTimeTypeTest.php | 1 + .../Form/Tests/Extension/Core/Type/DateTypeTest.php | 1 + .../Form/Tests/Extension/Core/Type/TimeTypeTest.php | 1 + 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformerTest.php index 30e8885a78a9f..244ef0f790fa9 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformerTest.php @@ -21,9 +21,11 @@ public function testTransform() $transformer = new DateTimeImmutableToDateTimeTransformer(); $input = new \DateTimeImmutable('2010-02-03 04:05:06 UTC'); - $output = new \DateTime('2010-02-03 04:05:06 UTC'); + $expectedOutput = new \DateTime('2010-02-03 04:05:06 UTC'); + $actualOutput = $transformer->transform($input); - $this->assertEquals($output, $transformer->transform($input)); + $this->assertInstanceOf(\DateTime::class, $actualOutput); + $this->assertEquals($expectedOutput, $actualOutput); } public function testTransformEmpty() @@ -48,9 +50,11 @@ public function testReverseTransform() $transformer = new DateTimeImmutableToDateTimeTransformer(); $input = new \DateTime('2010-02-03 04:05:06 UTC'); - $output = new \DateTimeImmutable('2010-02-03 04:05:06 UTC'); + $expectedOutput = new \DateTimeImmutable('2010-02-03 04:05:06 UTC'); + $actualOutput = $transformer->reverseTransform($input); - $this->assertEquals($output, $transformer->reverseTransform($input)); + $this->assertInstanceOf(\DateTimeImmutable::class, $actualOutput); + $this->assertEquals($expectedOutput, $actualOutput); } public function testReverseTransformEmpty() diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php index 9badb4f6f2ff0..0602ca5e13f3d 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php @@ -262,6 +262,7 @@ public function testSubmitDifferentTimezonesDateTimeImmutable() $outputTime = $outputTime->setTimezone(new \DateTimeZone('America/New_York')); + $this->assertInstanceOf(\DateTimeImmutable::class, $form->getData()); $this->assertEquals($outputTime, $form->getData()); $this->assertEquals('2010-06-02T03:04:00-10:00', $form->getViewData()); } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php index 5748e758abb06..c8d1b4614d7cf 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php @@ -122,6 +122,7 @@ public function testSubmitFromSingleTextDateTimeImmutable() $form->submit('2.6.2010'); + $this->assertInstanceOf(\DateTimeImmutable::class, $form->getData()); $this->assertEquals(new \DateTimeImmutable('2010-06-02 UTC'), $form->getData()); $this->assertEquals('02.06.2010', $form->getViewData()); } diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php index a1f1635580050..c58cb44fa8c2d 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php @@ -56,6 +56,7 @@ public function testSubmitDateTimeImmutable() $dateTime = new \DateTimeImmutable('1970-01-01 03:04:00 UTC'); + $this->assertInstanceOf(\DateTimeImmutable::class, $form->getData()); $this->assertEquals($dateTime, $form->getData()); $this->assertEquals($input, $form->getViewData()); } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy