diff --git a/typo3/sysext/extbase/Classes/Validation/Validator/DateTimeValidator.php b/typo3/sysext/extbase/Classes/Validation/Validator/DateTimeValidator.php index 5847164c95e6b19f9de66e09e0ccda6f16dc0585..3b5194a8981bb50607a742bc154dd760cda54657 100644 --- a/typo3/sysext/extbase/Classes/Validation/Validator/DateTimeValidator.php +++ b/typo3/sysext/extbase/Classes/Validation/Validator/DateTimeValidator.php @@ -15,7 +15,7 @@ namespace TYPO3\CMS\Extbase\Validation\Validator; */ /** - * Validator for DateTime objects. + * Validator for DateTime/DateTimeImmutable objects. * * @api */ @@ -30,7 +30,7 @@ class DateTimeValidator extends AbstractValidator public function isValid($value) { $this->result->clear(); - if ($value instanceof \DateTime) { + if ($value instanceof \DateTimeInterface) { return; } $this->addError( diff --git a/typo3/sysext/extbase/Tests/Unit/Validation/Validator/DateTimeValidatorTest.php b/typo3/sysext/extbase/Tests/Unit/Validation/Validator/DateTimeValidatorTest.php new file mode 100644 index 0000000000000000000000000000000000000000..d1a14c40a4beca705621f532575ac513e6298cc6 --- /dev/null +++ b/typo3/sysext/extbase/Tests/Unit/Validation/Validator/DateTimeValidatorTest.php @@ -0,0 +1,80 @@ +<?php +declare(strict_types = 1); +namespace TYPO3\CMS\Extbase\Tests\Unit\Validation\Validator; + +/* * + * This script belongs to the Extbase framework. * + * * + * It is free software; you can redistribute it and/or modify it under * + * the terms of the GNU Lesser General Public License as published by the * + * Free Software Foundation, either version 3 of the License, or (at your * + * option) any later version. * + * * + * This script is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- * + * TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * + * General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with the script. * + * If not, see http://www.gnu.org/licenses/lgpl.html * + * * + * The TYPO3 project - inspiring people to share! * + * */ + +use TYPO3\CMS\Extbase\Validation\Validator\DateTimeValidator; +use TYPO3\TestingFramework\Core\Unit\UnitTestCase; + +/** + * Test case + */ +class DateTimeValidatorTest extends UnitTestCase +{ + /** + * @test + * @dataProvider dateTimeValues + */ + public function acceptsDateTimeValues($value) + { + $validator = new DateTimeValidator(); + $result = $validator->validate($value); + + $this->assertFalse($result->hasErrors()); + } + + /** + * @return array + */ + public function dateTimeValues(): array + { + return [ + \DateTime::class => [ + new \DateTime(), + ], + 'Extended ' . \DateTime::class => [ + new class extends \DateTime { + }, + ], + \DateTimeImmutable::class => [ + new \DateTimeImmutable(), + ], + 'Extended ' . \DateTimeImmutable::class => [ + new class extends \DateTimeImmutable { + }, + ], + ]; + } + + /** + * @test + */ + public function addsErrorForInvalidValue() + { + $validator = $this->getMockBuilder(DateTimeValidator::class) + ->setMethods(['translateErrorMessage']) + ->getMock(); + $result = $validator->validate(false); + + $this->assertTrue($result->hasErrors()); + } +}