Home | History | Annotate | Download | only in calendarcommon2
      1 /*
      2  * Copyright (C) 2009 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.calendarcommon2;
     18 
     19 import com.android.calendarcommon2.ICalendar;
     20 import com.android.calendarcommon2.RecurrenceSet;
     21 
     22 import android.content.ContentValues;
     23 import android.test.suitebuilder.annotation.SmallTest;
     24 import android.util.Log;
     25 import android.provider.CalendarContract;
     26 import junit.framework.TestCase;
     27 
     28 /**
     29  * Test some pim.RecurrenceSet functionality.
     30  */
     31 public class RecurrenceSetTest extends TestCase {
     32 
     33     // Test a recurrence
     34     @SmallTest
     35     public void testRecurrenceSet0() throws Exception {
     36         String recurrence = "DTSTART;TZID=America/New_York:20080221T070000\n"
     37                 + "DTEND;TZID=America/New_York:20080221T190000\n"
     38                 + "RRULE:FREQ=DAILY;UNTIL=20080222T000000Z\n"
     39                 + "EXDATE:20080222T120000Z";
     40         verifyPopulateContentValues(recurrence, "FREQ=DAILY;UNTIL=20080222T000000Z", null,
     41                 null, "20080222T120000Z", 1203595200000L, "America/New_York", "P43200S", 0, false);
     42     }
     43 
     44     // Test 1 day all-day event
     45     @SmallTest
     46     public void testRecurrenceSet1() throws Exception {
     47         String recurrence = "DTSTART;VALUE=DATE:20090821\nDTEND;VALUE=DATE:20090822\n"
     48                 + "RRULE:FREQ=YEARLY;WKST=SU";
     49         verifyPopulateContentValues(recurrence, "FREQ=YEARLY;WKST=SU", null,
     50                 null, null, 1250812800000L, "UTC", "P1D", 1, false);
     51     }
     52 
     53     // Test 2 day all-day event
     54     @SmallTest
     55     public void testRecurrenceSet2() throws Exception {
     56         String recurrence = "DTSTART;VALUE=DATE:20090821\nDTEND;VALUE=DATE:20090823\n"
     57                 + "RRULE:FREQ=YEARLY;WKST=SU";
     58         verifyPopulateContentValues(recurrence, "FREQ=YEARLY;WKST=SU", null,
     59                 null, null, 1250812800000L, "UTC",  "P2D", 1, false);
     60     }
     61 
     62     // Test multi-rule RRULE.
     63     @SmallTest
     64     public void testRecurrenceSet3() throws Exception {
     65         String recurrence = "DTSTART;VALUE=DATE:20090821\n"
     66                 + "RRULE:FREQ=YEARLY;WKST=SU\n"
     67                 + "RRULE:FREQ=MONTHLY;COUNT=3\n"
     68                 + "DURATION:P2H";
     69         verifyPopulateContentValues(recurrence, "FREQ=YEARLY;WKST=SU\nFREQ=MONTHLY;COUNT=3", null,
     70                 null, null, 1250812800000L, "UTC", "P2H", 1 /*allDay*/, false);
     71         // allDay=1 just means the start time is 00:00:00 UTC.
     72     }
     73 
     74     // Test RDATE with VALUE=DATE.
     75     @SmallTest
     76     public void testRecurrenceSet4() throws Exception {
     77         String recurrence = "DTSTART;TZID=America/Los_Angeles:20090821T010203\n"
     78                 + "RDATE;TZID=America/Los_Angeles;VALUE=DATE:20110601,20110602,20110603\n"
     79                 + "DURATION:P2H";
     80         verifyPopulateContentValues(recurrence, null,
     81                 //"TZID=America/Los_Angeles;VALUE=DATE:20110601,20110602,20110603",
     82                 "America/Los_Angeles;20110601,20110602,20110603", // incorrect
     83                 null, null, 1250841723000L, "America/Los_Angeles", "P2H", 0 /*allDay*/, false);
     84         // allDay=1 just means the start time is 00:00:00 UTC.
     85     }
     86 
     87     // Check generation of duration from events in different time zones.
     88     @SmallTest
     89     public void testRecurrenceSet5() throws Exception {
     90         String recurrence = "DTSTART;TZID=America/Los_Angeles:20090821T070000\n"
     91                 + "DTEND;TZID=America/New_York:20090821T110000\n"
     92                 + "RRULE:FREQ=YEARLY\n";
     93         verifyPopulateContentValues(recurrence, "FREQ=YEARLY", null,
     94                 null, null, 1250863200000L, "America/Los_Angeles", "P3600S" /*P1H*/, 0 /*allDay*/,
     95                 false);
     96         // TODO: would like to use P1H for duration
     97 
     98         String recurrence2 = "DTSTART;TZID=America/New_York:20090821T100000\n"
     99             + "DTEND;TZID=America/Los_Angeles:20090821T080000\n"
    100             + "RRULE:FREQ=YEARLY\n";
    101         verifyPopulateContentValues(recurrence, "FREQ=YEARLY", null,
    102                 null, null, 1250863200000L, "America/Los_Angeles", "P3600S" /*P1H*/, 0 /*allDay*/,
    103                 false);
    104         // TODO: should we rigorously define which tzid becomes the "event timezone"?
    105     }
    106 
    107     // Test a failure to parse the recurrence data
    108     @SmallTest
    109     public void testRecurrenceSetBadDstart() throws Exception {
    110         String recurrence = "DTSTART;TZID=GMT+05:30:20080221T070000\n"
    111                 + "DTEND;TZID=GMT+05:30:20080221T190000\n"
    112                 + "RRULE:FREQ=DAILY;UNTIL=20080222T000000Z\n"
    113                 + "EXDATE:20080222T120000Z";
    114         verifyPopulateContentValues(recurrence, "FREQ=DAILY;UNTIL=20080222T000000Z", null,
    115                 null, "20080222T120000Z", 1203595200000L, "America/New_York", "P43200S", 0, true);
    116     }
    117 
    118     @SmallTest
    119     public void testRecurrenceSetBadRrule() throws Exception {
    120         String recurrence = "DTSTART;TZID=America/New_York:20080221T070000\n"
    121                 + "DTEND;TZID=GMT+05:30:20080221T190000\n"
    122                 + "RRULE:FREQ=NEVER;UNTIL=20080222T000000Z\n"
    123                 + "EXDATE:20080222T120000Z";
    124         verifyPopulateContentValues(recurrence, "FREQ=DAILY;UNTIL=20080222T000000Z", null,
    125                 null, "20080222T120000Z", 1203595200000L, "America/New_York", "P43200S", 0, true);
    126     }
    127 
    128     // run populateContentValues and verify the results
    129     private void verifyPopulateContentValues(String recurrence, String rrule, String rdate,
    130             String exrule, String exdate, long dtstart, String tzid, String duration, int allDay,
    131             boolean badFormat)
    132             throws ICalendar.FormatException {
    133         ICalendar.Component recurrenceComponent =
    134                 new ICalendar.Component("DUMMY", null /* parent */);
    135         ICalendar.parseComponent(recurrenceComponent, recurrence);
    136         ContentValues values = new ContentValues();
    137         boolean result = RecurrenceSet.populateContentValues(recurrenceComponent, values);
    138         Log.d("KS", "values " + values);
    139 
    140         if (badFormat) {
    141             assertEquals(result, !badFormat);
    142             return;
    143         }
    144         assertEquals(rrule, values.get(android.provider.CalendarContract.Events.RRULE));
    145         assertEquals(rdate, values.get(android.provider.CalendarContract.Events.RDATE));
    146         assertEquals(exrule, values.get(android.provider.CalendarContract.Events.EXRULE));
    147         assertEquals(exdate, values.get(android.provider.CalendarContract.Events.EXDATE));
    148         assertEquals(dtstart, (long) values.getAsLong(CalendarContract.Events.DTSTART));
    149         assertEquals(tzid, values.get(android.provider.CalendarContract.Events.EVENT_TIMEZONE));
    150         assertEquals(duration, values.get(android.provider.CalendarContract.Events.DURATION));
    151         assertEquals(allDay,
    152                 (int) values.getAsInteger(android.provider.CalendarContract.Events.ALL_DAY));
    153     }
    154 
    155 }
    156