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