xref: /plugin/davcal/vendor/sabre/vobject/tests/VObject/Component/VEventTest.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
1*a1a3b679SAndreas Boehler<?php
2*a1a3b679SAndreas Boehler
3*a1a3b679SAndreas Boehlernamespace Sabre\VObject\Component;
4*a1a3b679SAndreas Boehler
5*a1a3b679SAndreas Boehleruse Sabre\VObject;
6*a1a3b679SAndreas Boehler
7*a1a3b679SAndreas Boehlerclass VEventTest extends \PHPUnit_Framework_TestCase {
8*a1a3b679SAndreas Boehler
9*a1a3b679SAndreas Boehler    /**
10*a1a3b679SAndreas Boehler     * @dataProvider timeRangeTestData
11*a1a3b679SAndreas Boehler     */
12*a1a3b679SAndreas Boehler    public function testInTimeRange(VEvent $vevent,$start,$end,$outcome) {
13*a1a3b679SAndreas Boehler
14*a1a3b679SAndreas Boehler        $this->assertEquals($outcome, $vevent->isInTimeRange($start, $end));
15*a1a3b679SAndreas Boehler
16*a1a3b679SAndreas Boehler    }
17*a1a3b679SAndreas Boehler
18*a1a3b679SAndreas Boehler    public function timeRangeTestData() {
19*a1a3b679SAndreas Boehler
20*a1a3b679SAndreas Boehler        $tests = array();
21*a1a3b679SAndreas Boehler
22*a1a3b679SAndreas Boehler        $calendar = new VCalendar();
23*a1a3b679SAndreas Boehler
24*a1a3b679SAndreas Boehler        $vevent = $calendar->createComponent('VEVENT');
25*a1a3b679SAndreas Boehler        $vevent->DTSTART = '20111223T120000Z';
26*a1a3b679SAndreas Boehler        $tests[] = array($vevent, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true);
27*a1a3b679SAndreas Boehler        $tests[] = array($vevent, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), false);
28*a1a3b679SAndreas Boehler
29*a1a3b679SAndreas Boehler        $vevent2 = clone $vevent;
30*a1a3b679SAndreas Boehler        $vevent2->DTEND = '20111225T120000Z';
31*a1a3b679SAndreas Boehler        $tests[] = array($vevent2, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true);
32*a1a3b679SAndreas Boehler        $tests[] = array($vevent2, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), false);
33*a1a3b679SAndreas Boehler
34*a1a3b679SAndreas Boehler        $vevent3 = clone $vevent;
35*a1a3b679SAndreas Boehler        $vevent3->DURATION = 'P1D';
36*a1a3b679SAndreas Boehler        $tests[] = array($vevent3, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true);
37*a1a3b679SAndreas Boehler        $tests[] = array($vevent3, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), false);
38*a1a3b679SAndreas Boehler
39*a1a3b679SAndreas Boehler        $vevent4 = clone $vevent;
40*a1a3b679SAndreas Boehler        $vevent4->DTSTART = '20111225';
41*a1a3b679SAndreas Boehler        $vevent4->DTSTART['VALUE'] = 'DATE';
42*a1a3b679SAndreas Boehler        $tests[] = array($vevent4, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true);
43*a1a3b679SAndreas Boehler        $tests[] = array($vevent4, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), false);
44*a1a3b679SAndreas Boehler        // Event with no end date should be treated as lasting the entire day.
45*a1a3b679SAndreas Boehler        $tests[] = array($vevent4, new \DateTime('2011-12-25 16:00:00'), new \DateTime('2011-12-25 17:00:00'), true);
46*a1a3b679SAndreas Boehler        // DTEND is non inclusive so all day events should not be returned on the next day.
47*a1a3b679SAndreas Boehler        $tests[] = array($vevent4, new \DateTime('2011-12-26 00:00:00'), new \DateTime('2011-12-26 17:00:00'), false);
48*a1a3b679SAndreas Boehler        // The timezone of timerange in question also needs to be considered.
49*a1a3b679SAndreas Boehler        $tests[] = array($vevent4, new \DateTime('2011-12-26 00:00:00', new \DateTimeZone('Europe/Berlin')), new \DateTime('2011-12-26 17:00:00', new \DateTimeZone('Europe/Berlin')), false);
50*a1a3b679SAndreas Boehler
51*a1a3b679SAndreas Boehler        $vevent5 = clone $vevent;
52*a1a3b679SAndreas Boehler        $vevent5->DURATION = 'P1D';
53*a1a3b679SAndreas Boehler        $vevent5->RRULE = 'FREQ=YEARLY';
54*a1a3b679SAndreas Boehler        $tests[] = array($vevent5, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true);
55*a1a3b679SAndreas Boehler        $tests[] = array($vevent5, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), false);
56*a1a3b679SAndreas Boehler        $tests[] = array($vevent5, new \DateTime('2013-12-01'), new \DateTime('2013-12-31'), true);
57*a1a3b679SAndreas Boehler
58*a1a3b679SAndreas Boehler        $vevent6 = clone $vevent;
59*a1a3b679SAndreas Boehler        $vevent6->DTSTART = '20111225';
60*a1a3b679SAndreas Boehler        $vevent6->DTSTART['VALUE'] = 'DATE';
61*a1a3b679SAndreas Boehler        $vevent6->DTEND   = '20111225';
62*a1a3b679SAndreas Boehler        $vevent6->DTEND['VALUE'] = 'DATE';
63*a1a3b679SAndreas Boehler
64*a1a3b679SAndreas Boehler        $tests[] = array($vevent6, new \DateTime('2011-01-01'), new \DateTime('2012-01-01'), true);
65*a1a3b679SAndreas Boehler        $tests[] = array($vevent6, new \DateTime('2011-01-01'), new \DateTime('2011-11-01'), false);
66*a1a3b679SAndreas Boehler
67*a1a3b679SAndreas Boehler        // Added this test to ensure that recurrence rules with no DTEND also
68*a1a3b679SAndreas Boehler        // get checked for the entire day.
69*a1a3b679SAndreas Boehler        $vevent7 = clone $vevent;
70*a1a3b679SAndreas Boehler        $vevent7->DTSTART = '20120101';
71*a1a3b679SAndreas Boehler        $vevent7->DTSTART['VALUE'] = 'DATE';
72*a1a3b679SAndreas Boehler        $vevent7->RRULE = 'FREQ=MONTHLY';
73*a1a3b679SAndreas Boehler        $tests[] = array($vevent7, new \DateTime('2012-02-01 15:00:00'), new \DateTime('2012-02-02'), true);
74*a1a3b679SAndreas Boehler        // The timezone of timerange in question should also be considered.
75*a1a3b679SAndreas Boehler
76*a1a3b679SAndreas Boehler        // Added this test to check recurring events that have no instances.
77*a1a3b679SAndreas Boehler        $vevent8 = clone $vevent;
78*a1a3b679SAndreas Boehler        $vevent8->DTSTART = '20130329T140000';
79*a1a3b679SAndreas Boehler        $vevent8->DTEND = '20130329T153000';
80*a1a3b679SAndreas Boehler        $vevent8->RRULE = array('FREQ' => 'WEEKLY', 'BYDAY' => array('FR'), 'UNTIL' => '20130412T115959Z');
81*a1a3b679SAndreas Boehler        $vevent8->add('EXDATE', '20130405T140000');
82*a1a3b679SAndreas Boehler        $vevent8->add('EXDATE', '20130329T140000');
83*a1a3b679SAndreas Boehler        $tests[] = array($vevent8, new \DateTime('2013-03-01'), new \DateTime('2013-04-01'), false);
84*a1a3b679SAndreas Boehler
85*a1a3b679SAndreas Boehler        return $tests;
86*a1a3b679SAndreas Boehler
87*a1a3b679SAndreas Boehler    }
88*a1a3b679SAndreas Boehler
89*a1a3b679SAndreas Boehler}
90*a1a3b679SAndreas Boehler
91