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