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