2626use ILIAS \Refinery \KindlyTo \Transformation \DateTimeTransformation ;
2727use PHPUnit \Framework \TestCase ;
2828use PHPUnit \Framework \Attributes \DataProvider ;
29+ use DateTimeZone ;
2930
3031class DateTimeTransformationTest extends TestCase
3132{
@@ -45,6 +46,29 @@ public function testDateTimeISOTransformation(mixed $originVal, DateTimeImmutabl
4546 $ this ->assertEquals ($ expectedVal , $ transformedValue );
4647 }
4748
49+ /**
50+ * @see https://github.com/php/php-src/pull/2450
51+ * @see https://github.com/php/php-src/pull/12989
52+ */
53+ public function testRFC7231ResultsInMisleadingFormattedDateString (): void
54+ {
55+ $ gmt_format = 'D, d M Y H:i:s \G\M\T ' ; // former DateTimeInterface::RFC7231
56+ $ test_gmt_date_time = 'Mon, 06 Jul 2020 12:23:05 GMT ' ;
57+
58+ $ exptected = DateTimeImmutable::createFromFormat (
59+ $ gmt_format ,
60+ $ test_gmt_date_time
61+ );
62+
63+ $ actual = $ this ->transformation ->transform ($ test_gmt_date_time );
64+ $ this ->assertEquals ($ exptected , $ actual );
65+
66+ $ actual = $ actual ->setTimezone (new DateTimeZone ('Europe/Berlin ' ));
67+ // GMT in the provided format is just a string, it does not effect the presented timezone
68+ $ this ->assertSame ('Mon, 06 Jul 2020 14:23:05 GMT ' , $ actual ->format ($ gmt_format ));
69+ $ this ->assertEquals ($ exptected , $ actual );
70+ }
71+
4872 #[DataProvider('TransformationFailureDataProvider ' )]
4973 public function testTransformIsInvalid (string $ failingValue ): void
5074 {
@@ -57,20 +81,47 @@ public static function DateTimeTransformationDataProvider(): array
5781 $ now = new DateTimeImmutable ();
5882 return [
5983 'datetime ' => [$ now , $ now ],
60- 'iso8601 ' => ['2020-07-06T12:23:05+0000 ' ,
61- DateTimeImmutable::createFromFormat (DateTimeInterface::ISO8601 , '2020-07-06T12:23:05+0000 ' )],
62- 'atom ' => ['2020-07-06T12:23:05+00:00 ' ,
63- DateTimeImmutable::createFromFormat (DateTimeInterface::ATOM , '2020-07-06T12:23:05+00:00 ' )],
64- 'rfc3339_ext ' => ['2020-07-06T12:23:05.000+00:00 ' ,
65- DateTimeImmutable::createFromFormat (DateTimeInterface::RFC3339_EXTENDED , '2020-07-06T12:23:05.000+00:00 ' )],
66- 'cookie ' => ['Monday, 06-Jul-2020 12:23:05 GMT+0000 ' ,
67- DateTimeImmutable::createFromFormat (DateTimeInterface::COOKIE , 'Monday, 06-Jul-2020 12:23:05 GMT+0000 ' )],
68- 'rfc822 ' => ['Mon, 06 Jul 20 12:23:05 +0000 ' ,
69- DateTimeImmutable::createFromFormat (DateTimeInterface::RFC822 , 'Mon, 06 Jul 20 12:23:05 +0000 ' )],
70- 'rfc7231 ' => ['Mon, 06 Jul 2020 12:23:05 GMT ' ,
71- DateTimeImmutable::createFromFormat (DateTimeInterface::RFC7231 , 'Mon, 06 Jul 2020 12:23:05 GMT ' )],
72- 'unix_timestamp ' => [481556262 , DateTimeImmutable::createFromFormat (DateTimeInterface::ISO8601 , '1985-04-05T13:37:42+0000 ' )],
73- 'unix_timestamp_float ' => [481556262.4 , DateTimeImmutable::createFromFormat (DateTimeInterface::ISO8601 , '1985-04-05T13:37:42+0000 ' )]
84+ 'iso8601 ' => [
85+ '2020-07-06T12:23:05+0000 ' ,
86+ DateTimeImmutable::createFromFormat (DateTimeInterface::ISO8601 , '2020-07-06T12:23:05+0000 ' )
87+ ],
88+ 'atom ' => [
89+ '2020-07-06T12:23:05+00:00 ' ,
90+ DateTimeImmutable::createFromFormat (DateTimeInterface::ATOM , '2020-07-06T12:23:05+00:00 ' )
91+ ],
92+ 'rfc3339_ext ' => [
93+ '2020-07-06T12:23:05.000+00:00 ' ,
94+ DateTimeImmutable::createFromFormat (
95+ DateTimeInterface::RFC3339_EXTENDED ,
96+ '2020-07-06T12:23:05.000+00:00 '
97+ )
98+ ],
99+ 'cookie ' => [
100+ 'Monday, 06-Jul-2020 12:23:05 GMT+0000 ' ,
101+ DateTimeImmutable::createFromFormat (DateTimeInterface::COOKIE , 'Monday, 06-Jul-2020 12:23:05 GMT+0000 ' )
102+ ],
103+ 'rfc822 ' => [
104+ 'Mon, 06 Jul 20 12:23:05 +0000 ' ,
105+ DateTimeImmutable::createFromFormat (DateTimeInterface::RFC822 , 'Mon, 06 Jul 20 12:23:05 +0000 ' )
106+ ],
107+ 'rfc7231 ' => [
108+ 'Mon, 06 Jul 2020 12:23:05 GMT ' ,
109+ DateTimeImmutable::createFromFormat ('D, d M Y H:i:s \G\M\T ' , 'Mon, 06 Jul 2020 12:23:05 GMT ' )
110+ ],
111+ 'unix_timestamp ' => [
112+ 481556262 ,
113+ DateTimeImmutable::createFromFormat (
114+ DateTimeInterface::ISO8601 ,
115+ '1985-04-05T13:37:42+0000 '
116+ )
117+ ],
118+ 'unix_timestamp_float ' => [
119+ 481556262.4 ,
120+ DateTimeImmutable::createFromFormat (
121+ DateTimeInterface::ISO8601 ,
122+ '1985-04-05T13:37:42+0000 '
123+ )
124+ ]
74125 ];
75126 }
76127
0 commit comments