Mercurial > hg > rc1
comparison vendor/sabre/vobject/tests/VObject/Recur/EventIterator/MainTest.php @ 7:430dbd5346f7
vendor sabre as distributed
author | Charlie Root |
---|---|
date | Sat, 13 Jan 2018 09:06:10 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
6:cec75ba50afc | 7:430dbd5346f7 |
---|---|
1 <?php | |
2 | |
3 namespace Sabre\VObject\EventIterator; | |
4 | |
5 use DateTime; | |
6 use DateTimeZone; | |
7 use Sabre\VObject\Recur\EventIterator; | |
8 use Sabre\VObject\Component\VCalendar; | |
9 | |
10 class MainTest extends \PHPUnit_Framework_TestCase { | |
11 | |
12 function testValues() { | |
13 | |
14 $vcal = new VCalendar(); | |
15 $ev = $vcal->createComponent('VEVENT'); | |
16 $ev->UID = 'bla'; | |
17 $ev->RRULE = 'FREQ=DAILY;BYHOUR=10;BYMINUTE=5;BYSECOND=16;BYWEEKNO=32;BYYEARDAY=100,200'; | |
18 $dtStart = $vcal->createProperty('DTSTART'); | |
19 $dtStart->setDateTime(new DateTime('2011-10-07')); | |
20 | |
21 $ev->add($dtStart); | |
22 | |
23 $vcal->add($ev); | |
24 | |
25 $it = new EventIterator($vcal,(string)$ev->uid); | |
26 | |
27 $this->assertTrue($it->isInfinite()); | |
28 | |
29 } | |
30 | |
31 /** | |
32 * @expectedException InvalidArgumentException | |
33 * @depends testValues | |
34 */ | |
35 function testInvalidFreq() { | |
36 | |
37 $vcal = new VCalendar(); | |
38 $ev = $vcal->createComponent('VEVENT'); | |
39 $ev->RRULE = 'FREQ=SMONTHLY;INTERVAL=3;UNTIL=20111025T000000Z'; | |
40 $ev->UID = 'foo'; | |
41 $dtStart = $vcal->createProperty('DTSTART'); | |
42 $dtStart->setDateTime(new DateTime('2011-10-07', new DateTimeZone('UTC'))); | |
43 | |
44 $ev->add($dtStart); | |
45 $vcal->add($ev); | |
46 | |
47 $it = new EventIterator($vcal,(string)$ev->uid); | |
48 | |
49 } | |
50 | |
51 /** | |
52 * @expectedException InvalidArgumentException | |
53 */ | |
54 function testVCalendarNoUID() { | |
55 | |
56 $vcal = new VCalendar(); | |
57 $it = new EventIterator($vcal); | |
58 | |
59 } | |
60 | |
61 /** | |
62 * @expectedException InvalidArgumentException | |
63 */ | |
64 function testVCalendarInvalidUID() { | |
65 | |
66 $vcal = new VCalendar(); | |
67 $it = new EventIterator($vcal,'foo'); | |
68 | |
69 } | |
70 | |
71 /** | |
72 * @depends testValues | |
73 */ | |
74 function testHourly() { | |
75 | |
76 $vcal = new VCalendar(); | |
77 $ev = $vcal->createComponent('VEVENT'); | |
78 | |
79 $ev->UID = 'bla'; | |
80 $ev->RRULE = 'FREQ=HOURLY;INTERVAL=3;UNTIL=20111025T000000Z'; | |
81 $dtStart = $vcal->createProperty('DTSTART'); | |
82 $dtStart->setDateTime(new DateTime('2011-10-07 12:00:00', new DateTimeZone('UTC'))); | |
83 | |
84 $ev->add($dtStart); | |
85 $vcal->add($ev); | |
86 | |
87 $it = new EventIterator($vcal,$ev->uid); | |
88 | |
89 // Max is to prevent overflow | |
90 $max = 12; | |
91 $result = array(); | |
92 foreach($it as $item) { | |
93 | |
94 $result[] = $item; | |
95 $max--; | |
96 | |
97 if (!$max) break; | |
98 | |
99 } | |
100 | |
101 $tz = new DateTimeZone('UTC'); | |
102 | |
103 $this->assertEquals( | |
104 array( | |
105 new DateTime('2011-10-07 12:00:00', $tz), | |
106 new DateTime('2011-10-07 15:00:00', $tz), | |
107 new DateTime('2011-10-07 18:00:00', $tz), | |
108 new DateTime('2011-10-07 21:00:00', $tz), | |
109 new DateTime('2011-10-08 00:00:00', $tz), | |
110 new DateTime('2011-10-08 03:00:00', $tz), | |
111 new DateTime('2011-10-08 06:00:00', $tz), | |
112 new DateTime('2011-10-08 09:00:00', $tz), | |
113 new DateTime('2011-10-08 12:00:00', $tz), | |
114 new DateTime('2011-10-08 15:00:00', $tz), | |
115 new DateTime('2011-10-08 18:00:00', $tz), | |
116 new DateTime('2011-10-08 21:00:00', $tz), | |
117 ), | |
118 $result | |
119 ); | |
120 | |
121 } | |
122 | |
123 /** | |
124 * @depends testValues | |
125 */ | |
126 function testDaily() { | |
127 | |
128 $vcal = new VCalendar(); | |
129 $ev = $vcal->createComponent('VEVENT'); | |
130 | |
131 $ev->UID = 'bla'; | |
132 $ev->RRULE = 'FREQ=DAILY;INTERVAL=3;UNTIL=20111025T000000Z'; | |
133 $dtStart = $vcal->createProperty('DTSTART'); | |
134 $dtStart->setDateTime(new DateTime('2011-10-07', new DateTimeZone('UTC'))); | |
135 | |
136 $ev->add($dtStart); | |
137 | |
138 $vcal->add($ev); | |
139 | |
140 $it = new EventIterator($vcal,$ev->uid); | |
141 | |
142 // Max is to prevent overflow | |
143 $max = 12; | |
144 $result = array(); | |
145 foreach($it as $item) { | |
146 | |
147 $result[] = $item; | |
148 $max--; | |
149 | |
150 if (!$max) break; | |
151 | |
152 } | |
153 | |
154 $tz = new DateTimeZone('UTC'); | |
155 | |
156 $this->assertEquals( | |
157 array( | |
158 new DateTime('2011-10-07', $tz), | |
159 new DateTime('2011-10-10', $tz), | |
160 new DateTime('2011-10-13', $tz), | |
161 new DateTime('2011-10-16', $tz), | |
162 new DateTime('2011-10-19', $tz), | |
163 new DateTime('2011-10-22', $tz), | |
164 new DateTime('2011-10-25', $tz), | |
165 ), | |
166 $result | |
167 ); | |
168 | |
169 } | |
170 | |
171 /** | |
172 * @depends testValues | |
173 */ | |
174 function testNoRRULE() { | |
175 | |
176 $vcal = new VCalendar(); | |
177 $ev = $vcal->createComponent('VEVENT'); | |
178 | |
179 $ev->UID = 'bla'; | |
180 $dtStart = $vcal->createProperty('DTSTART'); | |
181 $dtStart->setDateTime(new DateTime('2011-10-07', new DateTimeZone('UTC'))); | |
182 | |
183 $ev->add($dtStart); | |
184 | |
185 $vcal->add($ev); | |
186 | |
187 $it = new EventIterator($vcal,$ev->uid); | |
188 | |
189 // Max is to prevent overflow | |
190 $max = 12; | |
191 $result = array(); | |
192 foreach($it as $item) { | |
193 | |
194 $result[] = $item; | |
195 $max--; | |
196 | |
197 if (!$max) break; | |
198 | |
199 } | |
200 | |
201 $tz = new DateTimeZone('UTC'); | |
202 | |
203 $this->assertEquals( | |
204 array( | |
205 new DateTime('2011-10-07', $tz), | |
206 ), | |
207 $result | |
208 ); | |
209 | |
210 } | |
211 | |
212 /** | |
213 * @depends testValues | |
214 */ | |
215 function testDailyByDayByHour() { | |
216 | |
217 $vcal = new VCalendar(); | |
218 $ev = $vcal->createComponent('VEVENT'); | |
219 | |
220 $ev->UID = 'bla'; | |
221 $ev->RRULE = 'FREQ=DAILY;BYDAY=SA,SU;BYHOUR=6,7'; | |
222 $dtStart = $vcal->createProperty('DTSTART'); | |
223 $dtStart->setDateTime(new DateTime('2011-10-08 06:00:00', new DateTimeZone('UTC'))); | |
224 | |
225 $ev->add($dtStart); | |
226 | |
227 $vcal->add($ev); | |
228 | |
229 $it = new EventIterator($vcal,(string)$ev->uid); | |
230 | |
231 // Grabbing the next 12 items | |
232 $max = 12; | |
233 $result = array(); | |
234 foreach($it as $item) { | |
235 | |
236 $result[] = $item; | |
237 $max--; | |
238 | |
239 if (!$max) break; | |
240 | |
241 } | |
242 | |
243 $tz = new DateTimeZone('UTC'); | |
244 | |
245 $this->assertEquals( | |
246 array( | |
247 new datetime('2011-10-08 06:00:00', $tz), | |
248 new datetime('2011-10-08 07:00:00', $tz), | |
249 new datetime('2011-10-09 06:00:00', $tz), | |
250 new datetime('2011-10-09 07:00:00', $tz), | |
251 new datetime('2011-10-15 06:00:00', $tz), | |
252 new datetime('2011-10-15 07:00:00', $tz), | |
253 new datetime('2011-10-16 06:00:00', $tz), | |
254 new datetime('2011-10-16 07:00:00', $tz), | |
255 new datetime('2011-10-22 06:00:00', $tz), | |
256 new datetime('2011-10-22 07:00:00', $tz), | |
257 new datetime('2011-10-23 06:00:00', $tz), | |
258 new datetime('2011-10-23 07:00:00', $tz), | |
259 ), | |
260 $result | |
261 ); | |
262 | |
263 } | |
264 | |
265 /** | |
266 * @depends testValues | |
267 */ | |
268 function testDailyByHour() { | |
269 | |
270 $vcal = new VCalendar(); | |
271 $ev = $vcal->createComponent('VEVENT'); | |
272 | |
273 $ev->UID = 'bla'; | |
274 $ev->RRULE = 'FREQ=DAILY;INTERVAL=2;BYHOUR=10,11,12,13,14,15'; | |
275 $dtStart = $vcal->createProperty('DTSTART'); | |
276 $dtStart->setDateTime(new DateTime('2012-10-11 12:00:00', new DateTimeZone('UTC'))); | |
277 | |
278 $ev->add($dtStart); | |
279 | |
280 $vcal->add($ev); | |
281 | |
282 $it = new EventIterator($vcal,(string)$ev->uid); | |
283 | |
284 // Grabbing the next 12 items | |
285 $max = 12; | |
286 $result = array(); | |
287 foreach($it as $item) { | |
288 | |
289 $result[] = $item; | |
290 $max--; | |
291 | |
292 if (!$max) break; | |
293 | |
294 } | |
295 | |
296 $tz = new DateTimeZone('UTC'); | |
297 | |
298 $this->assertEquals( | |
299 array( | |
300 new datetime('2012-10-11 12:00:00', $tz), | |
301 new datetime('2012-10-11 13:00:00', $tz), | |
302 new datetime('2012-10-11 14:00:00', $tz), | |
303 new datetime('2012-10-11 15:00:00', $tz), | |
304 new datetime('2012-10-13 10:00:00', $tz), | |
305 new datetime('2012-10-13 11:00:00', $tz), | |
306 new datetime('2012-10-13 12:00:00', $tz), | |
307 new datetime('2012-10-13 13:00:00', $tz), | |
308 new datetime('2012-10-13 14:00:00', $tz), | |
309 new datetime('2012-10-13 15:00:00', $tz), | |
310 new datetime('2012-10-15 10:00:00', $tz), | |
311 new datetime('2012-10-15 11:00:00', $tz), | |
312 ), | |
313 $result | |
314 ); | |
315 | |
316 } | |
317 | |
318 /** | |
319 * @depends testValues | |
320 */ | |
321 function testDailyByDay() { | |
322 | |
323 $vcal = new VCalendar(); | |
324 $ev = $vcal->createComponent('VEVENT'); | |
325 | |
326 $ev->UID = 'bla'; | |
327 $ev->RRULE = 'FREQ=DAILY;INTERVAL=2;BYDAY=TU,WE,FR'; | |
328 $dtStart = $vcal->createProperty('DTSTART'); | |
329 $dtStart->setDateTime(new DateTime('2011-10-07', new DateTimeZone('UTC'))); | |
330 | |
331 $ev->add($dtStart); | |
332 | |
333 $vcal->add($ev); | |
334 | |
335 $it = new EventIterator($vcal,(string)$ev->uid); | |
336 | |
337 // Grabbing the next 12 items | |
338 $max = 12; | |
339 $result = array(); | |
340 foreach($it as $item) { | |
341 | |
342 $result[] = $item; | |
343 $max--; | |
344 | |
345 if (!$max) break; | |
346 | |
347 } | |
348 | |
349 $tz = new DateTimeZone('UTC'); | |
350 | |
351 $this->assertEquals( | |
352 array( | |
353 new DateTime('2011-10-07', $tz), | |
354 new DateTime('2011-10-11', $tz), | |
355 new DateTime('2011-10-19', $tz), | |
356 new DateTime('2011-10-21', $tz), | |
357 new DateTime('2011-10-25', $tz), | |
358 new DateTime('2011-11-02', $tz), | |
359 new DateTime('2011-11-04', $tz), | |
360 new DateTime('2011-11-08', $tz), | |
361 new DateTime('2011-11-16', $tz), | |
362 new DateTime('2011-11-18', $tz), | |
363 new DateTime('2011-11-22', $tz), | |
364 new DateTime('2011-11-30', $tz), | |
365 ), | |
366 $result | |
367 ); | |
368 | |
369 } | |
370 | |
371 /** | |
372 * @depends testValues | |
373 */ | |
374 function testWeekly() { | |
375 | |
376 $vcal = new VCalendar(); | |
377 $ev = $vcal->createComponent('VEVENT'); | |
378 | |
379 $ev->UID = 'bla'; | |
380 $ev->RRULE = 'FREQ=WEEKLY;INTERVAL=2;COUNT=10'; | |
381 $dtStart = $vcal->createProperty('DTSTART'); | |
382 $dtStart->setDateTime(new DateTime('2011-10-07', new DateTimeZone('UTC'))); | |
383 | |
384 $ev->add($dtStart); | |
385 | |
386 $vcal->add($ev); | |
387 | |
388 $it = new EventIterator($vcal,(string)$ev->uid); | |
389 | |
390 // Max is to prevent overflow | |
391 $max = 12; | |
392 $result = array(); | |
393 foreach($it as $item) { | |
394 | |
395 $result[] = $item; | |
396 $max--; | |
397 | |
398 if (!$max) break; | |
399 | |
400 } | |
401 | |
402 $tz = new DateTimeZone('UTC'); | |
403 | |
404 $this->assertEquals( | |
405 array( | |
406 new DateTime('2011-10-07', $tz), | |
407 new DateTime('2011-10-21', $tz), | |
408 new DateTime('2011-11-04', $tz), | |
409 new DateTime('2011-11-18', $tz), | |
410 new DateTime('2011-12-02', $tz), | |
411 new DateTime('2011-12-16', $tz), | |
412 new DateTime('2011-12-30', $tz), | |
413 new DateTime('2012-01-13', $tz), | |
414 new DateTime('2012-01-27', $tz), | |
415 new DateTime('2012-02-10', $tz), | |
416 ), | |
417 $result | |
418 ); | |
419 | |
420 } | |
421 | |
422 /** | |
423 * @depends testValues | |
424 */ | |
425 function testWeeklyByDayByHour() { | |
426 | |
427 $vcal = new VCalendar(); | |
428 $ev = $vcal->createComponent('VEVENT'); | |
429 | |
430 $ev->UID = 'bla'; | |
431 $ev->RRULE = 'FREQ=WEEKLY;INTERVAL=2;BYDAY=TU,WE,FR;WKST=MO;BYHOUR=8,9,10'; | |
432 $dtStart = $vcal->createProperty('DTSTART'); | |
433 $dtStart->setDateTime(new DateTime('2011-10-07 08:00:00', new DateTimeZone('UTC'))); | |
434 | |
435 $ev->add($dtStart); | |
436 | |
437 $vcal->add($ev); | |
438 | |
439 $it = new EventIterator($vcal,(string)$ev->uid); | |
440 | |
441 // Grabbing the next 12 items | |
442 $max = 15; | |
443 $result = array(); | |
444 foreach($it as $item) { | |
445 | |
446 $result[] = $item; | |
447 $max--; | |
448 | |
449 if (!$max) break; | |
450 | |
451 } | |
452 | |
453 $tz = new DateTimeZone('UTC'); | |
454 | |
455 $this->assertEquals( | |
456 array( | |
457 new DateTime('2011-10-07 08:00:00', $tz), | |
458 new DateTime('2011-10-07 09:00:00', $tz), | |
459 new DateTime('2011-10-07 10:00:00', $tz), | |
460 new DateTime('2011-10-18 08:00:00', $tz), | |
461 new DateTime('2011-10-18 09:00:00', $tz), | |
462 new DateTime('2011-10-18 10:00:00', $tz), | |
463 new DateTime('2011-10-19 08:00:00', $tz), | |
464 new DateTime('2011-10-19 09:00:00', $tz), | |
465 new DateTime('2011-10-19 10:00:00', $tz), | |
466 new DateTime('2011-10-21 08:00:00', $tz), | |
467 new DateTime('2011-10-21 09:00:00', $tz), | |
468 new DateTime('2011-10-21 10:00:00', $tz), | |
469 new DateTime('2011-11-01 08:00:00', $tz), | |
470 new DateTime('2011-11-01 09:00:00', $tz), | |
471 new DateTime('2011-11-01 10:00:00', $tz), | |
472 ), | |
473 $result | |
474 ); | |
475 | |
476 } | |
477 | |
478 /** | |
479 * @depends testValues | |
480 */ | |
481 function testWeeklyByDaySpecificHour() { | |
482 | |
483 $vcal = new VCalendar(); | |
484 $ev = $vcal->createComponent('VEVENT'); | |
485 | |
486 $ev->UID = 'bla'; | |
487 $ev->RRULE = 'FREQ=WEEKLY;INTERVAL=2;BYDAY=TU,WE,FR;WKST=SU'; | |
488 $dtStart = $vcal->createProperty('DTSTART'); | |
489 $dtStart->setDateTime(new DateTime('2011-10-07 18:00:00', new DateTimeZone('UTC'))); | |
490 | |
491 $ev->add($dtStart); | |
492 | |
493 $vcal->add($ev); | |
494 | |
495 $it = new EventIterator($vcal,(string)$ev->uid); | |
496 | |
497 // Grabbing the next 12 items | |
498 $max = 12; | |
499 $result = array(); | |
500 foreach($it as $item) { | |
501 | |
502 $result[] = $item; | |
503 $max--; | |
504 | |
505 if (!$max) break; | |
506 | |
507 } | |
508 | |
509 $tz = new DateTimeZone('UTC'); | |
510 | |
511 $this->assertEquals( | |
512 array( | |
513 new DateTime('2011-10-07 18:00:00', $tz), | |
514 new DateTime('2011-10-18 18:00:00', $tz), | |
515 new DateTime('2011-10-19 18:00:00', $tz), | |
516 new DateTime('2011-10-21 18:00:00', $tz), | |
517 new DateTime('2011-11-01 18:00:00', $tz), | |
518 new DateTime('2011-11-02 18:00:00', $tz), | |
519 new DateTime('2011-11-04 18:00:00', $tz), | |
520 new DateTime('2011-11-15 18:00:00', $tz), | |
521 new DateTime('2011-11-16 18:00:00', $tz), | |
522 new DateTime('2011-11-18 18:00:00', $tz), | |
523 new DateTime('2011-11-29 18:00:00', $tz), | |
524 new DateTime('2011-11-30 18:00:00', $tz), | |
525 ), | |
526 $result | |
527 ); | |
528 | |
529 } | |
530 | |
531 /** | |
532 * @depends testValues | |
533 */ | |
534 function testWeeklyByDay() { | |
535 | |
536 $vcal = new VCalendar(); | |
537 $ev = $vcal->createComponent('VEVENT'); | |
538 | |
539 $ev->UID = 'bla'; | |
540 $ev->RRULE = 'FREQ=WEEKLY;INTERVAL=2;BYDAY=TU,WE,FR;WKST=SU'; | |
541 $dtStart = $vcal->createProperty('DTSTART'); | |
542 $dtStart->setDateTime(new DateTime('2011-10-07', new DateTimeZone('UTC'))); | |
543 | |
544 $ev->add($dtStart); | |
545 | |
546 $vcal->add($ev); | |
547 | |
548 $it = new EventIterator($vcal,(string)$ev->uid); | |
549 | |
550 // Grabbing the next 12 items | |
551 $max = 12; | |
552 $result = array(); | |
553 foreach($it as $item) { | |
554 | |
555 $result[] = $item; | |
556 $max--; | |
557 | |
558 if (!$max) break; | |
559 | |
560 } | |
561 | |
562 $tz = new DateTimeZone('UTC'); | |
563 | |
564 $this->assertEquals( | |
565 array( | |
566 new DateTime('2011-10-07', $tz), | |
567 new DateTime('2011-10-18', $tz), | |
568 new DateTime('2011-10-19', $tz), | |
569 new DateTime('2011-10-21', $tz), | |
570 new DateTime('2011-11-01', $tz), | |
571 new DateTime('2011-11-02', $tz), | |
572 new DateTime('2011-11-04', $tz), | |
573 new DateTime('2011-11-15', $tz), | |
574 new DateTime('2011-11-16', $tz), | |
575 new DateTime('2011-11-18', $tz), | |
576 new DateTime('2011-11-29', $tz), | |
577 new DateTime('2011-11-30', $tz), | |
578 ), | |
579 $result | |
580 ); | |
581 | |
582 } | |
583 | |
584 /** | |
585 * @depends testValues | |
586 */ | |
587 function testMonthly() { | |
588 | |
589 $vcal = new VCalendar(); | |
590 $ev = $vcal->createComponent('VEVENT'); | |
591 | |
592 $ev->UID = 'bla'; | |
593 $ev->RRULE = 'FREQ=MONTHLY;INTERVAL=3;COUNT=5'; | |
594 $dtStart = $vcal->createProperty('DTSTART'); | |
595 $dtStart->setDateTime(new DateTime('2011-12-05', new DateTimeZone('UTC'))); | |
596 | |
597 $ev->add($dtStart); | |
598 | |
599 $vcal->add($ev); | |
600 | |
601 $it = new EventIterator($vcal,(string)$ev->uid); | |
602 | |
603 $max = 14; | |
604 $result = array(); | |
605 foreach($it as $item) { | |
606 | |
607 $result[] = $item; | |
608 $max--; | |
609 | |
610 if (!$max) break; | |
611 | |
612 } | |
613 | |
614 $tz = new DateTimeZone('UTC'); | |
615 | |
616 $this->assertEquals( | |
617 array( | |
618 new DateTime('2011-12-05', $tz), | |
619 new DateTime('2012-03-05', $tz), | |
620 new DateTime('2012-06-05', $tz), | |
621 new DateTime('2012-09-05', $tz), | |
622 new DateTime('2012-12-05', $tz), | |
623 ), | |
624 $result | |
625 ); | |
626 | |
627 | |
628 } | |
629 | |
630 /** | |
631 * @depends testValues | |
632 */ | |
633 function testMonthlyEndOfMonth() { | |
634 | |
635 $vcal = new VCalendar(); | |
636 $ev = $vcal->createComponent('VEVENT'); | |
637 | |
638 $ev->UID = 'bla'; | |
639 $ev->RRULE = 'FREQ=MONTHLY;INTERVAL=2;COUNT=12'; | |
640 $dtStart = $vcal->createProperty('DTSTART'); | |
641 $dtStart->setDateTime(new DateTime('2011-12-31', new DateTimeZone('UTC'))); | |
642 | |
643 $ev->add($dtStart); | |
644 | |
645 $vcal->add($ev); | |
646 | |
647 $it = new EventIterator($vcal,(string)$ev->uid); | |
648 | |
649 $max = 14; | |
650 $result = array(); | |
651 foreach($it as $item) { | |
652 | |
653 $result[] = $item; | |
654 $max--; | |
655 | |
656 if (!$max) break; | |
657 | |
658 } | |
659 | |
660 $tz = new DateTimeZone('UTC'); | |
661 | |
662 $this->assertEquals( | |
663 array( | |
664 new DateTime('2011-12-31', $tz), | |
665 new DateTime('2012-08-31', $tz), | |
666 new DateTime('2012-10-31', $tz), | |
667 new DateTime('2012-12-31', $tz), | |
668 new DateTime('2013-08-31', $tz), | |
669 new DateTime('2013-10-31', $tz), | |
670 new DateTime('2013-12-31', $tz), | |
671 new DateTime('2014-08-31', $tz), | |
672 new DateTime('2014-10-31', $tz), | |
673 new DateTime('2014-12-31', $tz), | |
674 new DateTime('2015-08-31', $tz), | |
675 new DateTime('2015-10-31', $tz), | |
676 ), | |
677 $result | |
678 ); | |
679 | |
680 | |
681 } | |
682 | |
683 /** | |
684 * @depends testValues | |
685 */ | |
686 function testMonthlyByMonthDay() { | |
687 | |
688 $vcal = new VCalendar(); | |
689 $ev = $vcal->createComponent('VEVENT'); | |
690 | |
691 $ev->UID = 'bla'; | |
692 $ev->RRULE = 'FREQ=MONTHLY;INTERVAL=5;COUNT=9;BYMONTHDAY=1,31,-7'; | |
693 $dtStart = $vcal->createProperty('DTSTART'); | |
694 $dtStart->setDateTime(new DateTime('2011-01-01', new DateTimeZone('UTC'))); | |
695 | |
696 $ev->add($dtStart); | |
697 | |
698 $vcal->add($ev); | |
699 | |
700 $it = new EventIterator($vcal,(string)$ev->uid); | |
701 | |
702 $max = 14; | |
703 $result = array(); | |
704 foreach($it as $item) { | |
705 | |
706 $result[] = $item; | |
707 $max--; | |
708 | |
709 if (!$max) break; | |
710 | |
711 } | |
712 | |
713 $tz = new DateTimeZone('UTC'); | |
714 | |
715 $this->assertEquals( | |
716 array( | |
717 new DateTime('2011-01-01', $tz), | |
718 new DateTime('2011-01-25', $tz), | |
719 new DateTime('2011-01-31', $tz), | |
720 new DateTime('2011-06-01', $tz), | |
721 new DateTime('2011-06-24', $tz), | |
722 new DateTime('2011-11-01', $tz), | |
723 new DateTime('2011-11-24', $tz), | |
724 new DateTime('2012-04-01', $tz), | |
725 new DateTime('2012-04-24', $tz), | |
726 ), | |
727 $result | |
728 ); | |
729 | |
730 } | |
731 | |
732 /** | |
733 * A pretty slow test. Had to be marked as 'medium' for phpunit to not die | |
734 * after 1 second. Would be good to optimize later. | |
735 * | |
736 * @depends testValues | |
737 * @medium | |
738 */ | |
739 function testMonthlyByDay() { | |
740 | |
741 $vcal = new VCalendar(); | |
742 $ev = $vcal->createComponent('VEVENT'); | |
743 | |
744 $ev->UID = 'bla'; | |
745 $ev->RRULE = 'FREQ=MONTHLY;INTERVAL=2;COUNT=16;BYDAY=MO,-2TU,+1WE,3TH'; | |
746 $dtStart = $vcal->createProperty('DTSTART'); | |
747 $dtStart->setDateTime(new DateTime('2011-01-03', new DateTimeZone('UTC'))); | |
748 | |
749 $ev->add($dtStart); | |
750 | |
751 $vcal->add($ev); | |
752 | |
753 $it = new EventIterator($vcal,(string)$ev->uid); | |
754 | |
755 $max = 20; | |
756 $result = array(); | |
757 foreach($it as $k=>$item) { | |
758 | |
759 $result[] = $item; | |
760 $max--; | |
761 | |
762 if (!$max) break; | |
763 | |
764 } | |
765 | |
766 $tz = new DateTimeZone('UTC'); | |
767 | |
768 $this->assertEquals( | |
769 array( | |
770 new DateTime('2011-01-03', $tz), | |
771 new DateTime('2011-01-05', $tz), | |
772 new DateTime('2011-01-10', $tz), | |
773 new DateTime('2011-01-17', $tz), | |
774 new DateTime('2011-01-18', $tz), | |
775 new DateTime('2011-01-20', $tz), | |
776 new DateTime('2011-01-24', $tz), | |
777 new DateTime('2011-01-31', $tz), | |
778 new DateTime('2011-03-02', $tz), | |
779 new DateTime('2011-03-07', $tz), | |
780 new DateTime('2011-03-14', $tz), | |
781 new DateTime('2011-03-17', $tz), | |
782 new DateTime('2011-03-21', $tz), | |
783 new DateTime('2011-03-22', $tz), | |
784 new DateTime('2011-03-28', $tz), | |
785 new DateTime('2011-05-02', $tz), | |
786 ), | |
787 $result | |
788 ); | |
789 | |
790 } | |
791 | |
792 /** | |
793 * @depends testValues | |
794 */ | |
795 function testMonthlyByDayByMonthDay() { | |
796 | |
797 $vcal = new VCalendar(); | |
798 $ev = $vcal->createComponent('VEVENT'); | |
799 | |
800 $ev->UID = 'bla'; | |
801 $ev->RRULE = 'FREQ=MONTHLY;COUNT=10;BYDAY=MO;BYMONTHDAY=1'; | |
802 $dtStart = $vcal->createProperty('DTSTART'); | |
803 $dtStart->setDateTime(new DateTime('2011-08-01', new DateTimeZone('UTC'))); | |
804 | |
805 $ev->add($dtStart); | |
806 | |
807 $vcal->add($ev); | |
808 | |
809 $it = new EventIterator($vcal,(string)$ev->uid); | |
810 | |
811 $max = 20; | |
812 $result = array(); | |
813 foreach($it as $k=>$item) { | |
814 | |
815 $result[] = $item; | |
816 $max--; | |
817 | |
818 if (!$max) break; | |
819 | |
820 } | |
821 | |
822 $tz = new DateTimeZone('UTC'); | |
823 | |
824 $this->assertEquals( | |
825 array( | |
826 new DateTime('2011-08-01', $tz), | |
827 new DateTime('2012-10-01', $tz), | |
828 new DateTime('2013-04-01', $tz), | |
829 new DateTime('2013-07-01', $tz), | |
830 new DateTime('2014-09-01', $tz), | |
831 new DateTime('2014-12-01', $tz), | |
832 new DateTime('2015-06-01', $tz), | |
833 new DateTime('2016-02-01', $tz), | |
834 new DateTime('2016-08-01', $tz), | |
835 new DateTime('2017-05-01', $tz), | |
836 ), | |
837 $result | |
838 ); | |
839 | |
840 } | |
841 | |
842 /** | |
843 * @depends testValues | |
844 */ | |
845 function testMonthlyByDayBySetPos() { | |
846 | |
847 $vcal = new VCalendar(); | |
848 $ev = $vcal->createComponent('VEVENT'); | |
849 | |
850 $ev->UID = 'bla'; | |
851 $ev->RRULE = 'FREQ=MONTHLY;COUNT=10;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=1,-1'; | |
852 $dtStart = $vcal->createProperty('DTSTART'); | |
853 $dtStart->setDateTime(new DateTime('2011-01-03', new DateTimeZone('UTC'))); | |
854 | |
855 $ev->add($dtStart); | |
856 | |
857 $vcal->add($ev); | |
858 | |
859 $it = new EventIterator($vcal,(string)$ev->uid); | |
860 | |
861 $max = 20; | |
862 $result = array(); | |
863 foreach($it as $k=>$item) { | |
864 | |
865 $result[] = $item; | |
866 $max--; | |
867 | |
868 if (!$max) break; | |
869 | |
870 } | |
871 | |
872 $tz = new DateTimeZone('UTC'); | |
873 | |
874 $this->assertEquals( | |
875 array( | |
876 new DateTime('2011-01-03', $tz), | |
877 new DateTime('2011-01-31', $tz), | |
878 new DateTime('2011-02-01', $tz), | |
879 new DateTime('2011-02-28', $tz), | |
880 new DateTime('2011-03-01', $tz), | |
881 new DateTime('2011-03-31', $tz), | |
882 new DateTime('2011-04-01', $tz), | |
883 new DateTime('2011-04-29', $tz), | |
884 new DateTime('2011-05-02', $tz), | |
885 new DateTime('2011-05-31', $tz), | |
886 ), | |
887 $result | |
888 ); | |
889 | |
890 } | |
891 | |
892 /** | |
893 * @depends testValues | |
894 */ | |
895 function testYearly() { | |
896 | |
897 $vcal = new VCalendar(); | |
898 $ev = $vcal->createComponent('VEVENT'); | |
899 | |
900 $ev->UID = 'bla'; | |
901 $ev->RRULE = 'FREQ=YEARLY;COUNT=10;INTERVAL=3'; | |
902 $dtStart = $vcal->createProperty('DTSTART'); | |
903 $dtStart->setDateTime(new DateTime('2011-01-01', new DateTimeZone('UTC'))); | |
904 | |
905 $ev->add($dtStart); | |
906 | |
907 $vcal->add($ev); | |
908 | |
909 $it = new EventIterator($vcal,(string)$ev->uid); | |
910 | |
911 $max = 20; | |
912 $result = array(); | |
913 foreach($it as $k=>$item) { | |
914 | |
915 $result[] = $item; | |
916 $max--; | |
917 | |
918 if (!$max) break; | |
919 | |
920 } | |
921 | |
922 $tz = new DateTimeZone('UTC'); | |
923 | |
924 $this->assertEquals( | |
925 array( | |
926 new DateTime('2011-01-01', $tz), | |
927 new DateTime('2014-01-01', $tz), | |
928 new DateTime('2017-01-01', $tz), | |
929 new DateTime('2020-01-01', $tz), | |
930 new DateTime('2023-01-01', $tz), | |
931 new DateTime('2026-01-01', $tz), | |
932 new DateTime('2029-01-01', $tz), | |
933 new DateTime('2032-01-01', $tz), | |
934 new DateTime('2035-01-01', $tz), | |
935 new DateTime('2038-01-01', $tz), | |
936 ), | |
937 $result | |
938 ); | |
939 | |
940 } | |
941 | |
942 /** | |
943 * @depends testValues | |
944 */ | |
945 function testYearlyLeapYear() { | |
946 | |
947 $vcal = new VCalendar(); | |
948 $ev = $vcal->createComponent('VEVENT'); | |
949 | |
950 $ev->UID = 'bla'; | |
951 $ev->RRULE = 'FREQ=YEARLY;COUNT=3'; | |
952 $dtStart = $vcal->createProperty('DTSTART'); | |
953 $dtStart->setDateTime(new DateTime('2012-02-29', new DateTimeZone('UTC'))); | |
954 | |
955 $ev->add($dtStart); | |
956 | |
957 $vcal->add($ev); | |
958 | |
959 $it = new EventIterator($vcal,(string)$ev->uid); | |
960 | |
961 $max = 20; | |
962 $result = array(); | |
963 foreach($it as $k=>$item) { | |
964 | |
965 $result[] = $item; | |
966 $max--; | |
967 | |
968 if (!$max) break; | |
969 | |
970 } | |
971 | |
972 $tz = new DateTimeZone('UTC'); | |
973 | |
974 $this->assertEquals( | |
975 array( | |
976 new DateTime('2012-02-29', $tz), | |
977 new DateTime('2016-02-29', $tz), | |
978 new DateTime('2020-02-29', $tz), | |
979 ), | |
980 $result | |
981 ); | |
982 | |
983 } | |
984 | |
985 /** | |
986 * @depends testValues | |
987 */ | |
988 function testYearlyByMonth() { | |
989 | |
990 $vcal = new VCalendar(); | |
991 $ev = $vcal->createComponent('VEVENT'); | |
992 | |
993 $ev->UID = 'bla'; | |
994 $ev->RRULE = 'FREQ=YEARLY;COUNT=8;INTERVAL=4;BYMONTH=4,10'; | |
995 $dtStart = $vcal->createProperty('DTSTART'); | |
996 $dtStart->setDateTime(new DateTime('2011-04-07', new DateTimeZone('UTC'))); | |
997 | |
998 $ev->add($dtStart); | |
999 | |
1000 $vcal->add($ev); | |
1001 | |
1002 $it = new EventIterator($vcal,(string)$ev->uid); | |
1003 | |
1004 $max = 20; | |
1005 $result = array(); | |
1006 foreach($it as $k=>$item) { | |
1007 | |
1008 $result[] = $item; | |
1009 $max--; | |
1010 | |
1011 if (!$max) break; | |
1012 | |
1013 } | |
1014 | |
1015 $tz = new DateTimeZone('UTC'); | |
1016 | |
1017 $this->assertEquals( | |
1018 array( | |
1019 new DateTime('2011-04-07', $tz), | |
1020 new DateTime('2011-10-07', $tz), | |
1021 new DateTime('2015-04-07', $tz), | |
1022 new DateTime('2015-10-07', $tz), | |
1023 new DateTime('2019-04-07', $tz), | |
1024 new DateTime('2019-10-07', $tz), | |
1025 new DateTime('2023-04-07', $tz), | |
1026 new DateTime('2023-10-07', $tz), | |
1027 ), | |
1028 $result | |
1029 ); | |
1030 | |
1031 } | |
1032 | |
1033 /** | |
1034 * @depends testValues | |
1035 */ | |
1036 function testYearlyByMonthByDay() { | |
1037 | |
1038 $vcal = new VCalendar(); | |
1039 $ev = $vcal->createComponent('VEVENT'); | |
1040 | |
1041 $ev->UID = 'bla'; | |
1042 $ev->RRULE = 'FREQ=YEARLY;COUNT=8;INTERVAL=5;BYMONTH=4,10;BYDAY=1MO,-1SU'; | |
1043 $dtStart = $vcal->createProperty('DTSTART'); | |
1044 $dtStart->setDateTime(new DateTime('2011-04-04', new DateTimeZone('UTC'))); | |
1045 | |
1046 $ev->add($dtStart); | |
1047 | |
1048 $vcal->add($ev); | |
1049 | |
1050 $it = new EventIterator($vcal,(string)$ev->uid); | |
1051 | |
1052 $max = 20; | |
1053 $result = array(); | |
1054 foreach($it as $k=>$item) { | |
1055 | |
1056 $result[] = $item; | |
1057 $max--; | |
1058 | |
1059 if (!$max) break; | |
1060 | |
1061 } | |
1062 | |
1063 $tz = new DateTimeZone('UTC'); | |
1064 | |
1065 $this->assertEquals( | |
1066 array( | |
1067 new DateTime('2011-04-04', $tz), | |
1068 new DateTime('2011-04-24', $tz), | |
1069 new DateTime('2011-10-03', $tz), | |
1070 new DateTime('2011-10-30', $tz), | |
1071 new DateTime('2016-04-04', $tz), | |
1072 new DateTime('2016-04-24', $tz), | |
1073 new DateTime('2016-10-03', $tz), | |
1074 new DateTime('2016-10-30', $tz), | |
1075 ), | |
1076 $result | |
1077 ); | |
1078 | |
1079 } | |
1080 | |
1081 /** | |
1082 * @depends testValues | |
1083 */ | |
1084 function testFastForward() { | |
1085 | |
1086 $vcal = new VCalendar(); | |
1087 $ev = $vcal->createComponent('VEVENT'); | |
1088 | |
1089 $ev->UID = 'bla'; | |
1090 $ev->RRULE = 'FREQ=YEARLY;COUNT=8;INTERVAL=5;BYMONTH=4,10;BYDAY=1MO,-1SU'; | |
1091 $dtStart = $vcal->createProperty('DTSTART'); | |
1092 $dtStart->setDateTime(new DateTime('2011-04-04', new DateTimeZone('UTC'))); | |
1093 | |
1094 $ev->add($dtStart); | |
1095 | |
1096 $vcal->add($ev); | |
1097 | |
1098 $it = new EventIterator($vcal,(string)$ev->uid); | |
1099 | |
1100 // The idea is that we're fast-forwarding too far in the future, so | |
1101 // there will be no results left. | |
1102 $it->fastForward(new DateTime('2020-05-05', new DateTimeZone('UTC'))); | |
1103 | |
1104 $max = 20; | |
1105 $result = array(); | |
1106 while($item = $it->current()) { | |
1107 | |
1108 $result[] = $item; | |
1109 $max--; | |
1110 | |
1111 if (!$max) break; | |
1112 $it->next(); | |
1113 | |
1114 } | |
1115 | |
1116 $tz = new DateTimeZone('UTC'); | |
1117 $this->assertEquals(array(), $result); | |
1118 | |
1119 } | |
1120 | |
1121 /** | |
1122 * @depends testValues | |
1123 */ | |
1124 function testComplexExclusions() { | |
1125 | |
1126 $vcal = new VCalendar(); | |
1127 $ev = $vcal->createComponent('VEVENT'); | |
1128 | |
1129 $ev->UID = 'bla'; | |
1130 $ev->RRULE = 'FREQ=YEARLY;COUNT=10'; | |
1131 $dtStart = $vcal->createProperty('DTSTART'); | |
1132 | |
1133 $tz = new DateTimeZone('Canada/Eastern'); | |
1134 $dtStart->setDateTime(new DateTime('2011-01-01 13:50:20', $tz)); | |
1135 | |
1136 $exDate1 = $vcal->createProperty('EXDATE'); | |
1137 $exDate1->setDateTimes(array(new DateTime('2012-01-01 13:50:20', $tz), new DateTime('2014-01-01 13:50:20', $tz))); | |
1138 $exDate2 = $vcal->createProperty('EXDATE'); | |
1139 $exDate2->setDateTimes(array(new DateTime('2016-01-01 13:50:20', $tz))); | |
1140 | |
1141 $ev->add($dtStart); | |
1142 $ev->add($exDate1); | |
1143 $ev->add($exDate2); | |
1144 | |
1145 $vcal->add($ev); | |
1146 | |
1147 $it = new EventIterator($vcal,(string)$ev->uid); | |
1148 | |
1149 $max = 20; | |
1150 $result = array(); | |
1151 foreach($it as $k=>$item) { | |
1152 | |
1153 $result[] = $item; | |
1154 $max--; | |
1155 | |
1156 if (!$max) break; | |
1157 | |
1158 } | |
1159 | |
1160 $this->assertEquals( | |
1161 array( | |
1162 new DateTime('2011-01-01 13:50:20', $tz), | |
1163 new DateTime('2013-01-01 13:50:20', $tz), | |
1164 new DateTime('2015-01-01 13:50:20', $tz), | |
1165 new DateTime('2017-01-01 13:50:20', $tz), | |
1166 new DateTime('2018-01-01 13:50:20', $tz), | |
1167 new DateTime('2019-01-01 13:50:20', $tz), | |
1168 new DateTime('2020-01-01 13:50:20', $tz), | |
1169 ), | |
1170 $result | |
1171 ); | |
1172 | |
1173 } | |
1174 | |
1175 /** | |
1176 * @depends testValues | |
1177 */ | |
1178 function testOverridenEvent() { | |
1179 | |
1180 $vcal = new VCalendar(); | |
1181 | |
1182 $ev1 = $vcal->createComponent('VEVENT'); | |
1183 $ev1->UID = 'overridden'; | |
1184 $ev1->RRULE = 'FREQ=DAILY;COUNT=10'; | |
1185 $ev1->DTSTART = '20120107T120000Z'; | |
1186 $ev1->SUMMARY = 'baseEvent'; | |
1187 | |
1188 $vcal->add($ev1); | |
1189 | |
1190 // ev2 overrides an event, and puts it on 2pm instead. | |
1191 $ev2 = $vcal->createComponent('VEVENT'); | |
1192 $ev2->UID = 'overridden'; | |
1193 $ev2->{'RECURRENCE-ID'} = '20120110T120000Z'; | |
1194 $ev2->DTSTART = '20120110T140000Z'; | |
1195 $ev2->SUMMARY = 'Event 2'; | |
1196 | |
1197 $vcal->add($ev2); | |
1198 | |
1199 // ev3 overrides an event, and puts it 2 days and 2 hours later | |
1200 $ev3 = $vcal->createComponent('VEVENT'); | |
1201 $ev3->UID = 'overridden'; | |
1202 $ev3->{'RECURRENCE-ID'} = '20120113T120000Z'; | |
1203 $ev3->DTSTART = '20120115T140000Z'; | |
1204 $ev3->SUMMARY = 'Event 3'; | |
1205 | |
1206 $vcal->add($ev3); | |
1207 | |
1208 $it = new EventIterator($vcal,'overridden'); | |
1209 | |
1210 $dates = array(); | |
1211 $summaries = array(); | |
1212 while($it->valid()) { | |
1213 | |
1214 $dates[] = $it->getDTStart(); | |
1215 $summaries[] = (string)$it->getEventObject()->SUMMARY; | |
1216 $it->next(); | |
1217 | |
1218 } | |
1219 | |
1220 $tz = new DateTimeZone('UTC'); | |
1221 $this->assertEquals(array( | |
1222 new DateTime('2012-01-07 12:00:00',$tz), | |
1223 new DateTime('2012-01-08 12:00:00',$tz), | |
1224 new DateTime('2012-01-09 12:00:00',$tz), | |
1225 new DateTime('2012-01-10 14:00:00',$tz), | |
1226 new DateTime('2012-01-11 12:00:00',$tz), | |
1227 new DateTime('2012-01-12 12:00:00',$tz), | |
1228 new DateTime('2012-01-14 12:00:00',$tz), | |
1229 new DateTime('2012-01-15 12:00:00',$tz), | |
1230 new DateTime('2012-01-15 14:00:00',$tz), | |
1231 new DateTime('2012-01-16 12:00:00',$tz), | |
1232 ), $dates); | |
1233 | |
1234 $this->assertEquals(array( | |
1235 'baseEvent', | |
1236 'baseEvent', | |
1237 'baseEvent', | |
1238 'Event 2', | |
1239 'baseEvent', | |
1240 'baseEvent', | |
1241 'baseEvent', | |
1242 'baseEvent', | |
1243 'Event 3', | |
1244 'baseEvent', | |
1245 ), $summaries); | |
1246 | |
1247 } | |
1248 | |
1249 /** | |
1250 * @depends testValues | |
1251 */ | |
1252 function testOverridenEvent2() { | |
1253 | |
1254 $vcal = new VCalendar(); | |
1255 | |
1256 $ev1 = $vcal->createComponent('VEVENT'); | |
1257 $ev1->UID = 'overridden'; | |
1258 $ev1->RRULE = 'FREQ=WEEKLY;COUNT=3'; | |
1259 $ev1->DTSTART = '20120112T120000Z'; | |
1260 $ev1->SUMMARY = 'baseEvent'; | |
1261 | |
1262 $vcal->add($ev1); | |
1263 | |
1264 // ev2 overrides an event, and puts it 6 days earlier instead. | |
1265 $ev2 = $vcal->createComponent('VEVENT'); | |
1266 $ev2->UID = 'overridden'; | |
1267 $ev2->{'RECURRENCE-ID'} = '20120119T120000Z'; | |
1268 $ev2->DTSTART = '20120113T120000Z'; | |
1269 $ev2->SUMMARY = 'Override!'; | |
1270 | |
1271 $vcal->add($ev2); | |
1272 | |
1273 $it = new EventIterator($vcal,'overridden'); | |
1274 | |
1275 $dates = array(); | |
1276 $summaries = array(); | |
1277 while($it->valid()) { | |
1278 | |
1279 $dates[] = $it->getDTStart(); | |
1280 $summaries[] = (string)$it->getEventObject()->SUMMARY; | |
1281 $it->next(); | |
1282 | |
1283 } | |
1284 | |
1285 $tz = new DateTimeZone('UTC'); | |
1286 $this->assertEquals(array( | |
1287 new DateTime('2012-01-12 12:00:00',$tz), | |
1288 new DateTime('2012-01-13 12:00:00',$tz), | |
1289 new DateTime('2012-01-26 12:00:00',$tz), | |
1290 | |
1291 ), $dates); | |
1292 | |
1293 $this->assertEquals(array( | |
1294 'baseEvent', | |
1295 'Override!', | |
1296 'baseEvent', | |
1297 ), $summaries); | |
1298 | |
1299 } | |
1300 | |
1301 /** | |
1302 * @depends testValues | |
1303 */ | |
1304 function testOverridenEventNoValuesExpected() { | |
1305 | |
1306 $vcal = new VCalendar(); | |
1307 $ev1 = $vcal->createComponent('VEVENT'); | |
1308 | |
1309 $ev1->UID = 'overridden'; | |
1310 $ev1->RRULE = 'FREQ=WEEKLY;COUNT=3'; | |
1311 $ev1->DTSTART = '20120124T120000Z'; | |
1312 $ev1->SUMMARY = 'baseEvent'; | |
1313 | |
1314 $vcal->add($ev1); | |
1315 | |
1316 // ev2 overrides an event, and puts it 6 days earlier instead. | |
1317 $ev2 = $vcal->createComponent('VEVENT'); | |
1318 $ev2->UID = 'overridden'; | |
1319 $ev2->{'RECURRENCE-ID'} = '20120131T120000Z'; | |
1320 $ev2->DTSTART = '20120125T120000Z'; | |
1321 $ev2->SUMMARY = 'Override!'; | |
1322 | |
1323 $vcal->add($ev2); | |
1324 | |
1325 $it = new EventIterator($vcal,'overridden'); | |
1326 | |
1327 $dates = array(); | |
1328 $summaries = array(); | |
1329 | |
1330 // The reported problem was specifically related to the VCALENDAR | |
1331 // expansion. In this parcitular case, we had to forward to the 28th of | |
1332 // january. | |
1333 $it->fastForward(new DateTime('2012-01-28 23:00:00')); | |
1334 | |
1335 // We stop the loop when it hits the 6th of februari. Normally this | |
1336 // iterator would hit 24, 25 (overriden from 31) and 7 feb but because | |
1337 // we 'filter' from the 28th till the 6th, we should get 0 results. | |
1338 while($it->valid() && $it->getDTSTart() < new DateTime('2012-02-06 23:00:00')) { | |
1339 | |
1340 $dates[] = $it->getDTStart(); | |
1341 $summaries[] = (string)$it->getEventObject()->SUMMARY; | |
1342 $it->next(); | |
1343 | |
1344 } | |
1345 | |
1346 $this->assertEquals(array(), $dates); | |
1347 $this->assertEquals(array(), $summaries); | |
1348 | |
1349 } | |
1350 | |
1351 /** | |
1352 * @depends testValues | |
1353 */ | |
1354 function testRDATE() { | |
1355 | |
1356 $vcal = new VCalendar(); | |
1357 $ev = $vcal->createComponent('VEVENT'); | |
1358 | |
1359 $ev->UID = 'bla'; | |
1360 $ev->RDATE = array( | |
1361 new DateTime('2014-08-07', new DateTimeZone('UTC')), | |
1362 new DateTime('2014-08-08', new DateTimeZone('UTC')), | |
1363 ); | |
1364 $dtStart = $vcal->createProperty('DTSTART'); | |
1365 $dtStart->setDateTime(new DateTime('2011-10-07', new DateTimeZone('UTC'))); | |
1366 | |
1367 $ev->add($dtStart); | |
1368 | |
1369 $vcal->add($ev); | |
1370 | |
1371 $it = new EventIterator($vcal,$ev->uid); | |
1372 | |
1373 // Max is to prevent overflow | |
1374 $max = 12; | |
1375 $result = array(); | |
1376 foreach($it as $item) { | |
1377 | |
1378 $result[] = $item; | |
1379 $max--; | |
1380 | |
1381 if (!$max) break; | |
1382 | |
1383 } | |
1384 | |
1385 $tz = new DateTimeZone('UTC'); | |
1386 | |
1387 $this->assertEquals( | |
1388 array( | |
1389 new DateTime('2011-10-07', $tz), | |
1390 new DateTime('2014-08-07', $tz), | |
1391 new DateTime('2014-08-08', $tz), | |
1392 ), | |
1393 $result | |
1394 ); | |
1395 | |
1396 } | |
1397 | |
1398 /** | |
1399 * @depends testValues | |
1400 * @expectedException \InvalidArgumentException | |
1401 */ | |
1402 function testNoMasterBadUID() { | |
1403 | |
1404 $vcal = new VCalendar(); | |
1405 // ev2 overrides an event, and puts it on 2pm instead. | |
1406 $ev2 = $vcal->createComponent('VEVENT'); | |
1407 $ev2->UID = 'overridden'; | |
1408 $ev2->{'RECURRENCE-ID'} = '20120110T120000Z'; | |
1409 $ev2->DTSTART = '20120110T140000Z'; | |
1410 $ev2->SUMMARY = 'Event 2'; | |
1411 | |
1412 $vcal->add($ev2); | |
1413 | |
1414 // ev3 overrides an event, and puts it 2 days and 2 hours later | |
1415 $ev3 = $vcal->createComponent('VEVENT'); | |
1416 $ev3->UID = 'overridden'; | |
1417 $ev3->{'RECURRENCE-ID'} = '20120113T120000Z'; | |
1418 $ev3->DTSTART = '20120115T140000Z'; | |
1419 $ev3->SUMMARY = 'Event 3'; | |
1420 | |
1421 $vcal->add($ev3); | |
1422 | |
1423 $it = new EventIterator($vcal,'broken'); | |
1424 | |
1425 } | |
1426 } | |
1427 |