From 9c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2 Mon Sep 17 00:00:00 2001 From: Chiao Cheng Date: Wed, 31 Oct 2012 11:12:12 -0700 Subject: Moving PhoneNumberInteraction from Contacts. Bug: 6993891 Change-Id: Id4701c00455de609850a5afea74e68c6bd84cbb3 --- .../interactions/PhoneNumberInteractionTest.java | 259 +++++++++++++++++++++ 1 file changed, 259 insertions(+) create mode 100644 tests/src/com/android/dialer/interactions/PhoneNumberInteractionTest.java (limited to 'tests') diff --git a/tests/src/com/android/dialer/interactions/PhoneNumberInteractionTest.java b/tests/src/com/android/dialer/interactions/PhoneNumberInteractionTest.java new file mode 100644 index 000000000..f86675e57 --- /dev/null +++ b/tests/src/com/android/dialer/interactions/PhoneNumberInteractionTest.java @@ -0,0 +1,259 @@ +/* + * Copyright (C) 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.dialer.interactions; + +import android.content.ContentUris; +import android.content.Context; +import android.content.DialogInterface.OnDismissListener; +import android.content.Intent; +import android.net.Uri; +import android.os.AsyncTask; +import android.provider.ContactsContract.CommonDataKinds.Phone; +import android.provider.ContactsContract.CommonDataKinds.SipAddress; +import android.provider.ContactsContract.Contacts; +import android.provider.ContactsContract.Data; +import android.provider.ContactsContract.RawContacts; +import android.test.InstrumentationTestCase; +import android.test.suitebuilder.annotation.SmallTest; + +import com.android.contacts.common.test.mocks.ContactsMockContext; +import com.android.contacts.common.test.mocks.MockContentProvider; +import com.android.contacts.common.test.mocks.MockContentProvider.Query; +import com.android.contacts.common.util.ContactDisplayUtils; +import com.android.dialer.interactions.PhoneNumberInteraction.PhoneItem; + +import java.util.ArrayList; +import java.util.List; + +/** + * Tests for {@link com.android.contacts.common.interactions.PhoneNumberInteraction}. + * + * Running all tests: + * + * runtest contacts + * or + * adb shell am instrument \ + * -w com.android.contacts.tests/android.test.InstrumentationTestRunner + */ +@SmallTest +public class PhoneNumberInteractionTest extends InstrumentationTestCase { + + static { + // AsyncTask class needs to be initialized on the main thread. + AsyncTask.init(); + } + + private final static class TestPhoneNumberInteraction extends PhoneNumberInteraction { + private ArrayList mPhoneList; + + public TestPhoneNumberInteraction(Context context, int interactionType, + OnDismissListener dismissListener) { + super(context, interactionType, dismissListener); + } + + @Override + void showDisambiguationDialog(ArrayList phoneList) { + this.mPhoneList = phoneList; + } + } + + private ContactsMockContext mContext; + private MockContentProvider mContactsProvider; + + @Override + protected void setUp() throws Exception { + super.setUp(); + mContext = new ContactsMockContext(getInstrumentation().getTargetContext()); + mContactsProvider = mContext.getContactsProvider(); + } + + @Override + protected void tearDown() throws Exception { + mContactsProvider.verify(); + super.tearDown(); + } + + public void testSendSmsWhenOnlyOneNumberAvailable() { + Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13); + expectQuery(contactUri) + .returnRow(1, "123", 0, null, null, Phone.TYPE_HOME, null, + Phone.CONTENT_ITEM_TYPE); + + TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction( + mContext, ContactDisplayUtils.INTERACTION_SMS, null); + + interaction.startInteraction(contactUri); + interaction.getLoader().waitForLoader(); + + Intent intent = mContext.getIntentForStartActivity(); + assertNotNull(intent); + + assertEquals(Intent.ACTION_SENDTO, intent.getAction()); + assertEquals("sms:123", intent.getDataString()); + } + + public void testSendSmsWhenDataIdIsProvided() { + Uri dataUri = ContentUris.withAppendedId(Data.CONTENT_URI, 1); + expectQuery(dataUri, true /* isDataUri */ ) + .returnRow(1, "987", 0, null, null, Phone.TYPE_HOME, null, + Phone.CONTENT_ITEM_TYPE); + + TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction( + mContext, ContactDisplayUtils.INTERACTION_SMS, null); + + interaction.startInteraction(dataUri); + interaction.getLoader().waitForLoader(); + + Intent intent = mContext.getIntentForStartActivity(); + assertNotNull(intent); + + assertEquals(Intent.ACTION_SENDTO, intent.getAction()); + assertEquals("sms:987", intent.getDataString()); + } + + public void testSendSmsWhenThereIsPrimaryNumber() { + Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13); + expectQuery(contactUri) + .returnRow( + 1, "123", 0, null, null, Phone.TYPE_HOME, null, Phone.CONTENT_ITEM_TYPE) + .returnRow( + 2, "456", 1, null, null, Phone.TYPE_HOME, null, Phone.CONTENT_ITEM_TYPE); + + TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction( + mContext, ContactDisplayUtils.INTERACTION_SMS, null); + + interaction.startInteraction(contactUri); + interaction.getLoader().waitForLoader(); + + Intent intent = mContext.getIntentForStartActivity(); + assertNotNull(intent); + + assertEquals(Intent.ACTION_SENDTO, intent.getAction()); + assertEquals("sms:456", intent.getDataString()); + } + + public void testShouldCollapseWith() { + PhoneNumberInteraction.PhoneItem phoneItem1 = new PhoneNumberInteraction.PhoneItem(); + PhoneNumberInteraction.PhoneItem phoneItem2 = new PhoneNumberInteraction.PhoneItem(); + + phoneItem1.phoneNumber = "123"; + phoneItem2.phoneNumber = "123"; + + assertTrue(phoneItem1.shouldCollapseWith(phoneItem2)); + + phoneItem1.phoneNumber = "123"; + phoneItem2.phoneNumber = "456"; + + assertFalse(phoneItem1.shouldCollapseWith(phoneItem2)); + + phoneItem1.phoneNumber = "123#,123"; + phoneItem2.phoneNumber = "123#,456"; + + assertFalse(phoneItem1.shouldCollapseWith(phoneItem2)); + } + + public void testCallNumberWhenThereAreDuplicates() { + Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13); + expectQuery(contactUri) + .returnRow(1, "123", 0, null, null, Phone.TYPE_HOME, null, + Phone.CONTENT_ITEM_TYPE) + .returnRow(2, "123", 0, null, null, Phone.TYPE_WORK, null, + Phone.CONTENT_ITEM_TYPE); + + TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction( + mContext, ContactDisplayUtils.INTERACTION_CALL, null); + + interaction.startInteraction(contactUri); + interaction.getLoader().waitForLoader(); + + Intent intent = mContext.getIntentForStartActivity(); + assertNotNull(intent); + + assertEquals(Intent.ACTION_CALL_PRIVILEGED, intent.getAction()); + assertEquals("tel:123", intent.getDataString()); + } + + public void testCallWithSip() { + Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13); + expectQuery(contactUri) + .returnRow(1, "example@example.com", 0, null, null, Phone.TYPE_HOME, null, + SipAddress.CONTENT_ITEM_TYPE); + TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction( + mContext, ContactDisplayUtils.INTERACTION_CALL, null); + + interaction.startInteraction(contactUri); + interaction.getLoader().waitForLoader(); + + Intent intent = mContext.getIntentForStartActivity(); + assertNotNull(intent); + + assertEquals(Intent.ACTION_CALL_PRIVILEGED, intent.getAction()); + assertEquals("sip:example%40example.com", intent.getDataString()); + } + + public void testShowDisambigDialogForCalling() { + Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13); + expectQuery(contactUri) + .returnRow(1, "123", 0, "account", null, Phone.TYPE_HOME, "label", + Phone.CONTENT_ITEM_TYPE) + .returnRow(2, "456", 0, null, null, Phone.TYPE_WORK, null, + Phone.CONTENT_ITEM_TYPE); + + TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction( + mContext, ContactDisplayUtils.INTERACTION_CALL, null); + + interaction.startInteraction(contactUri); + interaction.getLoader().waitForLoader(); + + List items = interaction.mPhoneList; + assertNotNull(items); + assertEquals(2, items.size()); + + PhoneItem item = items.get(0); + assertEquals(1, item.id); + assertEquals("123", item.phoneNumber); + assertEquals("account", item.accountType); + assertEquals(Phone.TYPE_HOME, item.type); + assertEquals("label", item.label); + } + + private Query expectQuery(Uri contactUri) { + return expectQuery(contactUri, false); + } + + private Query expectQuery(Uri uri, boolean isDataUri) { + final Uri dataUri; + if (isDataUri) { + dataUri = uri; + } else { + dataUri = Uri.withAppendedPath(uri, Contacts.Data.CONTENT_DIRECTORY); + } + return mContactsProvider + .expectQuery(dataUri) + .withProjection( + Phone._ID, + Phone.NUMBER, + Phone.IS_SUPER_PRIMARY, + RawContacts.ACCOUNT_TYPE, + RawContacts.DATA_SET, + Phone.TYPE, + Phone.LABEL, + Phone.MIMETYPE) + .withSelection("mimetype IN ('vnd.android.cursor.item/phone_v2'," + + " 'vnd.android.cursor.item/sip_address') AND data1 NOT NULL"); + } +} -- cgit v1.2.3