Mercurial > hg > rc1
comparison vendor/sabre/vobject/tests/VObject/ComponentTest.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 use | |
6 Sabre\VObject\Component\VCalendar, | |
7 Sabre\VObject\Component\VCard; | |
8 | |
9 class ComponentTest extends \PHPUnit_Framework_TestCase { | |
10 | |
11 function testIterate() { | |
12 | |
13 $comp = new VCalendar(array(), false); | |
14 | |
15 $sub = $comp->createComponent('VEVENT'); | |
16 $comp->add($sub); | |
17 | |
18 $sub = $comp->createComponent('VTODO'); | |
19 $comp->add($sub); | |
20 | |
21 $count = 0; | |
22 foreach($comp->children() as $key=>$subcomponent) { | |
23 | |
24 $count++; | |
25 $this->assertInstanceOf('Sabre\\VObject\\Component',$subcomponent); | |
26 | |
27 } | |
28 $this->assertEquals(2,$count); | |
29 $this->assertEquals(1,$key); | |
30 | |
31 } | |
32 | |
33 function testMagicGet() { | |
34 | |
35 $comp = new VCalendar(array(), false); | |
36 | |
37 $sub = $comp->createComponent('VEVENT'); | |
38 $comp->add($sub); | |
39 | |
40 $sub = $comp->createComponent('VTODO'); | |
41 $comp->add($sub); | |
42 | |
43 $event = $comp->vevent; | |
44 $this->assertInstanceOf('Sabre\\VObject\\Component', $event); | |
45 $this->assertEquals('VEVENT', $event->name); | |
46 | |
47 $this->assertInternalType('null', $comp->vjournal); | |
48 | |
49 } | |
50 | |
51 function testMagicGetGroups() { | |
52 | |
53 $comp = new VCard(); | |
54 | |
55 $sub = $comp->createProperty('GROUP1.EMAIL','1@1.com'); | |
56 $comp->add($sub); | |
57 | |
58 $sub = $comp->createProperty('GROUP2.EMAIL','2@2.com'); | |
59 $comp->add($sub); | |
60 | |
61 $sub = $comp->createProperty('EMAIL','3@3.com'); | |
62 $comp->add($sub); | |
63 | |
64 $emails = $comp->email; | |
65 $this->assertEquals(3, count($emails)); | |
66 | |
67 $email1 = $comp->{"group1.email"}; | |
68 $this->assertEquals('EMAIL', $email1[0]->name); | |
69 $this->assertEquals('GROUP1', $email1[0]->group); | |
70 | |
71 $email3 = $comp->{".email"}; | |
72 $this->assertEquals('EMAIL', $email3[0]->name); | |
73 $this->assertEquals(null, $email3[0]->group); | |
74 | |
75 } | |
76 | |
77 function testMagicIsset() { | |
78 | |
79 $comp = new VCalendar(); | |
80 | |
81 $sub = $comp->createComponent('VEVENT'); | |
82 $comp->add($sub); | |
83 | |
84 $sub = $comp->createComponent('VTODO'); | |
85 $comp->add($sub); | |
86 | |
87 $this->assertTrue(isset($comp->vevent)); | |
88 $this->assertTrue(isset($comp->vtodo)); | |
89 $this->assertFalse(isset($comp->vjournal)); | |
90 | |
91 } | |
92 | |
93 function testMagicSetScalar() { | |
94 | |
95 $comp = new VCalendar(); | |
96 $comp->myProp = 'myValue'; | |
97 | |
98 $this->assertInstanceOf('Sabre\\VObject\\Property',$comp->MYPROP); | |
99 $this->assertEquals('myValue',(string)$comp->MYPROP); | |
100 | |
101 | |
102 } | |
103 | |
104 function testMagicSetScalarTwice() { | |
105 | |
106 $comp = new VCalendar(array(), false); | |
107 $comp->myProp = 'myValue'; | |
108 $comp->myProp = 'myValue'; | |
109 | |
110 $this->assertEquals(1,count($comp->children())); | |
111 $this->assertInstanceOf('Sabre\\VObject\\Property',$comp->MYPROP); | |
112 $this->assertEquals('myValue',(string)$comp->MYPROP); | |
113 | |
114 } | |
115 | |
116 function testMagicSetArray() { | |
117 | |
118 $comp = new VCalendar(); | |
119 $comp->ORG = array('Acme Inc', 'Section 9'); | |
120 | |
121 $this->assertInstanceOf('Sabre\\VObject\\Property',$comp->ORG); | |
122 $this->assertEquals(array('Acme Inc', 'Section 9'),$comp->ORG->getParts()); | |
123 | |
124 } | |
125 | |
126 function testMagicSetComponent() { | |
127 | |
128 $comp = new VCalendar(); | |
129 | |
130 // Note that 'myProp' is ignored here. | |
131 $comp->myProp = $comp->createComponent('VEVENT'); | |
132 | |
133 $this->assertEquals(1, count($comp)); | |
134 | |
135 $this->assertEquals('VEVENT',$comp->VEVENT->name); | |
136 | |
137 } | |
138 | |
139 function testMagicSetTwice() { | |
140 | |
141 $comp = new VCalendar(array(), false); | |
142 | |
143 $comp->VEVENT = $comp->createComponent('VEVENT'); | |
144 $comp->VEVENT = $comp->createComponent('VEVENT'); | |
145 | |
146 $this->assertEquals(1, count($comp->children())); | |
147 | |
148 $this->assertEquals('VEVENT',$comp->VEVENT->name); | |
149 | |
150 } | |
151 | |
152 function testArrayAccessGet() { | |
153 | |
154 $comp = new VCalendar(array(), false); | |
155 | |
156 $event = $comp->createComponent('VEVENT'); | |
157 $event->summary = 'Event 1'; | |
158 | |
159 $comp->add($event); | |
160 | |
161 $event2 = clone $event; | |
162 $event2->summary = 'Event 2'; | |
163 | |
164 $comp->add($event2); | |
165 | |
166 $this->assertEquals(2,count($comp->children())); | |
167 $this->assertTrue($comp->vevent[1] instanceof Component); | |
168 $this->assertEquals('Event 2', (string)$comp->vevent[1]->summary); | |
169 | |
170 } | |
171 | |
172 function testArrayAccessExists() { | |
173 | |
174 $comp = new VCalendar(); | |
175 | |
176 $event = $comp->createComponent('VEVENT'); | |
177 $event->summary = 'Event 1'; | |
178 | |
179 $comp->add($event); | |
180 | |
181 $event2 = clone $event; | |
182 $event2->summary = 'Event 2'; | |
183 | |
184 $comp->add($event2); | |
185 | |
186 $this->assertTrue(isset($comp->vevent[0])); | |
187 $this->assertTrue(isset($comp->vevent[1])); | |
188 | |
189 } | |
190 | |
191 /** | |
192 * @expectedException LogicException | |
193 */ | |
194 function testArrayAccessSet() { | |
195 | |
196 $comp = new VCalendar(); | |
197 $comp['hey'] = 'hi there'; | |
198 | |
199 } | |
200 /** | |
201 * @expectedException LogicException | |
202 */ | |
203 function testArrayAccessUnset() { | |
204 | |
205 $comp = new VCalendar(); | |
206 unset($comp[0]); | |
207 | |
208 } | |
209 | |
210 function testAddScalar() { | |
211 | |
212 $comp = new VCalendar(array(), false); | |
213 | |
214 $comp->add('myprop','value'); | |
215 | |
216 $this->assertEquals(1, count($comp->children())); | |
217 | |
218 $bla = $comp->children[0]; | |
219 | |
220 $this->assertTrue($bla instanceof Property); | |
221 $this->assertEquals('MYPROP',$bla->name); | |
222 $this->assertEquals('value',(string)$bla); | |
223 | |
224 } | |
225 | |
226 function testAddScalarParams() { | |
227 | |
228 $comp = new VCalendar(array(), false); | |
229 | |
230 $comp->add('myprop','value',array('param1'=>'value1')); | |
231 | |
232 $this->assertEquals(1, count($comp->children())); | |
233 | |
234 $bla = $comp->children[0]; | |
235 | |
236 $this->assertInstanceOf('Sabre\\VObject\\Property', $bla); | |
237 $this->assertEquals('MYPROP',$bla->name); | |
238 $this->assertEquals('value', (string)$bla); | |
239 | |
240 $this->assertEquals(1, count($bla->parameters())); | |
241 | |
242 $this->assertEquals('PARAM1',$bla->parameters['PARAM1']->name); | |
243 $this->assertEquals('value1',$bla->parameters['PARAM1']->getValue()); | |
244 | |
245 } | |
246 | |
247 | |
248 function testAddComponent() { | |
249 | |
250 $comp = new VCalendar(array(), false); | |
251 | |
252 $comp->add($comp->createComponent('VEVENT')); | |
253 | |
254 $this->assertEquals(1, count($comp->children())); | |
255 | |
256 $this->assertEquals('VEVENT',$comp->VEVENT->name); | |
257 | |
258 } | |
259 | |
260 function testAddComponentTwice() { | |
261 | |
262 $comp = new VCalendar(array(), false); | |
263 | |
264 $comp->add($comp->createComponent('VEVENT')); | |
265 $comp->add($comp->createComponent('VEVENT')); | |
266 | |
267 $this->assertEquals(2, count($comp->children())); | |
268 | |
269 $this->assertEquals('VEVENT',$comp->VEVENT->name); | |
270 | |
271 } | |
272 | |
273 /** | |
274 * @expectedException InvalidArgumentException | |
275 */ | |
276 function testAddArgFail() { | |
277 | |
278 $comp = new VCalendar(); | |
279 $comp->add($comp->createComponent('VEVENT'),'hello'); | |
280 | |
281 } | |
282 | |
283 /** | |
284 * @expectedException InvalidArgumentException | |
285 */ | |
286 function testAddArgFail2() { | |
287 | |
288 $comp = new VCalendar(); | |
289 $comp->add(array()); | |
290 | |
291 } | |
292 | |
293 function testMagicUnset() { | |
294 | |
295 $comp = new VCalendar(array(), false); | |
296 $comp->add($comp->createComponent('VEVENT')); | |
297 | |
298 unset($comp->vevent); | |
299 | |
300 $this->assertEquals(0, count($comp->children())); | |
301 | |
302 } | |
303 | |
304 | |
305 function testCount() { | |
306 | |
307 $comp = new VCalendar(); | |
308 $this->assertEquals(1,$comp->count()); | |
309 | |
310 } | |
311 | |
312 function testChildren() { | |
313 | |
314 $comp = new VCalendar(array(), false); | |
315 | |
316 // Note that 'myProp' is ignored here. | |
317 $comp->add($comp->createComponent('VEVENT')); | |
318 $comp->add($comp->createComponent('VTODO')); | |
319 | |
320 $r = $comp->children(); | |
321 $this->assertInternalType('array', $r); | |
322 $this->assertEquals(2,count($r)); | |
323 } | |
324 | |
325 function testGetComponents() { | |
326 | |
327 $comp = new VCalendar(); | |
328 | |
329 $comp->add($comp->createProperty('FOO','BAR')); | |
330 $comp->add($comp->createComponent('VTODO')); | |
331 | |
332 $r = $comp->getComponents(); | |
333 $this->assertInternalType('array', $r); | |
334 $this->assertEquals(1, count($r)); | |
335 $this->assertEquals('VTODO', $r[0]->name); | |
336 } | |
337 | |
338 function testSerialize() { | |
339 | |
340 $comp = new VCalendar(array(), false); | |
341 $this->assertEquals("BEGIN:VCALENDAR\r\nEND:VCALENDAR\r\n", $comp->serialize()); | |
342 | |
343 } | |
344 | |
345 function testSerializeChildren() { | |
346 | |
347 $comp = new VCalendar(array(), false); | |
348 $event = $comp->add($comp->createComponent('VEVENT')); | |
349 unset($event->DTSTAMP, $event->UID); | |
350 $comp->add($comp->createComponent('VTODO')); | |
351 | |
352 $str = $comp->serialize(); | |
353 | |
354 $this->assertEquals("BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nEND:VEVENT\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n", $str); | |
355 | |
356 } | |
357 | |
358 function testSerializeOrderCompAndProp() { | |
359 | |
360 $comp = new VCalendar(array(), false); | |
361 $comp->add($event = $comp->createComponent('VEVENT')); | |
362 $comp->add('PROP1','BLABLA'); | |
363 $comp->add('VERSION','2.0'); | |
364 $comp->add($comp->createComponent('VTIMEZONE')); | |
365 | |
366 unset($event->DTSTAMP, $event->UID); | |
367 $str = $comp->serialize(); | |
368 | |
369 $this->assertEquals("BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPROP1:BLABLA\r\nBEGIN:VTIMEZONE\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n", $str); | |
370 | |
371 } | |
372 | |
373 function testAnotherSerializeOrderProp() { | |
374 | |
375 $prop4s=array('1', '2', '3', '4', '5', '6', '7', '8', '9', '10'); | |
376 | |
377 $comp = new VCard(array(), false); | |
378 | |
379 $comp->__set('SOMEPROP','FOO'); | |
380 $comp->__set('ANOTHERPROP','FOO'); | |
381 $comp->__set('THIRDPROP','FOO'); | |
382 foreach ($prop4s as $prop4) { | |
383 $comp->add('PROP4', 'FOO '.$prop4); | |
384 } | |
385 $comp->__set('PROPNUMBERFIVE', 'FOO'); | |
386 $comp->__set('PROPNUMBERSIX', 'FOO'); | |
387 $comp->__set('PROPNUMBERSEVEN', 'FOO'); | |
388 $comp->__set('PROPNUMBEREIGHT', 'FOO'); | |
389 $comp->__set('PROPNUMBERNINE', 'FOO'); | |
390 $comp->__set('PROPNUMBERTEN', 'FOO'); | |
391 $comp->__set('VERSION','2.0'); | |
392 $comp->__set('UID', 'FOO'); | |
393 | |
394 $str = $comp->serialize(); | |
395 | |
396 $this->assertEquals("BEGIN:VCARD\r\nVERSION:2.0\r\nSOMEPROP:FOO\r\nANOTHERPROP:FOO\r\nTHIRDPROP:FOO\r\nPROP4:FOO 1\r\nPROP4:FOO 2\r\nPROP4:FOO 3\r\nPROP4:FOO 4\r\nPROP4:FOO 5\r\nPROP4:FOO 6\r\nPROP4:FOO 7\r\nPROP4:FOO 8\r\nPROP4:FOO 9\r\nPROP4:FOO 10\r\nPROPNUMBERFIVE:FOO\r\nPROPNUMBERSIX:FOO\r\nPROPNUMBERSEVEN:FOO\r\nPROPNUMBEREIGHT:FOO\r\nPROPNUMBERNINE:FOO\r\nPROPNUMBERTEN:FOO\r\nUID:FOO\r\nEND:VCARD\r\n", $str); | |
397 | |
398 } | |
399 | |
400 function testInstantiateWithChildren() { | |
401 | |
402 $comp = new VCard(array( | |
403 'ORG' => array('Acme Inc.', 'Section 9'), | |
404 'FN' => 'Finn The Human', | |
405 )); | |
406 | |
407 $this->assertEquals(array('Acme Inc.', 'Section 9'), $comp->ORG->getParts()); | |
408 $this->assertEquals('Finn The Human', $comp->FN->getValue()); | |
409 | |
410 } | |
411 | |
412 function testInstantiateSubComponent() { | |
413 | |
414 $comp = new VCalendar(); | |
415 $event = $comp->createComponent('VEVENT', array( | |
416 $comp->createProperty('UID', '12345'), | |
417 )); | |
418 $comp->add($event); | |
419 | |
420 $this->assertEquals('12345', $comp->VEVENT->UID->getValue()); | |
421 | |
422 } | |
423 | |
424 function testRemoveByName() { | |
425 | |
426 $comp = new VCalendar(array(), false); | |
427 $comp->add('prop1','val1'); | |
428 $comp->add('prop2','val2'); | |
429 $comp->add('prop2','val2'); | |
430 | |
431 $comp->remove('prop2'); | |
432 $this->assertFalse(isset($comp->prop2)); | |
433 $this->assertTrue(isset($comp->prop1)); | |
434 | |
435 } | |
436 | |
437 function testRemoveByObj() { | |
438 | |
439 $comp = new VCalendar(array(), false); | |
440 $comp->add('prop1','val1'); | |
441 $prop = $comp->add('prop2','val2'); | |
442 | |
443 $comp->remove($prop); | |
444 $this->assertFalse(isset($comp->prop2)); | |
445 $this->assertTrue(isset($comp->prop1)); | |
446 | |
447 } | |
448 | |
449 /** | |
450 * @expectedException InvalidArgumentException | |
451 */ | |
452 function testRemoveNotFound() { | |
453 | |
454 $comp = new VCalendar(array(), false); | |
455 $prop = $comp->createProperty('A','B'); | |
456 $comp->remove($prop); | |
457 | |
458 } | |
459 | |
460 /** | |
461 * @dataProvider ruleData | |
462 */ | |
463 function testValidateRules($componentList, $errorCount) { | |
464 | |
465 $vcard = new Component\VCard(); | |
466 | |
467 $component = new FakeComponent($vcard,'Hi', array(), $defaults = false ); | |
468 foreach($componentList as $v) { | |
469 $component->add($v,'Hello.'); | |
470 } | |
471 | |
472 $this->assertEquals($errorCount, count($component->validate())); | |
473 | |
474 } | |
475 | |
476 function testValidateRepair() { | |
477 | |
478 $vcard = new Component\VCard(); | |
479 | |
480 $component = new FakeComponent($vcard,'Hi', array(), $defaults = false ); | |
481 $component->validate(Component::REPAIR); | |
482 $this->assertEquals('yow', $component->BAR->getValue()); | |
483 | |
484 } | |
485 | |
486 function ruleData() { | |
487 | |
488 return array( | |
489 | |
490 array(array(), 2), | |
491 array(array('FOO'), 3), | |
492 array(array('BAR'), 1), | |
493 array(array('BAZ'), 1), | |
494 array(array('BAR','BAZ'), 0), | |
495 array(array('BAR','BAZ','ZIM',), 0), | |
496 array(array('BAR','BAZ','ZIM','GIR'), 0), | |
497 array(array('BAR','BAZ','ZIM','GIR','GIR'), 1), | |
498 | |
499 ); | |
500 | |
501 } | |
502 | |
503 } | |
504 | |
505 class FakeComponent extends Component { | |
506 | |
507 public function getValidationRules() { | |
508 | |
509 return array( | |
510 'FOO' => '0', | |
511 'BAR' => '1', | |
512 'BAZ' => '+', | |
513 'ZIM' => '*', | |
514 'GIR' => '?', | |
515 ); | |
516 | |
517 } | |
518 | |
519 public function getDefaults() { | |
520 | |
521 return array( | |
522 'BAR' => 'yow', | |
523 ); | |
524 | |
525 } | |
526 | |
527 } | |
528 |