comparison vendor/sabre/vobject/tests/VObject/CliTest.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 /**
6 * Tests the cli.
7 *
8 * Warning: these tests are very rudimentary.
9 */
10 class CliTest extends \PHPUnit_Framework_TestCase {
11
12 public function setUp() {
13
14 $this->cli = new CliMock();
15 $this->cli->stderr = fopen('php://memory','r+');
16 $this->cli->stdout = fopen('php://memory','r+');
17
18 }
19
20 public function testInvalidArg() {
21
22 $this->assertEquals(
23 1,
24 $this->cli->main(array('vobject', '--hi'))
25 );
26 rewind($this->cli->stderr);
27 $this->assertTrue(strlen(stream_get_contents($this->cli->stderr)) > 100);
28
29 }
30
31 public function testQuiet() {
32
33 $this->assertEquals(
34 1,
35 $this->cli->main(array('vobject', '-q'))
36 );
37 $this->assertTrue($this->cli->quiet);
38
39 rewind($this->cli->stderr);
40 $this->assertEquals(0, strlen(stream_get_contents($this->cli->stderr)));
41
42 }
43
44 public function testHelp() {
45
46 $this->assertEquals(
47 0,
48 $this->cli->main(array('vobject', '-h'))
49 );
50 rewind($this->cli->stderr);
51 $this->assertTrue(strlen(stream_get_contents($this->cli->stderr)) > 100);
52
53 }
54
55 public function testFormat() {
56
57 $this->assertEquals(
58 1,
59 $this->cli->main(array('vobject', '--format=jcard'))
60 );
61
62 rewind($this->cli->stderr);
63 $this->assertTrue(strlen(stream_get_contents($this->cli->stderr)) > 100);
64
65 $this->assertEquals('jcard', $this->cli->format);
66
67 }
68
69 public function testFormatInvalid() {
70
71 $this->assertEquals(
72 1,
73 $this->cli->main(array('vobject', '--format=foo'))
74 );
75
76 rewind($this->cli->stderr);
77 $this->assertTrue(strlen(stream_get_contents($this->cli->stderr)) > 100);
78
79 $this->assertNull($this->cli->format);
80
81 }
82
83 public function testInputFormatInvalid() {
84
85 $this->assertEquals(
86 1,
87 $this->cli->main(array('vobject', '--inputformat=foo'))
88 );
89
90 rewind($this->cli->stderr);
91 $this->assertTrue(strlen(stream_get_contents($this->cli->stderr)) > 100);
92
93 $this->assertNull($this->cli->format);
94
95 }
96
97
98 public function testNoInputFile() {
99
100 $this->assertEquals(
101 1,
102 $this->cli->main(array('vobject', 'color'))
103 );
104
105 rewind($this->cli->stderr);
106 $this->assertTrue(strlen(stream_get_contents($this->cli->stderr)) > 100);
107
108 }
109
110 public function testTooManyArgs() {
111
112 $this->assertEquals(
113 1,
114 $this->cli->main(array('vobject', 'color', 'a', 'b', 'c'))
115 );
116
117 }
118
119 public function testUnknownCommand() {
120
121 $this->assertEquals(
122 1,
123 $this->cli->main(array('vobject', 'foo', '-'))
124 );
125
126 }
127
128 public function testConvertJson() {
129
130 $inputStream = fopen('php://memory','r+');
131
132 fwrite($inputStream, <<<ICS
133 BEGIN:VCARD
134 VERSION:3.0
135 FN:Cowboy Henk
136 END:VCARD
137 ICS
138 );
139 rewind($inputStream);
140 $this->cli->stdin = $inputStream;
141
142 $this->assertEquals(
143 0,
144 $this->cli->main(array('vobject', 'convert','--format=json', '-'))
145 );
146
147 rewind($this->cli->stdout);
148 $version = Version::VERSION;
149 $this->assertEquals(
150 '["vcard",[["version",{},"text","4.0"],["prodid",{},"text","-\/\/Sabre\/\/Sabre VObject '. $version .'\/\/EN"],["fn",{},"text","Cowboy Henk"]]]',
151 stream_get_contents($this->cli->stdout)
152 );
153
154 }
155
156 public function testConvertJCardPretty() {
157
158 if (version_compare(PHP_VERSION, '5.4.0') < 0) {
159 $this->markTestSkipped('This test required PHP 5.4.0');
160 }
161
162 $inputStream = fopen('php://memory','r+');
163
164 fwrite($inputStream, <<<ICS
165 BEGIN:VCARD
166 VERSION:3.0
167 FN:Cowboy Henk
168 END:VCARD
169 ICS
170 );
171 rewind($inputStream);
172 $this->cli->stdin = $inputStream;
173
174 $this->assertEquals(
175 0,
176 $this->cli->main(array('vobject', 'convert','--format=jcard', '--pretty', '-'))
177 );
178
179 rewind($this->cli->stdout);
180 $version = Version::VERSION;
181
182 // PHP 5.5.12 changed the output
183
184 $expected = <<<JCARD
185 [
186 "vcard",
187 [
188 [
189 "versi
190 JCARD;
191
192 $this->assertStringStartsWith(
193 $expected,
194 stream_get_contents($this->cli->stdout)
195 );
196
197 }
198
199 public function testConvertJCalFail() {
200
201 $inputStream = fopen('php://memory','r+');
202
203 fwrite($inputStream, <<<ICS
204 BEGIN:VCARD
205 VERSION:3.0
206 FN:Cowboy Henk
207 END:VCARD
208 ICS
209 );
210 rewind($inputStream);
211 $this->cli->stdin = $inputStream;
212
213 $this->assertEquals(
214 2,
215 $this->cli->main(array('vobject', 'convert','--format=jcal', '--inputformat=mimedir', '-'))
216 );
217
218 }
219
220 public function testConvertMimeDir() {
221
222 $inputStream = fopen('php://memory','r+');
223
224 fwrite($inputStream, <<<JCARD
225 [
226 "vcard",
227 [
228 [
229 "version",
230 {
231
232 },
233 "text",
234 "4.0"
235 ],
236 [
237 "prodid",
238 {
239
240 },
241 "text",
242 "-\/\/Sabre\/\/Sabre VObject 3.1.0\/\/EN"
243 ],
244 [
245 "fn",
246 {
247
248 },
249 "text",
250 "Cowboy Henk"
251 ]
252 ]
253 ]
254 JCARD
255 );
256 rewind($inputStream);
257 $this->cli->stdin = $inputStream;
258
259 $this->assertEquals(
260 0,
261 $this->cli->main(array('vobject', 'convert','--format=mimedir', '--inputformat=json', '--pretty', '-'))
262 );
263
264 rewind($this->cli->stdout);
265 $expected = <<<VCF
266 BEGIN:VCARD
267 VERSION:4.0
268 PRODID:-//Sabre//Sabre VObject 3.1.0//EN
269 FN:Cowboy Henk
270 END:VCARD
271
272 VCF;
273
274 $this->assertEquals(
275 strtr($expected, array("\n"=>"\r\n")),
276 stream_get_contents($this->cli->stdout)
277 );
278
279 }
280
281 public function testConvertDefaultFormats() {
282
283 $inputStream = fopen('php://memory','r+');
284 $outputFile = SABRE_TEMPDIR . 'bar.json';
285
286 $this->assertEquals(
287 2,
288 $this->cli->main(array('vobject', 'convert','foo.json',$outputFile))
289 );
290
291 $this->assertEquals('json', $this->cli->inputFormat);
292 $this->assertEquals('json', $this->cli->format);
293
294 }
295
296 public function testConvertDefaultFormats2() {
297
298 $outputFile = SABRE_TEMPDIR . 'bar.ics';
299
300 $this->assertEquals(
301 2,
302 $this->cli->main(array('vobject', 'convert','foo.ics',$outputFile))
303 );
304
305 $this->assertEquals('mimedir', $this->cli->inputFormat);
306 $this->assertEquals('mimedir', $this->cli->format);
307
308 }
309
310 public function testVCard3040() {
311
312 $inputStream = fopen('php://memory','r+');
313
314 fwrite($inputStream, <<<VCARD
315 BEGIN:VCARD
316 VERSION:3.0
317 PRODID:-//Sabre//Sabre VObject 3.1.0//EN
318 FN:Cowboy Henk
319 END:VCARD
320
321 VCARD
322 );
323 rewind($inputStream);
324 $this->cli->stdin = $inputStream;
325
326 $this->assertEquals(
327 0,
328 $this->cli->main(array('vobject', 'convert','--format=vcard40', '--pretty', '-'))
329 );
330
331 rewind($this->cli->stdout);
332
333 $version = Version::VERSION;
334 $expected = <<<VCF
335 BEGIN:VCARD
336 VERSION:4.0
337 PRODID:-//Sabre//Sabre VObject $version//EN
338 FN:Cowboy Henk
339 END:VCARD
340
341 VCF;
342
343 $this->assertEquals(
344 strtr($expected, array("\n"=>"\r\n")),
345 stream_get_contents($this->cli->stdout)
346 );
347
348 }
349
350 public function testVCard4030() {
351
352 $inputStream = fopen('php://memory','r+');
353
354 fwrite($inputStream, <<<VCARD
355 BEGIN:VCARD
356 VERSION:4.0
357 PRODID:-//Sabre//Sabre VObject 3.1.0//EN
358 FN:Cowboy Henk
359 END:VCARD
360
361 VCARD
362 );
363 rewind($inputStream);
364 $this->cli->stdin = $inputStream;
365
366 $this->assertEquals(
367 0,
368 $this->cli->main(array('vobject', 'convert','--format=vcard30', '--pretty', '-'))
369 );
370
371 $version = Version::VERSION;
372
373 rewind($this->cli->stdout);
374 $expected = <<<VCF
375 BEGIN:VCARD
376 VERSION:3.0
377 PRODID:-//Sabre//Sabre VObject $version//EN
378 FN:Cowboy Henk
379 END:VCARD
380
381 VCF;
382
383 $this->assertEquals(
384 strtr($expected, array("\n"=>"\r\n")),
385 stream_get_contents($this->cli->stdout)
386 );
387
388 }
389
390 public function testVCard4021() {
391
392 $inputStream = fopen('php://memory','r+');
393
394 fwrite($inputStream, <<<VCARD
395 BEGIN:VCARD
396 VERSION:4.0
397 PRODID:-//Sabre//Sabre VObject 3.1.0//EN
398 FN:Cowboy Henk
399 END:VCARD
400
401 VCARD
402 );
403 rewind($inputStream);
404 $this->cli->stdin = $inputStream;
405
406 // vCard 2.1 is not supported yet, so this returns a failure.
407 $this->assertEquals(
408 2,
409 $this->cli->main(array('vobject', 'convert','--format=vcard21', '--pretty', '-'))
410 );
411
412 }
413
414 function testValidate() {
415
416 $inputStream = fopen('php://memory','r+');
417
418 fwrite($inputStream, <<<VCARD
419 BEGIN:VCARD
420 VERSION:4.0
421 PRODID:-//Sabre//Sabre VObject 3.1.0//EN
422 UID:foo
423 FN:Cowboy Henk
424 END:VCARD
425
426 VCARD
427 );
428 rewind($inputStream);
429 $this->cli->stdin = $inputStream;
430 $result = $this->cli->main(array('vobject', 'validate', '-'));
431
432 $this->assertEquals(
433 0,
434 $result
435 );
436
437 }
438
439 function testValidateFail() {
440
441 $inputStream = fopen('php://memory','r+');
442
443 fwrite($inputStream, <<<VCARD
444 BEGIN:VCALENDAR
445 VERSION:2.0
446 END:VCARD
447
448 VCARD
449 );
450 rewind($inputStream);
451 $this->cli->stdin = $inputStream;
452 // vCard 2.1 is not supported yet, so this returns a failure.
453 $this->assertEquals(
454 2,
455 $this->cli->main(array('vobject', 'validate', '-'))
456 );
457
458 }
459
460 function testValidateFail2() {
461
462 $inputStream = fopen('php://memory','r+');
463
464 fwrite($inputStream, <<<VCARD
465 BEGIN:VCALENDAR
466 VERSION:5.0
467 END:VCALENDAR
468
469 VCARD
470 );
471 rewind($inputStream);
472 $this->cli->stdin = $inputStream;
473 // vCard 2.1 is not supported yet, so this returns a failure.
474 $this->assertEquals(
475 2,
476 $this->cli->main(array('vobject', 'validate', '-'))
477 );
478
479 }
480
481 function testRepair() {
482
483 $inputStream = fopen('php://memory','r+');
484
485 fwrite($inputStream, <<<VCARD
486 BEGIN:VCARD
487 VERSION:5.0
488 END:VCARD
489
490 VCARD
491 );
492 rewind($inputStream);
493 $this->cli->stdin = $inputStream;
494 // vCard 2.1 is not supported yet, so this returns a failure.
495 $this->assertEquals(
496 2,
497 $this->cli->main(array('vobject', 'repair', '-'))
498 );
499
500 rewind($this->cli->stdout);
501 $this->assertRegExp("/^BEGIN:VCARD\r\nVERSION:2.1\r\nUID:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\r\nEND:VCARD\r\n$/", stream_get_contents($this->cli->stdout));
502 }
503
504 function testRepairNothing() {
505
506 $inputStream = fopen('php://memory','r+');
507
508 fwrite($inputStream, <<<VCARD
509 BEGIN:VCALENDAR
510 VERSION:2.0
511 PRODID:-//Sabre//Sabre VObject 3.1.0//EN
512 BEGIN:VEVENT
513 UID:foo
514 DTSTAMP:20140122T233226Z
515 DTSTART:20140101T120000Z
516 END:VEVENT
517 END:VCALENDAR
518
519 VCARD
520 );
521 rewind($inputStream);
522 $this->cli->stdin = $inputStream;
523 // vCard 2.1 is not supported yet, so this returns a failure.
524
525 $result = $this->cli->main(array('vobject', 'repair', '-'));
526
527 rewind($this->cli->stderr);
528 $error = stream_get_contents($this->cli->stderr);
529
530 $this->assertEquals(
531 0,
532 $result,
533 "This should have been error free. stderr output:\n" . $error
534 );
535
536 }
537
538 /**
539 * Note: this is a very shallow test, doesn't dig into the actual output,
540 * but just makes sure there's no errors thrown.
541 *
542 * The colorizer is not a critical component, it's mostly a debugging tool.
543 */
544 function testColorCalendar() {
545
546 $inputStream = fopen('php://memory','r+');
547
548 $version = Version::VERSION;
549
550 /**
551 * This object is not valid, but it's designed to hit every part of the
552 * colorizer source.
553 */
554 fwrite($inputStream, <<<VCARD
555 BEGIN:VCALENDAR
556 VERSION:2.0
557 PRODID:-//Sabre//Sabre VObject {$version}//EN
558 BEGIN:VTIMEZONE
559 END:VTIMEZONE
560 BEGIN:VEVENT
561 ATTENDEE;RSVP=TRUE:mailto:foo@example.org
562 REQUEST-STATUS:5;foo
563 ATTACH:blabla
564 END:VEVENT
565 END:VCALENDAR
566
567 VCARD
568 );
569 rewind($inputStream);
570 $this->cli->stdin = $inputStream;
571 // vCard 2.1 is not supported yet, so this returns a failure.
572
573 $result = $this->cli->main(array('vobject', 'color', '-'));
574
575 rewind($this->cli->stderr);
576 $error = stream_get_contents($this->cli->stderr);
577
578 $this->assertEquals(
579 0,
580 $result,
581 "This should have been error free. stderr output:\n" . $error
582 );
583
584 }
585
586 /**
587 * Note: this is a very shallow test, doesn't dig into the actual output,
588 * but just makes sure there's no errors thrown.
589 *
590 * The colorizer is not a critical component, it's mostly a debugging tool.
591 */
592 function testColorVCard() {
593
594 $inputStream = fopen('php://memory','r+');
595
596 $version = Version::VERSION;
597
598 /**
599 * This object is not valid, but it's designed to hit every part of the
600 * colorizer source.
601 */
602 fwrite($inputStream, <<<VCARD
603 BEGIN:VCARD
604 VERSION:4.0
605 PRODID:-//Sabre//Sabre VObject {$version}//EN
606 ADR:1;2;3;4a,4b;5;6
607 group.TEL:123454768
608 END:VCARD
609
610 VCARD
611 );
612 rewind($inputStream);
613 $this->cli->stdin = $inputStream;
614 // vCard 2.1 is not supported yet, so this returns a failure.
615
616 $result = $this->cli->main(array('vobject', 'color', '-'));
617
618 rewind($this->cli->stderr);
619 $error = stream_get_contents($this->cli->stderr);
620
621 $this->assertEquals(
622 0,
623 $result,
624 "This should have been error free. stderr output:\n" . $error
625 );
626
627 }
628 }
629
630 class CliMock extends Cli {
631
632 public $log = array();
633
634 public $quiet = false;
635
636 public $format;
637
638 public $pretty;
639
640 public $stdin;
641
642 public $stdout;
643
644 public $stderr;
645
646 public $inputFormat;
647
648 public $outputFormat;
649
650 }