RecurrenceSetTest.java revision b9644fe24edf9e25f0b21c1394e88d25070e0238
1852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio/*
2852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio * Copyright (C) 2010 The Android Open Source Project
3852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio *
4852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio * Licensed under the Apache License, Version 2.0 (the "License");
5852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio * you may not use this file except in compliance with the License.
6852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio * You may obtain a copy of the License at
7852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio *
8852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio *      http://www.apache.org/licenses/LICENSE-2.0
9852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio *
10852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio * Unless required by applicable law or agreed to in writing, software
11852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio * distributed under the License is distributed on an "AS IS" BASIS,
12852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio * See the License for the specific language governing permissions and
14852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio * limitations under the License.
15852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio */
16852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
17852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Megliopackage com.android.providers.calendar;
18852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
19852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglioimport android.content.ContentValues;
20852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglioimport android.pim.ICalendar;
21852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglioimport android.pim.RecurrenceSet;
22b9644fe24edf9e25f0b21c1394e88d25070e0238RoboErikimport android.provider.CalendarContract;
23852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglioimport android.test.suitebuilder.annotation.SmallTest;
24852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglioimport junit.framework.TestCase;
25852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
26852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglioimport java.util.List;
27852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
28852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Megliopublic class RecurrenceSetTest extends TestCase {
29852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
30852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio    private static String MOCK_COMPONENT_NAME = "mockComponent";
31852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
32852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio    private static final String RRULE_LESS_THAN_75_CHARS =
33852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            "FREQ=WEEKLY;BYDAY=SU,FR,SA;UNTIL=20100326T190000Z;WKST=MO";
34852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
35852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio    private static final String RRULE_MORE_THAN_75_CHARS =
36852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            "FREQ=WEEKLY;WKST=MO;UNTIL=20100129T130000Z;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR, SA,SU";
37852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
38852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio    private static final String RRULE_MORE_THAN_75_CHARS_FOLDED =
39852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            "FREQ=WEEKLY;WKST=MO;UNTIL=20100129T130000Z;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR,\r\n  SA,SU";
40852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
41852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio    private static final String STRING_WITH_160_CHARS = "0123456789"
42852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
43852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
44852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
45852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
46852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
47852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
48852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
49852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
50852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
51852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
52852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
53852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
54852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
55852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
56852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789";
57852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
58852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio    private static final String STRING_WITH_160_CHARS_FOLDED = "0123456789"
59852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
60852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
61852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
62852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
63852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
64852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
65852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "01234"
66852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "\r\n "
67852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "56789"
68852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
69852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
70852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
71852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
72852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
73852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
74852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789"
75852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "\r\n "
76852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio            + "0123456789";
77852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
78852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio    @SmallTest
79852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio    public void testFoldPerRFC2445() {
80852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        assertEquals(RRULE_LESS_THAN_75_CHARS,
81852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio                RecurrenceSet.fold(RRULE_LESS_THAN_75_CHARS));
82852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
83852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        assertEquals(RRULE_MORE_THAN_75_CHARS_FOLDED,
84852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio                RecurrenceSet.fold(RRULE_MORE_THAN_75_CHARS));
85852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
86852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        assertEquals(STRING_WITH_160_CHARS_FOLDED,
87852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio                RecurrenceSet.fold(STRING_WITH_160_CHARS));
88852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio    }
89852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
90852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio    @SmallTest
91852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio    public void testUnFoldPerRFC2445() {
92852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        assertEquals(RRULE_LESS_THAN_75_CHARS,
93852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio                RecurrenceSet.unfold(RRULE_LESS_THAN_75_CHARS));
94852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
95852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        assertEquals(RRULE_MORE_THAN_75_CHARS,
96852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio                RecurrenceSet.unfold(RRULE_MORE_THAN_75_CHARS_FOLDED));
97852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
98852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        assertEquals(STRING_WITH_160_CHARS,
99852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio                RecurrenceSet.unfold(STRING_WITH_160_CHARS_FOLDED));
100852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio    }
101852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
102852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio    @SmallTest
103852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio    public void testRRULEfolding() {
104852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        ICalendar.Component component = new ICalendar.Component(MOCK_COMPONENT_NAME, null);
105852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
106852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        ContentValues values = new ContentValues();
107b9644fe24edf9e25f0b21c1394e88d25070e0238RoboErik        values.put(CalendarContract.Events.DTSTART, 0);
108b9644fe24edf9e25f0b21c1394e88d25070e0238RoboErik        values.put(CalendarContract.Events.DURATION, "P3600S");
109b9644fe24edf9e25f0b21c1394e88d25070e0238RoboErik        values.put(CalendarContract.Events.RRULE, RRULE_LESS_THAN_75_CHARS);
110852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
111852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        assertTrue(RecurrenceSet.populateComponent(values, component));
112852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        List<ICalendar.Property> list = component.getProperties("DTSTART");
113852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        assertTrue(list.size() == 1);
114852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        assertEquals("19700101T000000Z", list.get(0).getValue());
115852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
116852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        list = component.getProperties("RRULE");
117852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        assertTrue(list.size() == 1);
118852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        assertEquals(RRULE_LESS_THAN_75_CHARS,list.get(0).getValue());
119852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
120852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        component = new ICalendar.Component(MOCK_COMPONENT_NAME, null);
121852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
122852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        values = new ContentValues();
123b9644fe24edf9e25f0b21c1394e88d25070e0238RoboErik        values.put(CalendarContract.Events.DTSTART, 0);
124b9644fe24edf9e25f0b21c1394e88d25070e0238RoboErik        values.put(CalendarContract.Events.DURATION, "P3600S");
125b9644fe24edf9e25f0b21c1394e88d25070e0238RoboErik        values.put(CalendarContract.Events.RRULE, RRULE_MORE_THAN_75_CHARS);
126852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
127852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        assertTrue(RecurrenceSet.populateComponent(values, component));
128852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
129852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        list = component.getProperties("RRULE");
130852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        assertTrue(list.size() == 1);
131852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        assertEquals(RRULE_MORE_THAN_75_CHARS_FOLDED, list.get(0).getValue());
132852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
133852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        component = new ICalendar.Component(MOCK_COMPONENT_NAME, null);
134852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
135852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        values = new ContentValues();
136b9644fe24edf9e25f0b21c1394e88d25070e0238RoboErik        values.put(CalendarContract.Events.DTSTART, 0);
137b9644fe24edf9e25f0b21c1394e88d25070e0238RoboErik        values.put(CalendarContract.Events.DURATION, "P3600S");
138b9644fe24edf9e25f0b21c1394e88d25070e0238RoboErik        values.put(CalendarContract.Events.RRULE, STRING_WITH_160_CHARS);
139852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
140852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        assertTrue(RecurrenceSet.populateComponent(values, component));
141852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio
142852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        list = component.getProperties("RRULE");
143852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        assertTrue(list.size() == 1);
144852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio        assertEquals(STRING_WITH_160_CHARS_FOLDED, list.get(0).getValue());
145852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio    }
146852d89fc583863cc083b38d1ae29e715b956d511Fabrice Di Meglio}
147