diff options
author | Sam Blitzstein <sblitz@google.com> | 2013-02-26 15:58:00 -0800 |
---|---|---|
committer | Sam Blitzstein <sblitz@google.com> | 2013-03-06 15:59:21 -0800 |
commit | b6b9cb4a6db19538b6d8ba3ad3cb26d2d7385a63 (patch) | |
tree | a8cfb699d1f060f3d90404b1d62c57ad64280983 /tests | |
parent | 8de796dfd3a1dad6cb386077e785d09fc02bec7b (diff) | |
download | android_packages_apps_Calendar-b6b9cb4a6db19538b6d8ba3ad3cb26d2d7385a63.tar.gz android_packages_apps_Calendar-b6b9cb4a6db19538b6d8ba3ad3cb26d2d7385a63.tar.bz2 android_packages_apps_Calendar-b6b9cb4a6db19538b6d8ba3ad3cb26d2d7385a63.zip |
Resolving test errors.
Bug: 6917799
Bug: 4903558
Bug: 3495689
Bug: 3466973
Bug: 3465425
Bug: 3066073
Bug: 3465363
Change-Id: I32888bb812ee286bec9a37326d02c80106b4575d
Diffstat (limited to 'tests')
5 files changed, 208 insertions, 218 deletions
diff --git a/tests/src/com/android/calendar/AsyncQueryServiceTest.java b/tests/src/com/android/calendar/AsyncQueryServiceTest.java index bcba7db0..70dbde34 100644 --- a/tests/src/com/android/calendar/AsyncQueryServiceTest.java +++ b/tests/src/com/android/calendar/AsyncQueryServiceTest.java @@ -27,11 +27,14 @@ import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.content.Intent; +import android.content.res.Resources; import android.database.Cursor; import android.net.Uri; import android.os.Handler; import android.os.HandlerThread; import android.os.Message; +import android.test.IsolatedContext; +import android.test.RenamingDelegatingContext; import android.test.ServiceTestCase; import android.test.mock.MockContentResolver; import android.test.mock.MockContext; @@ -41,6 +44,7 @@ import android.test.suitebuilder.annotation.SmallTest; import android.test.suitebuilder.annotation.Smoke; import android.util.Log; +import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.concurrent.Semaphore; @@ -81,6 +85,23 @@ public class AsyncQueryServiceTest extends ServiceTestCase<AsyncQueryServiceHelp super.setUp(); } + private class MockContext2 extends MockContext { + @Override + public Resources getResources() { + return getContext().getResources(); + } + + @Override + public File getDir(String name, int mode) { + return getContext().getDir("mockcontext2_+" + name, mode); + } + + @Override + public Context getApplicationContext() { + return this; + } + } + @Smoke @SmallTest public void testQuery() throws Exception { @@ -402,8 +423,17 @@ public class AsyncQueryServiceTest extends ServiceTestCase<AsyncQueryServiceHelp @Override public ContentResolver getContentResolver() { if (mResolver == null) { - ContentProvider provider = new TestProvider(work); mResolver = new MockContentResolver(); + + final String filenamePrefix = "test."; + RenamingDelegatingContext targetContextWrapper = new RenamingDelegatingContext( + new MockContext2(), getContext(), filenamePrefix); + IsolatedContext providerContext = + new IsolatedContext(mResolver, targetContextWrapper); + + ContentProvider provider = new TestProvider(work); + provider.attachInfo(providerContext, null); + mResolver.addProvider(AUTHORITY, provider); } return mResolver; diff --git a/tests/src/com/android/calendar/FormatDateRangeTest.java b/tests/src/com/android/calendar/FormatDateRangeTest.java index d6f5684b..1ba3ecc8 100644 --- a/tests/src/com/android/calendar/FormatDateRangeTest.java +++ b/tests/src/com/android/calendar/FormatDateRangeTest.java @@ -75,7 +75,7 @@ public class FormatDateRangeTest extends AndroidTestCase { new DateTest(0, 10, 9, 8, 0, 0, 10, 9, 11, 0, DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "8am \u2013 11am"), new DateTest(0, 10, 9, 8, 0, 0, 10, 9, 11, 0, - DateUtils.FORMAT_SHOW_TIME, "8:00am \u2013 11:00am"), + DateUtils.FORMAT_SHOW_TIME, "8:00AM \u2013 11:00AM"), new DateTest(0, 10, 9, 8, 0, 0, 10, 9, 17, 0, DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_24HOUR, "08:00 \u2013 17:00"), new DateTest(0, 10, 9, 8, 0, 0, 10, 9, 12, 0, @@ -87,7 +87,7 @@ public class FormatDateRangeTest extends AndroidTestCase { DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_CAP_NOON | DateUtils.FORMAT_ABBREV_ALL, "8am \u2013 Noon"), new DateTest(0, 10, 9, 10, 30, 0, 10, 9, 13, 0, - DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "10:30am \u2013 1pm"), + DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "10:30AM \u2013 1pm"), new DateTest(0, 10, 9, 13, 0, 0, 10, 9, 14, 0, DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_ALL, "1pm \u2013 2pm"), new DateTest(0, 10, 9, 0, 0, 0, 10, 9, 14, 0, @@ -155,7 +155,7 @@ public class FormatDateRangeTest extends AndroidTestCase { "Fri, Nov 9, 2007, 8am \u2013 Sun, Nov 11, 2007, 5pm"), new DateTest(2007, 11, 3, 13, 0, 2007, 11, 3, 14, 0, DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR, - "1:00pm \u2013 2:00pm, December 3, 2007"), + "1:00PM \u2013 2:00PM, December 3, 2007"), // Tests that FORMAT_SHOW_YEAR takes precedence over FORMAT_NO_YEAR: new DateTest(2007, 11, 3, 13, 0, 2007, 11, 3, 13, 0, DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR | DateUtils.FORMAT_NO_YEAR, diff --git a/tests/src/com/android/calendar/UtilsTests.java b/tests/src/com/android/calendar/UtilsTests.java index ed3efc0d..492a06fd 100644 --- a/tests/src/com/android/calendar/UtilsTests.java +++ b/tests/src/com/android/calendar/UtilsTests.java @@ -508,14 +508,14 @@ public class UtilsTests extends TestCase { long end = createTimeInMillis(0, 0, 18, 12, 3, 2000); String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, false, dbUtils.getContext()); - assertEquals("Wednesday, April 12, 2000, 5:00pm \u2013 6:00pm", result); + assertEquals("Wednesday, April 12, 2000, 5:00PM \u2013 6:00PM", result); // 12/31/2012 5pm - 1/1/2013 6pm start = createTimeInMillis(0, 0, 17, 31, 11, 2012); end = createTimeInMillis(0, 0, 18, 1, 0, 2013); result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, false, dbUtils.getContext()); - assertEquals("Mon, Dec 31, 2012, 5:00pm – Tue, Jan 1, 2013, 6:00pm", result); + assertEquals("Mon, Dec 31, 2012, 5:00PM – Tue, Jan 1, 2013, 6:00PM", result); } @SmallTest @@ -525,7 +525,7 @@ public class UtilsTests extends TestCase { long end = createTimeInMillis(0, 0, 18, 12, 3, 2012); String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, false, dbUtils.getContext()); - assertEquals("Thursday, April 12, 5:00pm \u2013 6:00pm", result); + assertEquals("Thursday, April 12, 2012, 5:00PM \u2013 6:00PM", result); } @SmallTest @@ -535,7 +535,7 @@ public class UtilsTests extends TestCase { long end = createTimeInMillis(0, 0, 18, NOW_DAY, NOW_MONTH, NOW_YEAR); String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, false, dbUtils.getContext()); - assertEquals("Today at 5:00pm \u2013 6:00pm", result); + assertEquals("Today at 5:00PM \u2013 6:00PM", result); } @SmallTest @@ -545,17 +545,17 @@ public class UtilsTests extends TestCase { long end = createTimeInMillis(0, 0, 0, NOW_DAY + 1, NOW_MONTH, NOW_YEAR); String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, false, dbUtils.getContext()); - assertEquals("Today at 5:00pm \u2013 midnight", result); + assertEquals("Today at 5:00PM \u2013 midnight", result); } @SmallTest public void testGetDisplayedDatetime_tomorrow() { - // 4/11/2012 12:01am - 4/11/2012 11:59pm + // 4/11/2012 12:01AM - 4/11/2012 11:59pm long start = createTimeInMillis(0, 1, 0, NOW_DAY + 1, NOW_MONTH, NOW_YEAR); long end = createTimeInMillis(0, 59, 23, NOW_DAY + 1, NOW_MONTH, NOW_YEAR); String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, false, dbUtils.getContext()); - assertEquals("Tomorrow at 12:01am \u2013 11:59pm", result); + assertEquals("Tomorrow at 12:01AM \u2013 11:59PM", result); } @SmallTest @@ -565,32 +565,32 @@ public class UtilsTests extends TestCase { long end = createTimeInMillis(0, 0, 18, 9, 3, 2012); String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, false, dbUtils.getContext()); - assertEquals("Monday, April 9, 5:00pm \u2013 6:00pm", result); + assertEquals("Monday, April 9, 2012, 5:00PM \u2013 6:00PM", result); } @SmallTest public void testGetDisplayedDatetime_multiDay() { - // 4/10/2012 12:01am - 4/11/2012 12:01am + // 4/10/2012 12:01AM - 4/11/2012 12:01AM long start = createTimeInMillis(0, 1, 0, NOW_DAY, NOW_MONTH, NOW_YEAR); long end = createTimeInMillis(0, 1, 0, NOW_DAY + 1, NOW_MONTH, NOW_YEAR); String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, false, dbUtils.getContext()); - assertEquals("Tue, Apr 10, 12:01am \u2013 Wed, Apr 11, 12:01am", result); + assertEquals("Tue, Apr 10, 2012, 12:01AM \u2013 Wed, Apr 11, 2012, 12:01AM", result); } @SmallTest public void testGetDisplayedDatetime_allDay() { - // 4/2/2012 12:00am - 4/3/2012 12:00am + // 4/2/2012 12:00AM - 4/3/2012 12:00AM long start = createTimeInMillis(0, 0, 0, 2, 3, NOW_YEAR, Time.TIMEZONE_UTC); long end = createTimeInMillis(0, 0, 0, 3, 3, NOW_YEAR, Time.TIMEZONE_UTC); String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, true, dbUtils.getContext()); - assertEquals("Monday, April 2", result); + assertEquals("Monday, April 2, 2012", result); } @SmallTest public void testGetDisplayedDatetime_allDayToday() { - // 4/10/2012 12:00am - 4/11/2012 12:00am + // 4/10/2012 12:00AM - 4/11/2012 12:00AM long start = createTimeInMillis(0, 0, 0, NOW_DAY, NOW_MONTH, NOW_YEAR, Time.TIMEZONE_UTC); long end = createTimeInMillis(0, 0, 0, NOW_DAY + 1, NOW_MONTH, NOW_YEAR, Time.TIMEZONE_UTC); String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, @@ -600,12 +600,12 @@ public class UtilsTests extends TestCase { @SmallTest public void testGetDisplayedDatetime_allDayMultiday() { - // 4/10/2012 12:00am - 4/13/2012 12:00am + // 4/10/2012 12:00AM - 4/13/2012 12:00AM long start = createTimeInMillis(0, 0, 0, NOW_DAY, NOW_MONTH, NOW_YEAR, Time.TIMEZONE_UTC); long end = createTimeInMillis(0, 0, 0, NOW_DAY + 3, NOW_MONTH, NOW_YEAR, Time.TIMEZONE_UTC); String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, DEFAULT_TIMEZONE, true, dbUtils.getContext()); - assertEquals("Tuesday, April 10 \u2013 Thursday, April 12", result); + assertEquals("Tuesday, April 10, 2012 \u2013 Thursday, April 12, 2012", result); } @SmallTest @@ -619,7 +619,7 @@ public class UtilsTests extends TestCase { long end = createTimeInMillis(0, 0, 18, 12, 3, 2012, eventTz); String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, localTz, false, dbUtils.getContext()); - assertEquals("Thursday, April 12, 8:00pm \u2013 9:00pm", result); + assertEquals("Thursday, April 12, 2012, 8:00PM \u2013 9:00PM", result); } @SmallTest @@ -627,12 +627,12 @@ public class UtilsTests extends TestCase { String localTz = "America/New_York"; setTimezone(localTz); - // 4/2/2012 12:00am - 4/3/2012 12:00am + // 4/2/2012 12:00AM - 4/3/2012 12:00AM long start = createTimeInMillis(0, 0, 0, 2, 3, NOW_YEAR, Time.TIMEZONE_UTC); long end = createTimeInMillis(0, 0, 0, 3, 3, NOW_YEAR, Time.TIMEZONE_UTC); String result = Utils.getDisplayedDatetime(start, end, NOW_TIME, localTz, true, dbUtils.getContext()); - assertEquals("Monday, April 2", result); + assertEquals("Monday, April 2, 2012", result); } @SmallTest @@ -640,7 +640,7 @@ public class UtilsTests extends TestCase { String localTz = "America/New_York"; setTimezone(localTz); - // 4/2/2012 12:00am - 4/3/2012 12:00am + // 4/2/2012 12:00AM - 4/3/2012 12:00AM long start = createTimeInMillis(0, 0, 0, NOW_DAY + 1, NOW_MONTH, NOW_YEAR, Time.TIMEZONE_UTC); long end = createTimeInMillis(0, 0, 0, NOW_DAY + 2, NOW_MONTH, NOW_YEAR, diff --git a/tests/src/com/android/calendar/event/EditEventHelperTest.java b/tests/src/com/android/calendar/event/EditEventHelperTest.java index a6794f7f..a758141b 100644 --- a/tests/src/com/android/calendar/event/EditEventHelperTest.java +++ b/tests/src/com/android/calendar/event/EditEventHelperTest.java @@ -42,9 +42,11 @@ import com.android.calendar.AsyncQueryService; import com.android.calendar.CalendarEventModel; import com.android.calendar.CalendarEventModel.ReminderEntry; import com.android.calendar.R; +import com.android.calendar.Utils; import com.android.common.Rfc822Validator; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.LinkedHashSet; import java.util.TimeZone; @@ -69,11 +71,14 @@ public class EditEventHelperTest extends AndroidTestCase { private static final int SAVE_EVENT_FIRST_TO_RECUR = 9; private static final int SAVE_EVENT_ALLFOLLOW_TO_RECUR = 10; + /* These should match up with EditEventHelper.EVENT_PROJECTION. + * Note that spaces and commas have been removed to allow for easier sanitation. + */ private static String[] TEST_CURSOR_DATA = new String[] { Integer.toString(TEST_EVENT_ID), // 0 _id - "The Question", // 1 title - "Evaluating Life, the Universe, and Everything",// 2 description - "Earth Mk2", // 3 location + "The_Question", // 1 title + "Evaluating_Life_the_Universe_and_Everything", // 2 description + "Earth_Mk2", // 3 location "1", // 4 All Day "0", // 5 Has alarm "2", // 6 Calendar id @@ -82,17 +87,20 @@ public class EditEventHelperTest extends AndroidTestCase { "P3652421990D", // 9 duration, (10 million years) "UTC", // 10 event timezone "FREQ=DAILY;WKST=SU", // 11 rrule - "unique per calendar stuff", // 12 sync id - "0", // 13 transparency - "3", // 14 visibility + "unique_per_calendar_stuff", // 12 sync id + "0", // 13 transparency/availability + "3", // 14 visibility/access level "steve@gmail.com", // 15 owner account "1", // 16 has attendee data null, //17 originalSyncId "organizer@gmail.com", // 18 organizer "0", // 19 guest can modify - null, // 20 original id - "1" // event status - }; // These should match up with EditEventHelper.EVENT_PROJECTION + "-1", // 20 original id + "1", // 21 event status + "-339611", // 22 calendar color + "-2350809", // 23 event color + "11" // 24 event color key + }; private static final String AUTHORITY_URI = "content://EditEventHelperAuthority/"; private static final String AUTHORITY = "EditEventHelperAuthority"; @@ -103,10 +111,17 @@ public class EditEventHelperTest extends AndroidTestCase { private static final String TEST_ADDRESSES2 = "no good, ad1@email.com, \"First Last\" <first@email.com> (comment), " + "different@email.bit"; + private static final String TEST_ADDRESSES3 = + "ad1@email.com, \"First Last\" <first@email.com> (comment), " + + "different@email.bit"; + private static final String TEST_ADDRESSES4 = + "ad1@email.com, \"First Last\" <first@email.com> (comment), " + + "one.two.three@email.grue"; private static final String TAG = "EEHTest"; + private Rfc822Validator mEmailValidator; private CalendarEventModel mModel1; private CalendarEventModel mModel2; @@ -128,6 +143,8 @@ public class EditEventHelperTest extends AndroidTestCase { time.set(TEST_END); time.timezone = LOCAL_TZ; TEST_END2 = time.normalize(true); + + mEmailValidator = new Rfc822Validator(null); } private class MockAbsCalendarActivity extends AbstractCalendarActivity { @@ -230,6 +247,15 @@ public class EditEventHelperTest extends AndroidTestCase { expectedOps.add(b.build()); } + private void addOwnerAttendeeToOps(ArrayList<ContentProviderOperation> expectedOps) { + addOwnerAttendee(); + mExpectedValues.put(Attendees.EVENT_ID, TEST_EVENT_ID); + ContentProviderOperation.Builder b; + b = ContentProviderOperation.newInsert(Attendees.CONTENT_URI).withValues(mExpectedValues); + expectedOps.add(b.build()); + } + + // Some tests set the time values to one day later, this does that move in the values private void moveExpectedTimeValuesForwardOneDay() { long dayInMs = EditEventHelper.DAY_IN_SECONDS*1000; @@ -246,10 +272,10 @@ public class EditEventHelperTest extends AndroidTestCase { expectedOps.add(b.build()); mExpectedValues.clear(); - mExpectedValues.put(Attendees.ATTENDEE_NAME, (String)null); + mExpectedValues.put(Attendees.ATTENDEE_NAME, "different@email.bit"); mExpectedValues.put(Attendees.ATTENDEE_EMAIL, "different@email.bit"); mExpectedValues.put(Attendees.ATTENDEE_RELATIONSHIP, Attendees.RELATIONSHIP_ATTENDEE); - mExpectedValues.put(Attendees.ATTENDEE_TYPE, Attendees.TYPE_NONE); + mExpectedValues.put(Attendees.ATTENDEE_TYPE, Attendees.TYPE_REQUIRED); mExpectedValues.put(Attendees.ATTENDEE_STATUS, Attendees.ATTENDEE_STATUS_NONE); mExpectedValues.put(Attendees.EVENT_ID, TEST_EVENT_ID); b = ContentProviderOperation @@ -263,7 +289,7 @@ public class EditEventHelperTest extends AndroidTestCase { mExpectedValues.clear(); mExpectedValues.put(Attendees.ATTENDEE_EMAIL, mModel1.mOwnerAccount); mExpectedValues.put(Attendees.ATTENDEE_RELATIONSHIP, Attendees.RELATIONSHIP_ORGANIZER); - mExpectedValues.put(Attendees.ATTENDEE_TYPE, Attendees.TYPE_NONE); + mExpectedValues.put(Attendees.ATTENDEE_TYPE, Attendees.TYPE_REQUIRED); mExpectedValues.put(Attendees.ATTENDEE_STATUS, Attendees.ATTENDEE_STATUS_ACCEPTED); } @@ -274,10 +300,10 @@ public class EditEventHelperTest extends AndroidTestCase { boolean newEvent, int id) { ContentProviderOperation.Builder b; mExpectedValues.clear(); - mExpectedValues.put(Attendees.ATTENDEE_NAME, (String)null); + mExpectedValues.put(Attendees.ATTENDEE_NAME, "ad1@email.com"); mExpectedValues.put(Attendees.ATTENDEE_EMAIL, "ad1@email.com"); mExpectedValues.put(Attendees.ATTENDEE_RELATIONSHIP, Attendees.RELATIONSHIP_ATTENDEE); - mExpectedValues.put(Attendees.ATTENDEE_TYPE, Attendees.TYPE_NONE); + mExpectedValues.put(Attendees.ATTENDEE_TYPE, Attendees.TYPE_REQUIRED); mExpectedValues.put(Attendees.ATTENDEE_STATUS, Attendees.ATTENDEE_STATUS_NONE); if (newEvent) { @@ -297,7 +323,7 @@ public class EditEventHelperTest extends AndroidTestCase { mExpectedValues.put(Attendees.ATTENDEE_NAME, "First Last"); mExpectedValues.put(Attendees.ATTENDEE_EMAIL, "first@email.com"); mExpectedValues.put(Attendees.ATTENDEE_RELATIONSHIP, Attendees.RELATIONSHIP_ATTENDEE); - mExpectedValues.put(Attendees.ATTENDEE_TYPE, Attendees.TYPE_NONE); + mExpectedValues.put(Attendees.ATTENDEE_TYPE, Attendees.TYPE_REQUIRED); mExpectedValues.put(Attendees.ATTENDEE_STATUS, Attendees.ATTENDEE_STATUS_NONE); if (newEvent) { @@ -314,10 +340,10 @@ public class EditEventHelperTest extends AndroidTestCase { ops.add(b.build()); mExpectedValues.clear(); - mExpectedValues.put(Attendees.ATTENDEE_NAME, (String)null); + mExpectedValues.put(Attendees.ATTENDEE_NAME, "different@email.bit"); mExpectedValues.put(Attendees.ATTENDEE_EMAIL, "different@email.bit"); mExpectedValues.put(Attendees.ATTENDEE_RELATIONSHIP, Attendees.RELATIONSHIP_ATTENDEE); - mExpectedValues.put(Attendees.ATTENDEE_TYPE, Attendees.TYPE_NONE); + mExpectedValues.put(Attendees.ATTENDEE_TYPE, Attendees.TYPE_REQUIRED); mExpectedValues.put(Attendees.ATTENDEE_STATUS, Attendees.ATTENDEE_STATUS_NONE); if (newEvent) { @@ -368,7 +394,7 @@ public class EditEventHelperTest extends AndroidTestCase { mHelper = new EditEventHelper(mActivity, null); mModel1 = buildTestModel(); -// mModel1.mAttendees = TEST_ADDRESSES2; + mModel1.addAttendees(TEST_ADDRESSES2, mEmailValidator); mCurrentSaveTest = SAVE_EVENT_NEW_EVENT; assertTrue(mHelper.saveEvent(mModel1, null, 0)); @@ -406,7 +432,7 @@ public class EditEventHelperTest extends AndroidTestCase { mModel1 = buildTestModel(); mModel2 = buildTestModel(); -// mModel1.mAttendees = TEST_ADDRESSES2; + mModel1.addAttendees(TEST_ADDRESSES2, mEmailValidator); // Updating a recurring event with a new attendee list mModel1.mUri = (AUTHORITY_URI + TEST_EVENT_ID); @@ -414,8 +440,7 @@ public class EditEventHelperTest extends AndroidTestCase { mModel1.mOriginalStart = TEST_START; // The original model is assumed correct so drop the no good bit -// mModel2.mAttendees = "ad1@email.com, \"First Last\" <first@email.com> (comment), " + -// "one.two.three@email.grue"; + mModel2.addAttendees(TEST_ADDRESSES4, null); mCurrentSaveTest = SAVE_EVENT_MOD_RECUR; assertTrue(mHelper.saveEvent(mModel1, mModel2, EditEventHelper.MODIFY_ALL)); @@ -437,6 +462,7 @@ public class EditEventHelperTest extends AndroidTestCase { mHelper.saveReminders(expectedOps, TEST_EVENT_ID, mModel1.mReminders, mModel2.mReminders, false); + addOwnerAttendeeToOps(expectedOps); addAttendeeChangesOps(expectedOps); assertEquals(ops, expectedOps); @@ -452,7 +478,7 @@ public class EditEventHelperTest extends AndroidTestCase { mModel1 = buildTestModel(); mModel2 = buildTestModel(); -// mModel1.mAttendees = TEST_ADDRESSES2; + mModel1.addAttendees(TEST_ADDRESSES2, mEmailValidator); // Updating a recurring event with a new attendee list mModel1.mUri = (AUTHORITY_URI + TEST_EVENT_ID); @@ -460,8 +486,7 @@ public class EditEventHelperTest extends AndroidTestCase { mModel1.mOriginalStart = TEST_START; // The original model is assumed correct so drop the no good bit -// mModel2.mAttendees = "ad1@email.com, \"First Last\" <first@email.com> (comment), " + -// "one.two.three@email.grue"; + mModel2.addAttendees(TEST_ADDRESSES4, null); // Replace an existing recurring event with a non-recurring event mModel1.mRrule = null; @@ -508,7 +533,7 @@ public class EditEventHelperTest extends AndroidTestCase { mModel1 = buildTestModel(); mModel2 = buildTestModel(); -// mModel1.mAttendees = TEST_ADDRESSES2; + mModel1.addAttendees(TEST_ADDRESSES2, mEmailValidator); // Updating a recurring event with a new attendee list mModel1.mUri = (AUTHORITY_URI + TEST_EVENT_ID); @@ -516,8 +541,7 @@ public class EditEventHelperTest extends AndroidTestCase { mModel1.mOriginalStart = TEST_START; // The original model is assumed correct so drop the no good bit -// mModel2.mAttendees = "ad1@email.com, \"First Last\" <first@email.com> (comment), " + -// "one.two.three@email.grue"; + mModel2.addAttendees(TEST_ADDRESSES4, null); mModel2.mRrule = null; mModel2.mEnd = TEST_END; @@ -542,7 +566,7 @@ public class EditEventHelperTest extends AndroidTestCase { mModel1 = buildTestModel(); mModel2 = buildTestModel(); -// mModel1.mAttendees = TEST_ADDRESSES2; + mModel1.addAttendees(TEST_ADDRESSES2, mEmailValidator); // Updating a recurring event with a new attendee list mModel1.mUri = (AUTHORITY_URI + TEST_EVENT_ID); @@ -550,8 +574,7 @@ public class EditEventHelperTest extends AndroidTestCase { mModel1.mOriginalStart = TEST_START; // The original model is assumed correct so drop the no good bit -// mModel2.mAttendees = "ad1@email.com, \"First Last\" <first@email.com> (comment), " + -// "one.two.three@email.grue"; + mModel2.addAttendees(TEST_ADDRESSES4, null); mModel2.mRrule = null; mModel2.mEnd = TEST_END2; @@ -575,6 +598,7 @@ public class EditEventHelperTest extends AndroidTestCase { // This call has a separate unit test so we'll use it to simplify making the expected vals mHelper.saveReminders(expectedOps, TEST_EVENT_ID, mModel1.mReminders, mModel2.mReminders, false); + addOwnerAttendeeToOps(expectedOps); addAttendeeChangesOps(expectedOps); assertEquals(ops, expectedOps); @@ -590,15 +614,14 @@ public class EditEventHelperTest extends AndroidTestCase { mModel1 = buildTestModel(); mModel2 = buildTestModel(); -// mModel1.mAttendees = TEST_ADDRESSES2; + mModel1.addAttendees(TEST_ADDRESSES2, mEmailValidator); mModel1.mUri = (AUTHORITY_URI + TEST_EVENT_ID); // And a new start time to ensure the time fields aren't removed mModel1.mOriginalStart = TEST_START; // The original model is assumed correct so drop the no good bit -// mModel2.mAttendees = "ad1@email.com, \"First Last\" <first@email.com> (comment), " + -// "one.two.three@email.grue"; + mModel2.addAttendees(TEST_ADDRESSES4, null); // Modify the second instance of the event long dayInMs = EditEventHelper.DAY_IN_SECONDS*1000; @@ -652,14 +675,13 @@ public class EditEventHelperTest extends AndroidTestCase { mModel1 = buildTestModel(); mModel2 = buildTestModel(); -// mModel1.mAttendees = TEST_ADDRESSES2; + mModel1.addAttendees(TEST_ADDRESSES2, mEmailValidator); mModel1.mUri = (AUTHORITY_URI + TEST_EVENT_ID); mModel2.mUri = (AUTHORITY_URI + TEST_EVENT_ID); // The original model is assumed correct so drop the no good bit -// mModel2.mAttendees = "ad1@email.com, \"First Last\" <first@email.com> (comment), " + -// "one.two.three@email.grue"; + mModel2.addAttendees(TEST_ADDRESSES4, null); // Modify the second instance of the event long dayInMs = EditEventHelper.DAY_IN_SECONDS*1000; @@ -709,7 +731,7 @@ public class EditEventHelperTest extends AndroidTestCase { mModel1 = buildTestModel(); mModel2 = buildTestModel(); -// mModel1.mAttendees = TEST_ADDRESSES2; + mModel1.addAttendees(TEST_ADDRESSES2, mEmailValidator); mModel1.mUri = (AUTHORITY_URI + TEST_EVENT_ID); mModel2.mUri = mModel1.mUri; @@ -717,8 +739,7 @@ public class EditEventHelperTest extends AndroidTestCase { mModel1.mOriginalStart = TEST_START; // The original model is assumed correct so drop the no good bit -// mModel2.mAttendees = "ad1@email.com, \"First Last\" <first@email.com> (comment), " + -// "one.two.three@email.grue"; + mModel2.addAttendees(TEST_ADDRESSES3, null); // Move the event one day but keep original start set to the first instance long dayInMs = EditEventHelper.DAY_IN_SECONDS*1000; @@ -768,7 +789,7 @@ public class EditEventHelperTest extends AndroidTestCase { mModel1 = buildTestModel(); mModel2 = buildTestModel(); -// mModel1.mAttendees = TEST_ADDRESSES2; + mModel1.addAttendees(TEST_ADDRESSES2, mEmailValidator); mModel1.mUri = (AUTHORITY_URI + TEST_EVENT_ID); mModel2.mUri = mModel1.mUri; @@ -776,8 +797,7 @@ public class EditEventHelperTest extends AndroidTestCase { mModel1.mOriginalStart = TEST_START; // The original model is assumed correct so drop the no good bit -// mModel2.mAttendees = "ad1@email.com, \"First Last\" <first@email.com> (comment), " + -// "one.two.three@email.grue"; + mModel2.addAttendees(TEST_ADDRESSES4, null); // Move the event one day but keep original start set to the first instance long dayInMs = EditEventHelper.DAY_IN_SECONDS*1000; @@ -807,6 +827,7 @@ public class EditEventHelperTest extends AndroidTestCase { mHelper.saveReminders(expectedOps, TEST_EVENT_ID, mModel1.mReminders, mModel2.mReminders, true); + addOwnerAttendeeToOps(expectedOps); addAttendeeChangesOps(expectedOps); assertEquals(ops, expectedOps); @@ -824,14 +845,13 @@ public class EditEventHelperTest extends AndroidTestCase { mModel1 = buildTestModel(); mModel2 = buildTestModel(); -// mModel1.mAttendees = TEST_ADDRESSES2; + mModel1.addAttendees(TEST_ADDRESSES2, mEmailValidator); mModel1.mUri = (AUTHORITY_URI + TEST_EVENT_ID); mModel2.mUri = (AUTHORITY_URI + TEST_EVENT_ID); // The original model is assumed correct so drop the no good bit -// mModel2.mAttendees = "ad1@email.com, \"First Last\" <first@email.com> (comment), " + -// "one.two.three@email.grue"; + mModel2.addAttendees(TEST_ADDRESSES4, null); // Move the event one day and the original start so it references the second instance long dayInMs = EditEventHelper.DAY_IN_SECONDS*1000; @@ -1449,8 +1469,8 @@ public class EditEventHelperTest extends AndroidTestCase { assertEquals(size, actual.size()); for (int i = 0; i < size; i++) { - assertTrue("At index " + i + ", expected:\n" + String.valueOf(expected) + - "\nActual:\n" + String.valueOf(actual), + assertTrue("At index " + i + ", expected:\n" + String.valueOf(expected.get(i)) + + "\nActual:\n" + String.valueOf(actual.get(i)), cpoEquals(expected.get(i), actual.get(i))); } @@ -1467,7 +1487,49 @@ public class EditEventHelperTest extends AndroidTestCase { return false; } - return TextUtils.equals(cpo1.toString(), cpo2.toString()); + // It turns out we can't trust the toString() of the ContentProviderOperations to be + // consistent, so we have to do the comparison manually. + // + // Start by splitting by commas, so that we can compare each key-value pair individually. + String[] operations1 = cpo1.toString().split(","); + String[] operations2 = cpo2.toString().split(","); + // The two numbers of operations must be equal. + if (operations1.length != operations2.length) { + return false; + } + // Iterate through the key-value pairs and separate out the key and value. + // The value may be either a single string, or a series of further key-value pairs + // that are separated by " ", with a "=" between the key and value. + for (int i = 0; i < operations1.length; i++) { + String operation1 = operations1[i]; + String operation2 = operations2[i]; + // Limit the array to length 2 in case a ":" appears in the value. + String[] keyValue1 = operation1.split(":", 2); + String[] keyValue2 = operation2.split(":", 2); + // If the key doesn't match, return false. + if (!keyValue1[0].equals(keyValue2[0])) { + return false; + } + // First just check if the value matches up. If so, we're good to go. + if (keyValue1[1].equals(keyValue2[1])) { + continue; + } + // If not, we need to try splitting the value by " " and sorting those keyvalue pairs. + // Note that these are trimmed first to ensure we're not thrown off by extra whitespace. + String[] valueKeyValuePairs1 = keyValue1[1].trim().split(" "); + String[] valueKeyValuePairs2 = keyValue2[1].trim().split(" "); + // Sort the value's keyvalue pairs alphabetically, and now compare them to each other. + Arrays.sort(valueKeyValuePairs1); + Arrays.sort(valueKeyValuePairs2); + for (int j = 0; j < valueKeyValuePairs1.length; j++) { + if (!valueKeyValuePairs1[j].equals(valueKeyValuePairs2[j])) { + return false; + } + } + } + + // If we make it all the way through without finding anything different, return true. + return true; } // Generates a default model for testing. Should match up with @@ -1475,9 +1537,9 @@ public class EditEventHelperTest extends AndroidTestCase { private CalendarEventModel buildTestModel() { CalendarEventModel model = new CalendarEventModel(); model.mId = TEST_EVENT_ID; - model.mTitle = "The Question"; - model.mDescription = "Evaluating Life, the Universe, and Everything"; - model.mLocation = "Earth Mk2"; + model.mTitle = "The_Question"; + model.mDescription = "Evaluating_Life_the_Universe_and_Everything"; + model.mLocation = "Earth_Mk2"; model.mAllDay = true; model.mHasAlarm = false; model.mCalendarId = 2; @@ -1486,14 +1548,22 @@ public class EditEventHelperTest extends AndroidTestCase { // The model uses the local timezone for allday model.mTimezone = "UTC"; model.mRrule = "FREQ=DAILY;WKST=SU"; - model.mSyncId = "unique per calendar stuff"; + model.mSyncId = "unique_per_calendar_stuff"; model.mAvailability = 0; model.mAccessLevel = 2; // This is one less than the values written if >0 model.mOwnerAccount = "steve@gmail.com"; model.mHasAttendeeData = true; - model.mEventStatus = Events.STATUS_CONFIRMED; model.mOrganizer = "organizer@gmail.com"; + model.mIsOrganizer = false; model.mGuestsCanModify = false; + model.mEventStatus = Events.STATUS_CONFIRMED; + int displayColor = Utils.getDisplayColorFromColor(-2350809); + model.mEventColor = displayColor; + model.mCalendarAccountName = "steve.owner@gmail.com"; + model.mCalendarAccountType = "gmail.com"; + EventColorCache cache = new EventColorCache(); + cache.insertColor("steve.owner@gmail.com", "gmail.com", displayColor, 12); + model.mEventColorCache = cache; model.mModelUpdatedWithEventCursor = true; return model; } @@ -1506,7 +1576,7 @@ public class EditEventHelperTest extends AndroidTestCase { values.put(Events.CALENDAR_ID, 2L); values.put(Events.EVENT_TIMEZONE, "UTC"); // Allday events are converted // to UTC for the db - values.put(Events.TITLE, "The Question"); + values.put(Events.TITLE, "The_Question"); values.put(Events.ALL_DAY, 1); values.put(Events.DTSTART, TEST_START); // Monday, May 3rd, midnight UTC time values.put(Events.HAS_ATTENDEE_DATA, 1); @@ -1514,12 +1584,13 @@ public class EditEventHelperTest extends AndroidTestCase { values.put(Events.RRULE, "FREQ=DAILY;WKST=SU"); values.put(Events.DURATION, "P3652421990D"); values.put(Events.DTEND, (Long) null); - values.put(Events.DESCRIPTION, "Evaluating Life, the Universe, and Everything"); - values.put(Events.EVENT_LOCATION, "Earth Mk2"); + values.put(Events.DESCRIPTION, "Evaluating_Life_the_Universe_and_Everything"); + values.put(Events.EVENT_LOCATION, "Earth_Mk2"); values.put(Events.AVAILABILITY, 0); values.put(Events.STATUS, Events.STATUS_CONFIRMED); values.put(Events.ACCESS_LEVEL, 3); // This is one more than the model if // >0 + values.put(Events.EVENT_COLOR_KEY, 12); return values; } diff --git a/tests/src/com/android/calendar/widget/CalendarAppWidgetServiceTest.java b/tests/src/com/android/calendar/widget/CalendarAppWidgetServiceTest.java index c66565b2..20be9d4d 100644 --- a/tests/src/com/android/calendar/widget/CalendarAppWidgetServiceTest.java +++ b/tests/src/com/android/calendar/widget/CalendarAppWidgetServiceTest.java @@ -20,6 +20,7 @@ package com.android.calendar.widget; import com.android.calendar.widget.CalendarAppWidgetModel.EventInfo; import com.android.calendar.widget.CalendarAppWidgetService.CalendarFactory; +import android.content.Context; import android.database.MatrixCursor; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.SmallTest; @@ -38,8 +39,7 @@ 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) + long now; final long ONE_MINUTE = 60000; final long ONE_HOUR = 60 * ONE_MINUTE; final long HALF_HOUR = ONE_HOUR / 2; @@ -75,6 +75,15 @@ public class CalendarAppWidgetServiceTest extends AndroidTestCase { 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 @@ -100,7 +109,7 @@ public class CalendarAppWidgetServiceTest extends AndroidTestCase { eventInfo.visibWhen = View.VISIBLE; eventInfo.visibWhere = View.VISIBLE; eventInfo.visibTitle = View.VISIBLE; - eventInfo.when = "3am"; + eventInfo.when = "3am – 4am"; eventInfo.where = location; eventInfo.title = title; expected.mEventInfos.add(eventInfo); @@ -112,55 +121,9 @@ public class CalendarAppWidgetServiceTest extends AndroidTestCase { 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) + public void testGetAppWidgetModel_AllDayEventLater() throws Exception { + Context context = getContext(); CalendarAppWidgetModel expected = new CalendarAppWidgetModel(getContext(), Time .getCurrentTimezone()); MatrixCursor cursor = new MatrixCursor(CalendarAppWidgetService.EVENT_PROJECTION, 0); @@ -172,111 +135,37 @@ public class CalendarAppWidgetServiceTest extends AndroidTestCase { 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.when = "3am – 4am"; 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)); + // 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); - // 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.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); - - 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)); + cursor.addRow(getRow(1, start, end, title + i, location + i, 0)); // Test CalendarAppWidgetModel actual = CalendarAppWidgetService.CalendarFactory.buildAppWidgetModel( - getContext(), cursor, Time.getCurrentTimezone()); + context, cursor, Time.getCurrentTimezone()); assertEquals(expected.toString(), actual.toString()); } |