xref: /plugin/davcal/vendor/sabre/vobject/tests/VObject/ReaderTest.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab) !
1*a1a3b679SAndreas Boehler<?php
2*a1a3b679SAndreas Boehler
3*a1a3b679SAndreas Boehlernamespace Sabre\VObject;
4*a1a3b679SAndreas Boehler
5*a1a3b679SAndreas Boehlerclass ReaderTest extends \PHPUnit_Framework_TestCase {
6*a1a3b679SAndreas Boehler
7*a1a3b679SAndreas Boehler    function testReadComponent() {
8*a1a3b679SAndreas Boehler
9*a1a3b679SAndreas Boehler        $data = "BEGIN:VCALENDAR\r\nEND:VCALENDAR";
10*a1a3b679SAndreas Boehler
11*a1a3b679SAndreas Boehler        $result = Reader::read($data);
12*a1a3b679SAndreas Boehler
13*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Component', $result);
14*a1a3b679SAndreas Boehler        $this->assertEquals('VCALENDAR', $result->name);
15*a1a3b679SAndreas Boehler        $this->assertEquals(0, count($result->children));
16*a1a3b679SAndreas Boehler
17*a1a3b679SAndreas Boehler    }
18*a1a3b679SAndreas Boehler    function testReadStream() {
19*a1a3b679SAndreas Boehler
20*a1a3b679SAndreas Boehler        $data = "BEGIN:VCALENDAR\r\nEND:VCALENDAR";
21*a1a3b679SAndreas Boehler
22*a1a3b679SAndreas Boehler        $stream = fopen('php://memory', 'r+');
23*a1a3b679SAndreas Boehler        fwrite($stream, $data);
24*a1a3b679SAndreas Boehler        rewind($stream);
25*a1a3b679SAndreas Boehler
26*a1a3b679SAndreas Boehler        $result = Reader::read($stream);
27*a1a3b679SAndreas Boehler
28*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Component', $result);
29*a1a3b679SAndreas Boehler        $this->assertEquals('VCALENDAR', $result->name);
30*a1a3b679SAndreas Boehler        $this->assertEquals(0, count($result->children));
31*a1a3b679SAndreas Boehler
32*a1a3b679SAndreas Boehler    }
33*a1a3b679SAndreas Boehler
34*a1a3b679SAndreas Boehler    function testReadComponentUnixNewLine() {
35*a1a3b679SAndreas Boehler
36*a1a3b679SAndreas Boehler        $data = "BEGIN:VCALENDAR\nEND:VCALENDAR";
37*a1a3b679SAndreas Boehler
38*a1a3b679SAndreas Boehler        $result = Reader::read($data);
39*a1a3b679SAndreas Boehler
40*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Component', $result);
41*a1a3b679SAndreas Boehler        $this->assertEquals('VCALENDAR', $result->name);
42*a1a3b679SAndreas Boehler        $this->assertEquals(0, count($result->children));
43*a1a3b679SAndreas Boehler
44*a1a3b679SAndreas Boehler    }
45*a1a3b679SAndreas Boehler
46*a1a3b679SAndreas Boehler    function testReadComponentLineFold() {
47*a1a3b679SAndreas Boehler
48*a1a3b679SAndreas Boehler        $data = "BEGIN:\r\n\tVCALENDAR\r\nE\r\n ND:VCALENDAR";
49*a1a3b679SAndreas Boehler
50*a1a3b679SAndreas Boehler        $result = Reader::read($data);
51*a1a3b679SAndreas Boehler
52*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Component', $result);
53*a1a3b679SAndreas Boehler        $this->assertEquals('VCALENDAR', $result->name);
54*a1a3b679SAndreas Boehler        $this->assertEquals(0, count($result->children));
55*a1a3b679SAndreas Boehler
56*a1a3b679SAndreas Boehler    }
57*a1a3b679SAndreas Boehler
58*a1a3b679SAndreas Boehler    /**
59*a1a3b679SAndreas Boehler     * @expectedException Sabre\VObject\ParseException
60*a1a3b679SAndreas Boehler     */
61*a1a3b679SAndreas Boehler    function testReadCorruptComponent() {
62*a1a3b679SAndreas Boehler
63*a1a3b679SAndreas Boehler        $data = "BEGIN:VCALENDAR\r\nEND:FOO";
64*a1a3b679SAndreas Boehler
65*a1a3b679SAndreas Boehler        $result = Reader::read($data);
66*a1a3b679SAndreas Boehler
67*a1a3b679SAndreas Boehler    }
68*a1a3b679SAndreas Boehler
69*a1a3b679SAndreas Boehler    /**
70*a1a3b679SAndreas Boehler     * @expectedException Sabre\VObject\ParseException
71*a1a3b679SAndreas Boehler     */
72*a1a3b679SAndreas Boehler    function testReadCorruptSubComponent() {
73*a1a3b679SAndreas Boehler
74*a1a3b679SAndreas Boehler        $data = "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nEND:FOO\r\nEND:VCALENDAR";
75*a1a3b679SAndreas Boehler
76*a1a3b679SAndreas Boehler        $result = Reader::read($data);
77*a1a3b679SAndreas Boehler
78*a1a3b679SAndreas Boehler    }
79*a1a3b679SAndreas Boehler
80*a1a3b679SAndreas Boehler    function testReadProperty() {
81*a1a3b679SAndreas Boehler
82*a1a3b679SAndreas Boehler        $data = "BEGIN:VCALENDAR\r\nSUMMARY:propValue\r\nEND:VCALENDAR";
83*a1a3b679SAndreas Boehler        $result = Reader::read($data);
84*a1a3b679SAndreas Boehler
85*a1a3b679SAndreas Boehler        $result = $result->SUMMARY;
86*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Property', $result);
87*a1a3b679SAndreas Boehler        $this->assertEquals('SUMMARY', $result->name);
88*a1a3b679SAndreas Boehler        $this->assertEquals('propValue', $result->getValue());
89*a1a3b679SAndreas Boehler
90*a1a3b679SAndreas Boehler    }
91*a1a3b679SAndreas Boehler
92*a1a3b679SAndreas Boehler    function testReadPropertyWithNewLine() {
93*a1a3b679SAndreas Boehler
94*a1a3b679SAndreas Boehler        $data = "BEGIN:VCALENDAR\r\nSUMMARY:Line1\\nLine2\\NLine3\\\\Not the 4th line!\r\nEND:VCALENDAR";
95*a1a3b679SAndreas Boehler        $result = Reader::read($data);
96*a1a3b679SAndreas Boehler
97*a1a3b679SAndreas Boehler        $result = $result->SUMMARY;
98*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Property', $result);
99*a1a3b679SAndreas Boehler        $this->assertEquals('SUMMARY', $result->name);
100*a1a3b679SAndreas Boehler        $this->assertEquals("Line1\nLine2\nLine3\\Not the 4th line!", $result->getValue());
101*a1a3b679SAndreas Boehler
102*a1a3b679SAndreas Boehler    }
103*a1a3b679SAndreas Boehler
104*a1a3b679SAndreas Boehler    function testReadMappedProperty() {
105*a1a3b679SAndreas Boehler
106*a1a3b679SAndreas Boehler        $data = "BEGIN:VCALENDAR\r\nDTSTART:20110529\r\nEND:VCALENDAR";
107*a1a3b679SAndreas Boehler        $result = Reader::read($data);
108*a1a3b679SAndreas Boehler
109*a1a3b679SAndreas Boehler        $result = $result->DTSTART;
110*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Property\\ICalendar\\DateTime', $result);
111*a1a3b679SAndreas Boehler        $this->assertEquals('DTSTART', $result->name);
112*a1a3b679SAndreas Boehler        $this->assertEquals('20110529', $result->getValue());
113*a1a3b679SAndreas Boehler
114*a1a3b679SAndreas Boehler    }
115*a1a3b679SAndreas Boehler
116*a1a3b679SAndreas Boehler    function testReadMappedPropertyGrouped() {
117*a1a3b679SAndreas Boehler
118*a1a3b679SAndreas Boehler        $data = "BEGIN:VCALENDAR\r\nfoo.DTSTART:20110529\r\nEND:VCALENDAR";
119*a1a3b679SAndreas Boehler        $result = Reader::read($data);
120*a1a3b679SAndreas Boehler
121*a1a3b679SAndreas Boehler        $result = $result->DTSTART;
122*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Property\\ICalendar\\DateTime', $result);
123*a1a3b679SAndreas Boehler        $this->assertEquals('DTSTART', $result->name);
124*a1a3b679SAndreas Boehler        $this->assertEquals('20110529', $result->getValue());
125*a1a3b679SAndreas Boehler
126*a1a3b679SAndreas Boehler    }
127*a1a3b679SAndreas Boehler
128*a1a3b679SAndreas Boehler    /**
129*a1a3b679SAndreas Boehler     * @expectedException Sabre\VObject\ParseException
130*a1a3b679SAndreas Boehler     */
131*a1a3b679SAndreas Boehler    function testReadBrokenLine() {
132*a1a3b679SAndreas Boehler
133*a1a3b679SAndreas Boehler        $data = "BEGIN:VCALENDAR\r\nPROPNAME;propValue";
134*a1a3b679SAndreas Boehler        $result = Reader::read($data);
135*a1a3b679SAndreas Boehler
136*a1a3b679SAndreas Boehler    }
137*a1a3b679SAndreas Boehler
138*a1a3b679SAndreas Boehler    function testReadPropertyInComponent() {
139*a1a3b679SAndreas Boehler
140*a1a3b679SAndreas Boehler        $data = array(
141*a1a3b679SAndreas Boehler            "BEGIN:VCALENDAR",
142*a1a3b679SAndreas Boehler            "PROPNAME:propValue",
143*a1a3b679SAndreas Boehler            "END:VCALENDAR"
144*a1a3b679SAndreas Boehler        );
145*a1a3b679SAndreas Boehler
146*a1a3b679SAndreas Boehler        $result = Reader::read(implode("\r\n",$data));
147*a1a3b679SAndreas Boehler
148*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Component', $result);
149*a1a3b679SAndreas Boehler        $this->assertEquals('VCALENDAR', $result->name);
150*a1a3b679SAndreas Boehler        $this->assertEquals(1, count($result->children()));
151*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Property', $result->children[0]);
152*a1a3b679SAndreas Boehler        $this->assertEquals('PROPNAME', $result->children[0]->name);
153*a1a3b679SAndreas Boehler        $this->assertEquals('propValue', $result->children[0]->getValue());
154*a1a3b679SAndreas Boehler
155*a1a3b679SAndreas Boehler    }
156*a1a3b679SAndreas Boehler
157*a1a3b679SAndreas Boehler    function testReadNestedComponent() {
158*a1a3b679SAndreas Boehler
159*a1a3b679SAndreas Boehler        $data = array(
160*a1a3b679SAndreas Boehler            "BEGIN:VCALENDAR",
161*a1a3b679SAndreas Boehler            "BEGIN:VTIMEZONE",
162*a1a3b679SAndreas Boehler            "BEGIN:DAYLIGHT",
163*a1a3b679SAndreas Boehler            "END:DAYLIGHT",
164*a1a3b679SAndreas Boehler            "END:VTIMEZONE",
165*a1a3b679SAndreas Boehler            "END:VCALENDAR"
166*a1a3b679SAndreas Boehler        );
167*a1a3b679SAndreas Boehler
168*a1a3b679SAndreas Boehler        $result = Reader::read(implode("\r\n",$data));
169*a1a3b679SAndreas Boehler
170*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Component', $result);
171*a1a3b679SAndreas Boehler        $this->assertEquals('VCALENDAR', $result->name);
172*a1a3b679SAndreas Boehler        $this->assertEquals(1, count($result->children()));
173*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Component', $result->children[0]);
174*a1a3b679SAndreas Boehler        $this->assertEquals('VTIMEZONE', $result->children[0]->name);
175*a1a3b679SAndreas Boehler        $this->assertEquals(1, count($result->children[0]->children()));
176*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Component', $result->children[0]->children[0]);
177*a1a3b679SAndreas Boehler        $this->assertEquals('DAYLIGHT', $result->children[0]->children[0]->name);
178*a1a3b679SAndreas Boehler
179*a1a3b679SAndreas Boehler
180*a1a3b679SAndreas Boehler    }
181*a1a3b679SAndreas Boehler
182*a1a3b679SAndreas Boehler    function testReadPropertyParameter() {
183*a1a3b679SAndreas Boehler
184*a1a3b679SAndreas Boehler        $data = "BEGIN:VCALENDAR\r\nPROPNAME;PARAMNAME=paramvalue:propValue\r\nEND:VCALENDAR";
185*a1a3b679SAndreas Boehler        $result = Reader::read($data);
186*a1a3b679SAndreas Boehler
187*a1a3b679SAndreas Boehler        $result = $result->PROPNAME;
188*a1a3b679SAndreas Boehler
189*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Property', $result);
190*a1a3b679SAndreas Boehler        $this->assertEquals('PROPNAME', $result->name);
191*a1a3b679SAndreas Boehler        $this->assertEquals('propValue', $result->getValue());
192*a1a3b679SAndreas Boehler        $this->assertEquals(1, count($result->parameters()));
193*a1a3b679SAndreas Boehler        $this->assertEquals('PARAMNAME', $result->parameters['PARAMNAME']->name);
194*a1a3b679SAndreas Boehler        $this->assertEquals('paramvalue', $result->parameters['PARAMNAME']->getValue());
195*a1a3b679SAndreas Boehler
196*a1a3b679SAndreas Boehler    }
197*a1a3b679SAndreas Boehler
198*a1a3b679SAndreas Boehler    function testReadPropertyRepeatingParameter() {
199*a1a3b679SAndreas Boehler
200*a1a3b679SAndreas Boehler        $data = "BEGIN:VCALENDAR\r\nPROPNAME;N=1;N=2;N=3,4;N=\"5\",6;N=\"7,8\";N=9,10;N=^'11^':propValue\r\nEND:VCALENDAR";
201*a1a3b679SAndreas Boehler        $result = Reader::read($data);
202*a1a3b679SAndreas Boehler
203*a1a3b679SAndreas Boehler        $result = $result->PROPNAME;
204*a1a3b679SAndreas Boehler
205*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Property', $result);
206*a1a3b679SAndreas Boehler        $this->assertEquals('PROPNAME', $result->name);
207*a1a3b679SAndreas Boehler        $this->assertEquals('propValue', $result->getValue());
208*a1a3b679SAndreas Boehler        $this->assertEquals(1, count($result->parameters()));
209*a1a3b679SAndreas Boehler        $this->assertEquals('N', $result->parameters['N']->name);
210*a1a3b679SAndreas Boehler        $this->assertEquals('1,2,3,4,5,6,7,8,9,10,"11"', $result->parameters['N']->getValue());
211*a1a3b679SAndreas Boehler        $this->assertEquals(array(1,2,3,4,5,6,"7,8",9,10,'"11"'), $result->parameters['N']->getParts());
212*a1a3b679SAndreas Boehler
213*a1a3b679SAndreas Boehler    }
214*a1a3b679SAndreas Boehler
215*a1a3b679SAndreas Boehler    function testReadPropertyRepeatingNamelessGuessedParameter() {
216*a1a3b679SAndreas Boehler        $data = "BEGIN:VCALENDAR\r\nPROPNAME;WORK;VOICE;PREF:propValue\r\nEND:VCALENDAR";
217*a1a3b679SAndreas Boehler        $result = Reader::read($data);
218*a1a3b679SAndreas Boehler
219*a1a3b679SAndreas Boehler        $result = $result->PROPNAME;
220*a1a3b679SAndreas Boehler
221*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Property', $result);
222*a1a3b679SAndreas Boehler        $this->assertEquals('PROPNAME', $result->name);
223*a1a3b679SAndreas Boehler        $this->assertEquals('propValue', $result->getValue());
224*a1a3b679SAndreas Boehler        $this->assertEquals(1, count($result->parameters()));
225*a1a3b679SAndreas Boehler        $this->assertEquals('TYPE', $result->parameters['TYPE']->name);
226*a1a3b679SAndreas Boehler        $this->assertEquals('WORK,VOICE,PREF', $result->parameters['TYPE']->getValue());
227*a1a3b679SAndreas Boehler        $this->assertEquals(array('WORK', 'VOICE', 'PREF'), $result->parameters['TYPE']->getParts());
228*a1a3b679SAndreas Boehler
229*a1a3b679SAndreas Boehler    }
230*a1a3b679SAndreas Boehler
231*a1a3b679SAndreas Boehler    function testReadPropertyNoName() {
232*a1a3b679SAndreas Boehler
233*a1a3b679SAndreas Boehler        $data = "BEGIN:VCALENDAR\r\nPROPNAME;PRODIGY:propValue\r\nEND:VCALENDAR";
234*a1a3b679SAndreas Boehler        $result = Reader::read($data);
235*a1a3b679SAndreas Boehler
236*a1a3b679SAndreas Boehler        $result = $result->PROPNAME;
237*a1a3b679SAndreas Boehler
238*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Property', $result);
239*a1a3b679SAndreas Boehler        $this->assertEquals('PROPNAME', $result->name);
240*a1a3b679SAndreas Boehler        $this->assertEquals('propValue', $result->getValue());
241*a1a3b679SAndreas Boehler        $this->assertEquals(1, count($result->parameters()));
242*a1a3b679SAndreas Boehler        $this->assertEquals('TYPE', $result->parameters['TYPE']->name);
243*a1a3b679SAndreas Boehler        $this->assertTrue($result->parameters['TYPE']->noName);
244*a1a3b679SAndreas Boehler        $this->assertEquals('PRODIGY', $result->parameters['TYPE']);
245*a1a3b679SAndreas Boehler
246*a1a3b679SAndreas Boehler    }
247*a1a3b679SAndreas Boehler
248*a1a3b679SAndreas Boehler    function testReadPropertyParameterExtraColon() {
249*a1a3b679SAndreas Boehler
250*a1a3b679SAndreas Boehler        $data = "BEGIN:VCALENDAR\r\nPROPNAME;PARAMNAME=paramvalue:propValue:anotherrandomstring\r\nEND:VCALENDAR";
251*a1a3b679SAndreas Boehler        $result = Reader::read($data);
252*a1a3b679SAndreas Boehler
253*a1a3b679SAndreas Boehler        $result = $result->PROPNAME;
254*a1a3b679SAndreas Boehler
255*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Property', $result);
256*a1a3b679SAndreas Boehler        $this->assertEquals('PROPNAME', $result->name);
257*a1a3b679SAndreas Boehler        $this->assertEquals('propValue:anotherrandomstring', $result->getValue());
258*a1a3b679SAndreas Boehler        $this->assertEquals(1, count($result->parameters()));
259*a1a3b679SAndreas Boehler        $this->assertEquals('PARAMNAME', $result->parameters['PARAMNAME']->name);
260*a1a3b679SAndreas Boehler        $this->assertEquals('paramvalue', $result->parameters['PARAMNAME']->getValue());
261*a1a3b679SAndreas Boehler
262*a1a3b679SAndreas Boehler    }
263*a1a3b679SAndreas Boehler
264*a1a3b679SAndreas Boehler    function testReadProperty2Parameters() {
265*a1a3b679SAndreas Boehler
266*a1a3b679SAndreas Boehler        $data = "BEGIN:VCALENDAR\r\nPROPNAME;PARAMNAME=paramvalue;PARAMNAME2=paramvalue2:propValue\r\nEND:VCALENDAR";
267*a1a3b679SAndreas Boehler        $result = Reader::read($data);
268*a1a3b679SAndreas Boehler
269*a1a3b679SAndreas Boehler        $result = $result->PROPNAME;
270*a1a3b679SAndreas Boehler
271*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Property', $result);
272*a1a3b679SAndreas Boehler        $this->assertEquals('PROPNAME', $result->name);
273*a1a3b679SAndreas Boehler        $this->assertEquals('propValue', $result->getValue());
274*a1a3b679SAndreas Boehler        $this->assertEquals(2, count($result->parameters()));
275*a1a3b679SAndreas Boehler        $this->assertEquals('PARAMNAME', $result->parameters['PARAMNAME']->name);
276*a1a3b679SAndreas Boehler        $this->assertEquals('paramvalue', $result->parameters['PARAMNAME']->getValue());
277*a1a3b679SAndreas Boehler        $this->assertEquals('PARAMNAME2', $result->parameters['PARAMNAME2']->name);
278*a1a3b679SAndreas Boehler        $this->assertEquals('paramvalue2', $result->parameters['PARAMNAME2']->getValue());
279*a1a3b679SAndreas Boehler
280*a1a3b679SAndreas Boehler    }
281*a1a3b679SAndreas Boehler
282*a1a3b679SAndreas Boehler    function testReadPropertyParameterQuoted() {
283*a1a3b679SAndreas Boehler
284*a1a3b679SAndreas Boehler        $data = "BEGIN:VCALENDAR\r\nPROPNAME;PARAMNAME=\"paramvalue\":propValue\r\nEND:VCALENDAR";
285*a1a3b679SAndreas Boehler        $result = Reader::read($data);
286*a1a3b679SAndreas Boehler
287*a1a3b679SAndreas Boehler        $result = $result->PROPNAME;
288*a1a3b679SAndreas Boehler
289*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Property', $result);
290*a1a3b679SAndreas Boehler        $this->assertEquals('PROPNAME', $result->name);
291*a1a3b679SAndreas Boehler        $this->assertEquals('propValue', $result->getValue());
292*a1a3b679SAndreas Boehler        $this->assertEquals(1, count($result->parameters()));
293*a1a3b679SAndreas Boehler        $this->assertEquals('PARAMNAME', $result->parameters['PARAMNAME']->name);
294*a1a3b679SAndreas Boehler        $this->assertEquals('paramvalue', $result->parameters['PARAMNAME']->getValue());
295*a1a3b679SAndreas Boehler
296*a1a3b679SAndreas Boehler    }
297*a1a3b679SAndreas Boehler
298*a1a3b679SAndreas Boehler    function testReadPropertyParameterNewLines() {
299*a1a3b679SAndreas Boehler
300*a1a3b679SAndreas Boehler        $data = "BEGIN:VCALENDAR\r\nPROPNAME;PARAMNAME=paramvalue1^nvalue2^^nvalue3:propValue\r\nEND:VCALENDAR";
301*a1a3b679SAndreas Boehler        $result = Reader::read($data);
302*a1a3b679SAndreas Boehler
303*a1a3b679SAndreas Boehler        $result = $result->propname;
304*a1a3b679SAndreas Boehler
305*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Property', $result);
306*a1a3b679SAndreas Boehler        $this->assertEquals('PROPNAME', $result->name);
307*a1a3b679SAndreas Boehler        $this->assertEquals('propValue', $result->getValue());
308*a1a3b679SAndreas Boehler
309*a1a3b679SAndreas Boehler        $this->assertEquals(1, count($result->parameters()));
310*a1a3b679SAndreas Boehler        $this->assertEquals('PARAMNAME', $result->parameters['PARAMNAME']->name);
311*a1a3b679SAndreas Boehler        $this->assertEquals("paramvalue1\nvalue2^nvalue3", $result->parameters['PARAMNAME']->getValue());
312*a1a3b679SAndreas Boehler
313*a1a3b679SAndreas Boehler    }
314*a1a3b679SAndreas Boehler
315*a1a3b679SAndreas Boehler    function testReadPropertyParameterQuotedColon() {
316*a1a3b679SAndreas Boehler
317*a1a3b679SAndreas Boehler        $data = "BEGIN:VCALENDAR\r\nPROPNAME;PARAMNAME=\"param:value\":propValue\r\nEND:VCALENDAR";
318*a1a3b679SAndreas Boehler        $result = Reader::read($data);
319*a1a3b679SAndreas Boehler        $result = $result->propname;
320*a1a3b679SAndreas Boehler
321*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Property', $result);
322*a1a3b679SAndreas Boehler        $this->assertEquals('PROPNAME', $result->name);
323*a1a3b679SAndreas Boehler        $this->assertEquals('propValue', $result->getValue());
324*a1a3b679SAndreas Boehler        $this->assertEquals(1, count($result->parameters()));
325*a1a3b679SAndreas Boehler        $this->assertEquals('PARAMNAME', $result->parameters['PARAMNAME']->name);
326*a1a3b679SAndreas Boehler        $this->assertEquals('param:value', $result->parameters['PARAMNAME']->getValue());
327*a1a3b679SAndreas Boehler
328*a1a3b679SAndreas Boehler    }
329*a1a3b679SAndreas Boehler
330*a1a3b679SAndreas Boehler    function testReadForgiving() {
331*a1a3b679SAndreas Boehler
332*a1a3b679SAndreas Boehler        $data = array(
333*a1a3b679SAndreas Boehler            "BEGIN:VCALENDAR",
334*a1a3b679SAndreas Boehler            "X_PROP:propValue",
335*a1a3b679SAndreas Boehler            "END:VCALENDAR"
336*a1a3b679SAndreas Boehler        );
337*a1a3b679SAndreas Boehler
338*a1a3b679SAndreas Boehler        $caught = false;
339*a1a3b679SAndreas Boehler        try {
340*a1a3b679SAndreas Boehler            $result = Reader::read(implode("\r\n",$data));
341*a1a3b679SAndreas Boehler        } catch (ParseException $e) {
342*a1a3b679SAndreas Boehler            $caught = true;
343*a1a3b679SAndreas Boehler        }
344*a1a3b679SAndreas Boehler
345*a1a3b679SAndreas Boehler        $this->assertEquals(true, $caught);
346*a1a3b679SAndreas Boehler
347*a1a3b679SAndreas Boehler        $result = Reader::read(implode("\r\n",$data), Reader::OPTION_FORGIVING);
348*a1a3b679SAndreas Boehler
349*a1a3b679SAndreas Boehler        $expected = implode("\r\n", array(
350*a1a3b679SAndreas Boehler            "BEGIN:VCALENDAR",
351*a1a3b679SAndreas Boehler            "X_PROP:propValue",
352*a1a3b679SAndreas Boehler            "END:VCALENDAR",
353*a1a3b679SAndreas Boehler            ""
354*a1a3b679SAndreas Boehler        ));
355*a1a3b679SAndreas Boehler
356*a1a3b679SAndreas Boehler        $this->assertEquals($expected, $result->serialize());
357*a1a3b679SAndreas Boehler
358*a1a3b679SAndreas Boehler    }
359*a1a3b679SAndreas Boehler
360*a1a3b679SAndreas Boehler    function testReadWithInvalidLine() {
361*a1a3b679SAndreas Boehler
362*a1a3b679SAndreas Boehler        $data = array(
363*a1a3b679SAndreas Boehler            "BEGIN:VCALENDAR",
364*a1a3b679SAndreas Boehler            "DESCRIPTION:propValue",
365*a1a3b679SAndreas Boehler            "Yes, we've actually seen a file with non-idented property values on multiple lines",
366*a1a3b679SAndreas Boehler            "END:VCALENDAR"
367*a1a3b679SAndreas Boehler        );
368*a1a3b679SAndreas Boehler
369*a1a3b679SAndreas Boehler        $caught = false;
370*a1a3b679SAndreas Boehler        try {
371*a1a3b679SAndreas Boehler            $result = Reader::read(implode("\r\n",$data));
372*a1a3b679SAndreas Boehler        } catch (ParseException $e) {
373*a1a3b679SAndreas Boehler            $caught = true;
374*a1a3b679SAndreas Boehler        }
375*a1a3b679SAndreas Boehler
376*a1a3b679SAndreas Boehler        $this->assertEquals(true, $caught);
377*a1a3b679SAndreas Boehler
378*a1a3b679SAndreas Boehler        $result = Reader::read(implode("\r\n",$data), Reader::OPTION_IGNORE_INVALID_LINES);
379*a1a3b679SAndreas Boehler
380*a1a3b679SAndreas Boehler        $expected = implode("\r\n", array(
381*a1a3b679SAndreas Boehler            "BEGIN:VCALENDAR",
382*a1a3b679SAndreas Boehler            "DESCRIPTION:propValue",
383*a1a3b679SAndreas Boehler            "END:VCALENDAR",
384*a1a3b679SAndreas Boehler            ""
385*a1a3b679SAndreas Boehler        ));
386*a1a3b679SAndreas Boehler
387*a1a3b679SAndreas Boehler        $this->assertEquals($expected, $result->serialize());
388*a1a3b679SAndreas Boehler
389*a1a3b679SAndreas Boehler    }
390*a1a3b679SAndreas Boehler
391*a1a3b679SAndreas Boehler    /**
392*a1a3b679SAndreas Boehler     * Reported as Issue 32.
393*a1a3b679SAndreas Boehler     *
394*a1a3b679SAndreas Boehler     * @expectedException \Sabre\VObject\ParseException
395*a1a3b679SAndreas Boehler     */
396*a1a3b679SAndreas Boehler    public function testReadIncompleteFile() {
397*a1a3b679SAndreas Boehler
398*a1a3b679SAndreas Boehler        $input = <<<ICS
399*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
400*a1a3b679SAndreas BoehlerVERSION:1.0
401*a1a3b679SAndreas BoehlerBEGIN:VEVENT
402*a1a3b679SAndreas BoehlerX-FUNAMBOL-FOLDER:DEFAULT_FOLDER
403*a1a3b679SAndreas BoehlerX-FUNAMBOL-ALLDAY:0
404*a1a3b679SAndreas BoehlerDTSTART:20111017T110000Z
405*a1a3b679SAndreas BoehlerDTEND:20111017T123000Z
406*a1a3b679SAndreas BoehlerX-MICROSOFT-CDO-BUSYSTATUS:BUSY
407*a1a3b679SAndreas BoehlerCATEGORIES:
408*a1a3b679SAndreas BoehlerLOCATION;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:Netviewer Meeting
409*a1a3b679SAndreas BoehlerPRIORITY:1
410*a1a3b679SAndreas BoehlerSTATUS:3
411*a1a3b679SAndreas BoehlerX-MICROSOFT-CDO-REPLYTIME:20111017T064200Z
412*a1a3b679SAndreas BoehlerSUMMARY;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:Kopieren: test
413*a1a3b679SAndreas BoehlerCLASS:PUBLIC
414*a1a3b679SAndreas BoehlerAALARM:
415*a1a3b679SAndreas BoehlerRRULE:
416*a1a3b679SAndreas BoehlerX-FUNAMBOL-BILLINGINFO:
417*a1a3b679SAndreas BoehlerX-FUNAMBOL-COMPANIES:
418*a1a3b679SAndreas BoehlerX-FUNAMBOL-MILEAGE:
419*a1a3b679SAndreas BoehlerX-FUNAMBOL-NOAGING:0
420*a1a3b679SAndreas BoehlerATTENDEE;STATUS=NEEDS ACTION;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:'Heino' heino@test.com
421*a1a3b679SAndreas BoehlerATTENDEE;STATUS=NEEDS ACTION;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:'Markus' test@test.com
422*a1a3b679SAndreas BoehlerATTENDEE;STATUS=NEEDS AC
423*a1a3b679SAndreas BoehlerICS;
424*a1a3b679SAndreas Boehler
425*a1a3b679SAndreas Boehler        Reader::read($input);
426*a1a3b679SAndreas Boehler
427*a1a3b679SAndreas Boehler    }
428*a1a3b679SAndreas Boehler
429*a1a3b679SAndreas Boehler    /**
430*a1a3b679SAndreas Boehler     * @expectedException \InvalidArgumentException
431*a1a3b679SAndreas Boehler     */
432*a1a3b679SAndreas Boehler    public function testReadBrokenInput() {
433*a1a3b679SAndreas Boehler
434*a1a3b679SAndreas Boehler        Reader::read(false);
435*a1a3b679SAndreas Boehler
436*a1a3b679SAndreas Boehler    }
437*a1a3b679SAndreas Boehler
438*a1a3b679SAndreas Boehler    public function testReadBOM() {
439*a1a3b679SAndreas Boehler
440*a1a3b679SAndreas Boehler        $data = chr(0xef) . chr(0xbb) . chr(0xbf) . "BEGIN:VCALENDAR\r\nEND:VCALENDAR";
441*a1a3b679SAndreas Boehler        $result = Reader::read($data);
442*a1a3b679SAndreas Boehler
443*a1a3b679SAndreas Boehler        $this->assertInstanceOf('Sabre\\VObject\\Component', $result);
444*a1a3b679SAndreas Boehler        $this->assertEquals('VCALENDAR', $result->name);
445*a1a3b679SAndreas Boehler        $this->assertEquals(0, count($result->children));
446*a1a3b679SAndreas Boehler
447*a1a3b679SAndreas Boehler    }
448*a1a3b679SAndreas Boehler
449*a1a3b679SAndreas Boehler}
450