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