1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\VObject; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehlerclass ReaderTest extends \PHPUnit_Framework_TestCase { 6*a1a3b679SAndreas Boehler 7*a1a3b679SAndreas Boehler function testReadComponent() { 8*a1a3b679SAndreas Boehler 9*a1a3b679SAndreas Boehler $data = "BEGIN:VCALENDAR\r\nEND:VCALENDAR"; 10*a1a3b679SAndreas Boehler 11*a1a3b679SAndreas Boehler $result = Reader::read($data); 12*a1a3b679SAndreas Boehler 13*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Component', $result); 14*a1a3b679SAndreas Boehler $this->assertEquals('VCALENDAR', $result->name); 15*a1a3b679SAndreas Boehler $this->assertEquals(0, count($result->children)); 16*a1a3b679SAndreas Boehler 17*a1a3b679SAndreas Boehler } 18*a1a3b679SAndreas Boehler function testReadStream() { 19*a1a3b679SAndreas Boehler 20*a1a3b679SAndreas Boehler $data = "BEGIN:VCALENDAR\r\nEND:VCALENDAR"; 21*a1a3b679SAndreas Boehler 22*a1a3b679SAndreas Boehler $stream = fopen('php://memory', 'r+'); 23*a1a3b679SAndreas Boehler fwrite($stream, $data); 24*a1a3b679SAndreas Boehler rewind($stream); 25*a1a3b679SAndreas Boehler 26*a1a3b679SAndreas Boehler $result = Reader::read($stream); 27*a1a3b679SAndreas Boehler 28*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Component', $result); 29*a1a3b679SAndreas Boehler $this->assertEquals('VCALENDAR', $result->name); 30*a1a3b679SAndreas Boehler $this->assertEquals(0, count($result->children)); 31*a1a3b679SAndreas Boehler 32*a1a3b679SAndreas Boehler } 33*a1a3b679SAndreas Boehler 34*a1a3b679SAndreas Boehler function testReadComponentUnixNewLine() { 35*a1a3b679SAndreas Boehler 36*a1a3b679SAndreas Boehler $data = "BEGIN:VCALENDAR\nEND:VCALENDAR"; 37*a1a3b679SAndreas Boehler 38*a1a3b679SAndreas Boehler $result = Reader::read($data); 39*a1a3b679SAndreas Boehler 40*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Component', $result); 41*a1a3b679SAndreas Boehler $this->assertEquals('VCALENDAR', $result->name); 42*a1a3b679SAndreas Boehler $this->assertEquals(0, count($result->children)); 43*a1a3b679SAndreas Boehler 44*a1a3b679SAndreas Boehler } 45*a1a3b679SAndreas Boehler 46*a1a3b679SAndreas Boehler function testReadComponentLineFold() { 47*a1a3b679SAndreas Boehler 48*a1a3b679SAndreas Boehler $data = "BEGIN:\r\n\tVCALENDAR\r\nE\r\n ND:VCALENDAR"; 49*a1a3b679SAndreas Boehler 50*a1a3b679SAndreas Boehler $result = Reader::read($data); 51*a1a3b679SAndreas Boehler 52*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Component', $result); 53*a1a3b679SAndreas Boehler $this->assertEquals('VCALENDAR', $result->name); 54*a1a3b679SAndreas Boehler $this->assertEquals(0, count($result->children)); 55*a1a3b679SAndreas Boehler 56*a1a3b679SAndreas Boehler } 57*a1a3b679SAndreas Boehler 58*a1a3b679SAndreas Boehler /** 59*a1a3b679SAndreas Boehler * @expectedException Sabre\VObject\ParseException 60*a1a3b679SAndreas Boehler */ 61*a1a3b679SAndreas Boehler function testReadCorruptComponent() { 62*a1a3b679SAndreas Boehler 63*a1a3b679SAndreas Boehler $data = "BEGIN:VCALENDAR\r\nEND:FOO"; 64*a1a3b679SAndreas Boehler 65*a1a3b679SAndreas Boehler $result = Reader::read($data); 66*a1a3b679SAndreas Boehler 67*a1a3b679SAndreas Boehler } 68*a1a3b679SAndreas Boehler 69*a1a3b679SAndreas Boehler /** 70*a1a3b679SAndreas Boehler * @expectedException Sabre\VObject\ParseException 71*a1a3b679SAndreas Boehler */ 72*a1a3b679SAndreas Boehler function testReadCorruptSubComponent() { 73*a1a3b679SAndreas Boehler 74*a1a3b679SAndreas Boehler $data = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nEND:FOO\r\nEND:VCALENDAR"; 75*a1a3b679SAndreas Boehler 76*a1a3b679SAndreas Boehler $result = Reader::read($data); 77*a1a3b679SAndreas Boehler 78*a1a3b679SAndreas Boehler } 79*a1a3b679SAndreas Boehler 80*a1a3b679SAndreas Boehler function testReadProperty() { 81*a1a3b679SAndreas Boehler 82*a1a3b679SAndreas Boehler $data = "BEGIN:VCALENDAR\r\nSUMMARY:propValue\r\nEND:VCALENDAR"; 83*a1a3b679SAndreas Boehler $result = Reader::read($data); 84*a1a3b679SAndreas Boehler 85*a1a3b679SAndreas Boehler $result = $result->SUMMARY; 86*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Property', $result); 87*a1a3b679SAndreas Boehler $this->assertEquals('SUMMARY', $result->name); 88*a1a3b679SAndreas Boehler $this->assertEquals('propValue', $result->getValue()); 89*a1a3b679SAndreas Boehler 90*a1a3b679SAndreas Boehler } 91*a1a3b679SAndreas Boehler 92*a1a3b679SAndreas Boehler function testReadPropertyWithNewLine() { 93*a1a3b679SAndreas Boehler 94*a1a3b679SAndreas Boehler $data = "BEGIN:VCALENDAR\r\nSUMMARY:Line1\\nLine2\\NLine3\\\\Not the 4th line!\r\nEND:VCALENDAR"; 95*a1a3b679SAndreas Boehler $result = Reader::read($data); 96*a1a3b679SAndreas Boehler 97*a1a3b679SAndreas Boehler $result = $result->SUMMARY; 98*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Property', $result); 99*a1a3b679SAndreas Boehler $this->assertEquals('SUMMARY', $result->name); 100*a1a3b679SAndreas Boehler $this->assertEquals("Line1\nLine2\nLine3\\Not the 4th line!", $result->getValue()); 101*a1a3b679SAndreas Boehler 102*a1a3b679SAndreas Boehler } 103*a1a3b679SAndreas Boehler 104*a1a3b679SAndreas Boehler function testReadMappedProperty() { 105*a1a3b679SAndreas Boehler 106*a1a3b679SAndreas Boehler $data = "BEGIN:VCALENDAR\r\nDTSTART:20110529\r\nEND:VCALENDAR"; 107*a1a3b679SAndreas Boehler $result = Reader::read($data); 108*a1a3b679SAndreas Boehler 109*a1a3b679SAndreas Boehler $result = $result->DTSTART; 110*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Property\\ICalendar\\DateTime', $result); 111*a1a3b679SAndreas Boehler $this->assertEquals('DTSTART', $result->name); 112*a1a3b679SAndreas Boehler $this->assertEquals('20110529', $result->getValue()); 113*a1a3b679SAndreas Boehler 114*a1a3b679SAndreas Boehler } 115*a1a3b679SAndreas Boehler 116*a1a3b679SAndreas Boehler function testReadMappedPropertyGrouped() { 117*a1a3b679SAndreas Boehler 118*a1a3b679SAndreas Boehler $data = "BEGIN:VCALENDAR\r\nfoo.DTSTART:20110529\r\nEND:VCALENDAR"; 119*a1a3b679SAndreas Boehler $result = Reader::read($data); 120*a1a3b679SAndreas Boehler 121*a1a3b679SAndreas Boehler $result = $result->DTSTART; 122*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Property\\ICalendar\\DateTime', $result); 123*a1a3b679SAndreas Boehler $this->assertEquals('DTSTART', $result->name); 124*a1a3b679SAndreas Boehler $this->assertEquals('20110529', $result->getValue()); 125*a1a3b679SAndreas Boehler 126*a1a3b679SAndreas Boehler } 127*a1a3b679SAndreas Boehler 128*a1a3b679SAndreas Boehler /** 129*a1a3b679SAndreas Boehler * @expectedException Sabre\VObject\ParseException 130*a1a3b679SAndreas Boehler */ 131*a1a3b679SAndreas Boehler function testReadBrokenLine() { 132*a1a3b679SAndreas Boehler 133*a1a3b679SAndreas Boehler $data = "BEGIN:VCALENDAR\r\nPROPNAME;propValue"; 134*a1a3b679SAndreas Boehler $result = Reader::read($data); 135*a1a3b679SAndreas Boehler 136*a1a3b679SAndreas Boehler } 137*a1a3b679SAndreas Boehler 138*a1a3b679SAndreas Boehler function testReadPropertyInComponent() { 139*a1a3b679SAndreas Boehler 140*a1a3b679SAndreas Boehler $data = array( 141*a1a3b679SAndreas Boehler "BEGIN:VCALENDAR", 142*a1a3b679SAndreas Boehler "PROPNAME:propValue", 143*a1a3b679SAndreas Boehler "END:VCALENDAR" 144*a1a3b679SAndreas Boehler ); 145*a1a3b679SAndreas Boehler 146*a1a3b679SAndreas Boehler $result = Reader::read(implode("\r\n",$data)); 147*a1a3b679SAndreas Boehler 148*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Component', $result); 149*a1a3b679SAndreas Boehler $this->assertEquals('VCALENDAR', $result->name); 150*a1a3b679SAndreas Boehler $this->assertEquals(1, count($result->children())); 151*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Property', $result->children[0]); 152*a1a3b679SAndreas Boehler $this->assertEquals('PROPNAME', $result->children[0]->name); 153*a1a3b679SAndreas Boehler $this->assertEquals('propValue', $result->children[0]->getValue()); 154*a1a3b679SAndreas Boehler 155*a1a3b679SAndreas Boehler } 156*a1a3b679SAndreas Boehler 157*a1a3b679SAndreas Boehler function testReadNestedComponent() { 158*a1a3b679SAndreas Boehler 159*a1a3b679SAndreas Boehler $data = array( 160*a1a3b679SAndreas Boehler "BEGIN:VCALENDAR", 161*a1a3b679SAndreas Boehler "BEGIN:VTIMEZONE", 162*a1a3b679SAndreas Boehler "BEGIN:DAYLIGHT", 163*a1a3b679SAndreas Boehler "END:DAYLIGHT", 164*a1a3b679SAndreas Boehler "END:VTIMEZONE", 165*a1a3b679SAndreas Boehler "END:VCALENDAR" 166*a1a3b679SAndreas Boehler ); 167*a1a3b679SAndreas Boehler 168*a1a3b679SAndreas Boehler $result = Reader::read(implode("\r\n",$data)); 169*a1a3b679SAndreas Boehler 170*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Component', $result); 171*a1a3b679SAndreas Boehler $this->assertEquals('VCALENDAR', $result->name); 172*a1a3b679SAndreas Boehler $this->assertEquals(1, count($result->children())); 173*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Component', $result->children[0]); 174*a1a3b679SAndreas Boehler $this->assertEquals('VTIMEZONE', $result->children[0]->name); 175*a1a3b679SAndreas Boehler $this->assertEquals(1, count($result->children[0]->children())); 176*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Component', $result->children[0]->children[0]); 177*a1a3b679SAndreas Boehler $this->assertEquals('DAYLIGHT', $result->children[0]->children[0]->name); 178*a1a3b679SAndreas Boehler 179*a1a3b679SAndreas Boehler 180*a1a3b679SAndreas Boehler } 181*a1a3b679SAndreas Boehler 182*a1a3b679SAndreas Boehler function testReadPropertyParameter() { 183*a1a3b679SAndreas Boehler 184*a1a3b679SAndreas Boehler $data = "BEGIN:VCALENDAR\r\nPROPNAME;PARAMNAME=paramvalue:propValue\r\nEND:VCALENDAR"; 185*a1a3b679SAndreas Boehler $result = Reader::read($data); 186*a1a3b679SAndreas Boehler 187*a1a3b679SAndreas Boehler $result = $result->PROPNAME; 188*a1a3b679SAndreas Boehler 189*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Property', $result); 190*a1a3b679SAndreas Boehler $this->assertEquals('PROPNAME', $result->name); 191*a1a3b679SAndreas Boehler $this->assertEquals('propValue', $result->getValue()); 192*a1a3b679SAndreas Boehler $this->assertEquals(1, count($result->parameters())); 193*a1a3b679SAndreas Boehler $this->assertEquals('PARAMNAME', $result->parameters['PARAMNAME']->name); 194*a1a3b679SAndreas Boehler $this->assertEquals('paramvalue', $result->parameters['PARAMNAME']->getValue()); 195*a1a3b679SAndreas Boehler 196*a1a3b679SAndreas Boehler } 197*a1a3b679SAndreas Boehler 198*a1a3b679SAndreas Boehler function testReadPropertyRepeatingParameter() { 199*a1a3b679SAndreas Boehler 200*a1a3b679SAndreas Boehler $data = "BEGIN:VCALENDAR\r\nPROPNAME;N=1;N=2;N=3,4;N=\"5\",6;N=\"7,8\";N=9,10;N=^'11^':propValue\r\nEND:VCALENDAR"; 201*a1a3b679SAndreas Boehler $result = Reader::read($data); 202*a1a3b679SAndreas Boehler 203*a1a3b679SAndreas Boehler $result = $result->PROPNAME; 204*a1a3b679SAndreas Boehler 205*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Property', $result); 206*a1a3b679SAndreas Boehler $this->assertEquals('PROPNAME', $result->name); 207*a1a3b679SAndreas Boehler $this->assertEquals('propValue', $result->getValue()); 208*a1a3b679SAndreas Boehler $this->assertEquals(1, count($result->parameters())); 209*a1a3b679SAndreas Boehler $this->assertEquals('N', $result->parameters['N']->name); 210*a1a3b679SAndreas Boehler $this->assertEquals('1,2,3,4,5,6,7,8,9,10,"11"', $result->parameters['N']->getValue()); 211*a1a3b679SAndreas Boehler $this->assertEquals(array(1,2,3,4,5,6,"7,8",9,10,'"11"'), $result->parameters['N']->getParts()); 212*a1a3b679SAndreas Boehler 213*a1a3b679SAndreas Boehler } 214*a1a3b679SAndreas Boehler 215*a1a3b679SAndreas Boehler function testReadPropertyRepeatingNamelessGuessedParameter() { 216*a1a3b679SAndreas Boehler $data = "BEGIN:VCALENDAR\r\nPROPNAME;WORK;VOICE;PREF:propValue\r\nEND:VCALENDAR"; 217*a1a3b679SAndreas Boehler $result = Reader::read($data); 218*a1a3b679SAndreas Boehler 219*a1a3b679SAndreas Boehler $result = $result->PROPNAME; 220*a1a3b679SAndreas Boehler 221*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Property', $result); 222*a1a3b679SAndreas Boehler $this->assertEquals('PROPNAME', $result->name); 223*a1a3b679SAndreas Boehler $this->assertEquals('propValue', $result->getValue()); 224*a1a3b679SAndreas Boehler $this->assertEquals(1, count($result->parameters())); 225*a1a3b679SAndreas Boehler $this->assertEquals('TYPE', $result->parameters['TYPE']->name); 226*a1a3b679SAndreas Boehler $this->assertEquals('WORK,VOICE,PREF', $result->parameters['TYPE']->getValue()); 227*a1a3b679SAndreas Boehler $this->assertEquals(array('WORK', 'VOICE', 'PREF'), $result->parameters['TYPE']->getParts()); 228*a1a3b679SAndreas Boehler 229*a1a3b679SAndreas Boehler } 230*a1a3b679SAndreas Boehler 231*a1a3b679SAndreas Boehler function testReadPropertyNoName() { 232*a1a3b679SAndreas Boehler 233*a1a3b679SAndreas Boehler $data = "BEGIN:VCALENDAR\r\nPROPNAME;PRODIGY:propValue\r\nEND:VCALENDAR"; 234*a1a3b679SAndreas Boehler $result = Reader::read($data); 235*a1a3b679SAndreas Boehler 236*a1a3b679SAndreas Boehler $result = $result->PROPNAME; 237*a1a3b679SAndreas Boehler 238*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Property', $result); 239*a1a3b679SAndreas Boehler $this->assertEquals('PROPNAME', $result->name); 240*a1a3b679SAndreas Boehler $this->assertEquals('propValue', $result->getValue()); 241*a1a3b679SAndreas Boehler $this->assertEquals(1, count($result->parameters())); 242*a1a3b679SAndreas Boehler $this->assertEquals('TYPE', $result->parameters['TYPE']->name); 243*a1a3b679SAndreas Boehler $this->assertTrue($result->parameters['TYPE']->noName); 244*a1a3b679SAndreas Boehler $this->assertEquals('PRODIGY', $result->parameters['TYPE']); 245*a1a3b679SAndreas Boehler 246*a1a3b679SAndreas Boehler } 247*a1a3b679SAndreas Boehler 248*a1a3b679SAndreas Boehler function testReadPropertyParameterExtraColon() { 249*a1a3b679SAndreas Boehler 250*a1a3b679SAndreas Boehler $data = "BEGIN:VCALENDAR\r\nPROPNAME;PARAMNAME=paramvalue:propValue:anotherrandomstring\r\nEND:VCALENDAR"; 251*a1a3b679SAndreas Boehler $result = Reader::read($data); 252*a1a3b679SAndreas Boehler 253*a1a3b679SAndreas Boehler $result = $result->PROPNAME; 254*a1a3b679SAndreas Boehler 255*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Property', $result); 256*a1a3b679SAndreas Boehler $this->assertEquals('PROPNAME', $result->name); 257*a1a3b679SAndreas Boehler $this->assertEquals('propValue:anotherrandomstring', $result->getValue()); 258*a1a3b679SAndreas Boehler $this->assertEquals(1, count($result->parameters())); 259*a1a3b679SAndreas Boehler $this->assertEquals('PARAMNAME', $result->parameters['PARAMNAME']->name); 260*a1a3b679SAndreas Boehler $this->assertEquals('paramvalue', $result->parameters['PARAMNAME']->getValue()); 261*a1a3b679SAndreas Boehler 262*a1a3b679SAndreas Boehler } 263*a1a3b679SAndreas Boehler 264*a1a3b679SAndreas Boehler function testReadProperty2Parameters() { 265*a1a3b679SAndreas Boehler 266*a1a3b679SAndreas Boehler $data = "BEGIN:VCALENDAR\r\nPROPNAME;PARAMNAME=paramvalue;PARAMNAME2=paramvalue2:propValue\r\nEND:VCALENDAR"; 267*a1a3b679SAndreas Boehler $result = Reader::read($data); 268*a1a3b679SAndreas Boehler 269*a1a3b679SAndreas Boehler $result = $result->PROPNAME; 270*a1a3b679SAndreas Boehler 271*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Property', $result); 272*a1a3b679SAndreas Boehler $this->assertEquals('PROPNAME', $result->name); 273*a1a3b679SAndreas Boehler $this->assertEquals('propValue', $result->getValue()); 274*a1a3b679SAndreas Boehler $this->assertEquals(2, count($result->parameters())); 275*a1a3b679SAndreas Boehler $this->assertEquals('PARAMNAME', $result->parameters['PARAMNAME']->name); 276*a1a3b679SAndreas Boehler $this->assertEquals('paramvalue', $result->parameters['PARAMNAME']->getValue()); 277*a1a3b679SAndreas Boehler $this->assertEquals('PARAMNAME2', $result->parameters['PARAMNAME2']->name); 278*a1a3b679SAndreas Boehler $this->assertEquals('paramvalue2', $result->parameters['PARAMNAME2']->getValue()); 279*a1a3b679SAndreas Boehler 280*a1a3b679SAndreas Boehler } 281*a1a3b679SAndreas Boehler 282*a1a3b679SAndreas Boehler function testReadPropertyParameterQuoted() { 283*a1a3b679SAndreas Boehler 284*a1a3b679SAndreas Boehler $data = "BEGIN:VCALENDAR\r\nPROPNAME;PARAMNAME=\"paramvalue\":propValue\r\nEND:VCALENDAR"; 285*a1a3b679SAndreas Boehler $result = Reader::read($data); 286*a1a3b679SAndreas Boehler 287*a1a3b679SAndreas Boehler $result = $result->PROPNAME; 288*a1a3b679SAndreas Boehler 289*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Property', $result); 290*a1a3b679SAndreas Boehler $this->assertEquals('PROPNAME', $result->name); 291*a1a3b679SAndreas Boehler $this->assertEquals('propValue', $result->getValue()); 292*a1a3b679SAndreas Boehler $this->assertEquals(1, count($result->parameters())); 293*a1a3b679SAndreas Boehler $this->assertEquals('PARAMNAME', $result->parameters['PARAMNAME']->name); 294*a1a3b679SAndreas Boehler $this->assertEquals('paramvalue', $result->parameters['PARAMNAME']->getValue()); 295*a1a3b679SAndreas Boehler 296*a1a3b679SAndreas Boehler } 297*a1a3b679SAndreas Boehler 298*a1a3b679SAndreas Boehler function testReadPropertyParameterNewLines() { 299*a1a3b679SAndreas Boehler 300*a1a3b679SAndreas Boehler $data = "BEGIN:VCALENDAR\r\nPROPNAME;PARAMNAME=paramvalue1^nvalue2^^nvalue3:propValue\r\nEND:VCALENDAR"; 301*a1a3b679SAndreas Boehler $result = Reader::read($data); 302*a1a3b679SAndreas Boehler 303*a1a3b679SAndreas Boehler $result = $result->propname; 304*a1a3b679SAndreas Boehler 305*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Property', $result); 306*a1a3b679SAndreas Boehler $this->assertEquals('PROPNAME', $result->name); 307*a1a3b679SAndreas Boehler $this->assertEquals('propValue', $result->getValue()); 308*a1a3b679SAndreas Boehler 309*a1a3b679SAndreas Boehler $this->assertEquals(1, count($result->parameters())); 310*a1a3b679SAndreas Boehler $this->assertEquals('PARAMNAME', $result->parameters['PARAMNAME']->name); 311*a1a3b679SAndreas Boehler $this->assertEquals("paramvalue1\nvalue2^nvalue3", $result->parameters['PARAMNAME']->getValue()); 312*a1a3b679SAndreas Boehler 313*a1a3b679SAndreas Boehler } 314*a1a3b679SAndreas Boehler 315*a1a3b679SAndreas Boehler function testReadPropertyParameterQuotedColon() { 316*a1a3b679SAndreas Boehler 317*a1a3b679SAndreas Boehler $data = "BEGIN:VCALENDAR\r\nPROPNAME;PARAMNAME=\"param:value\":propValue\r\nEND:VCALENDAR"; 318*a1a3b679SAndreas Boehler $result = Reader::read($data); 319*a1a3b679SAndreas Boehler $result = $result->propname; 320*a1a3b679SAndreas Boehler 321*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Property', $result); 322*a1a3b679SAndreas Boehler $this->assertEquals('PROPNAME', $result->name); 323*a1a3b679SAndreas Boehler $this->assertEquals('propValue', $result->getValue()); 324*a1a3b679SAndreas Boehler $this->assertEquals(1, count($result->parameters())); 325*a1a3b679SAndreas Boehler $this->assertEquals('PARAMNAME', $result->parameters['PARAMNAME']->name); 326*a1a3b679SAndreas Boehler $this->assertEquals('param:value', $result->parameters['PARAMNAME']->getValue()); 327*a1a3b679SAndreas Boehler 328*a1a3b679SAndreas Boehler } 329*a1a3b679SAndreas Boehler 330*a1a3b679SAndreas Boehler function testReadForgiving() { 331*a1a3b679SAndreas Boehler 332*a1a3b679SAndreas Boehler $data = array( 333*a1a3b679SAndreas Boehler "BEGIN:VCALENDAR", 334*a1a3b679SAndreas Boehler "X_PROP:propValue", 335*a1a3b679SAndreas Boehler "END:VCALENDAR" 336*a1a3b679SAndreas Boehler ); 337*a1a3b679SAndreas Boehler 338*a1a3b679SAndreas Boehler $caught = false; 339*a1a3b679SAndreas Boehler try { 340*a1a3b679SAndreas Boehler $result = Reader::read(implode("\r\n",$data)); 341*a1a3b679SAndreas Boehler } catch (ParseException $e) { 342*a1a3b679SAndreas Boehler $caught = true; 343*a1a3b679SAndreas Boehler } 344*a1a3b679SAndreas Boehler 345*a1a3b679SAndreas Boehler $this->assertEquals(true, $caught); 346*a1a3b679SAndreas Boehler 347*a1a3b679SAndreas Boehler $result = Reader::read(implode("\r\n",$data), Reader::OPTION_FORGIVING); 348*a1a3b679SAndreas Boehler 349*a1a3b679SAndreas Boehler $expected = implode("\r\n", array( 350*a1a3b679SAndreas Boehler "BEGIN:VCALENDAR", 351*a1a3b679SAndreas Boehler "X_PROP:propValue", 352*a1a3b679SAndreas Boehler "END:VCALENDAR", 353*a1a3b679SAndreas Boehler "" 354*a1a3b679SAndreas Boehler )); 355*a1a3b679SAndreas Boehler 356*a1a3b679SAndreas Boehler $this->assertEquals($expected, $result->serialize()); 357*a1a3b679SAndreas Boehler 358*a1a3b679SAndreas Boehler } 359*a1a3b679SAndreas Boehler 360*a1a3b679SAndreas Boehler function testReadWithInvalidLine() { 361*a1a3b679SAndreas Boehler 362*a1a3b679SAndreas Boehler $data = array( 363*a1a3b679SAndreas Boehler "BEGIN:VCALENDAR", 364*a1a3b679SAndreas Boehler "DESCRIPTION:propValue", 365*a1a3b679SAndreas Boehler "Yes, we've actually seen a file with non-idented property values on multiple lines", 366*a1a3b679SAndreas Boehler "END:VCALENDAR" 367*a1a3b679SAndreas Boehler ); 368*a1a3b679SAndreas Boehler 369*a1a3b679SAndreas Boehler $caught = false; 370*a1a3b679SAndreas Boehler try { 371*a1a3b679SAndreas Boehler $result = Reader::read(implode("\r\n",$data)); 372*a1a3b679SAndreas Boehler } catch (ParseException $e) { 373*a1a3b679SAndreas Boehler $caught = true; 374*a1a3b679SAndreas Boehler } 375*a1a3b679SAndreas Boehler 376*a1a3b679SAndreas Boehler $this->assertEquals(true, $caught); 377*a1a3b679SAndreas Boehler 378*a1a3b679SAndreas Boehler $result = Reader::read(implode("\r\n",$data), Reader::OPTION_IGNORE_INVALID_LINES); 379*a1a3b679SAndreas Boehler 380*a1a3b679SAndreas Boehler $expected = implode("\r\n", array( 381*a1a3b679SAndreas Boehler "BEGIN:VCALENDAR", 382*a1a3b679SAndreas Boehler "DESCRIPTION:propValue", 383*a1a3b679SAndreas Boehler "END:VCALENDAR", 384*a1a3b679SAndreas Boehler "" 385*a1a3b679SAndreas Boehler )); 386*a1a3b679SAndreas Boehler 387*a1a3b679SAndreas Boehler $this->assertEquals($expected, $result->serialize()); 388*a1a3b679SAndreas Boehler 389*a1a3b679SAndreas Boehler } 390*a1a3b679SAndreas Boehler 391*a1a3b679SAndreas Boehler /** 392*a1a3b679SAndreas Boehler * Reported as Issue 32. 393*a1a3b679SAndreas Boehler * 394*a1a3b679SAndreas Boehler * @expectedException \Sabre\VObject\ParseException 395*a1a3b679SAndreas Boehler */ 396*a1a3b679SAndreas Boehler public function testReadIncompleteFile() { 397*a1a3b679SAndreas Boehler 398*a1a3b679SAndreas Boehler $input = <<<ICS 399*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR 400*a1a3b679SAndreas BoehlerVERSION:1.0 401*a1a3b679SAndreas BoehlerBEGIN:VEVENT 402*a1a3b679SAndreas BoehlerX-FUNAMBOL-FOLDER:DEFAULT_FOLDER 403*a1a3b679SAndreas BoehlerX-FUNAMBOL-ALLDAY:0 404*a1a3b679SAndreas BoehlerDTSTART:20111017T110000Z 405*a1a3b679SAndreas BoehlerDTEND:20111017T123000Z 406*a1a3b679SAndreas BoehlerX-MICROSOFT-CDO-BUSYSTATUS:BUSY 407*a1a3b679SAndreas BoehlerCATEGORIES: 408*a1a3b679SAndreas BoehlerLOCATION;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:Netviewer Meeting 409*a1a3b679SAndreas BoehlerPRIORITY:1 410*a1a3b679SAndreas BoehlerSTATUS:3 411*a1a3b679SAndreas BoehlerX-MICROSOFT-CDO-REPLYTIME:20111017T064200Z 412*a1a3b679SAndreas BoehlerSUMMARY;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:Kopieren: test 413*a1a3b679SAndreas BoehlerCLASS:PUBLIC 414*a1a3b679SAndreas BoehlerAALARM: 415*a1a3b679SAndreas BoehlerRRULE: 416*a1a3b679SAndreas BoehlerX-FUNAMBOL-BILLINGINFO: 417*a1a3b679SAndreas BoehlerX-FUNAMBOL-COMPANIES: 418*a1a3b679SAndreas BoehlerX-FUNAMBOL-MILEAGE: 419*a1a3b679SAndreas BoehlerX-FUNAMBOL-NOAGING:0 420*a1a3b679SAndreas BoehlerATTENDEE;STATUS=NEEDS ACTION;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:'Heino' heino@test.com 421*a1a3b679SAndreas BoehlerATTENDEE;STATUS=NEEDS ACTION;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:'Markus' test@test.com 422*a1a3b679SAndreas BoehlerATTENDEE;STATUS=NEEDS AC 423*a1a3b679SAndreas BoehlerICS; 424*a1a3b679SAndreas Boehler 425*a1a3b679SAndreas Boehler Reader::read($input); 426*a1a3b679SAndreas Boehler 427*a1a3b679SAndreas Boehler } 428*a1a3b679SAndreas Boehler 429*a1a3b679SAndreas Boehler /** 430*a1a3b679SAndreas Boehler * @expectedException \InvalidArgumentException 431*a1a3b679SAndreas Boehler */ 432*a1a3b679SAndreas Boehler public function testReadBrokenInput() { 433*a1a3b679SAndreas Boehler 434*a1a3b679SAndreas Boehler Reader::read(false); 435*a1a3b679SAndreas Boehler 436*a1a3b679SAndreas Boehler } 437*a1a3b679SAndreas Boehler 438*a1a3b679SAndreas Boehler public function testReadBOM() { 439*a1a3b679SAndreas Boehler 440*a1a3b679SAndreas Boehler $data = chr(0xef) . chr(0xbb) . chr(0xbf) . "BEGIN:VCALENDAR\r\nEND:VCALENDAR"; 441*a1a3b679SAndreas Boehler $result = Reader::read($data); 442*a1a3b679SAndreas Boehler 443*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Component', $result); 444*a1a3b679SAndreas Boehler $this->assertEquals('VCALENDAR', $result->name); 445*a1a3b679SAndreas Boehler $this->assertEquals(0, count($result->children)); 446*a1a3b679SAndreas Boehler 447*a1a3b679SAndreas Boehler } 448*a1a3b679SAndreas Boehler 449*a1a3b679SAndreas Boehler} 450