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