diff options
author | Tony Mak <tonymak@google.com> | 2015-06-08 10:45:52 +0100 |
---|---|---|
committer | Tony Mak <tonymak@google.com> | 2015-06-08 10:45:52 +0100 |
commit | ea28dfc327c87b24855f7abd9a48ba9a1b3f43f5 (patch) | |
tree | c19085e45af1f4720e706c82412fc8ca2049f0f8 | |
parent | b848d86cc7ed11b6f44075b44725806a8603e9ab (diff) | |
download | android_packages_providers_CalendarProvider-ea28dfc327c87b24855f7abd9a48ba9a1b3f43f5.tar.gz android_packages_providers_CalendarProvider-ea28dfc327c87b24855f7abd9a48ba9a1b3f43f5.tar.bz2 android_packages_providers_CalendarProvider-ea28dfc327c87b24855f7abd9a48ba9a1b3f43f5.zip |
Fix CalendarProvider2Test
1. Add authority into ProviderInfo
2. Add more features we needed in IsolatedContext
3. testInsertOriginalTimezoneInExtProperties is removed as we dun have this extended property anymore
4. Fix bug in instance search due to wrong order of selection args
5. Fix bug that dirty is not marked to 1 when attendee of event is deleted
Bug: 20715117
Change-Id: I494348742491eedf99355b44378d75e637b1e3c7
-rw-r--r-- | src/com/android/providers/calendar/CalendarProvider2.java | 37 | ||||
-rw-r--r-- | tests/src/com/android/providers/calendar/CalendarProvider2Test.java | 112 |
2 files changed, 54 insertions, 95 deletions
diff --git a/src/com/android/providers/calendar/CalendarProvider2.java b/src/com/android/providers/calendar/CalendarProvider2.java index 5002177..73a2275 100644 --- a/src/com/android/providers/calendar/CalendarProvider2.java +++ b/src/com/android/providers/calendar/CalendarProvider2.java @@ -179,14 +179,6 @@ public class CalendarProvider2 extends SQLiteContentProvider implements OnAccoun private CalendarDatabaseHelper mDbHelper; private CalendarInstancesHelper mInstancesHelper; - // The extended property name for storing an Event original Timezone. - // Due to an issue in Calendar Server restricting the length of the name we - // had to strip it down - // TODO - Better name would be: - // "com.android.providers.calendar.CalendarSyncAdapter#originalTimezone" - protected static final String EXT_PROP_ORIGINAL_TIMEZONE = - "CalendarSyncAdapter#originalTimezone"; - private static final String SQL_SELECT_EVENTSRAWTIMES = "SELECT " + CalendarContract.EventsRawTimes.EVENT_ID + ", " + CalendarContract.EventsRawTimes.DTSTART_2445 + ", " + @@ -1088,7 +1080,6 @@ public class CalendarProvider2 extends SQLiteContentProvider implements OnAccoun long rangeEnd, String[] projection, String selection, String[] selectionArgs, String sort, boolean searchByDay, boolean forceExpansion, String instancesTimezone, boolean isHomeTimezone) { - mDb = mDbHelper.getWritableDatabase(); qb.setTables(INSTANCE_QUERY_TABLES); qb.setProjectionMap(sInstancesProjectionMap); @@ -1116,8 +1107,6 @@ public class CalendarProvider2 extends SQLiteContentProvider implements OnAccoun if (selectionArgs == null) { selectionArgs = newSelectionArgs; } else { - // The appendWhere pieces get added first, so put the - // newSelectionArgs first. selectionArgs = combine(newSelectionArgs, selectionArgs); } return qb.query(mDb, projection, selection, selectionArgs, null /* groupBy */, @@ -1237,15 +1226,12 @@ public class CalendarProvider2 extends SQLiteContentProvider implements OnAccoun } @VisibleForTesting - String[] constructSearchArgs(String[] tokens, long rangeBegin, long rangeEnd) { + String[] constructSearchArgs(String[] tokens) { int numCols = SEARCH_COLUMNS.length; - int numArgs = tokens.length * numCols + 2; - // the additional two elements here are for begin/end time + int numArgs = tokens.length * numCols; String[] selectionArgs = new String[numArgs]; - selectionArgs[0] = String.valueOf(rangeEnd); - selectionArgs[1] = String.valueOf(rangeBegin); for (int j = 0; j < tokens.length; j++) { - int start = 2 + numCols * j; + int start = numCols * j; for (int i = start; i < start + numCols; i++) { selectionArgs[i] = "%" + tokens[j] + "%"; } @@ -1262,13 +1248,13 @@ public class CalendarProvider2 extends SQLiteContentProvider implements OnAccoun qb.setProjectionMap(sInstancesProjectionMap); String[] tokens = tokenizeSearchQuery(query); - String[] newSelectionArgs = constructSearchArgs(tokens, rangeBegin, rangeEnd); + String[] searchArgs = constructSearchArgs(tokens); + String[] timeRange = new String[] {String.valueOf(rangeEnd), String.valueOf(rangeBegin)}; if (selectionArgs == null) { - selectionArgs = newSelectionArgs; + selectionArgs = combine(timeRange, searchArgs); } else { - // The appendWhere pieces get added first, so put the - // newSelectionArgs first. - selectionArgs = combine(newSelectionArgs, selectionArgs); + // where clause comes first, so put selectionArgs before searchArgs. + selectionArgs = combine(timeRange, selectionArgs, searchArgs); } // we pass this in as a HAVING instead of a WHERE so the filtering // happens after the grouping @@ -1304,7 +1290,6 @@ public class CalendarProvider2 extends SQLiteContentProvider implements OnAccoun ); qb.appendWhere(SQL_WHERE_INSTANCES_BETWEEN); } - return qb.query(mDb, projection, selection, selectionArgs, Tables.INSTANCES + "." + Instances._ID /* groupBy */, searchWhere /* having */, sort); @@ -2189,8 +2174,8 @@ public class CalendarProvider2 extends SQLiteContentProvider implements OnAccoun } if (updatedValues.containsKey(Events.ORIGINAL_SYNC_ID) && !updatedValues.containsKey(Events.ORIGINAL_ID)) { - long originalId = getOriginalId(updatedValues - .getAsString(Events.ORIGINAL_SYNC_ID), + long originalId = getOriginalId(updatedValues.getAsString( + Events.ORIGINAL_SYNC_ID), updatedValues.getAsString(Events.CALENDAR_ID)); if (originalId != -1) { updatedValues.put(Events.ORIGINAL_ID, originalId); @@ -3343,13 +3328,13 @@ public class CalendarProvider2 extends SQLiteContentProvider implements OnAccoun // event that we just duplicated on the previous iteration. if (eventId != prevEventId) { mDbHelper.duplicateEvent(eventId); - prevEventId = eventId; } mDb.delete(table, SQL_WHERE_ID, new String[]{String.valueOf(id)}); if (eventId != prevEventId) { mDb.update(Tables.EVENTS, dirtyValues, SQL_WHERE_ID, new String[] { String.valueOf(eventId)} ); } + prevEventId = eventId; count++; } } finally { diff --git a/tests/src/com/android/providers/calendar/CalendarProvider2Test.java b/tests/src/com/android/providers/calendar/CalendarProvider2Test.java index 5f2ebf4..98c4b6a 100644 --- a/tests/src/com/android/providers/calendar/CalendarProvider2Test.java +++ b/tests/src/com/android/providers/calendar/CalendarProvider2Test.java @@ -23,6 +23,8 @@ import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ProviderInfo; import android.content.res.Resources; import android.database.Cursor; import android.database.MatrixCursor; @@ -146,6 +148,11 @@ public class CalendarProvider2Test extends AndroidTestCase { public boolean stopService(Intent service) { return false; } + + @Override + public PackageManager getPackageManager() { + return getContext().getPackageManager(); + } } /** @@ -945,10 +952,21 @@ public class CalendarProvider2Test extends AndroidTestCase { new MockContext2(), // The context that most methods are delegated to getContext(), // The context that file methods are delegated to filenamePrefix); - mContext = new IsolatedContext(mResolver, targetContextWrapper); + mContext = new IsolatedContext(mResolver, targetContextWrapper) { + @Override + public Object getSystemService(String name) { + // for accessing wakelock. + if (Context.POWER_SERVICE.equals(name)) { + return getContext().getSystemService(name); + } + return super.getSystemService(name); + } + }; mProvider = new CalendarProvider2ForTesting(); - mProvider.attachInfo(mContext, null); + ProviderInfo info = new ProviderInfo(); + info.authority = CalendarContract.AUTHORITY; + mProvider.attachInfoForTesting(mContext, info); mResolver.addProvider(CalendarContract.AUTHORITY, mProvider); mResolver.addProvider("subscribedfeeds", new MockProvider("subscribedfeeds")); @@ -1339,7 +1357,7 @@ public class CalendarProvider2Test extends AndroidTestCase { .appendQueryParameter(Calendars.ACCOUNT_NAME, account) .appendQueryParameter(Calendars.ACCOUNT_TYPE, accountType).build(); } - + public void testInsertUpdateDeleteColor() throws Exception { // Calendar Color long colorType = Colors.TYPE_CALENDAR; @@ -1735,26 +1753,20 @@ public class CalendarProvider2Test extends AndroidTestCase { @SmallTest @Smoke public void testConstructSearchArgs() { - long rangeBegin = 0; - long rangeEnd = 10; - String[] tokens = new String[] {"red"}; - String[] expected = new String[] {"10", "0", "%red%", "%red%", + String[] expected = new String[] {"%red%", "%red%", "%red%", "%red%", "%red%" }; - assertArrayEquals(expected, mProvider.constructSearchArgs(tokens, - rangeBegin, rangeEnd)); + assertArrayEquals(expected, mProvider.constructSearchArgs(tokens)); tokens = new String[] {"red", "blue"}; - expected = new String[] { "10", "0", "%red%", "%red%", "%red%", + expected = new String[] { "%red%", "%red%", "%red%", "%red%", "%red%", "%blue%", "%blue%", "%blue%", "%blue%","%blue%"}; - assertArrayEquals(expected, mProvider.constructSearchArgs(tokens, - rangeBegin, rangeEnd)); + assertArrayEquals(expected, mProvider.constructSearchArgs(tokens)); tokens = new String[] {}; - expected = new String[] {"10", "0" }; - assertArrayEquals(expected, mProvider.constructSearchArgs(tokens, - rangeBegin, rangeEnd)); + expected = new String[] {}; + assertArrayEquals(expected, mProvider.constructSearchArgs(tokens)); } public void testInstanceSearchQuery() throws Exception { @@ -1950,7 +1962,7 @@ public class CalendarProvider2Test extends AndroidTestCase { assertEquals(0, deletes); } - + public void testCalendarAlerts() throws Exception { // This projection is from AlertActivity; want to make sure it works. String[] projection = new String[] { @@ -1967,11 +1979,17 @@ public class CalendarProvider2Test extends AndroidTestCase { CalendarContract.CalendarAlerts.STATE, // 10 CalendarContract.CalendarAlerts.ALARM_TIME, // 11 }; - testInsertNormalEvents(); // To initialize - Uri alertUri = CalendarContract.CalendarAlerts.insert(mResolver, 1 /* eventId */, + mCalendarId = insertCal("CalendarTestAttendees", DEFAULT_TIMEZONE); + String calendarIdString = Integer.toString(mCalendarId); + checkEvents(0, mDb, calendarIdString); + Uri eventUri = insertEvent(mCalendarId, findEvent("normal0")); + checkEvents(1, mDb, calendarIdString); + long eventId = ContentUris.parseId(eventUri); + + Uri alertUri = CalendarContract.CalendarAlerts.insert(mResolver, eventId /* eventId */, 2 /* begin */, 3 /* end */, 4 /* alarmTime */, 5 /* minutes */); - CalendarContract.CalendarAlerts.insert(mResolver, 1 /* eventId */, + CalendarContract.CalendarAlerts.insert(mResolver, eventId /* eventId */, 2 /* begin */, 7 /* end */, 8 /* alarmTime */, 9 /* minutes */); // Regular query @@ -2279,7 +2297,7 @@ public class CalendarProvider2Test extends AndroidTestCase { DEFAULT_ACCOUNT, DEFAULT_ACCOUNT_TYPE), extended); testAndClearDirty(eventId, syncAdapter ? 0 : 1); testQueryCount(CalendarContract.ExtendedProperties.CONTENT_URI, - "event_id=" + eventId, 2); + "event_id=" + eventId, 1); } else { // Confirm that inserting as app fails. try { @@ -2324,7 +2342,7 @@ public class CalendarProvider2Test extends AndroidTestCase { null /* where */, null /* selectionArgs */)); testAndClearDirty(eventId, syncAdapter ? 0 : 1); testQueryCount(CalendarContract.ExtendedProperties.CONTENT_URI, - "event_id=" + eventId, 2); + "event_id=" + eventId, 1); } // Now test deletes @@ -2356,7 +2374,8 @@ public class CalendarProvider2Test extends AndroidTestCase { null /* where */, null /* selectionArgs */)); testAndClearDirty(eventId, syncAdapter ? 0 : 1); - testQueryCount(CalendarContract.ExtendedProperties.CONTENT_URI, "event_id=" + eventId, 1); + testQueryCount(CalendarContract.ExtendedProperties.CONTENT_URI, "event_id=" + eventId, + 0); } } @@ -2815,8 +2834,8 @@ public class CalendarProvider2Test extends AndroidTestCase { public static final Uri PROPERTIES_CONTENT_URI = Uri.parse("content://" + CalendarContract.AUTHORITY + "/properties"); - public static final int COLUMN_KEY_INDEX = 1; - public static final int COLUMN_VALUE_INDEX = 0; + public static final int COLUMN_KEY_INDEX = 0; + public static final int COLUMN_VALUE_INDEX = 1; public void testGetProviderProperties() throws CalendarCache.CacheException { CalendarDatabaseHelper helper = (CalendarDatabaseHelper) getProvider().getDatabaseHelper(); @@ -2928,51 +2947,6 @@ public class CalendarProvider2Test extends AndroidTestCase { assertEquals(1, result); } - public void testInsertOriginalTimezoneInExtProperties() throws Exception { - int calId = insertCal("Calendar0", DEFAULT_TIMEZONE); - - - EventInfo[] events = { new EventInfo("normal0", - "2008-05-01T00:00:00", - "2008-05-02T00:00:00", - false, - DEFAULT_TIMEZONE) }; - - Uri eventUri = insertEvent(calId, events[0]); - assertNotNull(eventUri); - - long eventId = ContentUris.parseId(eventUri); - assertTrue(eventId > -1); - - // check the inserted event - checkEvent(1, events[0].mTitle, events[0].mDtstart, events[0].mDtend, events[0].mAllDay); - - // Should have 1 calendars and 1 event - testQueryCount(CalendarContract.Calendars.CONTENT_URI, null /* where */, 1); - testQueryCount(CalendarContract.Events.CONTENT_URI, null /* where */, 1); - - // Verify that the original timezone is correct - Cursor cursor = mResolver.query(CalendarContract.ExtendedProperties.CONTENT_URI, - null/* projection */, - "event_id=" + eventId, - null /* selectionArgs */, - null /* sortOrder */); - try { - // Should have 1 extended property for the original timezone - assertEquals(1, cursor.getCount()); - - if (cursor.moveToFirst()) { - long id = cursor.getLong(1); - assertEquals(id, eventId); - - assertEquals(CalendarProvider2.EXT_PROP_ORIGINAL_TIMEZONE, cursor.getString(2)); - assertEquals(DEFAULT_TIMEZONE, cursor.getString(3)); - } - } finally { - cursor.close(); - } - } - /** * Verifies that the number of defined calendars meets expectations. * |