3 class Sabre_VObject_ComponentTest extends PHPUnit_Framework_TestCase {
5 function testIterate() {
7 $comp = new Sabre_VObject_Component('VCALENDAR');
9 $sub = new Sabre_VObject_Component('VEVENT');
10 $comp->children[] = $sub;
12 $sub = new Sabre_VObject_Component('VTODO');
13 $comp->children[] = $sub;
16 foreach($comp->children() as $key=>$subcomponent) {
19 $this->assertInstanceOf('Sabre_VObject_Component',$subcomponent);
22 $this->assertEquals(2,$count);
23 $this->assertEquals(1,$key);
27 function testMagicGet() {
29 $comp = new Sabre_VObject_Component('VCALENDAR');
31 $sub = new Sabre_VObject_Component('VEVENT');
32 $comp->children[] = $sub;
34 $sub = new Sabre_VObject_Component('VTODO');
35 $comp->children[] = $sub;
37 $event = $comp->vevent;
38 $this->assertInstanceOf('Sabre_VObject_Component', $event);
39 $this->assertEquals('VEVENT', $event->name);
41 $this->assertInternalType('null', $comp->vjournal);
45 function testMagicGetGroups() {
47 $comp = new Sabre_VObject_Component('VCARD');
49 $sub = new Sabre_VObject_Property('GROUP1.EMAIL','1@1.com');
50 $comp->children[] = $sub;
52 $sub = new Sabre_VObject_Property('GROUP2.EMAIL','2@2.com');
53 $comp->children[] = $sub;
55 $sub = new Sabre_VObject_Property('EMAIL','3@3.com');
56 $comp->children[] = $sub;
58 $emails = $comp->email;
59 $this->assertEquals(3, count($emails));
61 $email1 = $comp->{"group1.email"};
62 $this->assertEquals('EMAIL', $email1[0]->name);
63 $this->assertEquals('GROUP1', $email1[0]->group);
65 $email3 = $comp->{".email"};
66 $this->assertEquals('EMAIL', $email3[0]->name);
67 $this->assertEquals(null, $email3[0]->group);
71 function testMagicIsset() {
73 $comp = new Sabre_VObject_Component('VCALENDAR');
75 $sub = new Sabre_VObject_Component('VEVENT');
76 $comp->children[] = $sub;
78 $sub = new Sabre_VObject_Component('VTODO');
79 $comp->children[] = $sub;
81 $this->assertTrue(isset($comp->vevent));
82 $this->assertTrue(isset($comp->vtodo));
83 $this->assertFalse(isset($comp->vjournal));
87 function testMagicSetScalar() {
89 $comp = new Sabre_VObject_Component('VCALENDAR');
90 $comp->myProp = 'myValue';
92 $this->assertInstanceOf('Sabre_VObject_Property',$comp->MYPROP);
93 $this->assertEquals('myValue',$comp->MYPROP->value);
98 function testMagicSetScalarTwice() {
100 $comp = new Sabre_VObject_Component('VCALENDAR');
101 $comp->myProp = 'myValue';
102 $comp->myProp = 'myValue';
104 $this->assertEquals(1,count($comp->children));
105 $this->assertInstanceOf('Sabre_VObject_Property',$comp->MYPROP);
106 $this->assertEquals('myValue',$comp->MYPROP->value);
110 function testMagicSetComponent() {
112 $comp = new Sabre_VObject_Component('VCALENDAR');
114 // Note that 'myProp' is ignored here.
115 $comp->myProp = new Sabre_VObject_Component('VEVENT');
117 $this->assertEquals(1, count($comp->children));
119 $this->assertEquals('VEVENT',$comp->VEVENT->name);
123 function testMagicSetTwice() {
125 $comp = new Sabre_VObject_Component('VCALENDAR');
127 $comp->VEVENT = new Sabre_VObject_Component('VEVENT');
128 $comp->VEVENT = new Sabre_VObject_Component('VEVENT');
130 $this->assertEquals(1, count($comp->children));
132 $this->assertEquals('VEVENT',$comp->VEVENT->name);
136 function testArrayAccessGet() {
138 $comp = new Sabre_VObject_Component('VCALENDAR');
140 $event = new Sabre_VObject_Component('VEVENT');
141 $event->summary = 'Event 1';
145 $event2 = clone $event;
146 $event2->summary = 'Event 2';
150 $this->assertEquals(2,count($comp->children()));
151 $this->assertTrue($comp->vevent[1] instanceof Sabre_VObject_Component);
152 $this->assertEquals('Event 2', (string)$comp->vevent[1]->summary);
156 function testArrayAccessExists() {
158 $comp = new Sabre_VObject_Component('VCALENDAR');
160 $event = new Sabre_VObject_Component('VEVENT');
161 $event->summary = 'Event 1';
165 $event2 = clone $event;
166 $event2->summary = 'Event 2';
170 $this->assertTrue(isset($comp->vevent[0]));
171 $this->assertTrue(isset($comp->vevent[1]));
176 * @expectedException LogicException
178 function testArrayAccessSet() {
180 $comp = new Sabre_VObject_Component('VCALENDAR');
181 $comp['hey'] = 'hi there';
185 * @expectedException LogicException
187 function testArrayAccessUnset() {
189 $comp = new Sabre_VObject_Component('VCALENDAR');
194 function testAddScalar() {
196 $comp = new Sabre_VObject_Component('VCALENDAR');
198 $comp->add('myprop','value');
200 $this->assertEquals(1, count($comp->children));
202 $this->assertTrue($comp->children[0] instanceof Sabre_VObject_Property);
203 $this->assertEquals('MYPROP',$comp->children[0]->name);
204 $this->assertEquals('value',$comp->children[0]->value);
208 function testAddComponent() {
210 $comp = new Sabre_VObject_Component('VCALENDAR');
212 $comp->add(new Sabre_VObject_Component('VEVENT'));
214 $this->assertEquals(1, count($comp->children));
216 $this->assertEquals('VEVENT',$comp->VEVENT->name);
220 function testAddComponentTwice() {
222 $comp = new Sabre_VObject_Component('VCALENDAR');
224 $comp->add(new Sabre_VObject_Component('VEVENT'));
225 $comp->add(new Sabre_VObject_Component('VEVENT'));
227 $this->assertEquals(2, count($comp->children));
229 $this->assertEquals('VEVENT',$comp->VEVENT->name);
234 * @expectedException InvalidArgumentException
236 function testAddArgFail() {
238 $comp = new Sabre_VObject_Component('VCALENDAR');
239 $comp->add(new Sabre_VObject_Component('VEVENT'),'hello');
244 * @expectedException InvalidArgumentException
246 function testAddArgFail2() {
248 $comp = new Sabre_VObject_Component('VCALENDAR');
254 * @expectedException InvalidArgumentException
256 function testAddArgFail3() {
258 $comp = new Sabre_VObject_Component('VCALENDAR');
259 $comp->add('hello',array());
264 * @expectedException InvalidArgumentException
266 function testMagicSetInvalid() {
268 $comp = new Sabre_VObject_Component('VCALENDAR');
270 // Note that 'myProp' is ignored here.
271 $comp->myProp = new StdClass();
273 $this->assertEquals(1, count($comp->children));
275 $this->assertEquals('VEVENT',$comp->VEVENT->name);
279 function testMagicUnset() {
281 $comp = new Sabre_VObject_Component('VCALENDAR');
282 $comp->add(new Sabre_VObject_Component('VEVENT'));
284 unset($comp->vevent);
286 $this->assertEquals(array(), $comp->children);
291 function testCount() {
293 $comp = new Sabre_VObject_Component('VCALENDAR');
294 $this->assertEquals(1,$comp->count());
298 function testChildren() {
300 $comp = new Sabre_VObject_Component('VCALENDAR');
302 // Note that 'myProp' is ignored here.
303 $comp->children = array(
304 new Sabre_VObject_Component('VEVENT'),
305 new Sabre_VObject_Component('VTODO')
308 $r = $comp->children();
309 $this->assertTrue($r instanceof Sabre_VObject_ElementList);
310 $this->assertEquals(2,count($r));
313 function testGetComponents() {
315 $comp = new Sabre_VObject_Component('VCALENDAR');
317 // Note that 'myProp' is ignored here.
318 $comp->children = array(
319 new Sabre_VObject_Property('FOO','BAR'),
320 new Sabre_VObject_Component('VTODO')
323 $r = $comp->getComponents();
324 $this->assertInternalType('array', $r);
325 $this->assertEquals(1, count($r));
326 $this->assertEquals('VTODO', $r[0]->name);
329 function testSerialize() {
331 $comp = new Sabre_VObject_Component('VCALENDAR');
332 $this->assertEquals("BEGIN:VCALENDAR\r\nEND:VCALENDAR\r\n", $comp->serialize());
336 function testSerializeChildren() {
338 $comp = new Sabre_VObject_Component('VCALENDAR');
339 $comp->children = array(
340 new Sabre_VObject_Component('VEVENT'),
341 new Sabre_VObject_Component('VTODO')
343 $this->assertEquals("BEGIN:VCALENDAR\r\nBEGIN:VTODO\r\nEND:VTODO\r\nBEGIN:VEVENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n", $comp->serialize());
347 function testSerializeOrder() {
349 $comp = new Sabre_VObject_Component('VCALENDAR');
350 $comp->add(new Sabre_VObject_Component('VEVENT'));
351 $comp->add('PROP1','BLABLA');
352 $comp->add('VERSION','2.0');
353 $comp->add(new Sabre_VObject_Component('VTIMEZONE'));
355 $str = $comp->serialize();
357 $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);