diff --git a/tests/VObject/Recur/FastForwardBeforeTest.php b/tests/VObject/Recur/FastForwardBeforeTest.php index ba71d23d..3461bd6a 100644 --- a/tests/VObject/Recur/FastForwardBeforeTest.php +++ b/tests/VObject/Recur/FastForwardBeforeTest.php @@ -282,39 +282,51 @@ public function testFastForwardBeforeMonthly31thDay() $this->fastForward($rrule, $ffDate); - $expected = (new DateTime('midnight', new DateTimeZone('America/New_York'))) + $expected = (new \DateTime('midnight', new DateTimeZone($timezone))) ->setDate(18000, 1, 31) ->getTimestamp(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // march $rrule->next(); - $expected += (29 + 31) * 24 * 60 * 60; + $expected = (new \DateTime('1970-01-31 00:00:00', new DateTimeZone($timezone))) + ->setDate(18000, 3, 31) + ->getTimestamp(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // may $rrule->next(); - $expected += (30 + 31) * 24 * 60 * 60; + $expected = (new \DateTime('1970-01-31 00:00:00', new DateTimeZone($timezone))) + ->setDate(18000, 5, 31) + ->getTimestamp(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // july $rrule->next(); - $expected += (30 + 31) * 24 * 60 * 60; + $expected = (new \DateTime('1970-01-31 00:00:00', new DateTimeZone($timezone))) + ->setDate(18000, 7, 31) + ->getTimestamp(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // august $rrule->next(); - $expected += 31 * 24 * 60 * 60; + $expected = (new \DateTime('1970-01-31 00:00:00', new DateTimeZone($timezone))) + ->setDate(18000, 8, 31) + ->getTimestamp(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // october $rrule->next(); - $expected += (30 + 31) * 24 * 60 * 60; + $expected = (new \DateTime('1970-01-31 00:00:00', new DateTimeZone($timezone))) + ->setDate(18000, 10, 31) + ->getTimestamp(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // december $rrule->next(); - $expected += (30 + 31) * 24 * 60 * 60; + $expected = (new \DateTime('1970-01-31 00:00:00', new DateTimeZone($timezone))) + ->setDate(18000, 12, 31) + ->getTimestamp(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); } @@ -336,37 +348,52 @@ public function testFastForwardBeforeMonthlyAdvanced() $this->assertEquals($expected, $rrule->current()->getTimestamp()); // tuesday - $expected += 8 * 24 * 60 * 60; + $expected = (new \DateTime('1970-01-31 00:00:00', new DateTimeZone($timezone))) + ->setDate(8000, 1, 11) + ->getTimestamp(); $rrule->next(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // wednesday - $expected += 8 * 24 * 60 * 60; + $expected = (new \DateTime('1970-01-31 00:00:00', new DateTimeZone($timezone))) + ->setDate(8000, 1, 19) + ->getTimestamp(); $rrule->next(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // thursday - $expected += 8 * 24 * 60 * 60; + $expected = (new \DateTime('1970-01-31 00:00:00', new DateTimeZone($timezone))) + ->setDate(8000, 1, 27) + ->getTimestamp(); $rrule->next(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // monday march - $expected += (29 + 10) * 24 * 60 * 60; + $expected = (new \DateTime('1970-01-31 00:00:00', new DateTimeZone($timezone))) + ->setDate(8000, 3, 6) + ->getTimestamp(); $rrule->next(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // tuesday - $expected += 8 * 24 * 60 * 60; + $expected = (new \DateTime('1970-01-31 00:00:00', new DateTimeZone($timezone))) + ->setDate(8000, 3, 14) + ->getTimestamp(); $rrule->next(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // wednesday (this month starts on wednesday so that's just the next day) - $expected += 1 * 24 * 60 * 60; + $expected = (new \DateTime('1970-01-31 00:00:00', new DateTimeZone($timezone))) + ->setDate(8000, 3, 15) + ->getTimestamp(); $rrule->next(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // thursday $expected += 8 * 24 * 60 * 60; + $expected = (new \DateTime('1970-01-31 00:00:00', new DateTimeZone($timezone))) + ->setDate(8000, 3, 23) + ->getTimestamp(); $rrule->next(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); } diff --git a/tests/VObject/Recur/FastForwardTest.php b/tests/VObject/Recur/FastForwardTest.php index df912056..7a305b4a 100644 --- a/tests/VObject/Recur/FastForwardTest.php +++ b/tests/VObject/Recur/FastForwardTest.php @@ -261,32 +261,45 @@ public function testFastForwardMonthly31thDay() // march $rrule->next(); - $expected += (29 + 31) * 24 * 60 * 60; + $expected = (new DateTime('midnight', new DateTimeZone('America/New_York'))) + ->setDate(18000, 3, 31) + ->getTimestamp(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // may $rrule->next(); $expected += (30 + 31) * 24 * 60 * 60; + $expected = (new DateTime('midnight', new DateTimeZone('America/New_York'))) + ->setDate(18000, 5, 31) + ->getTimestamp(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // july $rrule->next(); - $expected += (30 + 31) * 24 * 60 * 60; + $expected = (new DateTime('midnight', new DateTimeZone('America/New_York'))) + ->setDate(18000, 7, 31) + ->getTimestamp(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // august $rrule->next(); - $expected += 31 * 24 * 60 * 60; + $expected = (new DateTime('midnight', new DateTimeZone('America/New_York'))) + ->setDate(18000, 8, 31) + ->getTimestamp(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // october $rrule->next(); - $expected += (30 + 31) * 24 * 60 * 60; + $expected = (new DateTime('midnight', new DateTimeZone('America/New_York'))) + ->setDate(18000, 10, 31) + ->getTimestamp(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // december $rrule->next(); - $expected += (30 + 31) * 24 * 60 * 60; + $expected = (new DateTime('midnight', new DateTimeZone('America/New_York'))) + ->setDate(18000, 12, 31) + ->getTimestamp(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); } @@ -307,37 +320,51 @@ public function testFastForwardMonthlyAdvanced() $this->assertEquals($expected, $rrule->current()->getTimestamp()); // tuesday - $expected += 8 * 24 * 60 * 60; + $expected = (new DateTime('midnight', new DateTimeZone($timezone))) + ->setDate(8000, 1, 11) + ->getTimestamp(); $rrule->next(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // wednesday - $expected += 8 * 24 * 60 * 60; + $expected = (new DateTime('midnight', new DateTimeZone($timezone))) + ->setDate(8000, 1, 19) + ->getTimestamp(); $rrule->next(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // thursday - $expected += 8 * 24 * 60 * 60; + $expected = (new DateTime('midnight', new DateTimeZone($timezone))) + ->setDate(8000, 1, 27) + ->getTimestamp(); $rrule->next(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // monday march - $expected += (29 + 10) * 24 * 60 * 60; + $expected = (new DateTime('midnight', new DateTimeZone($timezone))) + ->setDate(8000, 3, 6) + ->getTimestamp(); $rrule->next(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // tuesday - $expected += 8 * 24 * 60 * 60; + $expected = (new DateTime('midnight', new DateTimeZone($timezone))) + ->setDate(8000, 3, 14) + ->getTimestamp(); $rrule->next(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // wednesday (this month starts on wednesday so that's just the next day) - $expected += 1 * 24 * 60 * 60; + $expected = (new DateTime('midnight', new DateTimeZone($timezone))) + ->setDate(8000, 3, 15) + ->getTimestamp(); $rrule->next(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); // thursday - $expected += 8 * 24 * 60 * 60; + $expected = (new DateTime('midnight', new DateTimeZone($timezone))) + ->setDate(8000, 3, 23) + ->getTimestamp(); $rrule->next(); $this->assertEquals($expected, $rrule->current()->getTimestamp()); } diff --git a/tests/VObject/Recur/FastForwardToEndTest.php b/tests/VObject/Recur/FastForwardToEndTest.php index 9f54d838..992f2b9d 100644 --- a/tests/VObject/Recur/FastForwardToEndTest.php +++ b/tests/VObject/Recur/FastForwardToEndTest.php @@ -186,9 +186,7 @@ public function testFastForwardToEndUntilMonthlyBasic() } /** - * FIXME fails in <=PHP 7.1. - * - * @requires PHP 7.2 + * @requires PHP < 8.1 */ public function testFastForwardToEndCountMonthly31thDay() { @@ -204,6 +202,22 @@ public function testFastForwardToEndCountMonthly31thDay() $this->assertEquals($expected, $rrule->current()->getTimestamp()); } + /** + * @requires PHP >= 8.1 + */ + public function testFastForwardToEndCountMonthly31thDayPHP81() + { + $startDate = new \DateTime('1970-01-31 00:00:00', new \DateTimeZone('America/New_York')); + $rrule = new RRuleIterator('FREQ=MONTHLY;COUNT=10000', $startDate); + + // We do not enforce the timing in case of a count rule as we cannot optimize it + $this->fastForwardToEnd($rrule, false); + + $expected = (new DateTime('midnight', new DateTimeZone('America/New_York'))) + ->setDate(3398, 7, 31); + $this->assertEquals($expected->getTimestamp(), $rrule->current()->getTimestamp()); + } + public function testFastForwardToEndUntilMonthly31thDay() { $startDate = new \DateTime('1970-01-31 00:00:00', new \DateTimeZone('America/New_York'));