Home | History | Annotate | Download | only in widget
      1 /*
      2 **
      3 ** Copyright 2010, The Android Open Source Project
      4 **
      5 ** Licensed under the Apache License, Version 2.0 (the "License");
      6 ** you may not use this file except in compliance with the License.
      7 ** You may obtain a copy of the License at
      8 **
      9 **     http://www.apache.org/licenses/LICENSE-2.0
     10 **
     11 ** Unless required by applicable law or agreed to in writing, software
     12 ** distributed under the License is distributed on an "AS IS" BASIS,
     13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 ** See the License for the specific language governing permissions and
     15 ** limitations under the License.
     16 */
     17 
     18 package com.android.calendar.widget;
     19 
     20 import com.android.calendar.widget.CalendarAppWidgetModel.EventInfo;
     21 import com.android.calendar.widget.CalendarAppWidgetService.CalendarFactory;
     22 
     23 import android.database.MatrixCursor;
     24 import android.test.AndroidTestCase;
     25 import android.test.suitebuilder.annotation.SmallTest;
     26 import android.test.suitebuilder.annotation.Suppress;
     27 import android.text.format.DateUtils;
     28 import android.text.format.Time;
     29 import android.view.View;
     30 
     31 import java.util.TimeZone;
     32 
     33 // adb shell am instrument -w -e class com.android.calendar.widget.CalendarAppWidgetServiceTest
     34 //   com.google.android.calendar.tests/android.test.InstrumentationTestRunner
     35 
     36 
     37 public class CalendarAppWidgetServiceTest extends AndroidTestCase {
     38     private static final String TAG = "CalendarAppWidgetService";
     39 
     40     private static final String DEFAULT_TIMEZONE = "America/Los_Angeles";
     41 
     42     final long now = 1262340000000L; // Fri Jan 01 2010 02:00:00 GMT-0800 (PST)
     43     final long ONE_MINUTE = 60000;
     44     final long ONE_HOUR = 60 * ONE_MINUTE;
     45     final long HALF_HOUR = ONE_HOUR / 2;
     46     final long TWO_HOURS = ONE_HOUR * 2;
     47 
     48     final String title = "Title";
     49     final String location = "Location";
     50 
     51 
     52 
     53 //    TODO Disabled test since this CalendarAppWidgetModel is not used for the no event case
     54 //
     55 //    @SmallTest
     56 //    public void testGetAppWidgetModel_noEvents() throws Exception {
     57 //        // Input
     58 //        MatrixCursor cursor = new MatrixCursor(CalendarAppWidgetService.EVENT_PROJECTION, 0);
     59 //
     60 //        // Expected Output
     61 //        CalendarAppWidgetModel expected = new CalendarAppWidgetModel();
     62 //        expected.visibNoEvents = View.VISIBLE;
     63 //
     64 //        // Test
     65 //        long now = 1270000000000L;
     66 //        MarkedEvents events = CalendarAppWidgetService.buildMarkedEvents(cursor, null, now);
     67 //        CalendarAppWidgetModel actual = CalendarAppWidgetService.getAppWidgetModel(
     68 //                getTestContext(), cursor, events, now);
     69 //
     70 //        assertEquals(expected.toString(), actual.toString());
     71 //    }
     72 
     73     @Override
     74     protected void setUp() throws Exception {
     75         super.setUp();
     76         // we want to run these tests in a predictable timezone
     77         TimeZone.setDefault(TimeZone.getTimeZone(DEFAULT_TIMEZONE));
     78     }
     79 
     80     @Override
     81     protected void tearDown() throws Exception {
     82         super.tearDown();
     83         // this restores the previous default timezone
     84         TimeZone.setDefault(null);
     85     }
     86 
     87     @SmallTest
     88     public void testGetAppWidgetModel_1Event() throws Exception {
     89         CalendarAppWidgetModel expected = new CalendarAppWidgetModel(getContext(), Time
     90                 .getCurrentTimezone());
     91         MatrixCursor cursor = new MatrixCursor(CalendarAppWidgetService.EVENT_PROJECTION, 0);
     92 
     93 
     94         // Input
     95         // allDay, begin, end, title, location, eventId
     96         cursor.addRow(getRow(0, now + ONE_HOUR, now + TWO_HOURS, title, location, 0));
     97 
     98         // Expected Output
     99         EventInfo eventInfo = new EventInfo();
    100         eventInfo.visibWhen = View.VISIBLE;
    101         eventInfo.visibWhere = View.VISIBLE;
    102         eventInfo.visibTitle = View.VISIBLE;
    103         eventInfo.when = "3am";
    104         eventInfo.where = location;
    105         eventInfo.title = title;
    106         expected.mEventInfos.add(eventInfo);
    107 
    108         // Test
    109         CalendarAppWidgetModel actual = CalendarFactory.buildAppWidgetModel(
    110                 getContext(), cursor, Time.getCurrentTimezone());
    111 
    112         assertEquals(expected.toString(), actual.toString());
    113     }
    114 
    115  // TODO re-enable this test when our widget behavior is finalized
    116     @Suppress @SmallTest
    117     public void testGetAppWidgetModel_2StaggeredEvents() throws Exception {
    118         CalendarAppWidgetModel expected = new CalendarAppWidgetModel(getContext(), Time
    119                 .getCurrentTimezone());
    120         MatrixCursor cursor = new MatrixCursor(CalendarAppWidgetService.EVENT_PROJECTION, 0);
    121 
    122         int i = 0;
    123         long tomorrow = now + DateUtils.DAY_IN_MILLIS;
    124         long sunday = tomorrow + DateUtils.DAY_IN_MILLIS;
    125 
    126         // Expected Output
    127         EventInfo eventInfo = new EventInfo();
    128         eventInfo.visibWhen = View.VISIBLE;
    129         eventInfo.visibWhere = View.VISIBLE;
    130         eventInfo.visibTitle = View.VISIBLE;
    131         eventInfo.when = "2am, Tomorrow";
    132         eventInfo.where = location + i;
    133         eventInfo.title = title + i;
    134         expected.mEventInfos.add(eventInfo);
    135 
    136         ++i;
    137         eventInfo = new EventInfo();
    138         eventInfo.visibWhen = View.VISIBLE;
    139         eventInfo.visibWhere = View.VISIBLE;
    140         eventInfo.visibTitle = View.VISIBLE;
    141         eventInfo.when = "2am, Sun";
    142         eventInfo.where = location + i;
    143         eventInfo.title = title + i;
    144         expected.mEventInfos.add(eventInfo);
    145 
    146         // Input
    147         // allDay, begin, end, title, location, eventId
    148         i = 0;
    149         cursor.addRow(getRow(0, tomorrow, tomorrow + TWO_HOURS, title + i, location + i, 0));
    150         ++i;
    151         cursor.addRow(getRow(0, sunday, sunday + TWO_HOURS, title + i, location + i, 0));
    152         ++i;
    153 
    154         // Test
    155         CalendarAppWidgetModel actual = CalendarFactory.buildAppWidgetModel(
    156                 getContext(), cursor, Time.getCurrentTimezone());
    157 
    158         assertEquals(expected.toString(), actual.toString());
    159     }
    160 
    161     @SmallTest
    162     public void testGetAppWidgetModel_AllDayEventToday() throws Exception {
    163         final long now = 1262340000000L; // Fri Jan 01 2010 01:00:00 GMT-0700 (PDT)
    164         CalendarAppWidgetModel expected = new CalendarAppWidgetModel(getContext(), Time
    165                 .getCurrentTimezone());
    166         MatrixCursor cursor = new MatrixCursor(CalendarAppWidgetService.EVENT_PROJECTION, 0);
    167 
    168         int i = 0;
    169 
    170         // Expected Output
    171         EventInfo eventInfo = new EventInfo();
    172         eventInfo.visibWhen = View.VISIBLE;
    173         eventInfo.visibWhere = View.VISIBLE;
    174         eventInfo.visibTitle = View.VISIBLE;
    175         eventInfo.when = "Today";
    176         eventInfo.where = location + i;
    177         eventInfo.title = title + i;
    178         expected.mEventInfos.add(eventInfo);
    179 
    180         i++;
    181         eventInfo = new EventInfo();
    182         eventInfo.visibWhen = View.VISIBLE;
    183         eventInfo.visibWhere = View.VISIBLE;
    184         eventInfo.visibTitle = View.VISIBLE;
    185         eventInfo.when = "3am";
    186         eventInfo.where = location + i;
    187         eventInfo.title = title + i;
    188         expected.mEventInfos.add(eventInfo);
    189 
    190         i = 0;
    191         cursor.addRow(getRow(1, 1262304000000L, 1262390400000L, title + i, location + i, 0));
    192         ++i;
    193         cursor.addRow(getRow(0, now + ONE_HOUR, now + TWO_HOURS, title + i, location + i, 0));
    194 
    195         // Test
    196         CalendarAppWidgetModel actual = CalendarFactory.buildAppWidgetModel(
    197                 getContext(), cursor, Time.getCurrentTimezone());
    198 
    199         assertEquals(expected.toString(), actual.toString());
    200     }
    201 
    202     @SmallTest
    203     public void testGetAppWidgetModel_AllDayEventTomorrow() throws Exception {
    204         final long now = 1262340000000L; // Fri Jan 01 2010 01:00:00 GMT-0700 (PDT)
    205         CalendarAppWidgetModel expected = new CalendarAppWidgetModel(getContext(), Time
    206                 .getCurrentTimezone());
    207         MatrixCursor cursor = new MatrixCursor(CalendarAppWidgetService.EVENT_PROJECTION, 0);
    208 
    209         int i = 0;
    210 
    211         // Expected Output
    212         EventInfo eventInfo = new EventInfo();
    213         eventInfo.visibWhen = View.VISIBLE;
    214         eventInfo.visibWhere = View.VISIBLE;
    215         eventInfo.visibTitle = View.VISIBLE;
    216         eventInfo.when = "3am";
    217         eventInfo.where = location + i;
    218         eventInfo.title = title + i;
    219         expected.mEventInfos.add(eventInfo);
    220 
    221         i++;
    222         eventInfo = new EventInfo();
    223         eventInfo.visibWhen = View.VISIBLE;
    224         eventInfo.visibWhere = View.VISIBLE;
    225         eventInfo.visibTitle = View.VISIBLE;
    226         eventInfo.when = "Tomorrow";
    227         eventInfo.where = location + i;
    228         eventInfo.title = title + i;
    229         expected.mEventInfos.add(eventInfo);
    230 
    231         i = 0;
    232         cursor.addRow(getRow(0, now + ONE_HOUR, now + TWO_HOURS, title + i, location + i, 0));
    233         ++i;
    234         cursor.addRow(getRow(1, 1262390400000L, 1262476800000L, title + i, location + i, 0));
    235 
    236         // Test
    237         CalendarAppWidgetModel actual = CalendarFactory.buildAppWidgetModel(
    238                 getContext(), cursor, Time.getCurrentTimezone());
    239 
    240         assertEquals(expected.toString(), actual.toString());
    241     }
    242 
    243     @SmallTest
    244     public void testGetAppWidgetModel_AllDayEventLater() throws Exception {
    245         final long now = 1262340000000L; // Fri Jan 01 2010 01:00:00 GMT-0700 (PDT)
    246         CalendarAppWidgetModel expected = new CalendarAppWidgetModel(getContext(), Time
    247                 .getCurrentTimezone());
    248         MatrixCursor cursor = new MatrixCursor(CalendarAppWidgetService.EVENT_PROJECTION, 0);
    249 
    250         int i = 0;
    251 
    252         // Expected Output
    253         EventInfo eventInfo = new EventInfo();
    254         eventInfo.visibWhen = View.VISIBLE;
    255         eventInfo.visibWhere = View.VISIBLE;
    256         eventInfo.visibTitle = View.VISIBLE;
    257         eventInfo.when = "3am";
    258         eventInfo.where = location + i;
    259         eventInfo.title = title + i;
    260         expected.mEventInfos.add(eventInfo);
    261 
    262         i++;
    263         eventInfo = new EventInfo();
    264         eventInfo.visibWhen = View.VISIBLE;
    265         eventInfo.visibWhere = View.VISIBLE;
    266         eventInfo.visibTitle = View.VISIBLE;
    267         eventInfo.when = "Sun";
    268         eventInfo.where = location + i;
    269         eventInfo.title = title + i;
    270         expected.mEventInfos.add(eventInfo);
    271 
    272         i = 0;
    273         cursor.addRow(getRow(0, now + ONE_HOUR, now + TWO_HOURS, title + i, location + i, 0));
    274         ++i;
    275         cursor.addRow(getRow(1, 1262476800000L, 1262563200000L, title + i, location + i, 0));
    276 
    277         // Test
    278         CalendarAppWidgetModel actual = CalendarAppWidgetService.CalendarFactory.buildAppWidgetModel(
    279                 getContext(), cursor, Time.getCurrentTimezone());
    280 
    281         assertEquals(expected.toString(), actual.toString());
    282     }
    283 
    284     private Object[] getRow(int allDay, long begin, long end, String title, String location,
    285             long eventId) {
    286         Object[] row = new Object[CalendarAppWidgetService.EVENT_PROJECTION.length];
    287         row[CalendarAppWidgetService.INDEX_ALL_DAY] = new Integer(allDay);
    288         row[CalendarAppWidgetService.INDEX_BEGIN] = new Long(begin);
    289         row[CalendarAppWidgetService.INDEX_END] = new Long(end);
    290         row[CalendarAppWidgetService.INDEX_TITLE] = new String(title);
    291         row[CalendarAppWidgetService.INDEX_EVENT_LOCATION] = new String(location);
    292         row[CalendarAppWidgetService.INDEX_EVENT_ID] = new Long(eventId);
    293         return row;
    294     }
    295 }
    296