| /* |
| ** |
| ** 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 com.android.calendar.Utils; |
| |
| import android.content.Context; |
| 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"; |
| long now; |
| 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)); |
| |
| // Set the "current time" to 2am tomorrow. |
| Time time = new Time(); |
| time.setToNow(); |
| time.monthDay += 1; |
| time.hour = 2; |
| time.minute = 0; |
| time.second = 0; |
| now = time.normalize(false); |
| } |
| |
| @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 = Utils.formatDateRange(getContext(), now + ONE_HOUR, now + TWO_HOURS, |
| DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL); |
| eventInfo.where = location; |
| eventInfo.title = title; |
| expected.mEventInfos.add(eventInfo); |
| |
| // Test |
| CalendarAppWidgetModel actual = CalendarFactory.buildAppWidgetModel( |
| getContext(), cursor, Time.getCurrentTimezone()); |
| |
| assertEquals(expected.toString(), actual.toString()); |
| } |
| |
| @SmallTest |
| public void testGetAppWidgetModel_AllDayEventLater() throws Exception { |
| Context context = getContext(); |
| 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 = Utils.formatDateRange(context, now + ONE_HOUR, now + TWO_HOURS, |
| DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL); |
| eventInfo.where = location + i; |
| eventInfo.title = title + i; |
| expected.mEventInfos.add(eventInfo); |
| cursor.addRow(getRow(0, now + ONE_HOUR, now + TWO_HOURS, title + i, location + i, 0)); |
| |
| i++; |
| // Set the start time to 5 days from now at midnight UTC. |
| Time time = new Time(); |
| time.set(now); |
| time.monthDay += 5; |
| time.hour = 0; |
| time.timezone = Time.TIMEZONE_UTC; |
| long start = time.normalize(false); |
| time.monthDay += 1; |
| long end = time.normalize(false); |
| |
| eventInfo = new EventInfo(); |
| eventInfo.visibWhen = View.VISIBLE; |
| eventInfo.visibWhere = View.VISIBLE; |
| eventInfo.visibTitle = View.VISIBLE; |
| eventInfo.when = DateUtils.formatDateTime(context, end, |
| DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL); |
| eventInfo.where = location + i; |
| eventInfo.title = title + i; |
| expected.mEventInfos.add(eventInfo); |
| cursor.addRow(getRow(1, start, end, title + i, location + i, 0)); |
| |
| // Test |
| CalendarAppWidgetModel actual = CalendarAppWidgetService.CalendarFactory.buildAppWidgetModel( |
| context, 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; |
| } |
| } |