1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\VObject; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehlerclass FreeBusyGeneratorTest extends \PHPUnit_Framework_TestCase { 6*a1a3b679SAndreas Boehler 7*a1a3b679SAndreas Boehler function getInput() { 8*a1a3b679SAndreas Boehler 9*a1a3b679SAndreas Boehler $tests = array(); 10*a1a3b679SAndreas Boehler 11*a1a3b679SAndreas Boehler $blob = <<<ICS 12*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 13*a1a3b679SAndreas BoehlerBEGIN:VEVENT 14*a1a3b679SAndreas BoehlerUID:foobar 15*a1a3b679SAndreas BoehlerDTSTART:20110101T120000Z 16*a1a3b679SAndreas BoehlerDTEND:20110101T130000Z 17*a1a3b679SAndreas BoehlerEND:VEVENT 18*a1a3b679SAndreas BoehlerEND:VCALENDAR 19*a1a3b679SAndreas BoehlerICS; 20*a1a3b679SAndreas Boehler 21*a1a3b679SAndreas Boehler $tests[] = array( 22*a1a3b679SAndreas Boehler $blob, 23*a1a3b679SAndreas Boehler "20110101T120000Z/20110101T130000Z" 24*a1a3b679SAndreas Boehler ); 25*a1a3b679SAndreas Boehler 26*a1a3b679SAndreas Boehler // opaque, shows up 27*a1a3b679SAndreas Boehler $blob = <<<ICS 28*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 29*a1a3b679SAndreas BoehlerBEGIN:VEVENT 30*a1a3b679SAndreas BoehlerUID:foobar2 31*a1a3b679SAndreas BoehlerTRANSP:OPAQUE 32*a1a3b679SAndreas BoehlerDTSTART:20110101T130000Z 33*a1a3b679SAndreas BoehlerDTEND:20110101T140000Z 34*a1a3b679SAndreas BoehlerEND:VEVENT 35*a1a3b679SAndreas BoehlerEND:VCALENDAR 36*a1a3b679SAndreas BoehlerICS; 37*a1a3b679SAndreas Boehler 38*a1a3b679SAndreas Boehler $tests[] = array( 39*a1a3b679SAndreas Boehler $blob, 40*a1a3b679SAndreas Boehler "20110101T130000Z/20110101T140000Z" 41*a1a3b679SAndreas Boehler ); 42*a1a3b679SAndreas Boehler 43*a1a3b679SAndreas Boehler // transparent, hidden 44*a1a3b679SAndreas Boehler $blob = <<<ICS 45*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 46*a1a3b679SAndreas BoehlerBEGIN:VEVENT 47*a1a3b679SAndreas BoehlerUID:foobar3 48*a1a3b679SAndreas BoehlerTRANSP:TRANSPARENT 49*a1a3b679SAndreas BoehlerDTSTART:20110101T140000Z 50*a1a3b679SAndreas BoehlerDTEND:20110101T150000Z 51*a1a3b679SAndreas BoehlerEND:VEVENT 52*a1a3b679SAndreas BoehlerEND:VCALENDAR 53*a1a3b679SAndreas BoehlerICS; 54*a1a3b679SAndreas Boehler 55*a1a3b679SAndreas Boehler $tests[] = array( 56*a1a3b679SAndreas Boehler $blob, 57*a1a3b679SAndreas Boehler null, 58*a1a3b679SAndreas Boehler ); 59*a1a3b679SAndreas Boehler 60*a1a3b679SAndreas Boehler // cancelled, hidden 61*a1a3b679SAndreas Boehler $blob = <<<ICS 62*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 63*a1a3b679SAndreas BoehlerBEGIN:VEVENT 64*a1a3b679SAndreas BoehlerUID:foobar4 65*a1a3b679SAndreas BoehlerSTATUS:CANCELLED 66*a1a3b679SAndreas BoehlerDTSTART:20110101T160000Z 67*a1a3b679SAndreas BoehlerDTEND:20110101T170000Z 68*a1a3b679SAndreas BoehlerEND:VEVENT 69*a1a3b679SAndreas BoehlerEND:VCALENDAR 70*a1a3b679SAndreas BoehlerICS; 71*a1a3b679SAndreas Boehler 72*a1a3b679SAndreas Boehler $tests[] = array( 73*a1a3b679SAndreas Boehler $blob, 74*a1a3b679SAndreas Boehler null, 75*a1a3b679SAndreas Boehler ); 76*a1a3b679SAndreas Boehler 77*a1a3b679SAndreas Boehler // tentative, shows up 78*a1a3b679SAndreas Boehler $blob = <<<ICS 79*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 80*a1a3b679SAndreas BoehlerBEGIN:VEVENT 81*a1a3b679SAndreas BoehlerUID:foobar5 82*a1a3b679SAndreas BoehlerSTATUS:TENTATIVE 83*a1a3b679SAndreas BoehlerDTSTART:20110101T180000Z 84*a1a3b679SAndreas BoehlerDTEND:20110101T190000Z 85*a1a3b679SAndreas BoehlerEND:VEVENT 86*a1a3b679SAndreas BoehlerEND:VCALENDAR 87*a1a3b679SAndreas BoehlerICS; 88*a1a3b679SAndreas Boehler 89*a1a3b679SAndreas Boehler $tests[] = array( 90*a1a3b679SAndreas Boehler $blob, 91*a1a3b679SAndreas Boehler '20110101T180000Z/20110101T190000Z', 92*a1a3b679SAndreas Boehler ); 93*a1a3b679SAndreas Boehler 94*a1a3b679SAndreas Boehler // outside of time-range, hidden 95*a1a3b679SAndreas Boehler $blob = <<<ICS 96*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 97*a1a3b679SAndreas BoehlerBEGIN:VEVENT 98*a1a3b679SAndreas BoehlerUID:foobar6 99*a1a3b679SAndreas BoehlerDTSTART:20110101T090000Z 100*a1a3b679SAndreas BoehlerDTEND:20110101T100000Z 101*a1a3b679SAndreas BoehlerEND:VEVENT 102*a1a3b679SAndreas BoehlerEND:VCALENDAR 103*a1a3b679SAndreas BoehlerICS; 104*a1a3b679SAndreas Boehler 105*a1a3b679SAndreas Boehler $tests[] = array( 106*a1a3b679SAndreas Boehler $blob, 107*a1a3b679SAndreas Boehler null, 108*a1a3b679SAndreas Boehler ); 109*a1a3b679SAndreas Boehler 110*a1a3b679SAndreas Boehler // outside of time-range, hidden 111*a1a3b679SAndreas Boehler $blob = <<<ICS 112*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 113*a1a3b679SAndreas BoehlerBEGIN:VEVENT 114*a1a3b679SAndreas BoehlerUID:foobar7 115*a1a3b679SAndreas BoehlerDTSTART:20110104T090000Z 116*a1a3b679SAndreas BoehlerDTEND:20110104T100000Z 117*a1a3b679SAndreas BoehlerEND:VEVENT 118*a1a3b679SAndreas BoehlerEND:VCALENDAR 119*a1a3b679SAndreas BoehlerICS; 120*a1a3b679SAndreas Boehler 121*a1a3b679SAndreas Boehler $tests[] = array( 122*a1a3b679SAndreas Boehler $blob, 123*a1a3b679SAndreas Boehler null, 124*a1a3b679SAndreas Boehler ); 125*a1a3b679SAndreas Boehler 126*a1a3b679SAndreas Boehler // using duration, shows up 127*a1a3b679SAndreas Boehler $blob = <<<ICS 128*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 129*a1a3b679SAndreas BoehlerBEGIN:VEVENT 130*a1a3b679SAndreas BoehlerUID:foobar8 131*a1a3b679SAndreas BoehlerDTSTART:20110101T190000Z 132*a1a3b679SAndreas BoehlerDURATION:PT1H 133*a1a3b679SAndreas BoehlerEND:VEVENT 134*a1a3b679SAndreas BoehlerEND:VCALENDAR 135*a1a3b679SAndreas BoehlerICS; 136*a1a3b679SAndreas Boehler 137*a1a3b679SAndreas Boehler $tests[] = array( 138*a1a3b679SAndreas Boehler $blob, 139*a1a3b679SAndreas Boehler '20110101T190000Z/20110101T200000Z', 140*a1a3b679SAndreas Boehler ); 141*a1a3b679SAndreas Boehler 142*a1a3b679SAndreas Boehler // Day-long event, shows up 143*a1a3b679SAndreas Boehler $blob = <<<ICS 144*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 145*a1a3b679SAndreas BoehlerBEGIN:VEVENT 146*a1a3b679SAndreas BoehlerUID:foobar9 147*a1a3b679SAndreas BoehlerDTSTART;VALUE=DATE:20110102 148*a1a3b679SAndreas BoehlerEND:VEVENT 149*a1a3b679SAndreas BoehlerEND:VCALENDAR 150*a1a3b679SAndreas BoehlerICS; 151*a1a3b679SAndreas Boehler 152*a1a3b679SAndreas Boehler $tests[] = array( 153*a1a3b679SAndreas Boehler $blob, 154*a1a3b679SAndreas Boehler '20110102T000000Z/20110103T000000Z', 155*a1a3b679SAndreas Boehler ); 156*a1a3b679SAndreas Boehler 157*a1a3b679SAndreas Boehler 158*a1a3b679SAndreas Boehler // No duration, does not show up 159*a1a3b679SAndreas Boehler $blob = <<<ICS 160*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 161*a1a3b679SAndreas BoehlerBEGIN:VEVENT 162*a1a3b679SAndreas BoehlerUID:foobar10 163*a1a3b679SAndreas BoehlerDTSTART:20110101T200000Z 164*a1a3b679SAndreas BoehlerEND:VEVENT 165*a1a3b679SAndreas BoehlerEND:VCALENDAR 166*a1a3b679SAndreas BoehlerICS; 167*a1a3b679SAndreas Boehler 168*a1a3b679SAndreas Boehler $tests[] = array( 169*a1a3b679SAndreas Boehler $blob, 170*a1a3b679SAndreas Boehler null, 171*a1a3b679SAndreas Boehler ); 172*a1a3b679SAndreas Boehler 173*a1a3b679SAndreas Boehler // encoded as object, shows up 174*a1a3b679SAndreas Boehler $blob = <<<ICS 175*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 176*a1a3b679SAndreas BoehlerBEGIN:VEVENT 177*a1a3b679SAndreas BoehlerUID:foobar11 178*a1a3b679SAndreas BoehlerDTSTART:20110101T210000Z 179*a1a3b679SAndreas BoehlerDURATION:PT1H 180*a1a3b679SAndreas BoehlerEND:VEVENT 181*a1a3b679SAndreas BoehlerEND:VCALENDAR 182*a1a3b679SAndreas BoehlerICS; 183*a1a3b679SAndreas Boehler 184*a1a3b679SAndreas Boehler $tests[] = array( 185*a1a3b679SAndreas Boehler Reader::read($blob), 186*a1a3b679SAndreas Boehler '20110101T210000Z/20110101T220000Z', 187*a1a3b679SAndreas Boehler ); 188*a1a3b679SAndreas Boehler 189*a1a3b679SAndreas Boehler // Freebusy. Some parts show up 190*a1a3b679SAndreas Boehler $blob = <<<ICS 191*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 192*a1a3b679SAndreas BoehlerBEGIN:VFREEBUSY 193*a1a3b679SAndreas BoehlerFREEBUSY:20110103T010000Z/20110103T020000Z 194*a1a3b679SAndreas BoehlerFREEBUSY;FBTYPE=FREE:20110103T020000Z/20110103T030000Z 195*a1a3b679SAndreas BoehlerFREEBUSY:20110103T030000Z/20110103T040000Z,20110103T040000Z/20110103T050000Z 196*a1a3b679SAndreas BoehlerFREEBUSY:20120101T000000Z/20120101T010000Z 197*a1a3b679SAndreas BoehlerFREEBUSY:20110103T050000Z/PT1H 198*a1a3b679SAndreas BoehlerEND:VFREEBUSY 199*a1a3b679SAndreas BoehlerEND:VCALENDAR 200*a1a3b679SAndreas BoehlerICS; 201*a1a3b679SAndreas Boehler 202*a1a3b679SAndreas Boehler $tests[] = array( 203*a1a3b679SAndreas Boehler Reader::read($blob), 204*a1a3b679SAndreas Boehler array( 205*a1a3b679SAndreas Boehler '20110103T010000Z/20110103T020000Z', 206*a1a3b679SAndreas Boehler '20110103T030000Z/20110103T040000Z', 207*a1a3b679SAndreas Boehler '20110103T040000Z/20110103T050000Z', 208*a1a3b679SAndreas Boehler '20110103T050000Z/20110103T060000Z', 209*a1a3b679SAndreas Boehler ) 210*a1a3b679SAndreas Boehler ); 211*a1a3b679SAndreas Boehler 212*a1a3b679SAndreas Boehler 213*a1a3b679SAndreas Boehler // Yearly recurrence rule, shows up 214*a1a3b679SAndreas Boehler $blob = <<<ICS 215*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 216*a1a3b679SAndreas BoehlerBEGIN:VEVENT 217*a1a3b679SAndreas BoehlerUID:foobar13 218*a1a3b679SAndreas BoehlerDTSTART:20100101T220000Z 219*a1a3b679SAndreas BoehlerDTEND:20100101T230000Z 220*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY 221*a1a3b679SAndreas BoehlerEND:VEVENT 222*a1a3b679SAndreas BoehlerEND:VCALENDAR 223*a1a3b679SAndreas BoehlerICS; 224*a1a3b679SAndreas Boehler 225*a1a3b679SAndreas Boehler $tests[] = array( 226*a1a3b679SAndreas Boehler Reader::read($blob), 227*a1a3b679SAndreas Boehler '20110101T220000Z/20110101T230000Z', 228*a1a3b679SAndreas Boehler ); 229*a1a3b679SAndreas Boehler 230*a1a3b679SAndreas Boehler 231*a1a3b679SAndreas Boehler // Yearly recurrence rule + duration, shows up 232*a1a3b679SAndreas Boehler $blob = <<<ICS 233*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 234*a1a3b679SAndreas BoehlerBEGIN:VEVENT 235*a1a3b679SAndreas BoehlerUID:foobar14 236*a1a3b679SAndreas BoehlerDTSTART:20100101T230000Z 237*a1a3b679SAndreas BoehlerDURATION:PT1H 238*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY 239*a1a3b679SAndreas BoehlerEND:VEVENT 240*a1a3b679SAndreas BoehlerEND:VCALENDAR 241*a1a3b679SAndreas BoehlerICS; 242*a1a3b679SAndreas Boehler 243*a1a3b679SAndreas Boehler $tests[] = array( 244*a1a3b679SAndreas Boehler Reader::read($blob), 245*a1a3b679SAndreas Boehler '20110101T230000Z/20110102T000000Z', 246*a1a3b679SAndreas Boehler ); 247*a1a3b679SAndreas Boehler 248*a1a3b679SAndreas Boehler // Floating time, no timezone 249*a1a3b679SAndreas Boehler $blob = <<<ICS 250*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 251*a1a3b679SAndreas BoehlerBEGIN:VEVENT 252*a1a3b679SAndreas BoehlerUID:foobar 253*a1a3b679SAndreas BoehlerDTSTART:20110101T120000 254*a1a3b679SAndreas BoehlerDTEND:20110101T130000 255*a1a3b679SAndreas BoehlerEND:VEVENT 256*a1a3b679SAndreas BoehlerEND:VCALENDAR 257*a1a3b679SAndreas BoehlerICS; 258*a1a3b679SAndreas Boehler 259*a1a3b679SAndreas Boehler $tests[] = array( 260*a1a3b679SAndreas Boehler $blob, 261*a1a3b679SAndreas Boehler "20110101T120000Z/20110101T130000Z" 262*a1a3b679SAndreas Boehler ); 263*a1a3b679SAndreas Boehler 264*a1a3b679SAndreas Boehler // Floating time + reference timezone 265*a1a3b679SAndreas Boehler $blob = <<<ICS 266*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 267*a1a3b679SAndreas BoehlerBEGIN:VEVENT 268*a1a3b679SAndreas BoehlerUID:foobar 269*a1a3b679SAndreas BoehlerDTSTART:20110101T120000 270*a1a3b679SAndreas BoehlerDTEND:20110101T130000 271*a1a3b679SAndreas BoehlerEND:VEVENT 272*a1a3b679SAndreas BoehlerEND:VCALENDAR 273*a1a3b679SAndreas BoehlerICS; 274*a1a3b679SAndreas Boehler 275*a1a3b679SAndreas Boehler $tests[] = array( 276*a1a3b679SAndreas Boehler $blob, 277*a1a3b679SAndreas Boehler "20110101T170000Z/20110101T180000Z", 278*a1a3b679SAndreas Boehler new \DateTimeZone('America/Toronto') 279*a1a3b679SAndreas Boehler ); 280*a1a3b679SAndreas Boehler 281*a1a3b679SAndreas Boehler // All-day event 282*a1a3b679SAndreas Boehler $blob = <<<ICS 283*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 284*a1a3b679SAndreas BoehlerBEGIN:VEVENT 285*a1a3b679SAndreas BoehlerUID:foobar 286*a1a3b679SAndreas BoehlerDTSTART;VALUE=DATE:20110101 287*a1a3b679SAndreas BoehlerEND:VEVENT 288*a1a3b679SAndreas BoehlerEND:VCALENDAR 289*a1a3b679SAndreas BoehlerICS; 290*a1a3b679SAndreas Boehler 291*a1a3b679SAndreas Boehler $tests[] = array( 292*a1a3b679SAndreas Boehler $blob, 293*a1a3b679SAndreas Boehler "20110101T000000Z/20110102T000000Z" 294*a1a3b679SAndreas Boehler ); 295*a1a3b679SAndreas Boehler 296*a1a3b679SAndreas Boehler // All-day event + reference timezone 297*a1a3b679SAndreas Boehler $blob = <<<ICS 298*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 299*a1a3b679SAndreas BoehlerBEGIN:VEVENT 300*a1a3b679SAndreas BoehlerUID:foobar 301*a1a3b679SAndreas BoehlerDTSTART;VALUE=DATE:20110101 302*a1a3b679SAndreas BoehlerEND:VEVENT 303*a1a3b679SAndreas BoehlerEND:VCALENDAR 304*a1a3b679SAndreas BoehlerICS; 305*a1a3b679SAndreas Boehler 306*a1a3b679SAndreas Boehler $tests[] = array( 307*a1a3b679SAndreas Boehler $blob, 308*a1a3b679SAndreas Boehler "20110101T050000Z/20110102T050000Z", 309*a1a3b679SAndreas Boehler new \DateTimeZone('America/Toronto') 310*a1a3b679SAndreas Boehler ); 311*a1a3b679SAndreas Boehler 312*a1a3b679SAndreas Boehler // Recurrence rule with no valid instances 313*a1a3b679SAndreas Boehler $blob = <<<ICS 314*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 315*a1a3b679SAndreas BoehlerBEGIN:VEVENT 316*a1a3b679SAndreas BoehlerUID:foobar 317*a1a3b679SAndreas BoehlerDTSTART:20110101T100000Z 318*a1a3b679SAndreas BoehlerDTEND:20110103T120000Z 319*a1a3b679SAndreas BoehlerRRULE:FREQ=WEEKLY;COUNT=1 320*a1a3b679SAndreas BoehlerEXDATE:20110101T100000Z 321*a1a3b679SAndreas BoehlerEND:VEVENT 322*a1a3b679SAndreas BoehlerEND:VCALENDAR 323*a1a3b679SAndreas BoehlerICS; 324*a1a3b679SAndreas Boehler 325*a1a3b679SAndreas Boehler $tests[] = array( 326*a1a3b679SAndreas Boehler $blob, 327*a1a3b679SAndreas Boehler array() 328*a1a3b679SAndreas Boehler ); 329*a1a3b679SAndreas Boehler return $tests; 330*a1a3b679SAndreas Boehler 331*a1a3b679SAndreas Boehler } 332*a1a3b679SAndreas Boehler 333*a1a3b679SAndreas Boehler /** 334*a1a3b679SAndreas Boehler * @dataProvider getInput 335*a1a3b679SAndreas Boehler */ 336*a1a3b679SAndreas Boehler function testGenerator($input, $expected, $timeZone = null) { 337*a1a3b679SAndreas Boehler 338*a1a3b679SAndreas Boehler $gen = new FreeBusyGenerator( 339*a1a3b679SAndreas Boehler new \DateTime('20110101T110000Z', new \DateTimeZone('UTC')), 340*a1a3b679SAndreas Boehler new \DateTime('20110103T110000Z', new \DateTimeZone('UTC')), 341*a1a3b679SAndreas Boehler $input, 342*a1a3b679SAndreas Boehler $timeZone 343*a1a3b679SAndreas Boehler ); 344*a1a3b679SAndreas Boehler 345*a1a3b679SAndreas Boehler $result = $gen->getResult(); 346*a1a3b679SAndreas Boehler 347*a1a3b679SAndreas Boehler $expected = (array)$expected; 348*a1a3b679SAndreas Boehler 349*a1a3b679SAndreas Boehler $freebusy = $result->VFREEBUSY->select('FREEBUSY'); 350*a1a3b679SAndreas Boehler 351*a1a3b679SAndreas Boehler foreach($freebusy as $fb) { 352*a1a3b679SAndreas Boehler 353*a1a3b679SAndreas Boehler $this->assertContains((string)$fb, $expected, "$fb did not appear in our list of expected freebusy strings. This is concerning!"); 354*a1a3b679SAndreas Boehler 355*a1a3b679SAndreas Boehler $k = array_search((string)$fb, $expected); 356*a1a3b679SAndreas Boehler unset($expected[$k]); 357*a1a3b679SAndreas Boehler 358*a1a3b679SAndreas Boehler } 359*a1a3b679SAndreas Boehler $this->assertTrue( 360*a1a3b679SAndreas Boehler count($expected) === 0, 361*a1a3b679SAndreas Boehler 'There were elements in the expected array that were not found in the output: ' . "\n" . print_r($expected,true) . "\n" . $result->serialize() 362*a1a3b679SAndreas Boehler ); 363*a1a3b679SAndreas Boehler 364*a1a3b679SAndreas Boehler } 365*a1a3b679SAndreas Boehler 366*a1a3b679SAndreas Boehler function testGeneratorBaseObject() { 367*a1a3b679SAndreas Boehler 368*a1a3b679SAndreas Boehler $obj = new Component\VCalendar(); 369*a1a3b679SAndreas Boehler $obj->METHOD = 'PUBLISH'; 370*a1a3b679SAndreas Boehler 371*a1a3b679SAndreas Boehler $gen = new FreeBusyGenerator(); 372*a1a3b679SAndreas Boehler $gen->setObjects(array()); 373*a1a3b679SAndreas Boehler $gen->setBaseObject($obj); 374*a1a3b679SAndreas Boehler 375*a1a3b679SAndreas Boehler $result = $gen->getResult(); 376*a1a3b679SAndreas Boehler 377*a1a3b679SAndreas Boehler $this->assertEquals('PUBLISH', $result->METHOD->getValue()); 378*a1a3b679SAndreas Boehler 379*a1a3b679SAndreas Boehler } 380*a1a3b679SAndreas Boehler 381*a1a3b679SAndreas Boehler /** 382*a1a3b679SAndreas Boehler * @expectedException InvalidArgumentException 383*a1a3b679SAndreas Boehler */ 384*a1a3b679SAndreas Boehler function testInvalidArg() { 385*a1a3b679SAndreas Boehler 386*a1a3b679SAndreas Boehler $gen = new FreeBusyGenerator( 387*a1a3b679SAndreas Boehler new \DateTime('2012-01-01'), 388*a1a3b679SAndreas Boehler new \DateTime('2012-12-31'), 389*a1a3b679SAndreas Boehler new \StdClass() 390*a1a3b679SAndreas Boehler ); 391*a1a3b679SAndreas Boehler 392*a1a3b679SAndreas Boehler } 393*a1a3b679SAndreas Boehler 394*a1a3b679SAndreas Boehler} 395