Mercurial > hg > rc1
diff vendor/sabre/vobject/tests/VObject/VCardConverterTest.php @ 7:430dbd5346f7
vendor sabre as distributed
author | Charlie Root |
---|---|
date | Sat, 13 Jan 2018 09:06:10 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/sabre/vobject/tests/VObject/VCardConverterTest.php Sat Jan 13 09:06:10 2018 -0500 @@ -0,0 +1,531 @@ +<?php + +namespace Sabre\VObject; + +class VCardConverterTest extends TestCase { + + function testConvert30to40() { + + $input = <<<IN +BEGIN:VCARD +VERSION:3.0 +PRODID:foo +FN;CHARSET=UTF-8:Steve +TEL;TYPE=PREF,HOME:+1 555 666 777 +ITEM1.TEL:+1 444 555 666 +ITEM1.X-ABLABEL:CustomLabel +PHOTO;ENCODING=b;TYPE=JPEG,HOME:Zm9v +PHOTO;ENCODING=b;TYPE=GIF:Zm9v +PHOTO;X-PARAM=FOO;ENCODING=b;TYPE=PNG:Zm9v +PHOTO;VALUE=URI:http://example.org/foo.png +X-ABShowAs:COMPANY +END:VCARD +IN; + + $output = <<<OUT +BEGIN:VCARD +VERSION:4.0 +FN:Steve +TEL;PREF=1;TYPE=HOME:+1 555 666 777 +ITEM1.TEL:+1 444 555 666 +ITEM1.X-ABLABEL:CustomLabel +PHOTO;TYPE=HOME:data:image/jpeg;base64,Zm9v +PHOTO:data:image/gif;base64,Zm9v +PHOTO;X-PARAM=FOO:data:image/png;base64,Zm9v +PHOTO:http://example.org/foo.png +KIND:ORG +END:VCARD +OUT; + + $vcard = Reader::read($input); + $vcard = $vcard->convert(Document::VCARD40); + + $this->assertVObjEquals( + $output, + $vcard + ); + + } + + function testConvert40to40() { + + $input = <<<IN +BEGIN:VCARD +VERSION:4.0 +FN:Steve +TEL;PREF=1;TYPE=HOME:+1 555 666 777 +PHOTO:data:image/jpeg;base64,Zm9v +PHOTO:data:image/gif;base64,Zm9v +PHOTO;X-PARAM=FOO:data:image/png;base64,Zm9v +PHOTO:http://example.org/foo.png +END:VCARD + +IN; + + $output = <<<OUT +BEGIN:VCARD +VERSION:4.0 +FN:Steve +TEL;PREF=1;TYPE=HOME:+1 555 666 777 +PHOTO:data:image/jpeg;base64,Zm9v +PHOTO:data:image/gif;base64,Zm9v +PHOTO;X-PARAM=FOO:data:image/png;base64,Zm9v +PHOTO:http://example.org/foo.png +END:VCARD + +OUT; + + $vcard = Reader::read($input); + $vcard = $vcard->convert(Document::VCARD40); + + $this->assertVObjEquals( + $output, + $vcard + ); + + } + + function testConvert21to40() { + + $input = <<<IN +BEGIN:VCARD +VERSION:2.1 +N:Family;Johnson +FN:Johnson Family +TEL;HOME;VOICE:555-12345-345 +ADR;HOME:;;100 Street Lane;Saubel Beach;ON;H0H0H0 +LABEL;HOME;ENCODING=QUOTED-PRINTABLE:100 Street Lane=0D=0ASaubel Beach, + ON H0H0H0 +REV:20110731T040251Z +UID:12345678 +END:VCARD +IN; + + $output = <<<OUT +BEGIN:VCARD +VERSION:4.0 +N:Family;Johnson;;; +FN:Johnson Family +TEL;TYPE=HOME,VOICE:555-12345-345 +ADR;TYPE=HOME:;;100 Street Lane;Saubel Beach;ON;H0H0H0; +REV:20110731T040251Z +UID:12345678 +END:VCARD + +OUT; + + $vcard = Reader::read($input); + $vcard = $vcard->convert(Document::VCARD40); + + $this->assertVObjEquals( + $output, + $vcard + ); + + } + + function testConvert30to30() { + + $input = <<<IN +BEGIN:VCARD +VERSION:3.0 +PRODID:foo +FN;CHARSET=UTF-8:Steve +TEL;TYPE=PREF,HOME:+1 555 666 777 +PHOTO;ENCODING=b;TYPE=JPEG:Zm9v +PHOTO;ENCODING=b;TYPE=GIF:Zm9v +PHOTO;X-PARAM=FOO;ENCODING=b;TYPE=PNG:Zm9v +PHOTO;VALUE=URI:http://example.org/foo.png +END:VCARD + +IN; + + $output = <<<OUT +BEGIN:VCARD +VERSION:3.0 +PRODID:foo +FN;CHARSET=UTF-8:Steve +TEL;TYPE=PREF,HOME:+1 555 666 777 +PHOTO;ENCODING=b;TYPE=JPEG:Zm9v +PHOTO;ENCODING=b;TYPE=GIF:Zm9v +PHOTO;X-PARAM=FOO;ENCODING=b;TYPE=PNG:Zm9v +PHOTO;VALUE=URI:http://example.org/foo.png +END:VCARD + +OUT; + + $vcard = Reader::read($input); + $vcard = $vcard->convert(Document::VCARD30); + + $this->assertVObjEquals( + $output, + $vcard + ); + + } + + function testConvert40to30() { + + $input = <<<IN +BEGIN:VCARD +VERSION:4.0 +PRODID:foo +FN:Steve +TEL;PREF=1;TYPE=HOME:+1 555 666 777 +PHOTO:data:image/jpeg;base64,Zm9v +PHOTO:data:image/gif,foo +PHOTO;X-PARAM=FOO:data:image/png;base64,Zm9v +PHOTO:http://example.org/foo.png +KIND:ORG +END:VCARD + +IN; + + $output = <<<OUT +BEGIN:VCARD +VERSION:3.0 +FN:Steve +TEL;TYPE=PREF,HOME:+1 555 666 777 +PHOTO;ENCODING=b;TYPE=JPEG:Zm9v +PHOTO;ENCODING=b;TYPE=GIF:Zm9v +PHOTO;ENCODING=b;TYPE=PNG;X-PARAM=FOO:Zm9v +PHOTO;VALUE=URI:http://example.org/foo.png +X-ABSHOWAS:COMPANY +END:VCARD + +OUT; + + $vcard = Reader::read($input); + $vcard = $vcard->convert(Document::VCARD30); + + $this->assertVObjEquals( + $output, + $vcard + ); + + } + + function testConvertGroupCard() { + + $input = <<<IN +BEGIN:VCARD +VERSION:3.0 +PRODID:foo +X-ADDRESSBOOKSERVER-KIND:GROUP +END:VCARD + +IN; + + $output = <<<OUT +BEGIN:VCARD +VERSION:4.0 +KIND:GROUP +END:VCARD + +OUT; + + $vcard = Reader::read($input); + $vcard = $vcard->convert(Document::VCARD40); + + $this->assertVObjEquals( + $output, + $vcard + ); + + $input = $output; + $output = <<<OUT +BEGIN:VCARD +VERSION:3.0 +X-ADDRESSBOOKSERVER-KIND:GROUP +END:VCARD + +OUT; + + $vcard = Reader::read($input); + $vcard = $vcard->convert(Document::VCARD30); + + $this->assertVObjEquals( + $output, + $vcard + ); + + } + + function testBDAYConversion() { + + $input = <<<IN +BEGIN:VCARD +VERSION:3.0 +PRODID:foo +BDAY;X-APPLE-OMIT-YEAR=1604:1604-04-16 +END:VCARD + +IN; + + $output = <<<OUT +BEGIN:VCARD +VERSION:4.0 +BDAY:--04-16 +END:VCARD + +OUT; + + $vcard = Reader::read($input); + $vcard = $vcard->convert(Document::VCARD40); + + $this->assertVObjEquals( + $output, + $vcard + ); + + $input = $output; + $output = <<<OUT +BEGIN:VCARD +VERSION:3.0 +BDAY;X-APPLE-OMIT-YEAR=1604:1604-04-16 +END:VCARD + +OUT; + + $vcard = Reader::read($input); + $vcard = $vcard->convert(Document::VCARD30); + + $this->assertVObjEquals( + $output, + $vcard + ); + + } + + /** + * @expectedException InvalidArgumentException + */ + function testUnknownSourceVCardVersion() { + + $input = <<<IN +BEGIN:VCARD +VERSION:4.2 +PRODID:foo +FN;CHARSET=UTF-8:Steve +TEL;TYPE=PREF,HOME:+1 555 666 777 +ITEM1.TEL:+1 444 555 666 +ITEM1.X-ABLABEL:CustomLabel +PHOTO;ENCODING=b;TYPE=JPEG,HOME:Zm9v +PHOTO;ENCODING=b;TYPE=GIF:Zm9v +PHOTO;X-PARAM=FOO;ENCODING=b;TYPE=PNG:Zm9v +PHOTO;VALUE=URI:http://example.org/foo.png +X-ABShowAs:COMPANY +END:VCARD + +IN; + + $vcard = Reader::read($input); + $vcard->convert(Document::VCARD40); + + } + + /** + * @expectedException InvalidArgumentException + */ + function testUnknownTargetVCardVersion() { + + $input = <<<IN +BEGIN:VCARD +VERSION:3.0 +PRODID:foo +END:VCARD + +IN; + + $vcard = Reader::read($input); + $vcard->convert(Document::VCARD21); + + } + + function testConvertIndividualCard() { + + $input = <<<IN +BEGIN:VCARD +VERSION:4.0 +PRODID:foo +KIND:INDIVIDUAL +END:VCARD + +IN; + + $output = <<<OUT +BEGIN:VCARD +VERSION:3.0 +END:VCARD + +OUT; + + $vcard = Reader::read($input); + $vcard = $vcard->convert(Document::VCARD30); + + $this->assertVObjEquals( + $output, + $vcard + ); + + $input = $output; + $output = <<<OUT +BEGIN:VCARD +VERSION:4.0 +END:VCARD + +OUT; + + $vcard = Reader::read($input); + $vcard = $vcard->convert(Document::VCARD40); + + $this->assertVObjEquals( + $output, + $vcard + ); + + } + + function testAnniversary() { + + $input = <<<IN +BEGIN:VCARD +VERSION:4.0 +ITEM1.ANNIVERSARY:20081210 +END:VCARD + +IN; + + $output = <<<'OUT' +BEGIN:VCARD +VERSION:3.0 +ITEM1.X-ABDATE;VALUE=DATE-AND-OR-TIME:20081210 +ITEM1.X-ABLABEL:_$!<Anniversary>!$_ +ITEM1.X-ANNIVERSARY;VALUE=DATE-AND-OR-TIME:20081210 +END:VCARD + +OUT; + + $vcard = Reader::read($input); + $vcard = $vcard->convert(Document::VCARD30); + + $this->assertVObjEquals( + $output, + $vcard + ); + + // Swapping input and output + list( + $input, + $output + ) = array( + $output, + $input + ); + + $vcard = Reader::read($input); + $vcard = $vcard->convert(Document::VCARD40); + + $this->assertVObjEquals( + $output, + $vcard + ); + + } + + function testMultipleAnniversaries() { + + $input = <<<IN +BEGIN:VCARD +VERSION:4.0 +ITEM1.ANNIVERSARY:20081210 +ITEM2.ANNIVERSARY:20091210 +ITEM3.ANNIVERSARY:20101210 +END:VCARD + +IN; + + $output = <<<'OUT' +BEGIN:VCARD +VERSION:3.0 +ITEM1.X-ABDATE;VALUE=DATE-AND-OR-TIME:20081210 +ITEM1.X-ABLABEL:_$!<Anniversary>!$_ +ITEM1.X-ANNIVERSARY;VALUE=DATE-AND-OR-TIME:20081210 +ITEM2.X-ABDATE;VALUE=DATE-AND-OR-TIME:20091210 +ITEM2.X-ABLABEL:_$!<Anniversary>!$_ +ITEM2.X-ANNIVERSARY;VALUE=DATE-AND-OR-TIME:20091210 +ITEM3.X-ABDATE;VALUE=DATE-AND-OR-TIME:20101210 +ITEM3.X-ABLABEL:_$!<Anniversary>!$_ +ITEM3.X-ANNIVERSARY;VALUE=DATE-AND-OR-TIME:20101210 +END:VCARD + +OUT; + + $vcard = Reader::read($input); + $vcard = $vcard->convert(Document::VCARD30); + + $this->assertVObjEquals( + $output, + $vcard + ); + + // Swapping input and output + list( + $input, + $output + ) = array( + $output, + $input + ); + + $vcard = Reader::read($input); + $vcard = $vcard->convert(Document::VCARD40); + + $this->assertVObjEquals( + $output, + $vcard + ); + + } + + function testNoLabel() { + + $input = <<<VCF +BEGIN:VCARD +VERSION:3.0 +UID:foo +N:Doe;John;;; +FN:John Doe +item1.X-ABDATE;type=pref:2008-12-11 +END:VCARD + +VCF; + + $vcard = Reader::read($input); + + $this->assertInstanceOf('Sabre\\VObject\\Component\\VCard', $vcard); + $vcard = $vcard->convert(Document::VCARD40); + $vcard = $vcard->serialize(); + + $converted = Reader::read($vcard); + $converted->validate(); + + $version = Version::VERSION; + + $expected = <<<VCF +BEGIN:VCARD +VERSION:4.0 +PRODID:-//Sabre//Sabre VObject $version//EN +UID:foo +N:Doe;John;;; +FN:John Doe +ITEM1.X-ABDATE;PREF=1:2008-12-11 +END:VCARD + +VCF; + + $this->assertEquals($expected, str_replace("\r","", $vcard)); + + } + +}