/*
**
** Copyright 2010, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
package com.android.calendar.widget;
import com.android.calendar.widget.CalendarAppWidgetModel.EventInfo;
import com.android.calendar.widget.CalendarAppWidgetService.CalendarFactory;
import android.database.MatrixCursor;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import android.test.suitebuilder.annotation.Suppress;
import android.text.format.DateUtils;
import android.text.format.Time;
import android.view.View;
import java.util.TimeZone;
// adb shell am instrument -w -e class com.android.calendar.widget.CalendarAppWidgetServiceTest
// com.google.android.calendar.tests/android.test.InstrumentationTestRunner
public class CalendarAppWidgetServiceTest extends AndroidTestCase {
private static final String TAG = "CalendarAppWidgetService";
private static final String DEFAULT_TIMEZONE = "America/Los_Angeles";
final long now = 1262340000000L; // Fri Jan 01 2010 02:00:00 GMT-0800 (PST)
final long ONE_MINUTE = 60000;
final long ONE_HOUR = 60 * ONE_MINUTE;
final long HALF_HOUR = ONE_HOUR / 2;
final long TWO_HOURS = ONE_HOUR * 2;
final String title = "Title";
final String location = "Location";
// TODO Disabled test since this CalendarAppWidgetModel is not used for the no event case
//
// @SmallTest
// public void testGetAppWidgetModel_noEvents() throws Exception {
// // Input
// MatrixCursor cursor = new MatrixCursor(CalendarAppWidgetService.EVENT_PROJECTION, 0);
//
// // Expected Output
// CalendarAppWidgetModel expected = new CalendarAppWidgetModel();
// expected.visibNoEvents = View.VISIBLE;
//
// // Test
// long now = 1270000000000L;
// MarkedEvents events = CalendarAppWidgetService.buildMarkedEvents(cursor, null, now);
// CalendarAppWidgetModel actual = CalendarAppWidgetService.getAppWidgetModel(
// getTestContext(), cursor, events, now);
//
// assertEquals(expected.toString(), actual.toString());
// }
@Override
protected void setUp() throws Exception {
super.setUp();
// we want to run these tests in a predictable timezone
TimeZone.setDefault(TimeZone.getTimeZone(DEFAULT_TIMEZONE));
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
// this restores the previous default timezone
TimeZone.setDefault(null);
}
@SmallTest
public void testGetAppWidgetModel_1Event() throws Exception {
CalendarAppWidgetModel expected = new CalendarAppWidgetModel(getContext(), Time
.getCurrentTimezone());
MatrixCursor cursor = new MatrixCursor(CalendarAppWidgetService.EVENT_PROJECTION, 0);
// Input
// allDay, begin, end, title, location, eventId
cursor.addRow(getRow(0, now + ONE_HOUR, now + TWO_HOURS, title, location, 0));
// Expected Output
EventInfo eventInfo = new EventInfo();
eventInfo.visibWhen = View.VISIBLE;
eventInfo.visibWhere = View.VISIBLE;
eventInfo.visibTitle = View.VISIBLE;
eventInfo.when = "3am";
eventInfo.where = location;
eventInfo.title = title;
expected.mEventInfos.add(eventInfo);
// Test
CalendarAppWidgetModel actual = CalendarFactory.buildAppWidgetModel(
getContext(), cursor, Time.getCurrentTimezone());
assertEquals(expected.toString(), actual.toString());
}
// TODO re-enable this test when our widget behavior is finalized
@Suppress @SmallTest
public void testGetAppWidgetModel_2StaggeredEvents() throws Exception {
CalendarAppWidgetModel expected = new CalendarAppWidgetModel(getContext(), Time
.getCurrentTimezone());
MatrixCursor cursor = new MatrixCursor(CalendarAppWidgetService.EVENT_PROJECTION, 0);
int i = 0;
long tomorrow = now + DateUtils.DAY_IN_MILLIS;
long sunday = tomorrow + DateUtils.DAY_IN_MILLIS;
// Expected Output
EventInfo eventInfo = new EventInfo();
eventInfo.visibWhen = View.VISIBLE;
eventInfo.visibWhere = View.VISIBLE;
eventInfo.visibTitle = View.VISIBLE;
eventInfo.when = "2am, Tomorrow";
eventInfo.where = location + i;
eventInfo.title = title + i;
expected.mEventInfos.add(eventInfo);
++i;
eventInfo = new EventInfo();
eventInfo.visibWhen = View.VISIBLE;
eventInfo.visibWhere = View.VISIBLE;
eventInfo.visibTitle = View.VISIBLE;
eventInfo.when = "2am, Sun";
eventInfo.where = location + i;
eventInfo.title = title + i;
expected.mEventInfos.add(eventInfo);
// Input
// allDay, begin, end, title, location, eventId
i = 0;
cursor.addRow(getRow(0, tomorrow, tomorrow + TWO_HOURS, title + i, location + i, 0));
++i;
cursor.addRow(getRow(0, sunday, sunday + TWO_HOURS, title + i, location + i, 0));
++i;
// Test
CalendarAppWidgetModel actual = CalendarFactory.buildAppWidgetModel(
getContext(), cursor, Time.getCurrentTimezone());
assertEquals(expected.toString(), actual.toString());
}
@SmallTest
public void testGetAppWidgetModel_AllDayEventToday() throws Exception {
final long now = 1262340000000L; // Fri Jan 01 2010 01:00:00 GMT-0700 (PDT)
CalendarAppWidgetModel expected = new CalendarAppWidgetModel(getContext(), Time
.getCurrentTimezone());
MatrixCursor cursor = new MatrixCursor(CalendarAppWidgetService.EVENT_PROJECTION, 0);
int i = 0;
// Expected Output
EventInfo eventInfo = new EventInfo();
eventInfo.visibWhen = View.VISIBLE;
eventInfo.visibWhere = View.VISIBLE;
eventInfo.visibTitle = View.VISIBLE;
eventInfo.when = "Today";
eventInfo.where = location + i;
eventInfo.title = title + i;
expected.mEventInfos.add(eventInfo);
i++;
eventInfo = new EventInfo();
eventInfo.visibWhen = View.VISIBLE;
eventInfo.visibWhere = View.VISIBLE;
eventInfo.visibTitle = View.VISIBLE;
eventInfo.when = "3am";
eventInfo.where = location + i;
eventInfo.title = title + i;
expected.mEventInfos.add(eventInfo);
i = 0;
cursor.addRow(getRow(1, 1262304000000L, 1262390400000L, title + i, location + i, 0));
++i;
cursor.addRow(getRow(0, now + ONE_HOUR, now + TWO_HOURS, title + i, location + i, 0));
// Test
CalendarAppWidgetModel actual = CalendarFactory.buildAppWidgetModel(
getContext(), cursor, Time.getCurrentTimezone());
assertEquals(expected.toString(), actual.toString());
}
@SmallTest
public void testGetAppWidgetModel_AllDayEventTomorrow() throws Exception {
final long now = 1262340000000L; // Fri Jan 01 2010 01:00:00 GMT-0700 (PDT)
CalendarAppWidgetModel expected = new CalendarAppWidgetModel(getContext(), Time
.getCurrentTimezone());
MatrixCursor cursor = new MatrixCursor(CalendarAppWidgetService.EVENT_PROJECTION, 0);
int i = 0;
// Expected Output
EventInfo eventInfo = new EventInfo();
eventInfo.visibWhen = View.VISIBLE;
eventInfo.visibWhere = View.VISIBLE;
eventInfo.visibTitle = View.VISIBLE;
eventInfo.when = "3am";
eventInfo.where = location + i;
eventInfo.title = title + i;
expected.mEventInfos.add(eventInfo);
i++;
eventInfo = new EventInfo();
eventInfo.visibWhen = View.VISIBLE;
eventInfo.visibWhere = View.VISIBLE;
eventInfo.visibTitle = View.VISIBLE;
eventInfo.when = "Tomorrow";
eventInfo.where = location + i;
eventInfo.title = title + i;
expected.mEventInfos.add(eventInfo);
i = 0;
cursor.addRow(getRow(0, now + ONE_HOUR, now + TWO_HOURS, title + i, location + i, 0));
++i;
cursor.addRow(getRow(1, 1262390400000L, 1262476800000L, title + i, location + i, 0));
// Test
CalendarAppWidgetModel actual = CalendarFactory.buildAppWidgetModel(
getContext(), cursor, Time.getCurrentTimezone());
assertEquals(expected.toString(), actual.toString());
}
@SmallTest
public void testGetAppWidgetModel_AllDayEventLater() throws Exception {
final long now = 1262340000000L; // Fri Jan 01 2010 01:00:00 GMT-0700 (PDT)
CalendarAppWidgetModel expected = new CalendarAppWidgetModel(getContext(), Time
.getCurrentTimezone());
MatrixCursor cursor = new MatrixCursor(CalendarAppWidgetService.EVENT_PROJECTION, 0);
int i = 0;
// Expected Output
EventInfo eventInfo = new EventInfo();
eventInfo.visibWhen = View.VISIBLE;
eventInfo.visibWhere = View.VISIBLE;
eventInfo.visibTitle = View.VISIBLE;
eventInfo.when = "3am";
eventInfo.where = location + i;
eventInfo.title = title + i;
expected.mEventInfos.add(eventInfo);
i++;
eventInfo = new EventInfo();
eventInfo.visibWhen = View.VISIBLE;
eventInfo.visibWhere = View.VISIBLE;
eventInfo.visibTitle = View.VISIBLE;
eventInfo.when = "Sun";
eventInfo.where = location + i;
eventInfo.title = title + i;
expected.mEventInfos.add(eventInfo);
i = 0;
cursor.addRow(getRow(0, now + ONE_HOUR, now + TWO_HOURS, title + i, location + i, 0));
++i;
cursor.addRow(getRow(1, 1262476800000L, 1262563200000L, title + i, location + i, 0));
// Test
CalendarAppWidgetModel actual = CalendarAppWidgetService.CalendarFactory.buildAppWidgetModel(
getContext(), cursor, Time.getCurrentTimezone());
assertEquals(expected.toString(), actual.toString());
}
private Object[] getRow(int allDay, long begin, long end, String title, String location,
long eventId) {
Object[] row = new Object[CalendarAppWidgetService.EVENT_PROJECTION.length];
row[CalendarAppWidgetService.INDEX_ALL_DAY] = new Integer(allDay);
row[CalendarAppWidgetService.INDEX_BEGIN] = new Long(begin);
row[CalendarAppWidgetService.INDEX_END] = new Long(end);
row[CalendarAppWidgetService.INDEX_TITLE] = new String(title);
row[CalendarAppWidgetService.INDEX_EVENT_LOCATION] = new String(location);
row[CalendarAppWidgetService.INDEX_EVENT_ID] = new Long(eventId);
return row;
}
}