1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\VObject; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehleruse 6*a1a3b679SAndreas Boehler Sabre\VObject\Component\VCalendar, 7*a1a3b679SAndreas Boehler Sabre\VObject\Component\VCard; 8*a1a3b679SAndreas Boehler 9*a1a3b679SAndreas Boehlerclass ComponentTest extends \PHPUnit_Framework_TestCase { 10*a1a3b679SAndreas Boehler 11*a1a3b679SAndreas Boehler function testIterate() { 12*a1a3b679SAndreas Boehler 13*a1a3b679SAndreas Boehler $comp = new VCalendar(array(), false); 14*a1a3b679SAndreas Boehler 15*a1a3b679SAndreas Boehler $sub = $comp->createComponent('VEVENT'); 16*a1a3b679SAndreas Boehler $comp->add($sub); 17*a1a3b679SAndreas Boehler 18*a1a3b679SAndreas Boehler $sub = $comp->createComponent('VTODO'); 19*a1a3b679SAndreas Boehler $comp->add($sub); 20*a1a3b679SAndreas Boehler 21*a1a3b679SAndreas Boehler $count = 0; 22*a1a3b679SAndreas Boehler foreach($comp->children() as $key=>$subcomponent) { 23*a1a3b679SAndreas Boehler 24*a1a3b679SAndreas Boehler $count++; 25*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Component',$subcomponent); 26*a1a3b679SAndreas Boehler 27*a1a3b679SAndreas Boehler } 28*a1a3b679SAndreas Boehler $this->assertEquals(2,$count); 29*a1a3b679SAndreas Boehler $this->assertEquals(1,$key); 30*a1a3b679SAndreas Boehler 31*a1a3b679SAndreas Boehler } 32*a1a3b679SAndreas Boehler 33*a1a3b679SAndreas Boehler function testMagicGet() { 34*a1a3b679SAndreas Boehler 35*a1a3b679SAndreas Boehler $comp = new VCalendar(array(), false); 36*a1a3b679SAndreas Boehler 37*a1a3b679SAndreas Boehler $sub = $comp->createComponent('VEVENT'); 38*a1a3b679SAndreas Boehler $comp->add($sub); 39*a1a3b679SAndreas Boehler 40*a1a3b679SAndreas Boehler $sub = $comp->createComponent('VTODO'); 41*a1a3b679SAndreas Boehler $comp->add($sub); 42*a1a3b679SAndreas Boehler 43*a1a3b679SAndreas Boehler $event = $comp->vevent; 44*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Component', $event); 45*a1a3b679SAndreas Boehler $this->assertEquals('VEVENT', $event->name); 46*a1a3b679SAndreas Boehler 47*a1a3b679SAndreas Boehler $this->assertInternalType('null', $comp->vjournal); 48*a1a3b679SAndreas Boehler 49*a1a3b679SAndreas Boehler } 50*a1a3b679SAndreas Boehler 51*a1a3b679SAndreas Boehler function testMagicGetGroups() { 52*a1a3b679SAndreas Boehler 53*a1a3b679SAndreas Boehler $comp = new VCard(); 54*a1a3b679SAndreas Boehler 55*a1a3b679SAndreas Boehler $sub = $comp->createProperty('GROUP1.EMAIL','1@1.com'); 56*a1a3b679SAndreas Boehler $comp->add($sub); 57*a1a3b679SAndreas Boehler 58*a1a3b679SAndreas Boehler $sub = $comp->createProperty('GROUP2.EMAIL','2@2.com'); 59*a1a3b679SAndreas Boehler $comp->add($sub); 60*a1a3b679SAndreas Boehler 61*a1a3b679SAndreas Boehler $sub = $comp->createProperty('EMAIL','3@3.com'); 62*a1a3b679SAndreas Boehler $comp->add($sub); 63*a1a3b679SAndreas Boehler 64*a1a3b679SAndreas Boehler $emails = $comp->email; 65*a1a3b679SAndreas Boehler $this->assertEquals(3, count($emails)); 66*a1a3b679SAndreas Boehler 67*a1a3b679SAndreas Boehler $email1 = $comp->{"group1.email"}; 68*a1a3b679SAndreas Boehler $this->assertEquals('EMAIL', $email1[0]->name); 69*a1a3b679SAndreas Boehler $this->assertEquals('GROUP1', $email1[0]->group); 70*a1a3b679SAndreas Boehler 71*a1a3b679SAndreas Boehler $email3 = $comp->{".email"}; 72*a1a3b679SAndreas Boehler $this->assertEquals('EMAIL', $email3[0]->name); 73*a1a3b679SAndreas Boehler $this->assertEquals(null, $email3[0]->group); 74*a1a3b679SAndreas Boehler 75*a1a3b679SAndreas Boehler } 76*a1a3b679SAndreas Boehler 77*a1a3b679SAndreas Boehler function testMagicIsset() { 78*a1a3b679SAndreas Boehler 79*a1a3b679SAndreas Boehler $comp = new VCalendar(); 80*a1a3b679SAndreas Boehler 81*a1a3b679SAndreas Boehler $sub = $comp->createComponent('VEVENT'); 82*a1a3b679SAndreas Boehler $comp->add($sub); 83*a1a3b679SAndreas Boehler 84*a1a3b679SAndreas Boehler $sub = $comp->createComponent('VTODO'); 85*a1a3b679SAndreas Boehler $comp->add($sub); 86*a1a3b679SAndreas Boehler 87*a1a3b679SAndreas Boehler $this->assertTrue(isset($comp->vevent)); 88*a1a3b679SAndreas Boehler $this->assertTrue(isset($comp->vtodo)); 89*a1a3b679SAndreas Boehler $this->assertFalse(isset($comp->vjournal)); 90*a1a3b679SAndreas Boehler 91*a1a3b679SAndreas Boehler } 92*a1a3b679SAndreas Boehler 93*a1a3b679SAndreas Boehler function testMagicSetScalar() { 94*a1a3b679SAndreas Boehler 95*a1a3b679SAndreas Boehler $comp = new VCalendar(); 96*a1a3b679SAndreas Boehler $comp->myProp = 'myValue'; 97*a1a3b679SAndreas Boehler 98*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Property',$comp->MYPROP); 99*a1a3b679SAndreas Boehler $this->assertEquals('myValue',(string)$comp->MYPROP); 100*a1a3b679SAndreas Boehler 101*a1a3b679SAndreas Boehler 102*a1a3b679SAndreas Boehler } 103*a1a3b679SAndreas Boehler 104*a1a3b679SAndreas Boehler function testMagicSetScalarTwice() { 105*a1a3b679SAndreas Boehler 106*a1a3b679SAndreas Boehler $comp = new VCalendar(array(), false); 107*a1a3b679SAndreas Boehler $comp->myProp = 'myValue'; 108*a1a3b679SAndreas Boehler $comp->myProp = 'myValue'; 109*a1a3b679SAndreas Boehler 110*a1a3b679SAndreas Boehler $this->assertEquals(1,count($comp->children())); 111*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Property',$comp->MYPROP); 112*a1a3b679SAndreas Boehler $this->assertEquals('myValue',(string)$comp->MYPROP); 113*a1a3b679SAndreas Boehler 114*a1a3b679SAndreas Boehler } 115*a1a3b679SAndreas Boehler 116*a1a3b679SAndreas Boehler function testMagicSetArray() { 117*a1a3b679SAndreas Boehler 118*a1a3b679SAndreas Boehler $comp = new VCalendar(); 119*a1a3b679SAndreas Boehler $comp->ORG = array('Acme Inc', 'Section 9'); 120*a1a3b679SAndreas Boehler 121*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Property',$comp->ORG); 122*a1a3b679SAndreas Boehler $this->assertEquals(array('Acme Inc', 'Section 9'),$comp->ORG->getParts()); 123*a1a3b679SAndreas Boehler 124*a1a3b679SAndreas Boehler } 125*a1a3b679SAndreas Boehler 126*a1a3b679SAndreas Boehler function testMagicSetComponent() { 127*a1a3b679SAndreas Boehler 128*a1a3b679SAndreas Boehler $comp = new VCalendar(); 129*a1a3b679SAndreas Boehler 130*a1a3b679SAndreas Boehler // Note that 'myProp' is ignored here. 131*a1a3b679SAndreas Boehler $comp->myProp = $comp->createComponent('VEVENT'); 132*a1a3b679SAndreas Boehler 133*a1a3b679SAndreas Boehler $this->assertEquals(1, count($comp)); 134*a1a3b679SAndreas Boehler 135*a1a3b679SAndreas Boehler $this->assertEquals('VEVENT',$comp->VEVENT->name); 136*a1a3b679SAndreas Boehler 137*a1a3b679SAndreas Boehler } 138*a1a3b679SAndreas Boehler 139*a1a3b679SAndreas Boehler function testMagicSetTwice() { 140*a1a3b679SAndreas Boehler 141*a1a3b679SAndreas Boehler $comp = new VCalendar(array(), false); 142*a1a3b679SAndreas Boehler 143*a1a3b679SAndreas Boehler $comp->VEVENT = $comp->createComponent('VEVENT'); 144*a1a3b679SAndreas Boehler $comp->VEVENT = $comp->createComponent('VEVENT'); 145*a1a3b679SAndreas Boehler 146*a1a3b679SAndreas Boehler $this->assertEquals(1, count($comp->children())); 147*a1a3b679SAndreas Boehler 148*a1a3b679SAndreas Boehler $this->assertEquals('VEVENT',$comp->VEVENT->name); 149*a1a3b679SAndreas Boehler 150*a1a3b679SAndreas Boehler } 151*a1a3b679SAndreas Boehler 152*a1a3b679SAndreas Boehler function testArrayAccessGet() { 153*a1a3b679SAndreas Boehler 154*a1a3b679SAndreas Boehler $comp = new VCalendar(array(), false); 155*a1a3b679SAndreas Boehler 156*a1a3b679SAndreas Boehler $event = $comp->createComponent('VEVENT'); 157*a1a3b679SAndreas Boehler $event->summary = 'Event 1'; 158*a1a3b679SAndreas Boehler 159*a1a3b679SAndreas Boehler $comp->add($event); 160*a1a3b679SAndreas Boehler 161*a1a3b679SAndreas Boehler $event2 = clone $event; 162*a1a3b679SAndreas Boehler $event2->summary = 'Event 2'; 163*a1a3b679SAndreas Boehler 164*a1a3b679SAndreas Boehler $comp->add($event2); 165*a1a3b679SAndreas Boehler 166*a1a3b679SAndreas Boehler $this->assertEquals(2,count($comp->children())); 167*a1a3b679SAndreas Boehler $this->assertTrue($comp->vevent[1] instanceof Component); 168*a1a3b679SAndreas Boehler $this->assertEquals('Event 2', (string)$comp->vevent[1]->summary); 169*a1a3b679SAndreas Boehler 170*a1a3b679SAndreas Boehler } 171*a1a3b679SAndreas Boehler 172*a1a3b679SAndreas Boehler function testArrayAccessExists() { 173*a1a3b679SAndreas Boehler 174*a1a3b679SAndreas Boehler $comp = new VCalendar(); 175*a1a3b679SAndreas Boehler 176*a1a3b679SAndreas Boehler $event = $comp->createComponent('VEVENT'); 177*a1a3b679SAndreas Boehler $event->summary = 'Event 1'; 178*a1a3b679SAndreas Boehler 179*a1a3b679SAndreas Boehler $comp->add($event); 180*a1a3b679SAndreas Boehler 181*a1a3b679SAndreas Boehler $event2 = clone $event; 182*a1a3b679SAndreas Boehler $event2->summary = 'Event 2'; 183*a1a3b679SAndreas Boehler 184*a1a3b679SAndreas Boehler $comp->add($event2); 185*a1a3b679SAndreas Boehler 186*a1a3b679SAndreas Boehler $this->assertTrue(isset($comp->vevent[0])); 187*a1a3b679SAndreas Boehler $this->assertTrue(isset($comp->vevent[1])); 188*a1a3b679SAndreas Boehler 189*a1a3b679SAndreas Boehler } 190*a1a3b679SAndreas Boehler 191*a1a3b679SAndreas Boehler /** 192*a1a3b679SAndreas Boehler * @expectedException LogicException 193*a1a3b679SAndreas Boehler */ 194*a1a3b679SAndreas Boehler function testArrayAccessSet() { 195*a1a3b679SAndreas Boehler 196*a1a3b679SAndreas Boehler $comp = new VCalendar(); 197*a1a3b679SAndreas Boehler $comp['hey'] = 'hi there'; 198*a1a3b679SAndreas Boehler 199*a1a3b679SAndreas Boehler } 200*a1a3b679SAndreas Boehler /** 201*a1a3b679SAndreas Boehler * @expectedException LogicException 202*a1a3b679SAndreas Boehler */ 203*a1a3b679SAndreas Boehler function testArrayAccessUnset() { 204*a1a3b679SAndreas Boehler 205*a1a3b679SAndreas Boehler $comp = new VCalendar(); 206*a1a3b679SAndreas Boehler unset($comp[0]); 207*a1a3b679SAndreas Boehler 208*a1a3b679SAndreas Boehler } 209*a1a3b679SAndreas Boehler 210*a1a3b679SAndreas Boehler function testAddScalar() { 211*a1a3b679SAndreas Boehler 212*a1a3b679SAndreas Boehler $comp = new VCalendar(array(), false); 213*a1a3b679SAndreas Boehler 214*a1a3b679SAndreas Boehler $comp->add('myprop','value'); 215*a1a3b679SAndreas Boehler 216*a1a3b679SAndreas Boehler $this->assertEquals(1, count($comp->children())); 217*a1a3b679SAndreas Boehler 218*a1a3b679SAndreas Boehler $bla = $comp->children[0]; 219*a1a3b679SAndreas Boehler 220*a1a3b679SAndreas Boehler $this->assertTrue($bla instanceof Property); 221*a1a3b679SAndreas Boehler $this->assertEquals('MYPROP',$bla->name); 222*a1a3b679SAndreas Boehler $this->assertEquals('value',(string)$bla); 223*a1a3b679SAndreas Boehler 224*a1a3b679SAndreas Boehler } 225*a1a3b679SAndreas Boehler 226*a1a3b679SAndreas Boehler function testAddScalarParams() { 227*a1a3b679SAndreas Boehler 228*a1a3b679SAndreas Boehler $comp = new VCalendar(array(), false); 229*a1a3b679SAndreas Boehler 230*a1a3b679SAndreas Boehler $comp->add('myprop','value',array('param1'=>'value1')); 231*a1a3b679SAndreas Boehler 232*a1a3b679SAndreas Boehler $this->assertEquals(1, count($comp->children())); 233*a1a3b679SAndreas Boehler 234*a1a3b679SAndreas Boehler $bla = $comp->children[0]; 235*a1a3b679SAndreas Boehler 236*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Property', $bla); 237*a1a3b679SAndreas Boehler $this->assertEquals('MYPROP',$bla->name); 238*a1a3b679SAndreas Boehler $this->assertEquals('value', (string)$bla); 239*a1a3b679SAndreas Boehler 240*a1a3b679SAndreas Boehler $this->assertEquals(1, count($bla->parameters())); 241*a1a3b679SAndreas Boehler 242*a1a3b679SAndreas Boehler $this->assertEquals('PARAM1',$bla->parameters['PARAM1']->name); 243*a1a3b679SAndreas Boehler $this->assertEquals('value1',$bla->parameters['PARAM1']->getValue()); 244*a1a3b679SAndreas Boehler 245*a1a3b679SAndreas Boehler } 246*a1a3b679SAndreas Boehler 247*a1a3b679SAndreas Boehler 248*a1a3b679SAndreas Boehler function testAddComponent() { 249*a1a3b679SAndreas Boehler 250*a1a3b679SAndreas Boehler $comp = new VCalendar(array(), false); 251*a1a3b679SAndreas Boehler 252*a1a3b679SAndreas Boehler $comp->add($comp->createComponent('VEVENT')); 253*a1a3b679SAndreas Boehler 254*a1a3b679SAndreas Boehler $this->assertEquals(1, count($comp->children())); 255*a1a3b679SAndreas Boehler 256*a1a3b679SAndreas Boehler $this->assertEquals('VEVENT',$comp->VEVENT->name); 257*a1a3b679SAndreas Boehler 258*a1a3b679SAndreas Boehler } 259*a1a3b679SAndreas Boehler 260*a1a3b679SAndreas Boehler function testAddComponentTwice() { 261*a1a3b679SAndreas Boehler 262*a1a3b679SAndreas Boehler $comp = new VCalendar(array(), false); 263*a1a3b679SAndreas Boehler 264*a1a3b679SAndreas Boehler $comp->add($comp->createComponent('VEVENT')); 265*a1a3b679SAndreas Boehler $comp->add($comp->createComponent('VEVENT')); 266*a1a3b679SAndreas Boehler 267*a1a3b679SAndreas Boehler $this->assertEquals(2, count($comp->children())); 268*a1a3b679SAndreas Boehler 269*a1a3b679SAndreas Boehler $this->assertEquals('VEVENT',$comp->VEVENT->name); 270*a1a3b679SAndreas Boehler 271*a1a3b679SAndreas Boehler } 272*a1a3b679SAndreas Boehler 273*a1a3b679SAndreas Boehler /** 274*a1a3b679SAndreas Boehler * @expectedException InvalidArgumentException 275*a1a3b679SAndreas Boehler */ 276*a1a3b679SAndreas Boehler function testAddArgFail() { 277*a1a3b679SAndreas Boehler 278*a1a3b679SAndreas Boehler $comp = new VCalendar(); 279*a1a3b679SAndreas Boehler $comp->add($comp->createComponent('VEVENT'),'hello'); 280*a1a3b679SAndreas Boehler 281*a1a3b679SAndreas Boehler } 282*a1a3b679SAndreas Boehler 283*a1a3b679SAndreas Boehler /** 284*a1a3b679SAndreas Boehler * @expectedException InvalidArgumentException 285*a1a3b679SAndreas Boehler */ 286*a1a3b679SAndreas Boehler function testAddArgFail2() { 287*a1a3b679SAndreas Boehler 288*a1a3b679SAndreas Boehler $comp = new VCalendar(); 289*a1a3b679SAndreas Boehler $comp->add(array()); 290*a1a3b679SAndreas Boehler 291*a1a3b679SAndreas Boehler } 292*a1a3b679SAndreas Boehler 293*a1a3b679SAndreas Boehler function testMagicUnset() { 294*a1a3b679SAndreas Boehler 295*a1a3b679SAndreas Boehler $comp = new VCalendar(array(), false); 296*a1a3b679SAndreas Boehler $comp->add($comp->createComponent('VEVENT')); 297*a1a3b679SAndreas Boehler 298*a1a3b679SAndreas Boehler unset($comp->vevent); 299*a1a3b679SAndreas Boehler 300*a1a3b679SAndreas Boehler $this->assertEquals(0, count($comp->children())); 301*a1a3b679SAndreas Boehler 302*a1a3b679SAndreas Boehler } 303*a1a3b679SAndreas Boehler 304*a1a3b679SAndreas Boehler 305*a1a3b679SAndreas Boehler function testCount() { 306*a1a3b679SAndreas Boehler 307*a1a3b679SAndreas Boehler $comp = new VCalendar(); 308*a1a3b679SAndreas Boehler $this->assertEquals(1,$comp->count()); 309*a1a3b679SAndreas Boehler 310*a1a3b679SAndreas Boehler } 311*a1a3b679SAndreas Boehler 312*a1a3b679SAndreas Boehler function testChildren() { 313*a1a3b679SAndreas Boehler 314*a1a3b679SAndreas Boehler $comp = new VCalendar(array(), false); 315*a1a3b679SAndreas Boehler 316*a1a3b679SAndreas Boehler // Note that 'myProp' is ignored here. 317*a1a3b679SAndreas Boehler $comp->add($comp->createComponent('VEVENT')); 318*a1a3b679SAndreas Boehler $comp->add($comp->createComponent('VTODO')); 319*a1a3b679SAndreas Boehler 320*a1a3b679SAndreas Boehler $r = $comp->children(); 321*a1a3b679SAndreas Boehler $this->assertInternalType('array', $r); 322*a1a3b679SAndreas Boehler $this->assertEquals(2,count($r)); 323*a1a3b679SAndreas Boehler } 324*a1a3b679SAndreas Boehler 325*a1a3b679SAndreas Boehler function testGetComponents() { 326*a1a3b679SAndreas Boehler 327*a1a3b679SAndreas Boehler $comp = new VCalendar(); 328*a1a3b679SAndreas Boehler 329*a1a3b679SAndreas Boehler $comp->add($comp->createProperty('FOO','BAR')); 330*a1a3b679SAndreas Boehler $comp->add($comp->createComponent('VTODO')); 331*a1a3b679SAndreas Boehler 332*a1a3b679SAndreas Boehler $r = $comp->getComponents(); 333*a1a3b679SAndreas Boehler $this->assertInternalType('array', $r); 334*a1a3b679SAndreas Boehler $this->assertEquals(1, count($r)); 335*a1a3b679SAndreas Boehler $this->assertEquals('VTODO', $r[0]->name); 336*a1a3b679SAndreas Boehler } 337*a1a3b679SAndreas Boehler 338*a1a3b679SAndreas Boehler function testSerialize() { 339*a1a3b679SAndreas Boehler 340*a1a3b679SAndreas Boehler $comp = new VCalendar(array(), false); 341*a1a3b679SAndreas Boehler $this->assertEquals("BEGIN:VCALENDAR\r\nEND:VCALENDAR\r\n", $comp->serialize()); 342*a1a3b679SAndreas Boehler 343*a1a3b679SAndreas Boehler } 344*a1a3b679SAndreas Boehler 345*a1a3b679SAndreas Boehler function testSerializeChildren() { 346*a1a3b679SAndreas Boehler 347*a1a3b679SAndreas Boehler $comp = new VCalendar(array(), false); 348*a1a3b679SAndreas Boehler $event = $comp->add($comp->createComponent('VEVENT')); 349*a1a3b679SAndreas Boehler unset($event->DTSTAMP, $event->UID); 350*a1a3b679SAndreas Boehler $comp->add($comp->createComponent('VTODO')); 351*a1a3b679SAndreas Boehler 352*a1a3b679SAndreas Boehler $str = $comp->serialize(); 353*a1a3b679SAndreas Boehler 354*a1a3b679SAndreas Boehler $this->assertEquals("BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nEND:VEVENT\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n", $str); 355*a1a3b679SAndreas Boehler 356*a1a3b679SAndreas Boehler } 357*a1a3b679SAndreas Boehler 358*a1a3b679SAndreas Boehler function testSerializeOrderCompAndProp() { 359*a1a3b679SAndreas Boehler 360*a1a3b679SAndreas Boehler $comp = new VCalendar(array(), false); 361*a1a3b679SAndreas Boehler $comp->add($event = $comp->createComponent('VEVENT')); 362*a1a3b679SAndreas Boehler $comp->add('PROP1','BLABLA'); 363*a1a3b679SAndreas Boehler $comp->add('VERSION','2.0'); 364*a1a3b679SAndreas Boehler $comp->add($comp->createComponent('VTIMEZONE')); 365*a1a3b679SAndreas Boehler 366*a1a3b679SAndreas Boehler unset($event->DTSTAMP, $event->UID); 367*a1a3b679SAndreas Boehler $str = $comp->serialize(); 368*a1a3b679SAndreas Boehler 369*a1a3b679SAndreas Boehler $this->assertEquals("BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPROP1:BLABLA\r\nBEGIN:VTIMEZONE\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n", $str); 370*a1a3b679SAndreas Boehler 371*a1a3b679SAndreas Boehler } 372*a1a3b679SAndreas Boehler 373*a1a3b679SAndreas Boehler function testAnotherSerializeOrderProp() { 374*a1a3b679SAndreas Boehler 375*a1a3b679SAndreas Boehler $prop4s=array('1', '2', '3', '4', '5', '6', '7', '8', '9', '10'); 376*a1a3b679SAndreas Boehler 377*a1a3b679SAndreas Boehler $comp = new VCard(array(), false); 378*a1a3b679SAndreas Boehler 379*a1a3b679SAndreas Boehler $comp->__set('SOMEPROP','FOO'); 380*a1a3b679SAndreas Boehler $comp->__set('ANOTHERPROP','FOO'); 381*a1a3b679SAndreas Boehler $comp->__set('THIRDPROP','FOO'); 382*a1a3b679SAndreas Boehler foreach ($prop4s as $prop4) { 383*a1a3b679SAndreas Boehler $comp->add('PROP4', 'FOO '.$prop4); 384*a1a3b679SAndreas Boehler } 385*a1a3b679SAndreas Boehler $comp->__set('PROPNUMBERFIVE', 'FOO'); 386*a1a3b679SAndreas Boehler $comp->__set('PROPNUMBERSIX', 'FOO'); 387*a1a3b679SAndreas Boehler $comp->__set('PROPNUMBERSEVEN', 'FOO'); 388*a1a3b679SAndreas Boehler $comp->__set('PROPNUMBEREIGHT', 'FOO'); 389*a1a3b679SAndreas Boehler $comp->__set('PROPNUMBERNINE', 'FOO'); 390*a1a3b679SAndreas Boehler $comp->__set('PROPNUMBERTEN', 'FOO'); 391*a1a3b679SAndreas Boehler $comp->__set('VERSION','2.0'); 392*a1a3b679SAndreas Boehler $comp->__set('UID', 'FOO'); 393*a1a3b679SAndreas Boehler 394*a1a3b679SAndreas Boehler $str = $comp->serialize(); 395*a1a3b679SAndreas Boehler 396*a1a3b679SAndreas Boehler $this->assertEquals("BEGIN:VCARD\r\nVERSION:2.0\r\nSOMEPROP:FOO\r\nANOTHERPROP:FOO\r\nTHIRDPROP:FOO\r\nPROP4:FOO 1\r\nPROP4:FOO 2\r\nPROP4:FOO 3\r\nPROP4:FOO 4\r\nPROP4:FOO 5\r\nPROP4:FOO 6\r\nPROP4:FOO 7\r\nPROP4:FOO 8\r\nPROP4:FOO 9\r\nPROP4:FOO 10\r\nPROPNUMBERFIVE:FOO\r\nPROPNUMBERSIX:FOO\r\nPROPNUMBERSEVEN:FOO\r\nPROPNUMBEREIGHT:FOO\r\nPROPNUMBERNINE:FOO\r\nPROPNUMBERTEN:FOO\r\nUID:FOO\r\nEND:VCARD\r\n", $str); 397*a1a3b679SAndreas Boehler 398*a1a3b679SAndreas Boehler } 399*a1a3b679SAndreas Boehler 400*a1a3b679SAndreas Boehler function testInstantiateWithChildren() { 401*a1a3b679SAndreas Boehler 402*a1a3b679SAndreas Boehler $comp = new VCard(array( 403*a1a3b679SAndreas Boehler 'ORG' => array('Acme Inc.', 'Section 9'), 404*a1a3b679SAndreas Boehler 'FN' => 'Finn The Human', 405*a1a3b679SAndreas Boehler )); 406*a1a3b679SAndreas Boehler 407*a1a3b679SAndreas Boehler $this->assertEquals(array('Acme Inc.', 'Section 9'), $comp->ORG->getParts()); 408*a1a3b679SAndreas Boehler $this->assertEquals('Finn The Human', $comp->FN->getValue()); 409*a1a3b679SAndreas Boehler 410*a1a3b679SAndreas Boehler } 411*a1a3b679SAndreas Boehler 412*a1a3b679SAndreas Boehler function testInstantiateSubComponent() { 413*a1a3b679SAndreas Boehler 414*a1a3b679SAndreas Boehler $comp = new VCalendar(); 415*a1a3b679SAndreas Boehler $event = $comp->createComponent('VEVENT', array( 416*a1a3b679SAndreas Boehler $comp->createProperty('UID', '12345'), 417*a1a3b679SAndreas Boehler )); 418*a1a3b679SAndreas Boehler $comp->add($event); 419*a1a3b679SAndreas Boehler 420*a1a3b679SAndreas Boehler $this->assertEquals('12345', $comp->VEVENT->UID->getValue()); 421*a1a3b679SAndreas Boehler 422*a1a3b679SAndreas Boehler } 423*a1a3b679SAndreas Boehler 424*a1a3b679SAndreas Boehler function testRemoveByName() { 425*a1a3b679SAndreas Boehler 426*a1a3b679SAndreas Boehler $comp = new VCalendar(array(), false); 427*a1a3b679SAndreas Boehler $comp->add('prop1','val1'); 428*a1a3b679SAndreas Boehler $comp->add('prop2','val2'); 429*a1a3b679SAndreas Boehler $comp->add('prop2','val2'); 430*a1a3b679SAndreas Boehler 431*a1a3b679SAndreas Boehler $comp->remove('prop2'); 432*a1a3b679SAndreas Boehler $this->assertFalse(isset($comp->prop2)); 433*a1a3b679SAndreas Boehler $this->assertTrue(isset($comp->prop1)); 434*a1a3b679SAndreas Boehler 435*a1a3b679SAndreas Boehler } 436*a1a3b679SAndreas Boehler 437*a1a3b679SAndreas Boehler function testRemoveByObj() { 438*a1a3b679SAndreas Boehler 439*a1a3b679SAndreas Boehler $comp = new VCalendar(array(), false); 440*a1a3b679SAndreas Boehler $comp->add('prop1','val1'); 441*a1a3b679SAndreas Boehler $prop = $comp->add('prop2','val2'); 442*a1a3b679SAndreas Boehler 443*a1a3b679SAndreas Boehler $comp->remove($prop); 444*a1a3b679SAndreas Boehler $this->assertFalse(isset($comp->prop2)); 445*a1a3b679SAndreas Boehler $this->assertTrue(isset($comp->prop1)); 446*a1a3b679SAndreas Boehler 447*a1a3b679SAndreas Boehler } 448*a1a3b679SAndreas Boehler 449*a1a3b679SAndreas Boehler /** 450*a1a3b679SAndreas Boehler * @expectedException InvalidArgumentException 451*a1a3b679SAndreas Boehler */ 452*a1a3b679SAndreas Boehler function testRemoveNotFound() { 453*a1a3b679SAndreas Boehler 454*a1a3b679SAndreas Boehler $comp = new VCalendar(array(), false); 455*a1a3b679SAndreas Boehler $prop = $comp->createProperty('A','B'); 456*a1a3b679SAndreas Boehler $comp->remove($prop); 457*a1a3b679SAndreas Boehler 458*a1a3b679SAndreas Boehler } 459*a1a3b679SAndreas Boehler 460*a1a3b679SAndreas Boehler /** 461*a1a3b679SAndreas Boehler * @dataProvider ruleData 462*a1a3b679SAndreas Boehler */ 463*a1a3b679SAndreas Boehler function testValidateRules($componentList, $errorCount) { 464*a1a3b679SAndreas Boehler 465*a1a3b679SAndreas Boehler $vcard = new Component\VCard(); 466*a1a3b679SAndreas Boehler 467*a1a3b679SAndreas Boehler $component = new FakeComponent($vcard,'Hi', array(), $defaults = false ); 468*a1a3b679SAndreas Boehler foreach($componentList as $v) { 469*a1a3b679SAndreas Boehler $component->add($v,'Hello.'); 470*a1a3b679SAndreas Boehler } 471*a1a3b679SAndreas Boehler 472*a1a3b679SAndreas Boehler $this->assertEquals($errorCount, count($component->validate())); 473*a1a3b679SAndreas Boehler 474*a1a3b679SAndreas Boehler } 475*a1a3b679SAndreas Boehler 476*a1a3b679SAndreas Boehler function testValidateRepair() { 477*a1a3b679SAndreas Boehler 478*a1a3b679SAndreas Boehler $vcard = new Component\VCard(); 479*a1a3b679SAndreas Boehler 480*a1a3b679SAndreas Boehler $component = new FakeComponent($vcard,'Hi', array(), $defaults = false ); 481*a1a3b679SAndreas Boehler $component->validate(Component::REPAIR); 482*a1a3b679SAndreas Boehler $this->assertEquals('yow', $component->BAR->getValue()); 483*a1a3b679SAndreas Boehler 484*a1a3b679SAndreas Boehler } 485*a1a3b679SAndreas Boehler 486*a1a3b679SAndreas Boehler function ruleData() { 487*a1a3b679SAndreas Boehler 488*a1a3b679SAndreas Boehler return array( 489*a1a3b679SAndreas Boehler 490*a1a3b679SAndreas Boehler array(array(), 2), 491*a1a3b679SAndreas Boehler array(array('FOO'), 3), 492*a1a3b679SAndreas Boehler array(array('BAR'), 1), 493*a1a3b679SAndreas Boehler array(array('BAZ'), 1), 494*a1a3b679SAndreas Boehler array(array('BAR','BAZ'), 0), 495*a1a3b679SAndreas Boehler array(array('BAR','BAZ','ZIM',), 0), 496*a1a3b679SAndreas Boehler array(array('BAR','BAZ','ZIM','GIR'), 0), 497*a1a3b679SAndreas Boehler array(array('BAR','BAZ','ZIM','GIR','GIR'), 1), 498*a1a3b679SAndreas Boehler 499*a1a3b679SAndreas Boehler ); 500*a1a3b679SAndreas Boehler 501*a1a3b679SAndreas Boehler } 502*a1a3b679SAndreas Boehler 503*a1a3b679SAndreas Boehler} 504*a1a3b679SAndreas Boehler 505*a1a3b679SAndreas Boehlerclass FakeComponent extends Component { 506*a1a3b679SAndreas Boehler 507*a1a3b679SAndreas Boehler public function getValidationRules() { 508*a1a3b679SAndreas Boehler 509*a1a3b679SAndreas Boehler return array( 510*a1a3b679SAndreas Boehler 'FOO' => '0', 511*a1a3b679SAndreas Boehler 'BAR' => '1', 512*a1a3b679SAndreas Boehler 'BAZ' => '+', 513*a1a3b679SAndreas Boehler 'ZIM' => '*', 514*a1a3b679SAndreas Boehler 'GIR' => '?', 515*a1a3b679SAndreas Boehler ); 516*a1a3b679SAndreas Boehler 517*a1a3b679SAndreas Boehler } 518*a1a3b679SAndreas Boehler 519*a1a3b679SAndreas Boehler public function getDefaults() { 520*a1a3b679SAndreas Boehler 521*a1a3b679SAndreas Boehler return array( 522*a1a3b679SAndreas Boehler 'BAR' => 'yow', 523*a1a3b679SAndreas Boehler ); 524*a1a3b679SAndreas Boehler 525*a1a3b679SAndreas Boehler } 526*a1a3b679SAndreas Boehler 527*a1a3b679SAndreas Boehler} 528*a1a3b679SAndreas Boehler 529