xref: /plugin/davcal/vendor/sabre/vobject/tests/VObject/VCardConverterTest.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
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