annotate vendor/sabre/vobject/tests/VObject/Recur/EventIterator/InfiniteLoopProblemTest.php @ 12:ff1f27bd05ad

partial success in getting back_link to message when making event from mail
author Charlie Root
date Sat, 13 Jan 2018 09:39:32 -0500
parents 430dbd5346f7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
1 <?php
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
2
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
3 namespace Sabre\VObject\Recur\EventIterator;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
4
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
5 use
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
6 DateTime,
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
7 DateTimeZone,
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
8 Sabre\VObject\Component\VCalendar,
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
9 Sabre\VObject\Recur;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
10
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
11 class EventIteratorInfiniteLoopProblemTest extends \PHPUnit_Framework_TestCase {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
12
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
13 public function setUp() {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
14
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
15 $this->vcal = new VCalendar();
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
16
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
17 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
18
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
19 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
20 * This bug came from a Fruux customer. This would result in a never-ending
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
21 * request.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
22 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
23 function testFastForwardTooFar() {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
24
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
25 $ev = $this->vcal->createComponent('VEVENT');
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
26 $ev->UID = 'foobar';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
27 $ev->DTSTART = '20090420T180000Z';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
28 $ev->RRULE = 'FREQ=WEEKLY;BYDAY=MO;UNTIL=20090704T205959Z;INTERVAL=1';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
29
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
30 $this->assertFalse($ev->isInTimeRange(new DateTime('2012-01-01 12:00:00'),new DateTime('3000-01-01 00:00:00')));
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
31
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
32 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
33
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
34 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
35 * Different bug, also likely an infinite loop.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
36 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
37 function testYearlyByMonthLoop() {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
38
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
39 $ev = $this->vcal->createComponent('VEVENT');
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
40 $ev->UID = 'uuid';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
41 $ev->DTSTART = '20120101T154500';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
42 $ev->DTSTART['TZID'] = 'Europe/Berlin';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
43 $ev->RRULE = 'FREQ=YEARLY;INTERVAL=1;UNTIL=20120203T225959Z;BYMONTH=2;BYSETPOS=1;BYDAY=SU,MO,TU,WE,TH,FR,SA';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
44 $ev->DTEND = '20120101T164500';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
45 $ev->DTEND['TZID'] = 'Europe/Berlin';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
46
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
47 // This recurrence rule by itself is a yearly rule that should happen
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
48 // every february.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
49 //
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
50 // The BYDAY part expands this to every day of the month, but the
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
51 // BYSETPOS limits this to only the 1st day of the month. Very crazy
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
52 // way to specify this, and could have certainly been a lot easier.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
53 $this->vcal->add($ev);
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
54
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
55 $it = new Recur\EventIterator($this->vcal,'uuid');
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
56 $it->fastForward(new DateTime('2012-01-29 23:00:00', new DateTimeZone('UTC')));
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
57
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
58 $collect = array();
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
59
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
60 while($it->valid()) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
61 $collect[] = $it->getDTSTART();
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
62 if ($it->getDTSTART() > new DateTime('2013-02-05 22:59:59', new DateTimeZone('UTC'))) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
63 break;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
64 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
65 $it->next();
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
66
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
67 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
68
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
69 $this->assertEquals(
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
70 array(new DateTime('2012-02-01 15:45:00', new DateTimeZone('Europe/Berlin'))),
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
71 $collect
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
72 );
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
73
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
74 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
75
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
76 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
77 * Something, somewhere produced an ics with an interval set to 0. Because
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
78 * this means we increase the current day (or week, month) by 0, this also
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
79 * results in an infinite loop.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
80 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
81 * @expectedException InvalidArgumentException
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
82 * @return void
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
83 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
84 function testZeroInterval() {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
85
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
86 $ev = $this->vcal->createComponent('VEVENT');
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
87 $ev->UID = 'uuid';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
88 $ev->DTSTART = '20120824T145700Z';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
89 $ev->RRULE = 'FREQ=YEARLY;INTERVAL=0';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
90 $this->vcal->add($ev);
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
91
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
92 $it = new Recur\EventIterator($this->vcal,'uuid');
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
93 $it->fastForward(new DateTime('2013-01-01 23:00:00', new DateTimeZone('UTC')));
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
94
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
95 // if we got this far.. it means we are no longer infinitely looping
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
96
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
97 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
98
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
99 }