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