1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\VObject; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehlerclass VCardConverterTest extends TestCase { 6*a1a3b679SAndreas Boehler 7*a1a3b679SAndreas Boehler function testConvert30to40() { 8*a1a3b679SAndreas Boehler 9*a1a3b679SAndreas Boehler $input = <<<IN 10*a1a3b679SAndreas BoehlerBEGIN:VCARD 11*a1a3b679SAndreas BoehlerVERSION:3.0 12*a1a3b679SAndreas BoehlerPRODID:foo 13*a1a3b679SAndreas BoehlerFN;CHARSET=UTF-8:Steve 14*a1a3b679SAndreas BoehlerTEL;TYPE=PREF,HOME:+1 555 666 777 15*a1a3b679SAndreas BoehlerITEM1.TEL:+1 444 555 666 16*a1a3b679SAndreas BoehlerITEM1.X-ABLABEL:CustomLabel 17*a1a3b679SAndreas BoehlerPHOTO;ENCODING=b;TYPE=JPEG,HOME:Zm9v 18*a1a3b679SAndreas BoehlerPHOTO;ENCODING=b;TYPE=GIF:Zm9v 19*a1a3b679SAndreas BoehlerPHOTO;X-PARAM=FOO;ENCODING=b;TYPE=PNG:Zm9v 20*a1a3b679SAndreas BoehlerPHOTO;VALUE=URI:http://example.org/foo.png 21*a1a3b679SAndreas BoehlerX-ABShowAs:COMPANY 22*a1a3b679SAndreas BoehlerEND:VCARD 23*a1a3b679SAndreas BoehlerIN; 24*a1a3b679SAndreas Boehler 25*a1a3b679SAndreas Boehler $output = <<<OUT 26*a1a3b679SAndreas BoehlerBEGIN:VCARD 27*a1a3b679SAndreas BoehlerVERSION:4.0 28*a1a3b679SAndreas BoehlerFN:Steve 29*a1a3b679SAndreas BoehlerTEL;PREF=1;TYPE=HOME:+1 555 666 777 30*a1a3b679SAndreas BoehlerITEM1.TEL:+1 444 555 666 31*a1a3b679SAndreas BoehlerITEM1.X-ABLABEL:CustomLabel 32*a1a3b679SAndreas BoehlerPHOTO;TYPE=HOME:data:image/jpeg;base64,Zm9v 33*a1a3b679SAndreas BoehlerPHOTO:data:image/gif;base64,Zm9v 34*a1a3b679SAndreas BoehlerPHOTO;X-PARAM=FOO:data:image/png;base64,Zm9v 35*a1a3b679SAndreas BoehlerPHOTO:http://example.org/foo.png 36*a1a3b679SAndreas BoehlerKIND:ORG 37*a1a3b679SAndreas BoehlerEND:VCARD 38*a1a3b679SAndreas BoehlerOUT; 39*a1a3b679SAndreas Boehler 40*a1a3b679SAndreas Boehler $vcard = Reader::read($input); 41*a1a3b679SAndreas Boehler $vcard = $vcard->convert(Document::VCARD40); 42*a1a3b679SAndreas Boehler 43*a1a3b679SAndreas Boehler $this->assertVObjEquals( 44*a1a3b679SAndreas Boehler $output, 45*a1a3b679SAndreas Boehler $vcard 46*a1a3b679SAndreas Boehler ); 47*a1a3b679SAndreas Boehler 48*a1a3b679SAndreas Boehler } 49*a1a3b679SAndreas Boehler 50*a1a3b679SAndreas Boehler function testConvert40to40() { 51*a1a3b679SAndreas Boehler 52*a1a3b679SAndreas Boehler $input = <<<IN 53*a1a3b679SAndreas BoehlerBEGIN:VCARD 54*a1a3b679SAndreas BoehlerVERSION:4.0 55*a1a3b679SAndreas BoehlerFN:Steve 56*a1a3b679SAndreas BoehlerTEL;PREF=1;TYPE=HOME:+1 555 666 777 57*a1a3b679SAndreas BoehlerPHOTO:data:image/jpeg;base64,Zm9v 58*a1a3b679SAndreas BoehlerPHOTO:data:image/gif;base64,Zm9v 59*a1a3b679SAndreas BoehlerPHOTO;X-PARAM=FOO:data:image/png;base64,Zm9v 60*a1a3b679SAndreas BoehlerPHOTO:http://example.org/foo.png 61*a1a3b679SAndreas BoehlerEND:VCARD 62*a1a3b679SAndreas Boehler 63*a1a3b679SAndreas BoehlerIN; 64*a1a3b679SAndreas Boehler 65*a1a3b679SAndreas Boehler $output = <<<OUT 66*a1a3b679SAndreas BoehlerBEGIN:VCARD 67*a1a3b679SAndreas BoehlerVERSION:4.0 68*a1a3b679SAndreas BoehlerFN:Steve 69*a1a3b679SAndreas BoehlerTEL;PREF=1;TYPE=HOME:+1 555 666 777 70*a1a3b679SAndreas BoehlerPHOTO:data:image/jpeg;base64,Zm9v 71*a1a3b679SAndreas BoehlerPHOTO:data:image/gif;base64,Zm9v 72*a1a3b679SAndreas BoehlerPHOTO;X-PARAM=FOO:data:image/png;base64,Zm9v 73*a1a3b679SAndreas BoehlerPHOTO:http://example.org/foo.png 74*a1a3b679SAndreas BoehlerEND:VCARD 75*a1a3b679SAndreas Boehler 76*a1a3b679SAndreas BoehlerOUT; 77*a1a3b679SAndreas Boehler 78*a1a3b679SAndreas Boehler $vcard = Reader::read($input); 79*a1a3b679SAndreas Boehler $vcard = $vcard->convert(Document::VCARD40); 80*a1a3b679SAndreas Boehler 81*a1a3b679SAndreas Boehler $this->assertVObjEquals( 82*a1a3b679SAndreas Boehler $output, 83*a1a3b679SAndreas Boehler $vcard 84*a1a3b679SAndreas Boehler ); 85*a1a3b679SAndreas Boehler 86*a1a3b679SAndreas Boehler } 87*a1a3b679SAndreas Boehler 88*a1a3b679SAndreas Boehler function testConvert21to40() { 89*a1a3b679SAndreas Boehler 90*a1a3b679SAndreas Boehler $input = <<<IN 91*a1a3b679SAndreas BoehlerBEGIN:VCARD 92*a1a3b679SAndreas BoehlerVERSION:2.1 93*a1a3b679SAndreas BoehlerN:Family;Johnson 94*a1a3b679SAndreas BoehlerFN:Johnson Family 95*a1a3b679SAndreas BoehlerTEL;HOME;VOICE:555-12345-345 96*a1a3b679SAndreas BoehlerADR;HOME:;;100 Street Lane;Saubel Beach;ON;H0H0H0 97*a1a3b679SAndreas BoehlerLABEL;HOME;ENCODING=QUOTED-PRINTABLE:100 Street Lane=0D=0ASaubel Beach, 98*a1a3b679SAndreas Boehler ON H0H0H0 99*a1a3b679SAndreas BoehlerREV:20110731T040251Z 100*a1a3b679SAndreas BoehlerUID:12345678 101*a1a3b679SAndreas BoehlerEND:VCARD 102*a1a3b679SAndreas BoehlerIN; 103*a1a3b679SAndreas Boehler 104*a1a3b679SAndreas Boehler $output = <<<OUT 105*a1a3b679SAndreas BoehlerBEGIN:VCARD 106*a1a3b679SAndreas BoehlerVERSION:4.0 107*a1a3b679SAndreas BoehlerN:Family;Johnson;;; 108*a1a3b679SAndreas BoehlerFN:Johnson Family 109*a1a3b679SAndreas BoehlerTEL;TYPE=HOME,VOICE:555-12345-345 110*a1a3b679SAndreas BoehlerADR;TYPE=HOME:;;100 Street Lane;Saubel Beach;ON;H0H0H0; 111*a1a3b679SAndreas BoehlerREV:20110731T040251Z 112*a1a3b679SAndreas BoehlerUID:12345678 113*a1a3b679SAndreas BoehlerEND:VCARD 114*a1a3b679SAndreas Boehler 115*a1a3b679SAndreas BoehlerOUT; 116*a1a3b679SAndreas Boehler 117*a1a3b679SAndreas Boehler $vcard = Reader::read($input); 118*a1a3b679SAndreas Boehler $vcard = $vcard->convert(Document::VCARD40); 119*a1a3b679SAndreas Boehler 120*a1a3b679SAndreas Boehler $this->assertVObjEquals( 121*a1a3b679SAndreas Boehler $output, 122*a1a3b679SAndreas Boehler $vcard 123*a1a3b679SAndreas Boehler ); 124*a1a3b679SAndreas Boehler 125*a1a3b679SAndreas Boehler } 126*a1a3b679SAndreas Boehler 127*a1a3b679SAndreas Boehler function testConvert30to30() { 128*a1a3b679SAndreas Boehler 129*a1a3b679SAndreas Boehler $input = <<<IN 130*a1a3b679SAndreas BoehlerBEGIN:VCARD 131*a1a3b679SAndreas BoehlerVERSION:3.0 132*a1a3b679SAndreas BoehlerPRODID:foo 133*a1a3b679SAndreas BoehlerFN;CHARSET=UTF-8:Steve 134*a1a3b679SAndreas BoehlerTEL;TYPE=PREF,HOME:+1 555 666 777 135*a1a3b679SAndreas BoehlerPHOTO;ENCODING=b;TYPE=JPEG:Zm9v 136*a1a3b679SAndreas BoehlerPHOTO;ENCODING=b;TYPE=GIF:Zm9v 137*a1a3b679SAndreas BoehlerPHOTO;X-PARAM=FOO;ENCODING=b;TYPE=PNG:Zm9v 138*a1a3b679SAndreas BoehlerPHOTO;VALUE=URI:http://example.org/foo.png 139*a1a3b679SAndreas BoehlerEND:VCARD 140*a1a3b679SAndreas Boehler 141*a1a3b679SAndreas BoehlerIN; 142*a1a3b679SAndreas Boehler 143*a1a3b679SAndreas Boehler $output = <<<OUT 144*a1a3b679SAndreas BoehlerBEGIN:VCARD 145*a1a3b679SAndreas BoehlerVERSION:3.0 146*a1a3b679SAndreas BoehlerPRODID:foo 147*a1a3b679SAndreas BoehlerFN;CHARSET=UTF-8:Steve 148*a1a3b679SAndreas BoehlerTEL;TYPE=PREF,HOME:+1 555 666 777 149*a1a3b679SAndreas BoehlerPHOTO;ENCODING=b;TYPE=JPEG:Zm9v 150*a1a3b679SAndreas BoehlerPHOTO;ENCODING=b;TYPE=GIF:Zm9v 151*a1a3b679SAndreas BoehlerPHOTO;X-PARAM=FOO;ENCODING=b;TYPE=PNG:Zm9v 152*a1a3b679SAndreas BoehlerPHOTO;VALUE=URI:http://example.org/foo.png 153*a1a3b679SAndreas BoehlerEND:VCARD 154*a1a3b679SAndreas Boehler 155*a1a3b679SAndreas BoehlerOUT; 156*a1a3b679SAndreas Boehler 157*a1a3b679SAndreas Boehler $vcard = Reader::read($input); 158*a1a3b679SAndreas Boehler $vcard = $vcard->convert(Document::VCARD30); 159*a1a3b679SAndreas Boehler 160*a1a3b679SAndreas Boehler $this->assertVObjEquals( 161*a1a3b679SAndreas Boehler $output, 162*a1a3b679SAndreas Boehler $vcard 163*a1a3b679SAndreas Boehler ); 164*a1a3b679SAndreas Boehler 165*a1a3b679SAndreas Boehler } 166*a1a3b679SAndreas Boehler 167*a1a3b679SAndreas Boehler function testConvert40to30() { 168*a1a3b679SAndreas Boehler 169*a1a3b679SAndreas Boehler $input = <<<IN 170*a1a3b679SAndreas BoehlerBEGIN:VCARD 171*a1a3b679SAndreas BoehlerVERSION:4.0 172*a1a3b679SAndreas BoehlerPRODID:foo 173*a1a3b679SAndreas BoehlerFN:Steve 174*a1a3b679SAndreas BoehlerTEL;PREF=1;TYPE=HOME:+1 555 666 777 175*a1a3b679SAndreas BoehlerPHOTO:data:image/jpeg;base64,Zm9v 176*a1a3b679SAndreas BoehlerPHOTO:data:image/gif,foo 177*a1a3b679SAndreas BoehlerPHOTO;X-PARAM=FOO:data:image/png;base64,Zm9v 178*a1a3b679SAndreas BoehlerPHOTO:http://example.org/foo.png 179*a1a3b679SAndreas BoehlerKIND:ORG 180*a1a3b679SAndreas BoehlerEND:VCARD 181*a1a3b679SAndreas Boehler 182*a1a3b679SAndreas BoehlerIN; 183*a1a3b679SAndreas Boehler 184*a1a3b679SAndreas Boehler $output = <<<OUT 185*a1a3b679SAndreas BoehlerBEGIN:VCARD 186*a1a3b679SAndreas BoehlerVERSION:3.0 187*a1a3b679SAndreas BoehlerFN:Steve 188*a1a3b679SAndreas BoehlerTEL;TYPE=PREF,HOME:+1 555 666 777 189*a1a3b679SAndreas BoehlerPHOTO;ENCODING=b;TYPE=JPEG:Zm9v 190*a1a3b679SAndreas BoehlerPHOTO;ENCODING=b;TYPE=GIF:Zm9v 191*a1a3b679SAndreas BoehlerPHOTO;ENCODING=b;TYPE=PNG;X-PARAM=FOO:Zm9v 192*a1a3b679SAndreas BoehlerPHOTO;VALUE=URI:http://example.org/foo.png 193*a1a3b679SAndreas BoehlerX-ABSHOWAS:COMPANY 194*a1a3b679SAndreas BoehlerEND:VCARD 195*a1a3b679SAndreas Boehler 196*a1a3b679SAndreas BoehlerOUT; 197*a1a3b679SAndreas Boehler 198*a1a3b679SAndreas Boehler $vcard = Reader::read($input); 199*a1a3b679SAndreas Boehler $vcard = $vcard->convert(Document::VCARD30); 200*a1a3b679SAndreas Boehler 201*a1a3b679SAndreas Boehler $this->assertVObjEquals( 202*a1a3b679SAndreas Boehler $output, 203*a1a3b679SAndreas Boehler $vcard 204*a1a3b679SAndreas Boehler ); 205*a1a3b679SAndreas Boehler 206*a1a3b679SAndreas Boehler } 207*a1a3b679SAndreas Boehler 208*a1a3b679SAndreas Boehler function testConvertGroupCard() { 209*a1a3b679SAndreas Boehler 210*a1a3b679SAndreas Boehler $input = <<<IN 211*a1a3b679SAndreas BoehlerBEGIN:VCARD 212*a1a3b679SAndreas BoehlerVERSION:3.0 213*a1a3b679SAndreas BoehlerPRODID:foo 214*a1a3b679SAndreas BoehlerX-ADDRESSBOOKSERVER-KIND:GROUP 215*a1a3b679SAndreas BoehlerEND:VCARD 216*a1a3b679SAndreas Boehler 217*a1a3b679SAndreas BoehlerIN; 218*a1a3b679SAndreas Boehler 219*a1a3b679SAndreas Boehler $output = <<<OUT 220*a1a3b679SAndreas BoehlerBEGIN:VCARD 221*a1a3b679SAndreas BoehlerVERSION:4.0 222*a1a3b679SAndreas BoehlerKIND:GROUP 223*a1a3b679SAndreas BoehlerEND:VCARD 224*a1a3b679SAndreas Boehler 225*a1a3b679SAndreas BoehlerOUT; 226*a1a3b679SAndreas Boehler 227*a1a3b679SAndreas Boehler $vcard = Reader::read($input); 228*a1a3b679SAndreas Boehler $vcard = $vcard->convert(Document::VCARD40); 229*a1a3b679SAndreas Boehler 230*a1a3b679SAndreas Boehler $this->assertVObjEquals( 231*a1a3b679SAndreas Boehler $output, 232*a1a3b679SAndreas Boehler $vcard 233*a1a3b679SAndreas Boehler ); 234*a1a3b679SAndreas Boehler 235*a1a3b679SAndreas Boehler $input = $output; 236*a1a3b679SAndreas Boehler $output = <<<OUT 237*a1a3b679SAndreas BoehlerBEGIN:VCARD 238*a1a3b679SAndreas BoehlerVERSION:3.0 239*a1a3b679SAndreas BoehlerX-ADDRESSBOOKSERVER-KIND:GROUP 240*a1a3b679SAndreas BoehlerEND:VCARD 241*a1a3b679SAndreas Boehler 242*a1a3b679SAndreas BoehlerOUT; 243*a1a3b679SAndreas Boehler 244*a1a3b679SAndreas Boehler $vcard = Reader::read($input); 245*a1a3b679SAndreas Boehler $vcard = $vcard->convert(Document::VCARD30); 246*a1a3b679SAndreas Boehler 247*a1a3b679SAndreas Boehler $this->assertVObjEquals( 248*a1a3b679SAndreas Boehler $output, 249*a1a3b679SAndreas Boehler $vcard 250*a1a3b679SAndreas Boehler ); 251*a1a3b679SAndreas Boehler 252*a1a3b679SAndreas Boehler } 253*a1a3b679SAndreas Boehler 254*a1a3b679SAndreas Boehler function testBDAYConversion() { 255*a1a3b679SAndreas Boehler 256*a1a3b679SAndreas Boehler $input = <<<IN 257*a1a3b679SAndreas BoehlerBEGIN:VCARD 258*a1a3b679SAndreas BoehlerVERSION:3.0 259*a1a3b679SAndreas BoehlerPRODID:foo 260*a1a3b679SAndreas BoehlerBDAY;X-APPLE-OMIT-YEAR=1604:1604-04-16 261*a1a3b679SAndreas BoehlerEND:VCARD 262*a1a3b679SAndreas Boehler 263*a1a3b679SAndreas BoehlerIN; 264*a1a3b679SAndreas Boehler 265*a1a3b679SAndreas Boehler $output = <<<OUT 266*a1a3b679SAndreas BoehlerBEGIN:VCARD 267*a1a3b679SAndreas BoehlerVERSION:4.0 268*a1a3b679SAndreas BoehlerBDAY:--04-16 269*a1a3b679SAndreas BoehlerEND:VCARD 270*a1a3b679SAndreas Boehler 271*a1a3b679SAndreas BoehlerOUT; 272*a1a3b679SAndreas Boehler 273*a1a3b679SAndreas Boehler $vcard = Reader::read($input); 274*a1a3b679SAndreas Boehler $vcard = $vcard->convert(Document::VCARD40); 275*a1a3b679SAndreas Boehler 276*a1a3b679SAndreas Boehler $this->assertVObjEquals( 277*a1a3b679SAndreas Boehler $output, 278*a1a3b679SAndreas Boehler $vcard 279*a1a3b679SAndreas Boehler ); 280*a1a3b679SAndreas Boehler 281*a1a3b679SAndreas Boehler $input = $output; 282*a1a3b679SAndreas Boehler $output = <<<OUT 283*a1a3b679SAndreas BoehlerBEGIN:VCARD 284*a1a3b679SAndreas BoehlerVERSION:3.0 285*a1a3b679SAndreas BoehlerBDAY;X-APPLE-OMIT-YEAR=1604:1604-04-16 286*a1a3b679SAndreas BoehlerEND:VCARD 287*a1a3b679SAndreas Boehler 288*a1a3b679SAndreas BoehlerOUT; 289*a1a3b679SAndreas Boehler 290*a1a3b679SAndreas Boehler $vcard = Reader::read($input); 291*a1a3b679SAndreas Boehler $vcard = $vcard->convert(Document::VCARD30); 292*a1a3b679SAndreas Boehler 293*a1a3b679SAndreas Boehler $this->assertVObjEquals( 294*a1a3b679SAndreas Boehler $output, 295*a1a3b679SAndreas Boehler $vcard 296*a1a3b679SAndreas Boehler ); 297*a1a3b679SAndreas Boehler 298*a1a3b679SAndreas Boehler } 299*a1a3b679SAndreas Boehler 300*a1a3b679SAndreas Boehler /** 301*a1a3b679SAndreas Boehler * @expectedException InvalidArgumentException 302*a1a3b679SAndreas Boehler */ 303*a1a3b679SAndreas Boehler function testUnknownSourceVCardVersion() { 304*a1a3b679SAndreas Boehler 305*a1a3b679SAndreas Boehler $input = <<<IN 306*a1a3b679SAndreas BoehlerBEGIN:VCARD 307*a1a3b679SAndreas BoehlerVERSION:4.2 308*a1a3b679SAndreas BoehlerPRODID:foo 309*a1a3b679SAndreas BoehlerFN;CHARSET=UTF-8:Steve 310*a1a3b679SAndreas BoehlerTEL;TYPE=PREF,HOME:+1 555 666 777 311*a1a3b679SAndreas BoehlerITEM1.TEL:+1 444 555 666 312*a1a3b679SAndreas BoehlerITEM1.X-ABLABEL:CustomLabel 313*a1a3b679SAndreas BoehlerPHOTO;ENCODING=b;TYPE=JPEG,HOME:Zm9v 314*a1a3b679SAndreas BoehlerPHOTO;ENCODING=b;TYPE=GIF:Zm9v 315*a1a3b679SAndreas BoehlerPHOTO;X-PARAM=FOO;ENCODING=b;TYPE=PNG:Zm9v 316*a1a3b679SAndreas BoehlerPHOTO;VALUE=URI:http://example.org/foo.png 317*a1a3b679SAndreas BoehlerX-ABShowAs:COMPANY 318*a1a3b679SAndreas BoehlerEND:VCARD 319*a1a3b679SAndreas Boehler 320*a1a3b679SAndreas BoehlerIN; 321*a1a3b679SAndreas Boehler 322*a1a3b679SAndreas Boehler $vcard = Reader::read($input); 323*a1a3b679SAndreas Boehler $vcard->convert(Document::VCARD40); 324*a1a3b679SAndreas Boehler 325*a1a3b679SAndreas Boehler } 326*a1a3b679SAndreas Boehler 327*a1a3b679SAndreas Boehler /** 328*a1a3b679SAndreas Boehler * @expectedException InvalidArgumentException 329*a1a3b679SAndreas Boehler */ 330*a1a3b679SAndreas Boehler function testUnknownTargetVCardVersion() { 331*a1a3b679SAndreas Boehler 332*a1a3b679SAndreas Boehler $input = <<<IN 333*a1a3b679SAndreas BoehlerBEGIN:VCARD 334*a1a3b679SAndreas BoehlerVERSION:3.0 335*a1a3b679SAndreas BoehlerPRODID:foo 336*a1a3b679SAndreas BoehlerEND:VCARD 337*a1a3b679SAndreas Boehler 338*a1a3b679SAndreas BoehlerIN; 339*a1a3b679SAndreas Boehler 340*a1a3b679SAndreas Boehler $vcard = Reader::read($input); 341*a1a3b679SAndreas Boehler $vcard->convert(Document::VCARD21); 342*a1a3b679SAndreas Boehler 343*a1a3b679SAndreas Boehler } 344*a1a3b679SAndreas Boehler 345*a1a3b679SAndreas Boehler function testConvertIndividualCard() { 346*a1a3b679SAndreas Boehler 347*a1a3b679SAndreas Boehler $input = <<<IN 348*a1a3b679SAndreas BoehlerBEGIN:VCARD 349*a1a3b679SAndreas BoehlerVERSION:4.0 350*a1a3b679SAndreas BoehlerPRODID:foo 351*a1a3b679SAndreas BoehlerKIND:INDIVIDUAL 352*a1a3b679SAndreas BoehlerEND:VCARD 353*a1a3b679SAndreas Boehler 354*a1a3b679SAndreas BoehlerIN; 355*a1a3b679SAndreas Boehler 356*a1a3b679SAndreas Boehler $output = <<<OUT 357*a1a3b679SAndreas BoehlerBEGIN:VCARD 358*a1a3b679SAndreas BoehlerVERSION:3.0 359*a1a3b679SAndreas BoehlerEND:VCARD 360*a1a3b679SAndreas Boehler 361*a1a3b679SAndreas BoehlerOUT; 362*a1a3b679SAndreas Boehler 363*a1a3b679SAndreas Boehler $vcard = Reader::read($input); 364*a1a3b679SAndreas Boehler $vcard = $vcard->convert(Document::VCARD30); 365*a1a3b679SAndreas Boehler 366*a1a3b679SAndreas Boehler $this->assertVObjEquals( 367*a1a3b679SAndreas Boehler $output, 368*a1a3b679SAndreas Boehler $vcard 369*a1a3b679SAndreas Boehler ); 370*a1a3b679SAndreas Boehler 371*a1a3b679SAndreas Boehler $input = $output; 372*a1a3b679SAndreas Boehler $output = <<<OUT 373*a1a3b679SAndreas BoehlerBEGIN:VCARD 374*a1a3b679SAndreas BoehlerVERSION:4.0 375*a1a3b679SAndreas BoehlerEND:VCARD 376*a1a3b679SAndreas Boehler 377*a1a3b679SAndreas BoehlerOUT; 378*a1a3b679SAndreas Boehler 379*a1a3b679SAndreas Boehler $vcard = Reader::read($input); 380*a1a3b679SAndreas Boehler $vcard = $vcard->convert(Document::VCARD40); 381*a1a3b679SAndreas Boehler 382*a1a3b679SAndreas Boehler $this->assertVObjEquals( 383*a1a3b679SAndreas Boehler $output, 384*a1a3b679SAndreas Boehler $vcard 385*a1a3b679SAndreas Boehler ); 386*a1a3b679SAndreas Boehler 387*a1a3b679SAndreas Boehler } 388*a1a3b679SAndreas Boehler 389*a1a3b679SAndreas Boehler function testAnniversary() { 390*a1a3b679SAndreas Boehler 391*a1a3b679SAndreas Boehler $input = <<<IN 392*a1a3b679SAndreas BoehlerBEGIN:VCARD 393*a1a3b679SAndreas BoehlerVERSION:4.0 394*a1a3b679SAndreas BoehlerITEM1.ANNIVERSARY:20081210 395*a1a3b679SAndreas BoehlerEND:VCARD 396*a1a3b679SAndreas Boehler 397*a1a3b679SAndreas BoehlerIN; 398*a1a3b679SAndreas Boehler 399*a1a3b679SAndreas Boehler $output = <<<'OUT' 400*a1a3b679SAndreas BoehlerBEGIN:VCARD 401*a1a3b679SAndreas BoehlerVERSION:3.0 402*a1a3b679SAndreas BoehlerITEM1.X-ABDATE;VALUE=DATE-AND-OR-TIME:20081210 403*a1a3b679SAndreas BoehlerITEM1.X-ABLABEL:_$!<Anniversary>!$_ 404*a1a3b679SAndreas BoehlerITEM1.X-ANNIVERSARY;VALUE=DATE-AND-OR-TIME:20081210 405*a1a3b679SAndreas BoehlerEND:VCARD 406*a1a3b679SAndreas Boehler 407*a1a3b679SAndreas BoehlerOUT; 408*a1a3b679SAndreas Boehler 409*a1a3b679SAndreas Boehler $vcard = Reader::read($input); 410*a1a3b679SAndreas Boehler $vcard = $vcard->convert(Document::VCARD30); 411*a1a3b679SAndreas Boehler 412*a1a3b679SAndreas Boehler $this->assertVObjEquals( 413*a1a3b679SAndreas Boehler $output, 414*a1a3b679SAndreas Boehler $vcard 415*a1a3b679SAndreas Boehler ); 416*a1a3b679SAndreas Boehler 417*a1a3b679SAndreas Boehler // Swapping input and output 418*a1a3b679SAndreas Boehler list( 419*a1a3b679SAndreas Boehler $input, 420*a1a3b679SAndreas Boehler $output 421*a1a3b679SAndreas Boehler ) = array( 422*a1a3b679SAndreas Boehler $output, 423*a1a3b679SAndreas Boehler $input 424*a1a3b679SAndreas Boehler ); 425*a1a3b679SAndreas Boehler 426*a1a3b679SAndreas Boehler $vcard = Reader::read($input); 427*a1a3b679SAndreas Boehler $vcard = $vcard->convert(Document::VCARD40); 428*a1a3b679SAndreas Boehler 429*a1a3b679SAndreas Boehler $this->assertVObjEquals( 430*a1a3b679SAndreas Boehler $output, 431*a1a3b679SAndreas Boehler $vcard 432*a1a3b679SAndreas Boehler ); 433*a1a3b679SAndreas Boehler 434*a1a3b679SAndreas Boehler } 435*a1a3b679SAndreas Boehler 436*a1a3b679SAndreas Boehler function testMultipleAnniversaries() { 437*a1a3b679SAndreas Boehler 438*a1a3b679SAndreas Boehler $input = <<<IN 439*a1a3b679SAndreas BoehlerBEGIN:VCARD 440*a1a3b679SAndreas BoehlerVERSION:4.0 441*a1a3b679SAndreas BoehlerITEM1.ANNIVERSARY:20081210 442*a1a3b679SAndreas BoehlerITEM2.ANNIVERSARY:20091210 443*a1a3b679SAndreas BoehlerITEM3.ANNIVERSARY:20101210 444*a1a3b679SAndreas BoehlerEND:VCARD 445*a1a3b679SAndreas Boehler 446*a1a3b679SAndreas BoehlerIN; 447*a1a3b679SAndreas Boehler 448*a1a3b679SAndreas Boehler $output = <<<'OUT' 449*a1a3b679SAndreas BoehlerBEGIN:VCARD 450*a1a3b679SAndreas BoehlerVERSION:3.0 451*a1a3b679SAndreas BoehlerITEM1.X-ABDATE;VALUE=DATE-AND-OR-TIME:20081210 452*a1a3b679SAndreas BoehlerITEM1.X-ABLABEL:_$!<Anniversary>!$_ 453*a1a3b679SAndreas BoehlerITEM1.X-ANNIVERSARY;VALUE=DATE-AND-OR-TIME:20081210 454*a1a3b679SAndreas BoehlerITEM2.X-ABDATE;VALUE=DATE-AND-OR-TIME:20091210 455*a1a3b679SAndreas BoehlerITEM2.X-ABLABEL:_$!<Anniversary>!$_ 456*a1a3b679SAndreas BoehlerITEM2.X-ANNIVERSARY;VALUE=DATE-AND-OR-TIME:20091210 457*a1a3b679SAndreas BoehlerITEM3.X-ABDATE;VALUE=DATE-AND-OR-TIME:20101210 458*a1a3b679SAndreas BoehlerITEM3.X-ABLABEL:_$!<Anniversary>!$_ 459*a1a3b679SAndreas BoehlerITEM3.X-ANNIVERSARY;VALUE=DATE-AND-OR-TIME:20101210 460*a1a3b679SAndreas BoehlerEND:VCARD 461*a1a3b679SAndreas Boehler 462*a1a3b679SAndreas BoehlerOUT; 463*a1a3b679SAndreas Boehler 464*a1a3b679SAndreas Boehler $vcard = Reader::read($input); 465*a1a3b679SAndreas Boehler $vcard = $vcard->convert(Document::VCARD30); 466*a1a3b679SAndreas Boehler 467*a1a3b679SAndreas Boehler $this->assertVObjEquals( 468*a1a3b679SAndreas Boehler $output, 469*a1a3b679SAndreas Boehler $vcard 470*a1a3b679SAndreas Boehler ); 471*a1a3b679SAndreas Boehler 472*a1a3b679SAndreas Boehler // Swapping input and output 473*a1a3b679SAndreas Boehler list( 474*a1a3b679SAndreas Boehler $input, 475*a1a3b679SAndreas Boehler $output 476*a1a3b679SAndreas Boehler ) = array( 477*a1a3b679SAndreas Boehler $output, 478*a1a3b679SAndreas Boehler $input 479*a1a3b679SAndreas Boehler ); 480*a1a3b679SAndreas Boehler 481*a1a3b679SAndreas Boehler $vcard = Reader::read($input); 482*a1a3b679SAndreas Boehler $vcard = $vcard->convert(Document::VCARD40); 483*a1a3b679SAndreas Boehler 484*a1a3b679SAndreas Boehler $this->assertVObjEquals( 485*a1a3b679SAndreas Boehler $output, 486*a1a3b679SAndreas Boehler $vcard 487*a1a3b679SAndreas Boehler ); 488*a1a3b679SAndreas Boehler 489*a1a3b679SAndreas Boehler } 490*a1a3b679SAndreas Boehler 491*a1a3b679SAndreas Boehler function testNoLabel() { 492*a1a3b679SAndreas Boehler 493*a1a3b679SAndreas Boehler $input = <<<VCF 494*a1a3b679SAndreas BoehlerBEGIN:VCARD 495*a1a3b679SAndreas BoehlerVERSION:3.0 496*a1a3b679SAndreas BoehlerUID:foo 497*a1a3b679SAndreas BoehlerN:Doe;John;;; 498*a1a3b679SAndreas BoehlerFN:John Doe 499*a1a3b679SAndreas Boehleritem1.X-ABDATE;type=pref:2008-12-11 500*a1a3b679SAndreas BoehlerEND:VCARD 501*a1a3b679SAndreas Boehler 502*a1a3b679SAndreas BoehlerVCF; 503*a1a3b679SAndreas Boehler 504*a1a3b679SAndreas Boehler $vcard = Reader::read($input); 505*a1a3b679SAndreas Boehler 506*a1a3b679SAndreas Boehler $this->assertInstanceOf('Sabre\\VObject\\Component\\VCard', $vcard); 507*a1a3b679SAndreas Boehler $vcard = $vcard->convert(Document::VCARD40); 508*a1a3b679SAndreas Boehler $vcard = $vcard->serialize(); 509*a1a3b679SAndreas Boehler 510*a1a3b679SAndreas Boehler $converted = Reader::read($vcard); 511*a1a3b679SAndreas Boehler $converted->validate(); 512*a1a3b679SAndreas Boehler 513*a1a3b679SAndreas Boehler $version = Version::VERSION; 514*a1a3b679SAndreas Boehler 515*a1a3b679SAndreas Boehler $expected = <<<VCF 516*a1a3b679SAndreas BoehlerBEGIN:VCARD 517*a1a3b679SAndreas BoehlerVERSION:4.0 518*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject $version//EN 519*a1a3b679SAndreas BoehlerUID:foo 520*a1a3b679SAndreas BoehlerN:Doe;John;;; 521*a1a3b679SAndreas BoehlerFN:John Doe 522*a1a3b679SAndreas BoehlerITEM1.X-ABDATE;PREF=1:2008-12-11 523*a1a3b679SAndreas BoehlerEND:VCARD 524*a1a3b679SAndreas Boehler 525*a1a3b679SAndreas BoehlerVCF; 526*a1a3b679SAndreas Boehler 527*a1a3b679SAndreas Boehler $this->assertEquals($expected, str_replace("\r","", $vcard)); 528*a1a3b679SAndreas Boehler 529*a1a3b679SAndreas Boehler } 530*a1a3b679SAndreas Boehler 531*a1a3b679SAndreas Boehler} 532