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