xref: /plugin/davcal/vendor/sabre/dav/tests/Sabre/CalDAV/CalendarQueryValidatorTest.php (revision a1a3b6794e0e143a4a8b51d3185ce2d339be61ab)
1*a1a3b679SAndreas Boehler<?php
2*a1a3b679SAndreas Boehler
3*a1a3b679SAndreas Boehlernamespace Sabre\CalDAV;
4*a1a3b679SAndreas Boehleruse Sabre\VObject;
5*a1a3b679SAndreas Boehleruse Sabre\DAV;
6*a1a3b679SAndreas Boehler
7*a1a3b679SAndreas Boehlerclass CalendarQueryValidatorTest extends \PHPUnit_Framework_TestCase {
8*a1a3b679SAndreas Boehler
9*a1a3b679SAndreas Boehler    function testTopLevelFail() {
10*a1a3b679SAndreas Boehler
11*a1a3b679SAndreas Boehler        $validator = new CalendarQueryValidator();
12*a1a3b679SAndreas Boehler        $vcal = <<<ICS
13*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
14*a1a3b679SAndreas BoehlerBEGIN:VEVENT
15*a1a3b679SAndreas BoehlerEND:VEVENT
16*a1a3b679SAndreas BoehlerEND:VCALENDAR
17*a1a3b679SAndreas BoehlerICS;
18*a1a3b679SAndreas Boehler        $vcal = VObject\Reader::read($vcal);
19*a1a3b679SAndreas Boehler        $this->assertFalse($validator->validate($vcal, ['name' => 'VFOO']));
20*a1a3b679SAndreas Boehler
21*a1a3b679SAndreas Boehler    }
22*a1a3b679SAndreas Boehler
23*a1a3b679SAndreas Boehler    /**
24*a1a3b679SAndreas Boehler     * @dataProvider provider
25*a1a3b679SAndreas Boehler     */
26*a1a3b679SAndreas Boehler    function testValid($icalObject, $filters, $outcome) {
27*a1a3b679SAndreas Boehler
28*a1a3b679SAndreas Boehler        $validator = new CalendarQueryValidator();
29*a1a3b679SAndreas Boehler
30*a1a3b679SAndreas Boehler        // Wrapping filter in a VCALENDAR component filter, as this is always
31*a1a3b679SAndreas Boehler        // there anyway.
32*a1a3b679SAndreas Boehler        $filters = array(
33*a1a3b679SAndreas Boehler            'name' => 'VCALENDAR',
34*a1a3b679SAndreas Boehler            'comp-filters' => array($filters),
35*a1a3b679SAndreas Boehler            'prop-filters' => array(),
36*a1a3b679SAndreas Boehler            'is-not-defined' => false,
37*a1a3b679SAndreas Boehler            'time-range' => null,
38*a1a3b679SAndreas Boehler        );
39*a1a3b679SAndreas Boehler
40*a1a3b679SAndreas Boehler        $vObject = VObject\Reader::read($icalObject);
41*a1a3b679SAndreas Boehler
42*a1a3b679SAndreas Boehler        switch($outcome) {
43*a1a3b679SAndreas Boehler            case 0 :
44*a1a3b679SAndreas Boehler                $this->assertFalse($validator->validate($vObject, $filters));
45*a1a3b679SAndreas Boehler                break;
46*a1a3b679SAndreas Boehler            case 1 :
47*a1a3b679SAndreas Boehler                $this->assertTrue($validator->validate($vObject, $filters));
48*a1a3b679SAndreas Boehler                break;
49*a1a3b679SAndreas Boehler            case -1 :
50*a1a3b679SAndreas Boehler                try {
51*a1a3b679SAndreas Boehler                    $validator->validate($vObject, $filters);
52*a1a3b679SAndreas Boehler                    $this->fail('This test was supposed to fail');
53*a1a3b679SAndreas Boehler                } catch (\Exception $e) {
54*a1a3b679SAndreas Boehler                    // We need to test something to be valid for phpunit strict
55*a1a3b679SAndreas Boehler                    // mode.
56*a1a3b679SAndreas Boehler                    $this->assertTrue(true);
57*a1a3b679SAndreas Boehler                }
58*a1a3b679SAndreas Boehler                break;
59*a1a3b679SAndreas Boehler
60*a1a3b679SAndreas Boehler        }
61*a1a3b679SAndreas Boehler
62*a1a3b679SAndreas Boehler    }
63*a1a3b679SAndreas Boehler
64*a1a3b679SAndreas Boehler    function provider() {
65*a1a3b679SAndreas Boehler
66*a1a3b679SAndreas Boehler        $blob1 = <<<yow
67*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
68*a1a3b679SAndreas BoehlerBEGIN:VEVENT
69*a1a3b679SAndreas BoehlerSUMMARY:hi
70*a1a3b679SAndreas BoehlerEND:VEVENT
71*a1a3b679SAndreas BoehlerEND:VCALENDAR
72*a1a3b679SAndreas Boehleryow;
73*a1a3b679SAndreas Boehler
74*a1a3b679SAndreas Boehler        $blob2 = <<<yow
75*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
76*a1a3b679SAndreas BoehlerBEGIN:VEVENT
77*a1a3b679SAndreas BoehlerSUMMARY:hi
78*a1a3b679SAndreas BoehlerBEGIN:VALARM
79*a1a3b679SAndreas BoehlerACTION:DISPLAY
80*a1a3b679SAndreas BoehlerEND:VALARM
81*a1a3b679SAndreas BoehlerEND:VEVENT
82*a1a3b679SAndreas BoehlerEND:VCALENDAR
83*a1a3b679SAndreas Boehleryow;
84*a1a3b679SAndreas Boehler
85*a1a3b679SAndreas Boehler        $blob3 = <<<yow
86*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
87*a1a3b679SAndreas BoehlerBEGIN:VEVENT
88*a1a3b679SAndreas BoehlerSUMMARY:hi
89*a1a3b679SAndreas BoehlerDTSTART;VALUE=DATE:20110704
90*a1a3b679SAndreas BoehlerEND:VEVENT
91*a1a3b679SAndreas BoehlerEND:VCALENDAR
92*a1a3b679SAndreas Boehleryow;
93*a1a3b679SAndreas Boehler        $blob4 = <<<yow
94*a1a3b679SAndreas BoehlerBEGIN:VCARD
95*a1a3b679SAndreas BoehlerVERSION:3.0
96*a1a3b679SAndreas BoehlerFN:Evert
97*a1a3b679SAndreas BoehlerEND:VCARD
98*a1a3b679SAndreas Boehleryow;
99*a1a3b679SAndreas Boehler
100*a1a3b679SAndreas Boehler        $blob5 = <<<yow
101*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
102*a1a3b679SAndreas BoehlerBEGIN:VEVENT
103*a1a3b679SAndreas BoehlerDTSTART:20110101T120000Z
104*a1a3b679SAndreas BoehlerDTEND:20110102T120000Z
105*a1a3b679SAndreas BoehlerEND:VEVENT
106*a1a3b679SAndreas BoehlerEND:VCALENDAR
107*a1a3b679SAndreas Boehleryow;
108*a1a3b679SAndreas Boehler
109*a1a3b679SAndreas Boehler        $blob6 = <<<yow
110*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
111*a1a3b679SAndreas BoehlerBEGIN:VEVENT
112*a1a3b679SAndreas BoehlerDTSTART:20110101T120000Z
113*a1a3b679SAndreas BoehlerDURATION:PT5H
114*a1a3b679SAndreas BoehlerEND:VEVENT
115*a1a3b679SAndreas BoehlerEND:VCALENDAR
116*a1a3b679SAndreas Boehleryow;
117*a1a3b679SAndreas Boehler
118*a1a3b679SAndreas Boehler        $blob7 = <<<yow
119*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
120*a1a3b679SAndreas BoehlerBEGIN:VEVENT
121*a1a3b679SAndreas BoehlerDTSTART;VALUE=DATE:20110101
122*a1a3b679SAndreas BoehlerEND:VEVENT
123*a1a3b679SAndreas BoehlerEND:VCALENDAR
124*a1a3b679SAndreas Boehleryow;
125*a1a3b679SAndreas Boehler
126*a1a3b679SAndreas Boehler        $blob8 = <<<yow
127*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
128*a1a3b679SAndreas BoehlerBEGIN:VEVENT
129*a1a3b679SAndreas BoehlerDTSTART:20110101T120000Z
130*a1a3b679SAndreas BoehlerEND:VEVENT
131*a1a3b679SAndreas BoehlerEND:VCALENDAR
132*a1a3b679SAndreas Boehleryow;
133*a1a3b679SAndreas Boehler
134*a1a3b679SAndreas Boehler        $blob9 = <<<yow
135*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
136*a1a3b679SAndreas BoehlerBEGIN:VTODO
137*a1a3b679SAndreas BoehlerDTSTART:20110101T120000Z
138*a1a3b679SAndreas BoehlerDURATION:PT1H
139*a1a3b679SAndreas BoehlerEND:VTODO
140*a1a3b679SAndreas BoehlerEND:VCALENDAR
141*a1a3b679SAndreas Boehleryow;
142*a1a3b679SAndreas Boehler        $blob10 = <<<yow
143*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
144*a1a3b679SAndreas BoehlerBEGIN:VTODO
145*a1a3b679SAndreas BoehlerDTSTART:20110101T120000Z
146*a1a3b679SAndreas BoehlerDUE:20110101T130000Z
147*a1a3b679SAndreas BoehlerEND:VTODO
148*a1a3b679SAndreas BoehlerEND:VCALENDAR
149*a1a3b679SAndreas Boehleryow;
150*a1a3b679SAndreas Boehler        $blob11 = <<<yow
151*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
152*a1a3b679SAndreas BoehlerBEGIN:VTODO
153*a1a3b679SAndreas BoehlerDTSTART:20110101T120000Z
154*a1a3b679SAndreas BoehlerEND:VTODO
155*a1a3b679SAndreas BoehlerEND:VCALENDAR
156*a1a3b679SAndreas Boehleryow;
157*a1a3b679SAndreas Boehler
158*a1a3b679SAndreas Boehler        $blob12 = <<<yow
159*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
160*a1a3b679SAndreas BoehlerBEGIN:VTODO
161*a1a3b679SAndreas BoehlerDUE:20110101T130000Z
162*a1a3b679SAndreas BoehlerEND:VTODO
163*a1a3b679SAndreas BoehlerEND:VCALENDAR
164*a1a3b679SAndreas Boehleryow;
165*a1a3b679SAndreas Boehler
166*a1a3b679SAndreas Boehler        $blob13 = <<<yow
167*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
168*a1a3b679SAndreas BoehlerBEGIN:VTODO
169*a1a3b679SAndreas BoehlerCOMPLETED:20110101T130000Z
170*a1a3b679SAndreas BoehlerCREATED:20110101T110000Z
171*a1a3b679SAndreas BoehlerEND:VTODO
172*a1a3b679SAndreas BoehlerEND:VCALENDAR
173*a1a3b679SAndreas Boehleryow;
174*a1a3b679SAndreas Boehler
175*a1a3b679SAndreas Boehler        $blob14 = <<<yow
176*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
177*a1a3b679SAndreas BoehlerBEGIN:VTODO
178*a1a3b679SAndreas BoehlerCOMPLETED:20110101T130000Z
179*a1a3b679SAndreas BoehlerEND:VTODO
180*a1a3b679SAndreas BoehlerEND:VCALENDAR
181*a1a3b679SAndreas Boehleryow;
182*a1a3b679SAndreas Boehler
183*a1a3b679SAndreas Boehler        $blob15 = <<<yow
184*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
185*a1a3b679SAndreas BoehlerBEGIN:VTODO
186*a1a3b679SAndreas BoehlerCREATED:20110101T110000Z
187*a1a3b679SAndreas BoehlerEND:VTODO
188*a1a3b679SAndreas BoehlerEND:VCALENDAR
189*a1a3b679SAndreas Boehleryow;
190*a1a3b679SAndreas Boehler
191*a1a3b679SAndreas Boehler
192*a1a3b679SAndreas Boehler        $blob16 = <<<yow
193*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
194*a1a3b679SAndreas BoehlerBEGIN:VTODO
195*a1a3b679SAndreas BoehlerEND:VTODO
196*a1a3b679SAndreas BoehlerEND:VCALENDAR
197*a1a3b679SAndreas Boehleryow;
198*a1a3b679SAndreas Boehler
199*a1a3b679SAndreas Boehler        $blob17 = <<<yow
200*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
201*a1a3b679SAndreas BoehlerBEGIN:VJOURNAL
202*a1a3b679SAndreas BoehlerEND:VJOURNAL
203*a1a3b679SAndreas BoehlerEND:VCALENDAR
204*a1a3b679SAndreas Boehleryow;
205*a1a3b679SAndreas Boehler
206*a1a3b679SAndreas Boehler        $blob18 = <<<yow
207*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
208*a1a3b679SAndreas BoehlerBEGIN:VJOURNAL
209*a1a3b679SAndreas BoehlerDTSTART:20110101T120000Z
210*a1a3b679SAndreas BoehlerEND:VJOURNAL
211*a1a3b679SAndreas BoehlerEND:VCALENDAR
212*a1a3b679SAndreas Boehleryow;
213*a1a3b679SAndreas Boehler
214*a1a3b679SAndreas Boehler        $blob19 = <<<yow
215*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
216*a1a3b679SAndreas BoehlerBEGIN:VJOURNAL
217*a1a3b679SAndreas BoehlerDTSTART;VALUE=DATE:20110101
218*a1a3b679SAndreas BoehlerEND:VJOURNAL
219*a1a3b679SAndreas BoehlerEND:VCALENDAR
220*a1a3b679SAndreas Boehleryow;
221*a1a3b679SAndreas Boehler
222*a1a3b679SAndreas Boehler        $blob20 = <<<yow
223*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
224*a1a3b679SAndreas BoehlerBEGIN:VFREEBUSY
225*a1a3b679SAndreas BoehlerEND:VFREEBUSY
226*a1a3b679SAndreas BoehlerEND:VCALENDAR
227*a1a3b679SAndreas Boehleryow;
228*a1a3b679SAndreas Boehler
229*a1a3b679SAndreas Boehler        $blob21 = <<<yow
230*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
231*a1a3b679SAndreas BoehlerBEGIN:VEVENT
232*a1a3b679SAndreas BoehlerDTSTART:20110101T120000Z
233*a1a3b679SAndreas BoehlerBEGIN:VALARM
234*a1a3b679SAndreas BoehlerTRIGGER:-PT1H
235*a1a3b679SAndreas BoehlerEND:VALARM
236*a1a3b679SAndreas BoehlerEND:VEVENT
237*a1a3b679SAndreas BoehlerEND:VCALENDAR
238*a1a3b679SAndreas Boehleryow;
239*a1a3b679SAndreas Boehler
240*a1a3b679SAndreas Boehler        $blob22 = <<<yow
241*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
242*a1a3b679SAndreas BoehlerBEGIN:VEVENT
243*a1a3b679SAndreas BoehlerDTSTART:20110101T120000Z
244*a1a3b679SAndreas BoehlerBEGIN:VALARM
245*a1a3b679SAndreas BoehlerTRIGGER;VALUE=DURATION:-PT1H
246*a1a3b679SAndreas BoehlerEND:VALARM
247*a1a3b679SAndreas BoehlerEND:VEVENT
248*a1a3b679SAndreas BoehlerEND:VCALENDAR
249*a1a3b679SAndreas Boehleryow;
250*a1a3b679SAndreas Boehler
251*a1a3b679SAndreas Boehler        $blob23 = <<<yow
252*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
253*a1a3b679SAndreas BoehlerBEGIN:VEVENT
254*a1a3b679SAndreas BoehlerDTSTART:20110101T120000Z
255*a1a3b679SAndreas BoehlerBEGIN:VALARM
256*a1a3b679SAndreas BoehlerTRIGGER;VALUE=DURATION;RELATED=END:-PT1H
257*a1a3b679SAndreas BoehlerEND:VALARM
258*a1a3b679SAndreas BoehlerEND:VEVENT
259*a1a3b679SAndreas BoehlerEND:VCALENDAR
260*a1a3b679SAndreas Boehleryow;
261*a1a3b679SAndreas Boehler
262*a1a3b679SAndreas Boehler        $blob24 = <<<yow
263*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
264*a1a3b679SAndreas BoehlerBEGIN:VEVENT
265*a1a3b679SAndreas BoehlerDTSTART:20110101T120000Z
266*a1a3b679SAndreas BoehlerDTEND:20110101T130000Z
267*a1a3b679SAndreas BoehlerBEGIN:VALARM
268*a1a3b679SAndreas BoehlerTRIGGER;VALUE=DURATION;RELATED=END:-PT2H
269*a1a3b679SAndreas BoehlerEND:VALARM
270*a1a3b679SAndreas BoehlerEND:VEVENT
271*a1a3b679SAndreas BoehlerEND:VCALENDAR
272*a1a3b679SAndreas Boehleryow;
273*a1a3b679SAndreas Boehler
274*a1a3b679SAndreas Boehler        $blob25 = <<<yow
275*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
276*a1a3b679SAndreas BoehlerBEGIN:VEVENT
277*a1a3b679SAndreas BoehlerDTSTART:20110101T120000Z
278*a1a3b679SAndreas BoehlerDURATION:PT1H
279*a1a3b679SAndreas BoehlerBEGIN:VALARM
280*a1a3b679SAndreas BoehlerTRIGGER;VALUE=DURATION;RELATED=END:-PT2H
281*a1a3b679SAndreas BoehlerEND:VALARM
282*a1a3b679SAndreas BoehlerEND:VEVENT
283*a1a3b679SAndreas BoehlerEND:VCALENDAR
284*a1a3b679SAndreas Boehleryow;
285*a1a3b679SAndreas Boehler
286*a1a3b679SAndreas Boehler        $blob26 = <<<yow
287*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
288*a1a3b679SAndreas BoehlerBEGIN:VEVENT
289*a1a3b679SAndreas BoehlerDTSTART:20110101T120000Z
290*a1a3b679SAndreas BoehlerDURATION:PT1H
291*a1a3b679SAndreas BoehlerBEGIN:VALARM
292*a1a3b679SAndreas BoehlerTRIGGER;VALUE=DATE-TIME:20110101T110000Z
293*a1a3b679SAndreas BoehlerEND:VALARM
294*a1a3b679SAndreas BoehlerEND:VEVENT
295*a1a3b679SAndreas BoehlerEND:VCALENDAR
296*a1a3b679SAndreas Boehleryow;
297*a1a3b679SAndreas Boehler
298*a1a3b679SAndreas Boehler
299*a1a3b679SAndreas Boehler        $blob27 = <<<yow
300*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
301*a1a3b679SAndreas BoehlerBEGIN:VTODO
302*a1a3b679SAndreas BoehlerDTSTART:20110101T120000Z
303*a1a3b679SAndreas BoehlerDUE:20110101T130000Z
304*a1a3b679SAndreas BoehlerBEGIN:VALARM
305*a1a3b679SAndreas BoehlerTRIGGER;VALUE=DURATION;RELATED=END:-PT2H
306*a1a3b679SAndreas BoehlerEND:VALARM
307*a1a3b679SAndreas BoehlerEND:VTODO
308*a1a3b679SAndreas BoehlerEND:VCALENDAR
309*a1a3b679SAndreas Boehleryow;
310*a1a3b679SAndreas Boehler
311*a1a3b679SAndreas Boehler        $blob28 = <<<yow
312*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
313*a1a3b679SAndreas BoehlerBEGIN:VJOURNAL
314*a1a3b679SAndreas BoehlerDTSTART:20110101T120000Z
315*a1a3b679SAndreas BoehlerBEGIN:VALARM
316*a1a3b679SAndreas BoehlerTRIGGER;VALUE=DURATION;RELATED=END:-PT2H
317*a1a3b679SAndreas BoehlerEND:VALARM
318*a1a3b679SAndreas BoehlerEND:VJOURNAL
319*a1a3b679SAndreas BoehlerEND:VCALENDAR
320*a1a3b679SAndreas Boehleryow;
321*a1a3b679SAndreas Boehler
322*a1a3b679SAndreas Boehler        $blob29 = <<<yow
323*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
324*a1a3b679SAndreas BoehlerBEGIN:VEVENT
325*a1a3b679SAndreas BoehlerDTSTART:20110101T120000Z
326*a1a3b679SAndreas BoehlerDURATION:PT1H
327*a1a3b679SAndreas BoehlerBEGIN:VALARM
328*a1a3b679SAndreas BoehlerTRIGGER;VALUE=DATE-TIME:20110101T090000Z
329*a1a3b679SAndreas BoehlerREPEAT:2
330*a1a3b679SAndreas BoehlerDURATION:PT1H
331*a1a3b679SAndreas BoehlerEND:VALARM
332*a1a3b679SAndreas BoehlerEND:VEVENT
333*a1a3b679SAndreas BoehlerEND:VCALENDAR
334*a1a3b679SAndreas Boehleryow;
335*a1a3b679SAndreas Boehler
336*a1a3b679SAndreas Boehler        $blob30 = <<<yow
337*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
338*a1a3b679SAndreas BoehlerBEGIN:VEVENT
339*a1a3b679SAndreas BoehlerDTSTART:20110101T120000Z
340*a1a3b679SAndreas BoehlerDURATION:PT1H
341*a1a3b679SAndreas BoehlerBEGIN:VALARM
342*a1a3b679SAndreas BoehlerTRIGGER;VALUE=DATE-TIME:20110101T090000Z
343*a1a3b679SAndreas BoehlerDURATION:PT1H
344*a1a3b679SAndreas BoehlerEND:VALARM
345*a1a3b679SAndreas BoehlerEND:VEVENT
346*a1a3b679SAndreas BoehlerEND:VCALENDAR
347*a1a3b679SAndreas Boehleryow;
348*a1a3b679SAndreas Boehler
349*a1a3b679SAndreas Boehler        $blob31 = <<<yow
350*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
351*a1a3b679SAndreas BoehlerBEGIN:VEVENT
352*a1a3b679SAndreas BoehlerUID:foobar
353*a1a3b679SAndreas BoehlerDTSTART:20080101T120000Z
354*a1a3b679SAndreas BoehlerDURATION:PT1H
355*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY
356*a1a3b679SAndreas BoehlerEND:VEVENT
357*a1a3b679SAndreas BoehlerEND:VCALENDAR
358*a1a3b679SAndreas Boehleryow;
359*a1a3b679SAndreas Boehler
360*a1a3b679SAndreas Boehler        $blob32 = <<<yow
361*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
362*a1a3b679SAndreas BoehlerBEGIN:VEVENT
363*a1a3b679SAndreas BoehlerUID:foobar
364*a1a3b679SAndreas BoehlerDTSTART:20080102T120000Z
365*a1a3b679SAndreas BoehlerDURATION:PT1H
366*a1a3b679SAndreas BoehlerRRULE:FREQ=YEARLY
367*a1a3b679SAndreas BoehlerEND:VEVENT
368*a1a3b679SAndreas BoehlerEND:VCALENDAR
369*a1a3b679SAndreas Boehleryow;
370*a1a3b679SAndreas Boehler        $blob33 = <<<yow
371*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
372*a1a3b679SAndreas BoehlerBEGIN:VEVENT
373*a1a3b679SAndreas BoehlerUID:foobar
374*a1a3b679SAndreas BoehlerDTSTART;VALUE=DATE:20120628
375*a1a3b679SAndreas BoehlerRRULE:FREQ=DAILY
376*a1a3b679SAndreas BoehlerEND:VEVENT
377*a1a3b679SAndreas BoehlerEND:VCALENDAR
378*a1a3b679SAndreas Boehleryow;
379*a1a3b679SAndreas Boehler        $blob34 = <<<yow
380*a1a3b679SAndreas BoehlerBEGIN:VCALENDAR
381*a1a3b679SAndreas BoehlerBEGIN:VEVENT
382*a1a3b679SAndreas BoehlerUID:foobar
383*a1a3b679SAndreas BoehlerDTSTART;VALUE=DATE:20120628
384*a1a3b679SAndreas BoehlerRRULE:FREQ=DAILY
385*a1a3b679SAndreas BoehlerBEGIN:VALARM
386*a1a3b679SAndreas BoehlerTRIGGER:P52W
387*a1a3b679SAndreas BoehlerEND:VALARM
388*a1a3b679SAndreas BoehlerEND:VEVENT
389*a1a3b679SAndreas BoehlerEND:VCALENDAR
390*a1a3b679SAndreas Boehleryow;
391*a1a3b679SAndreas Boehler
392*a1a3b679SAndreas Boehler        $filter1 = array(
393*a1a3b679SAndreas Boehler            'name' => 'VEVENT',
394*a1a3b679SAndreas Boehler            'comp-filters' => array(),
395*a1a3b679SAndreas Boehler            'prop-filters' => array(),
396*a1a3b679SAndreas Boehler            'is-not-defined' => false,
397*a1a3b679SAndreas Boehler            'time-range' => null,
398*a1a3b679SAndreas Boehler        );
399*a1a3b679SAndreas Boehler        $filter2 = $filter1;
400*a1a3b679SAndreas Boehler        $filter2['name'] = 'VTODO';
401*a1a3b679SAndreas Boehler
402*a1a3b679SAndreas Boehler        $filter3 = $filter1;
403*a1a3b679SAndreas Boehler        $filter3['is-not-defined'] = true;
404*a1a3b679SAndreas Boehler
405*a1a3b679SAndreas Boehler        $filter4 = $filter1;
406*a1a3b679SAndreas Boehler        $filter4['name'] = 'VTODO';
407*a1a3b679SAndreas Boehler        $filter4['is-not-defined'] = true;
408*a1a3b679SAndreas Boehler
409*a1a3b679SAndreas Boehler        $filter5 = $filter1;
410*a1a3b679SAndreas Boehler        $filter5['comp-filters'] = array(
411*a1a3b679SAndreas Boehler            array(
412*a1a3b679SAndreas Boehler                'name' => 'VALARM',
413*a1a3b679SAndreas Boehler                'is-not-defined' => false,
414*a1a3b679SAndreas Boehler                'comp-filters' => array(),
415*a1a3b679SAndreas Boehler                'prop-filters' => array(),
416*a1a3b679SAndreas Boehler                'time-range' => null,
417*a1a3b679SAndreas Boehler            ),
418*a1a3b679SAndreas Boehler        );
419*a1a3b679SAndreas Boehler        $filter6 = $filter1;
420*a1a3b679SAndreas Boehler        $filter6['prop-filters'] = array(
421*a1a3b679SAndreas Boehler            array(
422*a1a3b679SAndreas Boehler                'name' => 'SUMMARY',
423*a1a3b679SAndreas Boehler                'is-not-defined' => false,
424*a1a3b679SAndreas Boehler                'param-filters' => array(),
425*a1a3b679SAndreas Boehler                'time-range' => null,
426*a1a3b679SAndreas Boehler                'text-match' => null,
427*a1a3b679SAndreas Boehler            ),
428*a1a3b679SAndreas Boehler        );
429*a1a3b679SAndreas Boehler        $filter7 = $filter6;
430*a1a3b679SAndreas Boehler        $filter7['prop-filters'][0]['name'] = 'DESCRIPTION';
431*a1a3b679SAndreas Boehler
432*a1a3b679SAndreas Boehler        $filter8 = $filter6;
433*a1a3b679SAndreas Boehler        $filter8['prop-filters'][0]['is-not-defined'] = true;
434*a1a3b679SAndreas Boehler
435*a1a3b679SAndreas Boehler        $filter9 = $filter7;
436*a1a3b679SAndreas Boehler        $filter9['prop-filters'][0]['is-not-defined'] = true;
437*a1a3b679SAndreas Boehler
438*a1a3b679SAndreas Boehler        $filter10 = $filter5;
439*a1a3b679SAndreas Boehler        $filter10['prop-filters'] = $filter6['prop-filters'];
440*a1a3b679SAndreas Boehler
441*a1a3b679SAndreas Boehler        // Param filters
442*a1a3b679SAndreas Boehler        $filter11 = $filter1;
443*a1a3b679SAndreas Boehler        $filter11['prop-filters'] = array(
444*a1a3b679SAndreas Boehler            array(
445*a1a3b679SAndreas Boehler                'name' => 'DTSTART',
446*a1a3b679SAndreas Boehler                'is-not-defined' => false,
447*a1a3b679SAndreas Boehler                'param-filters' => array(
448*a1a3b679SAndreas Boehler                    array(
449*a1a3b679SAndreas Boehler                        'name' => 'VALUE',
450*a1a3b679SAndreas Boehler                        'is-not-defined' => false,
451*a1a3b679SAndreas Boehler                        'text-match' => null,
452*a1a3b679SAndreas Boehler                    ),
453*a1a3b679SAndreas Boehler                ),
454*a1a3b679SAndreas Boehler                'time-range' => null,
455*a1a3b679SAndreas Boehler                'text-match' => null,
456*a1a3b679SAndreas Boehler            ),
457*a1a3b679SAndreas Boehler        );
458*a1a3b679SAndreas Boehler
459*a1a3b679SAndreas Boehler        $filter12 = $filter11;
460*a1a3b679SAndreas Boehler        $filter12['prop-filters'][0]['param-filters'][0]['name'] = 'TZID';
461*a1a3b679SAndreas Boehler
462*a1a3b679SAndreas Boehler        $filter13 = $filter11;
463*a1a3b679SAndreas Boehler        $filter13['prop-filters'][0]['param-filters'][0]['is-not-defined'] = true;
464*a1a3b679SAndreas Boehler
465*a1a3b679SAndreas Boehler        $filter14 = $filter12;
466*a1a3b679SAndreas Boehler        $filter14['prop-filters'][0]['param-filters'][0]['is-not-defined'] = true;
467*a1a3b679SAndreas Boehler
468*a1a3b679SAndreas Boehler        // Param text filter
469*a1a3b679SAndreas Boehler        $filter15 = $filter11;
470*a1a3b679SAndreas Boehler        $filter15['prop-filters'][0]['param-filters'][0]['text-match'] = array(
471*a1a3b679SAndreas Boehler            'collation' => 'i;ascii-casemap',
472*a1a3b679SAndreas Boehler            'value' => 'dAtE',
473*a1a3b679SAndreas Boehler            'negate-condition' => false,
474*a1a3b679SAndreas Boehler        );
475*a1a3b679SAndreas Boehler        $filter16 = $filter15;
476*a1a3b679SAndreas Boehler        $filter16['prop-filters'][0]['param-filters'][0]['text-match']['collation'] = 'i;octet';
477*a1a3b679SAndreas Boehler
478*a1a3b679SAndreas Boehler        $filter17 = $filter15;
479*a1a3b679SAndreas Boehler        $filter17['prop-filters'][0]['param-filters'][0]['text-match']['negate-condition'] = true;
480*a1a3b679SAndreas Boehler
481*a1a3b679SAndreas Boehler        $filter18 = $filter15;
482*a1a3b679SAndreas Boehler        $filter18['prop-filters'][0]['param-filters'][0]['text-match']['negate-condition'] = true;
483*a1a3b679SAndreas Boehler        $filter18['prop-filters'][0]['param-filters'][0]['text-match']['collation'] = 'i;octet';
484*a1a3b679SAndreas Boehler
485*a1a3b679SAndreas Boehler        // prop + text
486*a1a3b679SAndreas Boehler        $filter19 = $filter5;
487*a1a3b679SAndreas Boehler        $filter19['comp-filters'][0]['prop-filters'] = array(
488*a1a3b679SAndreas Boehler            array(
489*a1a3b679SAndreas Boehler                'name' => 'action',
490*a1a3b679SAndreas Boehler                'is-not-defined' => false,
491*a1a3b679SAndreas Boehler                'time-range' => null,
492*a1a3b679SAndreas Boehler                'param-filters' => array(),
493*a1a3b679SAndreas Boehler                'text-match' => array(
494*a1a3b679SAndreas Boehler                    'collation' => 'i;ascii-casemap',
495*a1a3b679SAndreas Boehler                    'value' => 'display',
496*a1a3b679SAndreas Boehler                    'negate-condition' => false,
497*a1a3b679SAndreas Boehler                ),
498*a1a3b679SAndreas Boehler            ),
499*a1a3b679SAndreas Boehler        );
500*a1a3b679SAndreas Boehler
501*a1a3b679SAndreas Boehler        // Time range
502*a1a3b679SAndreas Boehler        $filter20 = array(
503*a1a3b679SAndreas Boehler            'name' => 'VEVENT',
504*a1a3b679SAndreas Boehler            'comp-filters' => array(),
505*a1a3b679SAndreas Boehler            'prop-filters' => array(),
506*a1a3b679SAndreas Boehler            'is-not-defined' => false,
507*a1a3b679SAndreas Boehler            'time-range' => array(
508*a1a3b679SAndreas Boehler               'start' => new \DateTime('2011-01-01 10:00:00', new \DateTimeZone('GMT')),
509*a1a3b679SAndreas Boehler               'end' => new \DateTime('2011-01-01 13:00:00', new \DateTimeZone('GMT')),
510*a1a3b679SAndreas Boehler            ),
511*a1a3b679SAndreas Boehler        );
512*a1a3b679SAndreas Boehler        // Time range, no end date
513*a1a3b679SAndreas Boehler        $filter21 = $filter20;
514*a1a3b679SAndreas Boehler        $filter21['time-range']['end'] = null;
515*a1a3b679SAndreas Boehler
516*a1a3b679SAndreas Boehler        // Time range, no start date
517*a1a3b679SAndreas Boehler        $filter22 = $filter20;
518*a1a3b679SAndreas Boehler        $filter22['time-range']['start'] = null;
519*a1a3b679SAndreas Boehler
520*a1a3b679SAndreas Boehler        // Time range, other dates
521*a1a3b679SAndreas Boehler        $filter23 = $filter20;
522*a1a3b679SAndreas Boehler        $filter23['time-range'] = array(
523*a1a3b679SAndreas Boehler           'start' => new \DateTime('2011-02-01 10:00:00', new \DateTimeZone('GMT')),
524*a1a3b679SAndreas Boehler           'end' => new \DateTime('2011-02-01 13:00:00', new \DateTimeZone('GMT')),
525*a1a3b679SAndreas Boehler        );
526*a1a3b679SAndreas Boehler        // Time range
527*a1a3b679SAndreas Boehler        $filter24 = array(
528*a1a3b679SAndreas Boehler            'name' => 'VTODO',
529*a1a3b679SAndreas Boehler            'comp-filters' => array(),
530*a1a3b679SAndreas Boehler            'prop-filters' => array(),
531*a1a3b679SAndreas Boehler            'is-not-defined' => false,
532*a1a3b679SAndreas Boehler            'time-range' => array(
533*a1a3b679SAndreas Boehler               'start' => new \DateTime('2011-01-01 12:45:00', new \DateTimeZone('GMT')),
534*a1a3b679SAndreas Boehler               'end' => new \DateTime('2011-01-01 13:15:00', new \DateTimeZone('GMT')),
535*a1a3b679SAndreas Boehler            ),
536*a1a3b679SAndreas Boehler        );
537*a1a3b679SAndreas Boehler        // Time range, other dates (1 month in the future)
538*a1a3b679SAndreas Boehler        $filter25 = $filter24;
539*a1a3b679SAndreas Boehler        $filter25['time-range'] = array(
540*a1a3b679SAndreas Boehler           'start' => new \DateTime('2011-02-01 10:00:00', new \DateTimeZone('GMT')),
541*a1a3b679SAndreas Boehler           'end' => new \DateTime('2011-02-01 13:00:00', new \DateTimeZone('GMT')),
542*a1a3b679SAndreas Boehler        );
543*a1a3b679SAndreas Boehler        $filter26 = $filter24;
544*a1a3b679SAndreas Boehler        $filter26['time-range'] = array(
545*a1a3b679SAndreas Boehler           'start' => new \DateTime('2011-01-01 11:45:00', new \DateTimeZone('GMT')),
546*a1a3b679SAndreas Boehler           'end' => new \DateTime('2011-01-01 12:15:00', new \DateTimeZone('GMT')),
547*a1a3b679SAndreas Boehler       );
548*a1a3b679SAndreas Boehler
549*a1a3b679SAndreas Boehler        // Time range for VJOURNAL
550*a1a3b679SAndreas Boehler        $filter27 = array(
551*a1a3b679SAndreas Boehler            'name' => 'VJOURNAL',
552*a1a3b679SAndreas Boehler            'comp-filters' => array(),
553*a1a3b679SAndreas Boehler            'prop-filters' => array(),
554*a1a3b679SAndreas Boehler            'is-not-defined' => false,
555*a1a3b679SAndreas Boehler            'time-range' => array(
556*a1a3b679SAndreas Boehler               'start' => new \DateTime('2011-01-01 12:45:00', new \DateTimeZone('GMT')),
557*a1a3b679SAndreas Boehler               'end' => new \DateTime('2011-01-01 13:15:00', new \DateTimeZone('GMT')),
558*a1a3b679SAndreas Boehler            ),
559*a1a3b679SAndreas Boehler        );
560*a1a3b679SAndreas Boehler        $filter28 = $filter27;
561*a1a3b679SAndreas Boehler        $filter28['time-range'] = array(
562*a1a3b679SAndreas Boehler           'start' => new \DateTime('2011-01-01 11:45:00', new \DateTimeZone('GMT')),
563*a1a3b679SAndreas Boehler           'end' => new \DateTime('2011-01-01 12:15:00', new \DateTimeZone('GMT')),
564*a1a3b679SAndreas Boehler        );
565*a1a3b679SAndreas Boehler        // Time range for VFREEBUSY
566*a1a3b679SAndreas Boehler        $filter29 = array(
567*a1a3b679SAndreas Boehler            'name' => 'VFREEBUSY',
568*a1a3b679SAndreas Boehler            'comp-filters' => array(),
569*a1a3b679SAndreas Boehler            'prop-filters' => array(),
570*a1a3b679SAndreas Boehler            'is-not-defined' => false,
571*a1a3b679SAndreas Boehler            'time-range' => array(
572*a1a3b679SAndreas Boehler               'start' => new \DateTime('2011-01-01 12:45:00', new \DateTimeZone('GMT')),
573*a1a3b679SAndreas Boehler               'end' => new \DateTime('2011-01-01 13:15:00', new \DateTimeZone('GMT')),
574*a1a3b679SAndreas Boehler            ),
575*a1a3b679SAndreas Boehler        );
576*a1a3b679SAndreas Boehler        // Time range filter on property
577*a1a3b679SAndreas Boehler        $filter30 = array(
578*a1a3b679SAndreas Boehler            'name' => 'VEVENT',
579*a1a3b679SAndreas Boehler            'comp-filters' => array(),
580*a1a3b679SAndreas Boehler            'prop-filters' => array(
581*a1a3b679SAndreas Boehler                array(
582*a1a3b679SAndreas Boehler                    'name' => 'DTSTART',
583*a1a3b679SAndreas Boehler                    'is-not-defined' => false,
584*a1a3b679SAndreas Boehler                    'param-filters' => array(),
585*a1a3b679SAndreas Boehler                    'time-range' => array(
586*a1a3b679SAndreas Boehler                       'start' => new \DateTime('2011-01-01 10:00:00', new \DateTimeZone('GMT')),
587*a1a3b679SAndreas Boehler                       'end' => new \DateTime('2011-01-01 13:00:00', new \DateTimeZone('GMT')),
588*a1a3b679SAndreas Boehler                   ),
589*a1a3b679SAndreas Boehler                    'text-match' => null,
590*a1a3b679SAndreas Boehler               ),
591*a1a3b679SAndreas Boehler            ),
592*a1a3b679SAndreas Boehler            'is-not-defined' => false,
593*a1a3b679SAndreas Boehler            'time-range' => null,
594*a1a3b679SAndreas Boehler        );
595*a1a3b679SAndreas Boehler
596*a1a3b679SAndreas Boehler        // Time range for alarm
597*a1a3b679SAndreas Boehler        $filter31 = array(
598*a1a3b679SAndreas Boehler            'name' => 'VEVENT',
599*a1a3b679SAndreas Boehler            'prop-filters' => array(),
600*a1a3b679SAndreas Boehler            'comp-filters' => array(
601*a1a3b679SAndreas Boehler                array(
602*a1a3b679SAndreas Boehler                    'name' => 'VALARM',
603*a1a3b679SAndreas Boehler                    'is-not-defined' => false,
604*a1a3b679SAndreas Boehler                    'comp-filters' => array(),
605*a1a3b679SAndreas Boehler                    'prop-filters' => array(),
606*a1a3b679SAndreas Boehler                    'time-range' => array(
607*a1a3b679SAndreas Boehler                       'start' => new \DateTime('2011-01-01 10:45:00', new \DateTimeZone('GMT')),
608*a1a3b679SAndreas Boehler                       'end' => new \DateTime('2011-01-01 11:15:00', new \DateTimeZone('GMT')),
609*a1a3b679SAndreas Boehler                    ),
610*a1a3b679SAndreas Boehler                    'text-match' => null,
611*a1a3b679SAndreas Boehler               ),
612*a1a3b679SAndreas Boehler            ),
613*a1a3b679SAndreas Boehler            'is-not-defined' => false,
614*a1a3b679SAndreas Boehler            'time-range' => null,
615*a1a3b679SAndreas Boehler        );
616*a1a3b679SAndreas Boehler        $filter32 = $filter31;
617*a1a3b679SAndreas Boehler        $filter32['comp-filters'][0]['time-range'] = array(
618*a1a3b679SAndreas Boehler           'start' => new \DateTime('2011-01-01 11:45:00', new \DateTimeZone('GMT')),
619*a1a3b679SAndreas Boehler           'end' => new \DateTime('2011-01-01 12:15:00', new \DateTimeZone('GMT')),
620*a1a3b679SAndreas Boehler       );
621*a1a3b679SAndreas Boehler
622*a1a3b679SAndreas Boehler        $filter33 = $filter31;
623*a1a3b679SAndreas Boehler        $filter33['name'] = 'VTODO';
624*a1a3b679SAndreas Boehler        $filter34 = $filter32;
625*a1a3b679SAndreas Boehler        $filter34['name'] = 'VTODO';
626*a1a3b679SAndreas Boehler        $filter35 = $filter31;
627*a1a3b679SAndreas Boehler        $filter35['name'] = 'VJOURNAL';
628*a1a3b679SAndreas Boehler        $filter36 = $filter32;
629*a1a3b679SAndreas Boehler        $filter36['name'] = 'VJOURNAL';
630*a1a3b679SAndreas Boehler
631*a1a3b679SAndreas Boehler        // Time range filter on non-datetime property
632*a1a3b679SAndreas Boehler        $filter37 = array(
633*a1a3b679SAndreas Boehler            'name' => 'VEVENT',
634*a1a3b679SAndreas Boehler            'comp-filters' => array(),
635*a1a3b679SAndreas Boehler            'prop-filters' => array(
636*a1a3b679SAndreas Boehler                array(
637*a1a3b679SAndreas Boehler                    'name' => 'SUMMARY',
638*a1a3b679SAndreas Boehler                    'is-not-defined' => false,
639*a1a3b679SAndreas Boehler                    'param-filters' => array(),
640*a1a3b679SAndreas Boehler                    'time-range' => array(
641*a1a3b679SAndreas Boehler                       'start' => new \DateTime('2011-01-01 10:00:00', new \DateTimeZone('GMT')),
642*a1a3b679SAndreas Boehler                       'end' => new \DateTime('2011-01-01 13:00:00', new \DateTimeZone('GMT')),
643*a1a3b679SAndreas Boehler                   ),
644*a1a3b679SAndreas Boehler                    'text-match' => null,
645*a1a3b679SAndreas Boehler               ),
646*a1a3b679SAndreas Boehler            ),
647*a1a3b679SAndreas Boehler            'is-not-defined' => false,
648*a1a3b679SAndreas Boehler            'time-range' => null,
649*a1a3b679SAndreas Boehler        );
650*a1a3b679SAndreas Boehler
651*a1a3b679SAndreas Boehler        $filter38 = array(
652*a1a3b679SAndreas Boehler            'name' => 'VEVENT',
653*a1a3b679SAndreas Boehler            'comp-filters' => array(),
654*a1a3b679SAndreas Boehler            'prop-filters' => array(),
655*a1a3b679SAndreas Boehler            'is-not-defined' => false,
656*a1a3b679SAndreas Boehler            'time-range' => array(
657*a1a3b679SAndreas Boehler                'start' => new \DateTime('2012-07-01 00:00:00', new \DateTimeZone('UTC')),
658*a1a3b679SAndreas Boehler                'end' => new \DateTime('2012-08-01 00:00:00', new \DateTimeZone('UTC')),
659*a1a3b679SAndreas Boehler            )
660*a1a3b679SAndreas Boehler        );
661*a1a3b679SAndreas Boehler        $filter39 = array(
662*a1a3b679SAndreas Boehler            'name' => 'VEVENT',
663*a1a3b679SAndreas Boehler            'comp-filters' => array(
664*a1a3b679SAndreas Boehler                array(
665*a1a3b679SAndreas Boehler                    'name' => 'VALARM',
666*a1a3b679SAndreas Boehler                    'comp-filters' => array(),
667*a1a3b679SAndreas Boehler                    'prop-filters' => array(),
668*a1a3b679SAndreas Boehler                    'is-not-defined' => false,
669*a1a3b679SAndreas Boehler                    'time-range' => array(
670*a1a3b679SAndreas Boehler                        'start' => new \DateTime('2012-09-01 00:00:00', new \DateTimeZone('UTC')),
671*a1a3b679SAndreas Boehler                        'end' => new \DateTime('2012-10-01 00:00:00', new \DateTimeZone('UTC')),
672*a1a3b679SAndreas Boehler                    )
673*a1a3b679SAndreas Boehler                ),
674*a1a3b679SAndreas Boehler            ),
675*a1a3b679SAndreas Boehler            'prop-filters' => array(),
676*a1a3b679SAndreas Boehler            'is-not-defined' => false,
677*a1a3b679SAndreas Boehler            'time-range' => null,
678*a1a3b679SAndreas Boehler        );
679*a1a3b679SAndreas Boehler
680*a1a3b679SAndreas Boehler        return array(
681*a1a3b679SAndreas Boehler
682*a1a3b679SAndreas Boehler            // Component check
683*a1a3b679SAndreas Boehler
684*a1a3b679SAndreas Boehler            array($blob1, $filter1, 1),
685*a1a3b679SAndreas Boehler            array($blob1, $filter2, 0),
686*a1a3b679SAndreas Boehler            array($blob1, $filter3, 0),
687*a1a3b679SAndreas Boehler            array($blob1, $filter4, 1),
688*a1a3b679SAndreas Boehler
689*a1a3b679SAndreas Boehler            // Subcomponent check (4)
690*a1a3b679SAndreas Boehler            array($blob1, $filter5, 0),
691*a1a3b679SAndreas Boehler            array($blob2, $filter5, 1),
692*a1a3b679SAndreas Boehler
693*a1a3b679SAndreas Boehler            // Property checki (6)
694*a1a3b679SAndreas Boehler            array($blob1, $filter6, 1),
695*a1a3b679SAndreas Boehler            array($blob1, $filter7, 0),
696*a1a3b679SAndreas Boehler            array($blob1, $filter8, 0),
697*a1a3b679SAndreas Boehler            array($blob1, $filter9, 1),
698*a1a3b679SAndreas Boehler
699*a1a3b679SAndreas Boehler            // Subcomponent + property (10)
700*a1a3b679SAndreas Boehler            array($blob2, $filter10, 1),
701*a1a3b679SAndreas Boehler
702*a1a3b679SAndreas Boehler            // Param filter (11)
703*a1a3b679SAndreas Boehler            array($blob3, $filter11, 1),
704*a1a3b679SAndreas Boehler            array($blob3, $filter12, 0),
705*a1a3b679SAndreas Boehler            array($blob3, $filter13, 0),
706*a1a3b679SAndreas Boehler            array($blob3, $filter14, 1),
707*a1a3b679SAndreas Boehler
708*a1a3b679SAndreas Boehler            // Param + text (15)
709*a1a3b679SAndreas Boehler            array($blob3, $filter15, 1),
710*a1a3b679SAndreas Boehler            array($blob3, $filter16, 0),
711*a1a3b679SAndreas Boehler            array($blob3, $filter17, 0),
712*a1a3b679SAndreas Boehler            array($blob3, $filter18, 1),
713*a1a3b679SAndreas Boehler
714*a1a3b679SAndreas Boehler            // Prop + text (19)
715*a1a3b679SAndreas Boehler            array($blob2, $filter19, 1),
716*a1a3b679SAndreas Boehler
717*a1a3b679SAndreas Boehler            // Incorrect object (vcard) (20)
718*a1a3b679SAndreas Boehler            array($blob4, $filter1, -1),
719*a1a3b679SAndreas Boehler
720*a1a3b679SAndreas Boehler            // Time-range for event (21)
721*a1a3b679SAndreas Boehler            array($blob5, $filter20, 1),
722*a1a3b679SAndreas Boehler            array($blob6, $filter20, 1),
723*a1a3b679SAndreas Boehler            array($blob7, $filter20, 1),
724*a1a3b679SAndreas Boehler            array($blob8, $filter20, 1),
725*a1a3b679SAndreas Boehler
726*a1a3b679SAndreas Boehler            array($blob5, $filter21, 1),
727*a1a3b679SAndreas Boehler            array($blob5, $filter22, 1),
728*a1a3b679SAndreas Boehler
729*a1a3b679SAndreas Boehler            array($blob5, $filter23, 0),
730*a1a3b679SAndreas Boehler            array($blob6, $filter23, 0),
731*a1a3b679SAndreas Boehler            array($blob7, $filter23, 0),
732*a1a3b679SAndreas Boehler            array($blob8, $filter23, 0),
733*a1a3b679SAndreas Boehler
734*a1a3b679SAndreas Boehler            // Time-range for todo (31)
735*a1a3b679SAndreas Boehler            array($blob9, $filter24, 1),
736*a1a3b679SAndreas Boehler            array($blob9, $filter25, 0),
737*a1a3b679SAndreas Boehler            array($blob9, $filter26, 1),
738*a1a3b679SAndreas Boehler            array($blob10, $filter24, 1),
739*a1a3b679SAndreas Boehler            array($blob10, $filter25, 0),
740*a1a3b679SAndreas Boehler            array($blob10, $filter26, 1),
741*a1a3b679SAndreas Boehler
742*a1a3b679SAndreas Boehler            array($blob11, $filter24, 0),
743*a1a3b679SAndreas Boehler            array($blob11, $filter25, 0),
744*a1a3b679SAndreas Boehler            array($blob11, $filter26, 1),
745*a1a3b679SAndreas Boehler
746*a1a3b679SAndreas Boehler            array($blob12, $filter24, 1),
747*a1a3b679SAndreas Boehler            array($blob12, $filter25, 0),
748*a1a3b679SAndreas Boehler            array($blob12, $filter26, 0),
749*a1a3b679SAndreas Boehler
750*a1a3b679SAndreas Boehler            array($blob13, $filter24, 1),
751*a1a3b679SAndreas Boehler            array($blob13, $filter25, 0),
752*a1a3b679SAndreas Boehler            array($blob13, $filter26, 1),
753*a1a3b679SAndreas Boehler
754*a1a3b679SAndreas Boehler            array($blob14, $filter24, 1),
755*a1a3b679SAndreas Boehler            array($blob14, $filter25, 0),
756*a1a3b679SAndreas Boehler            array($blob14, $filter26, 0),
757*a1a3b679SAndreas Boehler
758*a1a3b679SAndreas Boehler            array($blob15, $filter24, 1),
759*a1a3b679SAndreas Boehler            array($blob15, $filter25, 1),
760*a1a3b679SAndreas Boehler            array($blob15, $filter26, 1),
761*a1a3b679SAndreas Boehler
762*a1a3b679SAndreas Boehler            array($blob16, $filter24, 1),
763*a1a3b679SAndreas Boehler            array($blob16, $filter25, 1),
764*a1a3b679SAndreas Boehler            array($blob16, $filter26, 1),
765*a1a3b679SAndreas Boehler
766*a1a3b679SAndreas Boehler            // Time-range for journals (55)
767*a1a3b679SAndreas Boehler            array($blob17, $filter27, 0),
768*a1a3b679SAndreas Boehler            array($blob17, $filter28, 0),
769*a1a3b679SAndreas Boehler            array($blob18, $filter27, 0),
770*a1a3b679SAndreas Boehler            array($blob18, $filter28, 1),
771*a1a3b679SAndreas Boehler            array($blob19, $filter27, 1),
772*a1a3b679SAndreas Boehler            array($blob19, $filter28, 1),
773*a1a3b679SAndreas Boehler
774*a1a3b679SAndreas Boehler            // Time-range for free-busy (61)
775*a1a3b679SAndreas Boehler            array($blob20, $filter29, -1),
776*a1a3b679SAndreas Boehler
777*a1a3b679SAndreas Boehler            // Time-range on property (62)
778*a1a3b679SAndreas Boehler            array($blob5, $filter30, 1),
779*a1a3b679SAndreas Boehler            array($blob3, $filter37, -1),
780*a1a3b679SAndreas Boehler            array($blob3, $filter30, 0),
781*a1a3b679SAndreas Boehler
782*a1a3b679SAndreas Boehler            // Time-range on alarm in vevent (65)
783*a1a3b679SAndreas Boehler            array($blob21, $filter31, 1),
784*a1a3b679SAndreas Boehler            array($blob21, $filter32, 0),
785*a1a3b679SAndreas Boehler            array($blob22, $filter31, 1),
786*a1a3b679SAndreas Boehler            array($blob22, $filter32, 0),
787*a1a3b679SAndreas Boehler            array($blob23, $filter31, 1),
788*a1a3b679SAndreas Boehler            array($blob23, $filter32, 0),
789*a1a3b679SAndreas Boehler            array($blob24, $filter31, 1),
790*a1a3b679SAndreas Boehler            array($blob24, $filter32, 0),
791*a1a3b679SAndreas Boehler            array($blob25, $filter31, 1),
792*a1a3b679SAndreas Boehler            array($blob25, $filter32, 0),
793*a1a3b679SAndreas Boehler            array($blob26, $filter31, 1),
794*a1a3b679SAndreas Boehler            array($blob26, $filter32, 0),
795*a1a3b679SAndreas Boehler
796*a1a3b679SAndreas Boehler            // Time-range on alarm for vtodo (77)
797*a1a3b679SAndreas Boehler            array($blob27, $filter33, 1),
798*a1a3b679SAndreas Boehler            array($blob27, $filter34, 0),
799*a1a3b679SAndreas Boehler
800*a1a3b679SAndreas Boehler            // Time-range on alarm for vjournal (79)
801*a1a3b679SAndreas Boehler            array($blob28, $filter35, -1),
802*a1a3b679SAndreas Boehler            array($blob28, $filter36, -1),
803*a1a3b679SAndreas Boehler
804*a1a3b679SAndreas Boehler            // Time-range on alarm with duration (81)
805*a1a3b679SAndreas Boehler            array($blob29, $filter31, 1),
806*a1a3b679SAndreas Boehler            array($blob29, $filter32, 0),
807*a1a3b679SAndreas Boehler            array($blob30, $filter31, 0),
808*a1a3b679SAndreas Boehler            array($blob30, $filter32, 0),
809*a1a3b679SAndreas Boehler
810*a1a3b679SAndreas Boehler            // Time-range with RRULE (85)
811*a1a3b679SAndreas Boehler            array($blob31, $filter20, 1),
812*a1a3b679SAndreas Boehler            array($blob32, $filter20, 0),
813*a1a3b679SAndreas Boehler
814*a1a3b679SAndreas Boehler            // Bug reported on mailing list, related to all-day events (87)
815*a1a3b679SAndreas Boehler            //array($blob33, $filter38, 1),
816*a1a3b679SAndreas Boehler
817*a1a3b679SAndreas Boehler            // Event in timerange, but filtered alarm is in the far future (88).
818*a1a3b679SAndreas Boehler            array($blob34, $filter39, 0),
819*a1a3b679SAndreas Boehler        );
820*a1a3b679SAndreas Boehler
821*a1a3b679SAndreas Boehler    }
822*a1a3b679SAndreas Boehler
823*a1a3b679SAndreas Boehler}
824