diff options
-rw-r--r-- | tests/src/com/android/providers/calendar/CalendarSyncTestingBase.java | 386 | ||||
-rw-r--r-- | tests/src/com/android/providers/calendar/SyncCalendarTest.java | 163 |
2 files changed, 0 insertions, 549 deletions
diff --git a/tests/src/com/android/providers/calendar/CalendarSyncTestingBase.java b/tests/src/com/android/providers/calendar/CalendarSyncTestingBase.java deleted file mode 100644 index b5e1b76..0000000 --- a/tests/src/com/android/providers/calendar/CalendarSyncTestingBase.java +++ /dev/null @@ -1,386 +0,0 @@ -/* - * Copyright (C) 2009 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.providers.calendar; - -import android.accounts.Account; -import android.accounts.AccountManager; -import android.content.ContentResolver; -import android.content.ContentUris; -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.net.Uri; -import android.os.SystemClock; -import android.provider.CalendarContract; -import android.test.SyncBaseInstrumentation; -import android.text.format.DateUtils; -import android.text.format.Time; -import android.util.Log; - -import com.google.android.collect.Maps; - -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -public class CalendarSyncTestingBase extends SyncBaseInstrumentation { - protected AccountManager mAccountManager; - protected Context mTargetContext; - protected String mAccount; - protected ContentResolver mResolver; - protected Uri mEventsUri = CalendarContract.Events.CONTENT_URI; - - static final String TAG = "calendar"; - static final String DEFAULT_TIMEZONE = "America/Los_Angeles"; - static final Set<String> EVENT_COLUMNS_TO_SKIP = new HashSet<String>(); - static final Set<String> ATTENDEES_COLUMNS_TO_SKIP = new HashSet<String>(); - static final Set<String> CALENDARS_COLUMNS_TO_SKIP = new HashSet<String>(); - static final Set<String> INSTANCES_COLUMNS_TO_SKIP = new HashSet<String>(); - - static { - EVENT_COLUMNS_TO_SKIP.add(CalendarContract.Events._ID); - EVENT_COLUMNS_TO_SKIP.add(CalendarContract.Events.SYNC_DATA5); - EVENT_COLUMNS_TO_SKIP.add(CalendarContract.Events.SYNC_DATA4); - EVENT_COLUMNS_TO_SKIP.add(CalendarContract.Events.SYNC_DATA2); - EVENT_COLUMNS_TO_SKIP.add(CalendarContract.Events.DIRTY); - EVENT_COLUMNS_TO_SKIP.add(CalendarContract.Events.SYNC_DATA8); - ATTENDEES_COLUMNS_TO_SKIP.add(CalendarContract.Attendees._ID); - CALENDARS_COLUMNS_TO_SKIP.add(CalendarContract.Calendars._ID); - CALENDARS_COLUMNS_TO_SKIP.add(CalendarContract.Calendars.CAL_SYNC8); - CALENDARS_COLUMNS_TO_SKIP.add(CalendarContract.Calendars.CAL_SYNC7); - CALENDARS_COLUMNS_TO_SKIP.add(CalendarContract.Calendars.DIRTY); - CALENDARS_COLUMNS_TO_SKIP.add(CalendarContract.Calendars.CAL_SYNC6); - INSTANCES_COLUMNS_TO_SKIP.add(CalendarContract.Instances._ID); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - mTargetContext = getInstrumentation().getTargetContext(); - - mAccountManager = AccountManager.get(mTargetContext); - mAccount = getAccount(); - mResolver = mTargetContext.getContentResolver(); - } - - /** - * A simple method that syncs the calendar provider. - * @throws Exception - */ - protected void syncCalendar() throws Exception { - cancelSyncsandDisableAutoSync(); - syncProvider(CalendarContract.CONTENT_URI, mAccount, CalendarContract.AUTHORITY); - } - - /** - * Creates a new event in the default calendar. - * @param event Event to be created. - * @return Uri of the created event. - * @throws Exception - */ - protected Uri insertEvent(EventInfo event) throws Exception { - return insertEvent(getDefaultCalendarId(), event); - } - - /** - * Creates a new event in the given calendarId. - * @param calendarId Calendar to be used. - * @param event Event to be created. - * @return Uri of the event created. - * @throws Exception - */ - protected Uri insertEvent(int calendarId, EventInfo event) throws Exception{ - ContentValues m = new ContentValues(); - m.put(CalendarContract.Events.CALENDAR_ID, calendarId); - m.put(CalendarContract.Events.TITLE, event.mTitle); - m.put(CalendarContract.Events.DTSTART, event.mDtstart); - m.put(CalendarContract.Events.ALL_DAY, event.mAllDay ? 1 : 0); - - if (event.mRrule == null) { - // This is a normal event - m.put(CalendarContract.Events.DTEND, event.mDtend); - } else { - // This is a repeating event - m.put(CalendarContract.Events.RRULE, event.mRrule); - m.put(CalendarContract.Events.DURATION, event.mDuration); - } - - if (event.mDescription != null) { - m.put(CalendarContract.Events.DESCRIPTION, event.mDescription); - } - if (event.mTimezone != null) { - m.put(CalendarContract.Events.EVENT_TIMEZONE, event.mTimezone); - } - - Uri url = mResolver.insert(mEventsUri, m); - syncCalendar(); - return url; - } - - /** - * Edits the given event. - * @param eventId EventID of the event to be edited. - * @param event Edited event details. - * @throws Exception - */ - protected void editEvent(long eventId, EventInfo event) throws Exception { - ContentValues values = new ContentValues(); - values.put(CalendarContract.Events.TITLE, event.mTitle); - values.put(CalendarContract.Events.DTSTART, event.mDtstart); - values.put(CalendarContract.Events.DTEND, event.mDtend); - values.put(CalendarContract.Events.ALL_DAY, event.mAllDay ? 1 : 0); - - if (event.mDescription != null) { - values.put(CalendarContract.Events.DESCRIPTION, event.mDescription); - } - - Uri uri = ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, eventId); - mResolver.update(uri, values, null, null); - syncCalendar(); - } - - /** - * Deletes a given event. - * @param uri - * @throws Exception - */ - protected void deleteEvent(Uri uri) throws Exception { - mResolver.delete(uri, null, null); - syncCalendar(); - } - - /** - * Inserts a new calendar. - * @param name - * @param timezone - * @param calendarUrl - * @throws Exception - */ - protected void insertCalendar(String name, String timezone, String calendarUrl) - throws Exception { - ContentValues values = new ContentValues(); - - values.put(CalendarContract.Calendars.ACCOUNT_NAME, getAccount()); - values.put(CalendarContract.Calendars.CAL_SYNC1, calendarUrl); - values.put(CalendarContract.Calendars.NAME, name); - values.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, name); - - values.put(CalendarContract.Calendars.SYNC_EVENTS, 1); - values.put(CalendarContract.Calendars.VISIBLE, 1); - values.put(CalendarContract.Calendars.CALENDAR_COLOR, -14069085 /* blue */); - values.put(CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL, - CalendarContract.Calendars.CAL_ACCESS_OWNER); - - values.put(CalendarContract.Calendars.CALENDAR_COLOR, "0xff123456"); - values.put(CalendarContract.Calendars.CALENDAR_TIME_ZONE, timezone); - mResolver.insert(CalendarContract.Calendars.CONTENT_URI, values); - syncCalendar(); - } - - /** - * Returns a fresh count of events. - * @return - */ - protected int getEventsCount() { - Cursor cursor; - cursor = mResolver.query(mEventsUri, null, null, null, null); - return cursor.getCount(); - } - - /** - * Returns the ID of the default calendar. - * @return - */ - protected int getDefaultCalendarId() { - Cursor calendarsCursor; - calendarsCursor = mResolver.query(CalendarContract.Calendars.CONTENT_URI, null, null, null, - null); - calendarsCursor.moveToNext(); - return calendarsCursor.getInt(calendarsCursor.getColumnIndex("_id")); - } - - /** - * This class stores all the useful information about an event. - */ - protected class EventInfo { - String mTitle; - String mDescription; - String mTimezone; - boolean mAllDay; - long mDtstart; - long mDtend; - String mRrule; - String mDuration; - String mOriginalTitle; - long mOriginalInstance; - int mSyncId; - - // Constructor for normal events, using the default timezone - public EventInfo(String title, String startDate, String endDate, - boolean allDay) { - init(title, startDate, endDate, allDay, DEFAULT_TIMEZONE); - } - - public EventInfo(String title, long startDate, long endDate, - boolean allDay) { - mTitle = title; - mTimezone = DEFAULT_TIMEZONE; - mDtstart = startDate; - mDtend = endDate; - mDuration = null; - mRrule = null; - mAllDay = allDay; - } - - public EventInfo(String title, long startDate, long endDate, - boolean allDay, String description) { - mTitle = title; - mTimezone = DEFAULT_TIMEZONE; - mDtstart = startDate; - mDtend = endDate; - mDuration = null; - mRrule = null; - mAllDay = allDay; - mDescription = description; - } - - // Constructor for normal events, specifying the timezone - public EventInfo(String title, String startDate, String endDate, - boolean allDay, String timezone) { - init(title, startDate, endDate, allDay, timezone); - } - - public void init(String title, String startDate, String endDate, - boolean allDay, String timezone) { - mTitle = title; - Time time = new Time(); - if (allDay) { - time.timezone = Time.TIMEZONE_UTC; - } else if (timezone != null) { - time.timezone = timezone; - } - mTimezone = time.timezone; - time.parse3339(startDate); - mDtstart = time.toMillis(false /* use isDst */); - time.parse3339(endDate); - mDtend = time.toMillis(false /* use isDst */); - mDuration = null; - mRrule = null; - mAllDay = allDay; - } - - // Constructor for repeating events, using the default timezone - public EventInfo(String title, String description, String startDate, String endDate, - String rrule, boolean allDay) { - init(title, description, startDate, endDate, rrule, allDay, DEFAULT_TIMEZONE); - } - - // Constructor for repeating events, specifying the timezone - public EventInfo(String title, String description, String startDate, String endDate, - String rrule, boolean allDay, String timezone) { - init(title, description, startDate, endDate, rrule, allDay, timezone); - } - - public void init(String title, String description, String startDate, String endDate, - String rrule, boolean allDay, String timezone) { - mTitle = title; - mDescription = description; - Time time = new Time(); - if (allDay) { - time.timezone = Time.TIMEZONE_UTC; - } else if (timezone != null) { - time.timezone = timezone; - } - mTimezone = time.timezone; - time.parse3339(startDate); - mDtstart = time.toMillis(false /* use isDst */); - if (endDate != null) { - time.parse3339(endDate); - mDtend = time.toMillis(false /* use isDst */); - } - if (allDay) { - long days = 1; - if (endDate != null) { - days = (mDtend - mDtstart) / DateUtils.DAY_IN_MILLIS; - } - mDuration = "P" + days + "D"; - } else { - long seconds = (mDtend - mDtstart) / DateUtils.SECOND_IN_MILLIS; - mDuration = "P" + seconds + "S"; - } - mRrule = rrule; - mAllDay = allDay; - } - - // Constructor for recurrence exceptions, using the default timezone - public EventInfo(String originalTitle, String originalInstance, String title, - String description, String startDate, String endDate, boolean allDay) { - init(originalTitle, originalInstance, - title, description, startDate, endDate, allDay, DEFAULT_TIMEZONE); - } - - public void init(String originalTitle, String originalInstance, - String title, String description, String startDate, String endDate, - boolean allDay, String timezone) { - mOriginalTitle = originalTitle; - Time time = new Time(timezone); - time.parse3339(originalInstance); - mOriginalInstance = time.toMillis(false /* use isDst */); - init(title, description, startDate, endDate, null /* rrule */, allDay, timezone); - } - } - - /** - * Returns the default account on the device. - * @return - */ - protected String getAccount() { - Account[] accounts = mAccountManager.getAccountsByType("com.google"); - - assertTrue("Didn't find any Google accounts", accounts.length > 0); - - Account account = accounts[accounts.length - 1]; - Log.v(TAG, "Found " + accounts.length + " accounts; using the last one, " + account.name); - return account.name; - } - - /** - * Compares two cursors - */ - protected void compareCursors(Cursor cursor1, Cursor cursor2, - Set<String> columnsToSkip, String tableName) { - String[] cols = cursor1.getColumnNames(); - int length = cols.length; - - assertEquals(tableName + " count failed to match", cursor1.getCount(), - cursor2.getCount()); - Map<String, String> row = Maps.newHashMap(); - while (cursor1.moveToNext() && cursor2.moveToNext()) { - for (int i = 0; i < length; i++) { - String col = cols[i]; - if (columnsToSkip != null && columnsToSkip.contains(col)) { - continue; - } - row.put(col, cursor1.getString(i)); - - assertEquals("Row: " + row + " Table: " + tableName + ": " + cols[i] + - " failed to match", cursor1.getString(i), - cursor2.getString(i)); - } - } - } -} diff --git a/tests/src/com/android/providers/calendar/SyncCalendarTest.java b/tests/src/com/android/providers/calendar/SyncCalendarTest.java deleted file mode 100644 index d183042..0000000 --- a/tests/src/com/android/providers/calendar/SyncCalendarTest.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright (C) 2009 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.providers.calendar; - -import android.database.Cursor; -import android.net.Uri; -import android.text.format.Time; - -/** - * Calendar Sync instrumentation tests. Testing creation of new events, deleting events, - * editing events. - */ -public class SyncCalendarTest extends CalendarSyncTestingBase { - private EventInfo normalEvent = - new EventInfo("normal0", "2008-12-01T00:00:00", "2008-12-02T00:00:00", false); - private EventInfo dailyRecurringEvent = new EventInfo("dailyEvent", - "daily from 5/1/2008 12am to 1am", "2008-10-01T00:00:00", "2008-10-01T01:00:00", - "FREQ=DAILY;WKST=SU", false); - - private static final long ONE_HOUR_IN_MILLIS = 3600000; - - @Override - protected void setUp() throws Exception { - super.setUp(); - } - - public void testCreateNewEvent() throws Exception { - int countBeforeNewEvent = getEventsCount(); - insertEvent(normalEvent); - assertTrue("No new event was added. ", getEventsCount() > countBeforeNewEvent); - } - - public void testCreateAndDeleteNewRecurringEvent() throws Exception { - syncCalendar(); - int countBeforeNewEvent = getEventsCount(); - Uri insertUri = insertEvent(dailyRecurringEvent); - - assertTrue("A daily recurring event should have been created.", - getEventsCount() > countBeforeNewEvent); - deleteEvent(insertUri); - assertEquals("Daily recurring event should have been deleted.", - countBeforeNewEvent, getEventsCount()); - } - - public void testCreateAllDayEvent() throws Exception { - Time time = new Time(); - time.setToNow(); - long dtStart = time.toMillis(false); - long dtEnd = time.toMillis(false) + ONE_HOUR_IN_MILLIS; - EventInfo allDayEvent = new EventInfo("allday0", dtStart, dtEnd, true); - - int countBeforeNewEvent = getEventsCount(); - insertEvent(allDayEvent); - - assertTrue("An all-day event should have been created.", - getEventsCount() > countBeforeNewEvent); - } - - public void testEditEventTitle() throws Exception { - Cursor cursor; - cursor = mResolver.query(mEventsUri, null, null, null, null); - - int countBeforeNewEvent = cursor.getCount(); - cursor.moveToNext(); - Time time = new Time(); - time.setToNow(); - String newTitle = cursor.getString(cursor.getColumnIndex("title")) + time.toString(); - long dtStart = cursor.getLong(cursor.getColumnIndex("dtstart")); - long dtEnd = cursor.getLong(cursor.getColumnIndex("dtend")); - - EventInfo event = new EventInfo(newTitle, dtStart, dtEnd, false); - long eventId = cursor.getLong(cursor.getColumnIndex("_id")); - - editEvent(eventId, event); - cursor = mResolver.query(mEventsUri, null, null, null, null); - assertTrue("Events count should remain same.", getEventsCount() == countBeforeNewEvent); - - while (cursor.moveToNext()) { - if (cursor.getLong(cursor.getColumnIndex("_id")) == eventId) { - assertEquals(cursor.getString(cursor.getColumnIndex("title")), newTitle); - break; - } - } - cursor.close(); - } - - public void testEditEventDate() throws Exception { - Cursor cursor; - cursor = mResolver.query(mEventsUri, null, null, null, null); - - int countBeforeNewEvent = cursor.getCount(); - cursor.moveToNext(); - Time time = new Time(); - String title = cursor.getString(cursor.getColumnIndex("title")); - long dtStart = cursor.getLong(cursor.getColumnIndex("dtstart")); - time.set(dtStart + 2 * ONE_HOUR_IN_MILLIS); - long newDtStart = time.toMillis(false); - time.set(dtStart + 3 * ONE_HOUR_IN_MILLIS); - long newDtEnd = time.toMillis(false); - - EventInfo event = new EventInfo(title, newDtStart, newDtEnd, false); - long eventId = cursor.getLong(cursor.getColumnIndex("_id")); - - editEvent(eventId, event); - - cursor = mResolver.query(mEventsUri, null, null, null, null); - int countAfterNewEvent = cursor.getCount(); - assertTrue("Events count should remain same.", countAfterNewEvent == countBeforeNewEvent); - - while (cursor.moveToNext()){ - if (cursor.getLong(cursor.getColumnIndex("_id")) == eventId) { - assertEquals(cursor.getLong(cursor.getColumnIndex("dtstart")), newDtStart); - assertEquals(cursor.getLong(cursor.getColumnIndex("dtend")), newDtEnd); - break; - } - } - cursor.close(); - } - - public void testEditEventDescription() throws Exception { - Cursor cursor; - cursor = mResolver.query(mEventsUri, null, null, null, null); - int countBeforeNewEvent = cursor.getCount(); - cursor.moveToNext(); - - String title = cursor.getString(cursor.getColumnIndex("title")); - long dtStart = cursor.getLong(cursor.getColumnIndex("dtstart")); - long dtEnd = cursor.getLong(cursor.getColumnIndex("dtend")); - - String newDescription = "NEW Descrption"; - EventInfo event = new EventInfo(title, dtStart, dtEnd, false, newDescription); - - long eventId = cursor.getLong(cursor.getColumnIndex("_id")); - editEvent(eventId, event); - - cursor = mResolver.query(mEventsUri, null, null, null, null); - int countAfterNewEvent = cursor.getCount(); - assertTrue("Events count should remain same.", countAfterNewEvent == countBeforeNewEvent); - - while (cursor.moveToNext()){ - if (cursor.getLong(cursor.getColumnIndex("_id")) == eventId) { - assertEquals(cursor.getString(cursor.getColumnIndex("description")), newDescription); - break; - } - } - cursor.close(); - } -} - |