3 namespace Sabre\VObject;
8 class RecurrenceIteratorInfiniteLoopProblemTest extends \PHPUnit_Framework_TestCase {
11 * This bug came from a Fruux customer. This would result in a never-ending
14 function testFastForwardTooFar() {
16 $ev = Component::create('VEVENT');
17 $ev->DTSTART = '20090420T180000Z';
18 $ev->RRULE = 'FREQ=WEEKLY;BYDAY=MO;UNTIL=20090704T205959Z;INTERVAL=1';
20 $this->assertFalse($ev->isInTimeRange(new DateTime('2012-01-01 12:00:00'),new DateTime('3000-01-01 00:00:00')));
25 * Different bug, also likely an infinite loop.
27 function testYearlyByMonthLoop() {
29 $ev = Component::create('VEVENT');
31 $ev->DTSTART = '20120101T154500';
32 $ev->DTSTART['TZID'] = 'Europe/Berlin';
33 $ev->RRULE = 'FREQ=YEARLY;INTERVAL=1;UNTIL=20120203T225959Z;BYMONTH=2;BYSETPOS=1;BYDAY=SU,MO,TU,WE,TH,FR,SA';
34 $ev->DTEND = '20120101T164500';
35 $ev->DTEND['TZID'] = 'Europe/Berlin';
37 // This recurrence rule by itself is a yearly rule that should happen
40 // The BYDAY part expands this to every day of the month, but the
41 // BYSETPOS limits this to only the 1st day of the month. Very crazy
42 // way to specify this, and could have certainly been a lot easier.
43 $cal = Component::create('VCALENDAR');
46 $it = new RecurrenceIterator($cal,'uuid');
47 $it->fastForward(new DateTime('2012-01-29 23:00:00', new DateTimeZone('UTC')));
52 $collect[] = $it->getDTSTART();
53 if ($it->getDTSTART() > new DateTime('2013-02-05 22:59:59', new DateTimeZone('UTC'))) {
61 array(new DateTime('2012-02-01 15:45:00', new DateTimeZone('Europe/Berlin'))),