7
|
1 <?php
|
|
2
|
|
3 namespace Sabre\VObject\Component;
|
|
4
|
|
5 use Sabre\VObject\Component;
|
|
6 use DateTime;
|
|
7 use Sabre\VObject\Reader;
|
|
8
|
|
9 class VAlarmTest extends \PHPUnit_Framework_TestCase {
|
|
10
|
|
11 /**
|
|
12 * @dataProvider timeRangeTestData
|
|
13 */
|
|
14 public function testInTimeRange(VAlarm $valarm,$start,$end,$outcome) {
|
|
15
|
|
16 $this->assertEquals($outcome, $valarm->isInTimeRange($start, $end));
|
|
17
|
|
18 }
|
|
19
|
|
20 public function timeRangeTestData() {
|
|
21
|
|
22 $tests = array();
|
|
23
|
|
24 $calendar = new VCalendar();
|
|
25
|
|
26 // Hard date and time
|
|
27 $valarm1 = $calendar->createComponent('VALARM');
|
|
28 $valarm1->add(
|
|
29 $calendar->createProperty('TRIGGER', '20120312T130000Z', array('VALUE' => 'DATE-TIME'))
|
|
30 );
|
|
31
|
|
32 $tests[] = array($valarm1, new DateTime('2012-03-01 01:00:00'), new DateTime('2012-04-01 01:00:00'), true);
|
|
33 $tests[] = array($valarm1, new DateTime('2012-03-01 01:00:00'), new DateTime('2012-03-10 01:00:00'), false);
|
|
34
|
|
35 // Relation to start time of event
|
|
36 $valarm2 = $calendar->createComponent('VALARM');
|
|
37 $valarm2->add(
|
|
38 $calendar->createProperty('TRIGGER', '-P1D', array('VALUE' => 'DURATION'))
|
|
39 );
|
|
40
|
|
41 $vevent2 = $calendar->createComponent('VEVENT');
|
|
42 $vevent2->DTSTART = '20120313T130000Z';
|
|
43 $vevent2->add($valarm2);
|
|
44
|
|
45 $tests[] = array($valarm2, new DateTime('2012-03-01 01:00:00'), new DateTime('2012-04-01 01:00:00'), true);
|
|
46 $tests[] = array($valarm2, new DateTime('2012-03-01 01:00:00'), new DateTime('2012-03-10 01:00:00'), false);
|
|
47
|
|
48 // Relation to end time of event
|
|
49 $valarm3 = $calendar->createComponent('VALARM');
|
|
50 $valarm3->add( $calendar->createProperty('TRIGGER', '-P1D', array('VALUE'=>'DURATION', 'RELATED' => 'END')) );
|
|
51
|
|
52 $vevent3 = $calendar->createComponent('VEVENT');
|
|
53 $vevent3->DTSTART = '20120301T130000Z';
|
|
54 $vevent3->DTEND = '20120401T130000Z';
|
|
55 $vevent3->add($valarm3);
|
|
56
|
|
57 $tests[] = array($valarm3, new DateTime('2012-02-25 01:00:00'), new DateTime('2012-03-05 01:00:00'), false);
|
|
58 $tests[] = array($valarm3, new DateTime('2012-03-25 01:00:00'), new DateTime('2012-04-05 01:00:00'), true);
|
|
59
|
|
60 // Relation to end time of todo
|
|
61 $valarm4 = $calendar->createComponent('VALARM');
|
|
62 $valarm4->TRIGGER = '-P1D';
|
|
63 $valarm4->TRIGGER['VALUE'] = 'DURATION';
|
|
64 $valarm4->TRIGGER['RELATED']= 'END';
|
|
65
|
|
66 $vtodo4 = $calendar->createComponent('VTODO');
|
|
67 $vtodo4->DTSTART = '20120301T130000Z';
|
|
68 $vtodo4->DUE = '20120401T130000Z';
|
|
69 $vtodo4->add($valarm4);
|
|
70
|
|
71 $tests[] = array($valarm4, new DateTime('2012-02-25 01:00:00'), new DateTime('2012-03-05 01:00:00'), false);
|
|
72 $tests[] = array($valarm4, new DateTime('2012-03-25 01:00:00'), new DateTime('2012-04-05 01:00:00'), true);
|
|
73
|
|
74 // Relation to start time of event + repeat
|
|
75 $valarm5 = $calendar->createComponent('VALARM');
|
|
76 $valarm5->TRIGGER = '-P1D';
|
|
77 $valarm5->TRIGGER['VALUE'] = 'DURATION';
|
|
78 $valarm5->REPEAT = 10;
|
|
79 $valarm5->DURATION = 'P1D';
|
|
80
|
|
81 $vevent5 = $calendar->createComponent('VEVENT');
|
|
82 $vevent5->DTSTART = '20120301T130000Z';
|
|
83 $vevent5->add($valarm5);
|
|
84
|
|
85 $tests[] = array($valarm5, new DateTime('2012-03-09 01:00:00'), new DateTime('2012-03-10 01:00:00'), true);
|
|
86
|
|
87 // Relation to start time of event + duration, but no repeat
|
|
88 $valarm6 = $calendar->createComponent('VALARM');
|
|
89 $valarm6->TRIGGER = '-P1D';
|
|
90 $valarm6->TRIGGER['VALUE'] = 'DURATION';
|
|
91 $valarm6->DURATION = 'P1D';
|
|
92
|
|
93 $vevent6 = $calendar->createComponent('VEVENT');
|
|
94 $vevent6->DTSTART = '20120313T130000Z';
|
|
95 $vevent6->add($valarm6);
|
|
96
|
|
97 $tests[] = array($valarm6, new DateTime('2012-03-01 01:00:00'), new DateTime('2012-04-01 01:00:00'), true);
|
|
98 $tests[] = array($valarm6, new DateTime('2012-03-01 01:00:00'), new DateTime('2012-03-10 01:00:00'), false);
|
|
99
|
|
100
|
|
101 // Relation to end time of event (DURATION instead of DTEND)
|
|
102 $valarm7 = $calendar->createComponent('VALARM');
|
|
103 $valarm7->TRIGGER = '-P1D';
|
|
104 $valarm7->TRIGGER['VALUE'] = 'DURATION';
|
|
105 $valarm7->TRIGGER['RELATED']= 'END';
|
|
106
|
|
107 $vevent7 = $calendar->createComponent('VEVENT');
|
|
108 $vevent7->DTSTART = '20120301T130000Z';
|
|
109 $vevent7->DURATION = 'P30D';
|
|
110 $vevent7->add($valarm7);
|
|
111
|
|
112 $tests[] = array($valarm7, new DateTime('2012-02-25 01:00:00'), new DateTime('2012-03-05 01:00:00'), false);
|
|
113 $tests[] = array($valarm7, new DateTime('2012-03-25 01:00:00'), new DateTime('2012-04-05 01:00:00'), true);
|
|
114
|
|
115 // Relation to end time of event (No DTEND or DURATION)
|
|
116 $valarm7 = $calendar->createComponent('VALARM');
|
|
117 $valarm7->TRIGGER = '-P1D';
|
|
118 $valarm7->TRIGGER['VALUE'] = 'DURATION';
|
|
119 $valarm7->TRIGGER['RELATED']= 'END';
|
|
120
|
|
121 $vevent7 = $calendar->createComponent('VEVENT');
|
|
122 $vevent7->DTSTART = '20120301T130000Z';
|
|
123 $vevent7->add($valarm7);
|
|
124
|
|
125 $tests[] = array($valarm7, new DateTime('2012-02-25 01:00:00'), new DateTime('2012-03-05 01:00:00'), true);
|
|
126 $tests[] = array($valarm7, new DateTime('2012-03-25 01:00:00'), new DateTime('2012-04-05 01:00:00'), false);
|
|
127
|
|
128
|
|
129 return $tests;
|
|
130 }
|
|
131
|
|
132 /**
|
|
133 * @expectedException LogicException
|
|
134 */
|
|
135 public function testInTimeRangeInvalidComponent() {
|
|
136
|
|
137 $calendar = new VCalendar();
|
|
138 $valarm = $calendar->createComponent('VALARM');
|
|
139 $valarm->TRIGGER = '-P1D';
|
|
140 $valarm->TRIGGER['RELATED'] = 'END';
|
|
141
|
|
142 $vjournal = $calendar->createComponent('VJOURNAL');
|
|
143 $vjournal->add($valarm);
|
|
144
|
|
145 $valarm->isInTimeRange(new DateTime('2012-02-25 01:00:00'), new DateTime('2012-03-05 01:00:00'));
|
|
146
|
|
147 }
|
|
148
|
|
149 /**
|
|
150 * This bug was found and reported on the mailing list.
|
|
151 */
|
|
152 public function testInTimeRangeBuggy() {
|
|
153
|
|
154 $input = <<<BLA
|
|
155 BEGIN:VCALENDAR
|
|
156 BEGIN:VTODO
|
|
157 DTSTAMP:20121003T064931Z
|
|
158 UID:b848cb9a7bb16e464a06c222ca1f8102@examle.com
|
|
159 STATUS:NEEDS-ACTION
|
|
160 DUE:20121005T000000Z
|
|
161 SUMMARY:Task 1
|
|
162 CATEGORIES:AlarmCategory
|
|
163 BEGIN:VALARM
|
|
164 TRIGGER:-PT10M
|
|
165 ACTION:DISPLAY
|
|
166 DESCRIPTION:Task 1
|
|
167 END:VALARM
|
|
168 END:VTODO
|
|
169 END:VCALENDAR
|
|
170 BLA;
|
|
171
|
|
172 $vobj = Reader::read($input);
|
|
173
|
|
174 $this->assertTrue($vobj->VTODO->VALARM->isInTimeRange(new \DateTime('2012-10-01 00:00:00'), new \DateTime('2012-11-01 00:00:00')));
|
|
175
|
|
176 }
|
|
177
|
|
178 }
|
|
179
|