From d075ae6e1ddc48359365792101300c239f9dca20 Mon Sep 17 00:00:00 2001
From: Benni Mack <benni@typo3.org>
Date: Wed, 23 Sep 2020 11:19:09 +0200
Subject: [PATCH] [TASK] Add tests for Extbase DateTimeConverter

Some older PHP versions could not handle DateTime::createFromFormat()
with negative integers.

This change adds tests to show that this actually works.

Resolves: #73637
Releases: master, 10.4
Change-Id: Ief4112bee6d8fc95fa46dc84cb0cfc6b4a3faff1
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/65834
Tested-by: TYPO3com <noreply@typo3.com>
Tested-by: Alexander Schnitzler <git@alexanderschnitzler.de>
Tested-by: Oliver Bartsch <bo@cedev.de>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Alexander Schnitzler <git@alexanderschnitzler.de>
Reviewed-by: Oliver Bartsch <bo@cedev.de>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
---
 .../TypeConverter/DateTimeConverterTest.php   | 27 +++++++++++--------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/typo3/sysext/extbase/Tests/Unit/Property/TypeConverter/DateTimeConverterTest.php b/typo3/sysext/extbase/Tests/Unit/Property/TypeConverter/DateTimeConverterTest.php
index 5867ff318e9c..c00c7bb30706 100644
--- a/typo3/sysext/extbase/Tests/Unit/Property/TypeConverter/DateTimeConverterTest.php
+++ b/typo3/sysext/extbase/Tests/Unit/Property/TypeConverter/DateTimeConverterTest.php
@@ -371,26 +371,28 @@ class DateTimeConverterTest extends UnitTestCase
     public function convertFromArrayDataProvider()
     {
         return [
-            [['date' => '2005-08-15T15:52:01+01:00'], true],
-            [['date' => '1308174051', 'dateFormat' => ''], false],
-            [['date' => '13-12-1980', 'dateFormat' => 'd.m.Y'], false],
-            [['date' => '1308174051', 'dateFormat' => 'Y-m-d'], false],
-            [['date' => '12:13', 'dateFormat' => 'H:i'], true],
-            [['date' => '13.12.1980', 'dateFormat' => 'd.m.Y'], true],
-            [['date' => '2005-08-15T15:52:01+00:00', 'dateFormat' => ''], true],
-            [['date' => '2005-08-15T15:52:01+00:00', 'dateFormat' => \DateTime::ATOM], true],
-            [['date' => '1308174051', 'dateFormat' => 'U'], true],
-            [['date' => 1308174051, 'dateFormat' => 'U'], true],
+            [['date' => '2005-08-15T15:52:01+01:00'], true, '2005-08-15T15:52:01+01:00'],
+            [['date' => '1308174051', 'dateFormat' => ''], false, null],
+            [['date' => '13-12-1980', 'dateFormat' => 'd.m.Y'], false, null],
+            [['date' => '1308174051', 'dateFormat' => 'Y-m-d'], false, null],
+            [['date' => '12:13', 'dateFormat' => 'H:i'], true, null],
+            [['date' => '13.12.1980', 'dateFormat' => 'd.m.Y'], true, null],
+            [['date' => '2005-08-15T15:52:01+00:00', 'dateFormat' => ''], true, '2005-08-15T15:52:01+00:00'],
+            [['date' => '2005-08-15T15:52:01+00:00', 'dateFormat' => \DateTime::ATOM], true, '2005-08-15T15:52:01+00:00'],
+            [['date' => '1308174051', 'dateFormat' => 'U'], true, '2011-06-15T21:40:51+00:00'],
+            [['date' => 1308174051, 'dateFormat' => 'U'], true, '2011-06-15T21:40:51+00:00'],
+            [['date' => -1308174051, 'dateFormat' => 'U'], true, '1928-07-19T02:19:09+00:00'],
         ];
     }
 
     /**
      * @param array $source the array to be converted
      * @param bool $isValid TRUE if the conversion is expected to be successful, otherwise FALSE
+     * @param string|null $expectedResult
      * @test
      * @dataProvider convertFromArrayDataProvider
      */
-    public function convertFromArrayTests(array $source, $isValid)
+    public function convertFromArrayTests(array $source, $isValid, ?string $expectedResult)
     {
         $dateFormat = isset($source['dateFormat']) && $source['dateFormat'] !== '' ? $source['dateFormat'] : null;
         if ($dateFormat !== null) {
@@ -416,6 +418,9 @@ class DateTimeConverterTest extends UnitTestCase
         }
         $dateAsString = isset($source['date']) ? (string)$source['date'] : '';
         self::assertSame($dateAsString, $date->format($dateFormat));
+        if ($expectedResult !== null) {
+            self::assertSame($expectedResult, $date->format('c'));
+        }
     }
 
     /**
-- 
GitLab