xref: /plugin/davcal/vendor/sabre/vobject/tests/VObject/Splitter/ICalendarTest.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
1*a1a3b679SAndreas Boehler<?php
2*a1a3b679SAndreas Boehler
3*a1a3b679SAndreas Boehlernamespace Sabre\VObject\Splitter;
4*a1a3b679SAndreas Boehler
5*a1a3b679SAndreas Boehleruse Sabre\VObject;
6*a1a3b679SAndreas Boehler
7*a1a3b679SAndreas Boehlerclass ICalendarTest extends \PHPUnit_Framework_TestCase {
8*a1a3b679SAndreas Boehler
9*a1a3b679SAndreas Boehler    protected $version;
10*a1a3b679SAndreas Boehler
11*a1a3b679SAndreas Boehler    function setUp() {
12*a1a3b679SAndreas Boehler        $this->version = VObject\Version::VERSION;
13*a1a3b679SAndreas Boehler    }
14*a1a3b679SAndreas Boehler
15*a1a3b679SAndreas Boehler    function createStream($data) {
16*a1a3b679SAndreas Boehler
17*a1a3b679SAndreas Boehler        $stream = fopen('php://memory','r+');
18*a1a3b679SAndreas Boehler        fwrite($stream, $data);
19*a1a3b679SAndreas Boehler        rewind($stream);
20*a1a3b679SAndreas Boehler        return $stream;
21*a1a3b679SAndreas Boehler
22*a1a3b679SAndreas Boehler    }
23*a1a3b679SAndreas Boehler
24*a1a3b679SAndreas Boehler    function testICalendarImportValidEvent() {
25*a1a3b679SAndreas Boehler
26*a1a3b679SAndreas Boehler        $data = <<<EOT
27*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
28*a1a3b679SAndreas BoehlerBEGIN:VEVENT
29*a1a3b679SAndreas BoehlerUID:foo
30*a1a3b679SAndreas BoehlerDTSTAMP:20140122T233226Z
31*a1a3b679SAndreas BoehlerDTSTART:20140101T070000Z
32*a1a3b679SAndreas BoehlerEND:VEVENT
33*a1a3b679SAndreas BoehlerEND:VCALENDAR
34*a1a3b679SAndreas BoehlerEOT;
35*a1a3b679SAndreas Boehler        $tempFile = $this->createStream($data);
36*a1a3b679SAndreas Boehler
37*a1a3b679SAndreas Boehler        $objects = new ICalendar($tempFile);
38*a1a3b679SAndreas Boehler
39*a1a3b679SAndreas Boehler        $return = "";
40*a1a3b679SAndreas Boehler        while($object=$objects->getNext()) {
41*a1a3b679SAndreas Boehler            $return .= $object->serialize();
42*a1a3b679SAndreas Boehler        }
43*a1a3b679SAndreas Boehler        $this->assertEquals(array(), VObject\Reader::read($return)->validate());
44*a1a3b679SAndreas Boehler    }
45*a1a3b679SAndreas Boehler
46*a1a3b679SAndreas Boehler    /**
47*a1a3b679SAndreas Boehler     * @expectedException Sabre\VObject\ParseException
48*a1a3b679SAndreas Boehler     */
49*a1a3b679SAndreas Boehler    function testICalendarImportWrongType() {
50*a1a3b679SAndreas Boehler
51*a1a3b679SAndreas Boehler        $data = <<<EOT
52*a1a3b679SAndreas BoehlerBEGIN:VCARD
53*a1a3b679SAndreas BoehlerUID:foo1
54*a1a3b679SAndreas BoehlerEND:VCARD
55*a1a3b679SAndreas BoehlerBEGIN:VCARD
56*a1a3b679SAndreas BoehlerUID:foo2
57*a1a3b679SAndreas BoehlerEND:VCARD
58*a1a3b679SAndreas BoehlerEOT;
59*a1a3b679SAndreas Boehler        $tempFile = $this->createStream($data);
60*a1a3b679SAndreas Boehler
61*a1a3b679SAndreas Boehler        $objects = new ICalendar($tempFile);
62*a1a3b679SAndreas Boehler
63*a1a3b679SAndreas Boehler    }
64*a1a3b679SAndreas Boehler
65*a1a3b679SAndreas Boehler    function testICalendarImportEndOfData() {
66*a1a3b679SAndreas Boehler        $data = <<<EOT
67*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
68*a1a3b679SAndreas BoehlerBEGIN:VEVENT
69*a1a3b679SAndreas BoehlerUID:foo
70*a1a3b679SAndreas BoehlerDTSTAMP:20140122T233226Z
71*a1a3b679SAndreas BoehlerEND:VEVENT
72*a1a3b679SAndreas BoehlerEND:VCALENDAR
73*a1a3b679SAndreas BoehlerEOT;
74*a1a3b679SAndreas Boehler        $tempFile = $this->createStream($data);
75*a1a3b679SAndreas Boehler
76*a1a3b679SAndreas Boehler        $objects = new ICalendar($tempFile);
77*a1a3b679SAndreas Boehler
78*a1a3b679SAndreas Boehler        $return = "";
79*a1a3b679SAndreas Boehler        while($object=$objects->getNext()) {
80*a1a3b679SAndreas Boehler            $return .= $object->serialize();
81*a1a3b679SAndreas Boehler        }
82*a1a3b679SAndreas Boehler        $this->assertNull($object=$objects->getNext());
83*a1a3b679SAndreas Boehler    }
84*a1a3b679SAndreas Boehler
85*a1a3b679SAndreas Boehler    /**
86*a1a3b679SAndreas Boehler     * @expectedException Sabre\VObject\ParseException
87*a1a3b679SAndreas Boehler     */
88*a1a3b679SAndreas Boehler    function testICalendarImportInvalidEvent() {
89*a1a3b679SAndreas Boehler        $data = <<<EOT
90*a1a3b679SAndreas BoehlerEOT;
91*a1a3b679SAndreas Boehler        $tempFile = $this->createStream($data);
92*a1a3b679SAndreas Boehler        $objects = new ICalendar($tempFile);
93*a1a3b679SAndreas Boehler
94*a1a3b679SAndreas Boehler    }
95*a1a3b679SAndreas Boehler
96*a1a3b679SAndreas Boehler    function testICalendarImportMultipleValidEvents() {
97*a1a3b679SAndreas Boehler
98*a1a3b679SAndreas Boehler        $event[] = <<<EOT
99*a1a3b679SAndreas BoehlerBEGIN:VEVENT
100*a1a3b679SAndreas BoehlerUID:foo1
101*a1a3b679SAndreas BoehlerDTSTAMP:20140122T233226Z
102*a1a3b679SAndreas BoehlerDTSTART:20140101T050000Z
103*a1a3b679SAndreas BoehlerEND:VEVENT
104*a1a3b679SAndreas BoehlerEOT;
105*a1a3b679SAndreas Boehler
106*a1a3b679SAndreas Boehler$event[] = <<<EOT
107*a1a3b679SAndreas BoehlerBEGIN:VEVENT
108*a1a3b679SAndreas BoehlerUID:foo2
109*a1a3b679SAndreas BoehlerDTSTAMP:20140122T233226Z
110*a1a3b679SAndreas BoehlerDTSTART:20140101T060000Z
111*a1a3b679SAndreas BoehlerEND:VEVENT
112*a1a3b679SAndreas BoehlerEOT;
113*a1a3b679SAndreas Boehler
114*a1a3b679SAndreas Boehler        $data = <<<EOT
115*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
116*a1a3b679SAndreas Boehler$event[0]
117*a1a3b679SAndreas Boehler$event[1]
118*a1a3b679SAndreas BoehlerEND:VCALENDAR
119*a1a3b679SAndreas Boehler
120*a1a3b679SAndreas BoehlerEOT;
121*a1a3b679SAndreas Boehler        $tempFile = $this->createStream($data);
122*a1a3b679SAndreas Boehler
123*a1a3b679SAndreas Boehler        $objects = new ICalendar($tempFile);
124*a1a3b679SAndreas Boehler
125*a1a3b679SAndreas Boehler        $return = "";
126*a1a3b679SAndreas Boehler        $i = 0;
127*a1a3b679SAndreas Boehler        while($object=$objects->getNext()) {
128*a1a3b679SAndreas Boehler
129*a1a3b679SAndreas Boehler            $expected = <<<EOT
130*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
131*a1a3b679SAndreas BoehlerVERSION:2.0
132*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject $this->version//EN
133*a1a3b679SAndreas BoehlerCALSCALE:GREGORIAN
134*a1a3b679SAndreas Boehler$event[$i]
135*a1a3b679SAndreas BoehlerEND:VCALENDAR
136*a1a3b679SAndreas Boehler
137*a1a3b679SAndreas BoehlerEOT;
138*a1a3b679SAndreas Boehler
139*a1a3b679SAndreas Boehler            $return .= $object->serialize();
140*a1a3b679SAndreas Boehler            $expected = str_replace("\n", "\r\n", $expected);
141*a1a3b679SAndreas Boehler            $this->assertEquals($expected, $object->serialize());
142*a1a3b679SAndreas Boehler            $i++;
143*a1a3b679SAndreas Boehler        }
144*a1a3b679SAndreas Boehler        $this->assertEquals(array(), VObject\Reader::read($return)->validate());
145*a1a3b679SAndreas Boehler    }
146*a1a3b679SAndreas Boehler
147*a1a3b679SAndreas Boehler    function testICalendarImportEventWithoutUID() {
148*a1a3b679SAndreas Boehler
149*a1a3b679SAndreas Boehler        $data = <<<EOT
150*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
151*a1a3b679SAndreas BoehlerVERSION:2.0
152*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject $this->version//EN
153*a1a3b679SAndreas BoehlerCALSCALE:GREGORIAN
154*a1a3b679SAndreas BoehlerBEGIN:VEVENT
155*a1a3b679SAndreas BoehlerDTSTART:20140101T040000Z
156*a1a3b679SAndreas BoehlerDTSTAMP:20140122T233226Z
157*a1a3b679SAndreas BoehlerEND:VEVENT
158*a1a3b679SAndreas BoehlerEND:VCALENDAR
159*a1a3b679SAndreas Boehler
160*a1a3b679SAndreas BoehlerEOT;
161*a1a3b679SAndreas Boehler        $tempFile = $this->createStream($data);
162*a1a3b679SAndreas Boehler
163*a1a3b679SAndreas Boehler        $objects = new ICalendar($tempFile);
164*a1a3b679SAndreas Boehler
165*a1a3b679SAndreas Boehler        $return = "";
166*a1a3b679SAndreas Boehler        while($object=$objects->getNext()) {
167*a1a3b679SAndreas Boehler            $return .= $object->serialize();
168*a1a3b679SAndreas Boehler        }
169*a1a3b679SAndreas Boehler
170*a1a3b679SAndreas Boehler        $messages = VObject\Reader::read($return)->validate();
171*a1a3b679SAndreas Boehler
172*a1a3b679SAndreas Boehler        if ($messages) {
173*a1a3b679SAndreas Boehler            $messages = array_map(
174*a1a3b679SAndreas Boehler                function($item) { return $item['message']; },
175*a1a3b679SAndreas Boehler                $messages
176*a1a3b679SAndreas Boehler            );
177*a1a3b679SAndreas Boehler            $this->fail('Validation errors: ' . implode("\n", $messages));
178*a1a3b679SAndreas Boehler        } else {
179*a1a3b679SAndreas Boehler            $this->assertEquals(array(), $messages);
180*a1a3b679SAndreas Boehler        }
181*a1a3b679SAndreas Boehler    }
182*a1a3b679SAndreas Boehler
183*a1a3b679SAndreas Boehler    function testICalendarImportMultipleVTIMEZONESAndMultipleValidEvents() {
184*a1a3b679SAndreas Boehler
185*a1a3b679SAndreas Boehler        $timezones = <<<EOT
186*a1a3b679SAndreas BoehlerBEGIN:VTIMEZONE
187*a1a3b679SAndreas BoehlerTZID:Europe/Berlin
188*a1a3b679SAndreas BoehlerBEGIN:DAYLIGHT
189*a1a3b679SAndreas BoehlerTZOFFSETFROM:+0100
190*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
191*a1a3b679SAndreas BoehlerDTSTART:19810329T020000
192*a1a3b679SAndreas BoehlerTZNAME:MESZ
193*a1a3b679SAndreas BoehlerTZOFFSETTO:+0200
194*a1a3b679SAndreas BoehlerEND:DAYLIGHT
195*a1a3b679SAndreas BoehlerBEGIN:STANDARD
196*a1a3b679SAndreas BoehlerTZOFFSETFROM:+0200
197*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
198*a1a3b679SAndreas BoehlerDTSTART:19961027T030000
199*a1a3b679SAndreas BoehlerTZNAME:MEZ
200*a1a3b679SAndreas BoehlerTZOFFSETTO:+0100
201*a1a3b679SAndreas BoehlerEND:STANDARD
202*a1a3b679SAndreas BoehlerEND:VTIMEZONE
203*a1a3b679SAndreas BoehlerBEGIN:VTIMEZONE
204*a1a3b679SAndreas BoehlerTZID:Europe/London
205*a1a3b679SAndreas BoehlerBEGIN:DAYLIGHT
206*a1a3b679SAndreas BoehlerTZOFFSETFROM:+0000
207*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
208*a1a3b679SAndreas BoehlerDTSTART:19810329T010000
209*a1a3b679SAndreas BoehlerTZNAME:GMT+01:00
210*a1a3b679SAndreas BoehlerTZOFFSETTO:+0100
211*a1a3b679SAndreas BoehlerEND:DAYLIGHT
212*a1a3b679SAndreas BoehlerBEGIN:STANDARD
213*a1a3b679SAndreas BoehlerTZOFFSETFROM:+0100
214*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
215*a1a3b679SAndreas BoehlerDTSTART:19961027T020000
216*a1a3b679SAndreas BoehlerTZNAME:GMT
217*a1a3b679SAndreas BoehlerTZOFFSETTO:+0000
218*a1a3b679SAndreas BoehlerEND:STANDARD
219*a1a3b679SAndreas BoehlerEND:VTIMEZONE
220*a1a3b679SAndreas BoehlerEOT;
221*a1a3b679SAndreas Boehler
222*a1a3b679SAndreas Boehler        $event[] = <<<EOT
223*a1a3b679SAndreas BoehlerBEGIN:VEVENT
224*a1a3b679SAndreas BoehlerUID:foo1
225*a1a3b679SAndreas BoehlerDTSTAMP:20140122T232710Z
226*a1a3b679SAndreas BoehlerDTSTART:20140101T010000Z
227*a1a3b679SAndreas BoehlerEND:VEVENT
228*a1a3b679SAndreas BoehlerEOT;
229*a1a3b679SAndreas Boehler
230*a1a3b679SAndreas Boehler        $event[] = <<<EOT
231*a1a3b679SAndreas BoehlerBEGIN:VEVENT
232*a1a3b679SAndreas BoehlerUID:foo2
233*a1a3b679SAndreas BoehlerDTSTAMP:20140122T232710Z
234*a1a3b679SAndreas BoehlerDTSTART:20140101T020000Z
235*a1a3b679SAndreas BoehlerEND:VEVENT
236*a1a3b679SAndreas BoehlerEOT;
237*a1a3b679SAndreas Boehler
238*a1a3b679SAndreas Boehler        $event[] = <<<EOT
239*a1a3b679SAndreas BoehlerBEGIN:VEVENT
240*a1a3b679SAndreas BoehlerUID:foo3
241*a1a3b679SAndreas BoehlerDTSTAMP:20140122T232710Z
242*a1a3b679SAndreas BoehlerDTSTART:20140101T030000Z
243*a1a3b679SAndreas BoehlerEND:VEVENT
244*a1a3b679SAndreas BoehlerEOT;
245*a1a3b679SAndreas Boehler
246*a1a3b679SAndreas Boehler        $data = <<<EOT
247*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
248*a1a3b679SAndreas Boehler$timezones
249*a1a3b679SAndreas Boehler$event[0]
250*a1a3b679SAndreas Boehler$event[1]
251*a1a3b679SAndreas Boehler$event[2]
252*a1a3b679SAndreas BoehlerEND:VCALENDAR
253*a1a3b679SAndreas Boehler
254*a1a3b679SAndreas BoehlerEOT;
255*a1a3b679SAndreas Boehler        $tempFile = $this->createStream($data);
256*a1a3b679SAndreas Boehler
257*a1a3b679SAndreas Boehler        $objects = new ICalendar($tempFile);
258*a1a3b679SAndreas Boehler
259*a1a3b679SAndreas Boehler        $return = "";
260*a1a3b679SAndreas Boehler        $i = 0;
261*a1a3b679SAndreas Boehler        while($object=$objects->getNext()) {
262*a1a3b679SAndreas Boehler
263*a1a3b679SAndreas Boehler            $expected = <<<EOT
264*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
265*a1a3b679SAndreas BoehlerVERSION:2.0
266*a1a3b679SAndreas BoehlerPRODID:-//Sabre//Sabre VObject $this->version//EN
267*a1a3b679SAndreas BoehlerCALSCALE:GREGORIAN
268*a1a3b679SAndreas Boehler$timezones
269*a1a3b679SAndreas Boehler$event[$i]
270*a1a3b679SAndreas BoehlerEND:VCALENDAR
271*a1a3b679SAndreas Boehler
272*a1a3b679SAndreas BoehlerEOT;
273*a1a3b679SAndreas Boehler            $expected = str_replace("\n", "\r\n", $expected);
274*a1a3b679SAndreas Boehler
275*a1a3b679SAndreas Boehler            $this->assertEquals($expected, $object->serialize());
276*a1a3b679SAndreas Boehler            $return .= $object->serialize();
277*a1a3b679SAndreas Boehler            $i++;
278*a1a3b679SAndreas Boehler
279*a1a3b679SAndreas Boehler        }
280*a1a3b679SAndreas Boehler
281*a1a3b679SAndreas Boehler        $this->assertEquals(array(), VObject\Reader::read($return)->validate());
282*a1a3b679SAndreas Boehler    }
283*a1a3b679SAndreas Boehler
284*a1a3b679SAndreas Boehler    function testICalendarImportWithOutVTIMEZONES() {
285*a1a3b679SAndreas Boehler
286*a1a3b679SAndreas Boehler        $data = <<<EOT
287*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
288*a1a3b679SAndreas BoehlerVERSION:2.0
289*a1a3b679SAndreas BoehlerPRODID:-//Apple Inc.//Mac OS X 10.8//EN
290*a1a3b679SAndreas BoehlerCALSCALE:GREGORIAN
291*a1a3b679SAndreas BoehlerBEGIN:VEVENT
292*a1a3b679SAndreas BoehlerCREATED:20120605T072109Z
293*a1a3b679SAndreas BoehlerUID:D6716295-C10F-4B20-82F9-E1A3026C7DCF
294*a1a3b679SAndreas BoehlerDTEND;VALUE=DATE:20120717
295*a1a3b679SAndreas BoehlerTRANSP:TRANSPARENT
296*a1a3b679SAndreas BoehlerSUMMARY:Start Vorbereitung
297*a1a3b679SAndreas BoehlerDTSTART;VALUE=DATE:20120716
298*a1a3b679SAndreas BoehlerDTSTAMP:20120605T072115Z
299*a1a3b679SAndreas BoehlerSEQUENCE:2
300*a1a3b679SAndreas BoehlerBEGIN:VALARM
301*a1a3b679SAndreas BoehlerX-WR-ALARMUID:A99EDA6A-35EB-4446-B8BC-CDA3C60C627D
302*a1a3b679SAndreas BoehlerUID:A99EDA6A-35EB-4446-B8BC-CDA3C60C627D
303*a1a3b679SAndreas BoehlerTRIGGER:-PT15H
304*a1a3b679SAndreas BoehlerX-APPLE-DEFAULT-ALARM:TRUE
305*a1a3b679SAndreas BoehlerATTACH;VALUE=URI:Basso
306*a1a3b679SAndreas BoehlerACTION:AUDIO
307*a1a3b679SAndreas BoehlerEND:VALARM
308*a1a3b679SAndreas BoehlerEND:VEVENT
309*a1a3b679SAndreas BoehlerEND:VCALENDAR
310*a1a3b679SAndreas Boehler
311*a1a3b679SAndreas BoehlerEOT;
312*a1a3b679SAndreas Boehler        $tempFile = $this->createStream($data);
313*a1a3b679SAndreas Boehler
314*a1a3b679SAndreas Boehler        $objects = new ICalendar($tempFile);
315*a1a3b679SAndreas Boehler
316*a1a3b679SAndreas Boehler        $return = "";
317*a1a3b679SAndreas Boehler        while($object=$objects->getNext()) {
318*a1a3b679SAndreas Boehler            $return .= $object->serialize();
319*a1a3b679SAndreas Boehler        }
320*a1a3b679SAndreas Boehler
321*a1a3b679SAndreas Boehler        $messages = VObject\Reader::read($return)->validate();
322*a1a3b679SAndreas Boehler        $this->assertEquals(array(), $messages);
323*a1a3b679SAndreas Boehler    }
324*a1a3b679SAndreas Boehler
325*a1a3b679SAndreas Boehler}
326