From 2c39bea963856aaab76716dd2da7540be0562a8e Mon Sep 17 00:00:00 2001 From: Sarmad Hashmi Date: Thu, 17 Mar 2016 18:26:25 -0700 Subject: Fix dialer crash on unknown number call. +Number is set to empty string if null +Added 11 tests for getContactInfo method, mainly testing various combinations of inputs BUG=27725458 BUG=27724999 Change-Id: Ic64fbdb7490a3c07145310cf02249555bfc963a3 --- .../dialer/calllog/CallLogNotificationsHelper.java | 5 +- .../calllog/CallLogNotificationsHelperTest.java | 137 +++++++++++++++++++++ 2 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 tests/src/com/android/dialer/calllog/CallLogNotificationsHelperTest.java diff --git a/src/com/android/dialer/calllog/CallLogNotificationsHelper.java b/src/com/android/dialer/calllog/CallLogNotificationsHelper.java index 189263199..9a5028460 100644 --- a/src/com/android/dialer/calllog/CallLogNotificationsHelper.java +++ b/src/com/android/dialer/calllog/CallLogNotificationsHelper.java @@ -16,6 +16,8 @@ package com.android.dialer.calllog; +import com.google.common.base.Strings; + import android.Manifest; import android.content.ContentResolver; import android.content.ContentUris; @@ -112,12 +114,13 @@ public class CallLogNotificationsHelper { * Otherwise attempt to look it up in the cache. * If that fails, fall back to displaying the number. */ - public @NonNull ContactInfo getContactInfo(@Nullable String number, int numberPresentation, + public ContactInfo getContactInfo(@Nullable String number, int numberPresentation, @Nullable String countryIso) { if (countryIso == null) { countryIso = mCurrentCountryIso; } + number = Strings.nullToEmpty(number); ContactInfo contactInfo = new ContactInfo(); contactInfo.number = number; contactInfo.formattedNumber = PhoneNumberUtils.formatNumber(number, countryIso); diff --git a/tests/src/com/android/dialer/calllog/CallLogNotificationsHelperTest.java b/tests/src/com/android/dialer/calllog/CallLogNotificationsHelperTest.java new file mode 100644 index 000000000..b5950d8b8 --- /dev/null +++ b/tests/src/com/android/dialer/calllog/CallLogNotificationsHelperTest.java @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2016 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.calllog; + +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import android.provider.CallLog; +import android.test.AndroidTestCase; + +import com.android.dialer.R; + +/** + * Unit tests for {@link CallLogNotificationsHelper}. + */ +public class CallLogNotificationsHelperTest extends AndroidTestCase { + private static final String TEST_COUNTRY_ISO = "US"; + private static final String TEST_VALID_NUMBER = "14125555555"; + private static final String TEST_INVALID_NUMBER = "asdna128937123"; + private static final String TEST_FORMATTED_NUMBER = "1 412-555-5555"; + private static final String TEST_E164_NUMBER = "+14125555555"; + + private final ContactInfoHelper mContactInfoHelper = mock(ContactInfoHelper.class); + + private CallLogNotificationsHelper mCallLogNotificationsHelper; + + @Override + public void setUp() throws Exception { + super.setUp(); + mCallLogNotificationsHelper = new CallLogNotificationsHelper(getContext(), + null, null, mContactInfoHelper, TEST_COUNTRY_ISO); + } + + public void testGetContactInfo_ValidNumberValidPresentationValidIso() { + ContactInfo contactInfo = getContactInfo( + TEST_VALID_NUMBER, CallLog.Calls.PRESENTATION_UNKNOWN, TEST_COUNTRY_ISO); + assertEquals(TEST_VALID_NUMBER, contactInfo.number); + assertEquals(mContext.getResources().getString(R.string.unknown), contactInfo.name); + assertEquals(TEST_E164_NUMBER, contactInfo.normalizedNumber); + } + + public void testGetContactInfo_ValidNumberInvalidPresentationValidIso() { + ContactInfo contactInfo = getContactInfo(TEST_VALID_NUMBER, -1, TEST_COUNTRY_ISO); + assertEquals(TEST_VALID_NUMBER, contactInfo.number); + assertEquals(TEST_FORMATTED_NUMBER, contactInfo.name); + assertEquals(TEST_E164_NUMBER, contactInfo.normalizedNumber); + } + + public void testGetContactInfo_ValidNumberValidPresentationNullIso() { + ContactInfo contactInfo = getContactInfo( + TEST_VALID_NUMBER, CallLog.Calls.PRESENTATION_UNKNOWN, null); + assertEquals(TEST_VALID_NUMBER, contactInfo.number); + assertEquals(mContext.getResources().getString(R.string.unknown), contactInfo.name); + assertEquals(TEST_E164_NUMBER, contactInfo.normalizedNumber); + } + + public void testGetContactInfo_ValidNumberInvalidPresentationNullIso() { + ContactInfo contactInfo = getContactInfo( + TEST_VALID_NUMBER, -1, null); + assertEquals(TEST_VALID_NUMBER, contactInfo.number); + assertEquals(TEST_FORMATTED_NUMBER, contactInfo.name); + assertEquals(TEST_E164_NUMBER, contactInfo.normalizedNumber); + } + + public void testGetContactInfo_NullNumberValidPresentationValidIso() { + ContactInfo contactInfo = getContactInfo( + null, CallLog.Calls.PRESENTATION_UNKNOWN, TEST_COUNTRY_ISO); + assertEquals("", contactInfo.number); + assertEquals(mContext.getResources().getString(R.string.unknown), contactInfo.name); + assertNull(contactInfo.normalizedNumber); + } + + public void testGetContactInfo_NullNumberInvalidPresentationValidIso() { + ContactInfo contactInfo = getContactInfo(null, -1, TEST_COUNTRY_ISO); + assertEquals("", contactInfo.number); + assertEquals(mContext.getResources().getString(R.string.unknown), contactInfo.name); + assertNull(contactInfo.normalizedNumber); + } + + public void testGetContactInfo_NullNumberValidPresentationNullIso() { + ContactInfo contactInfo = getContactInfo(null, CallLog.Calls.PRESENTATION_RESTRICTED, null); + assertEquals("", contactInfo.number); + assertEquals(mContext.getResources().getString(R.string.private_num), contactInfo.name); + assertNull(contactInfo.normalizedNumber); + } + + public void testGetContactInfo_NullNumberInValidPresentationNullIso() { + ContactInfo contactInfo = getContactInfo(null, -1, null); + assertEquals("", contactInfo.number); + assertEquals(mContext.getResources().getString(R.string.unknown), contactInfo.name); + assertNull(contactInfo.normalizedNumber); + } + + public void testGetContactInfo_InvalidNumberInValidPresentationNullIso() { + ContactInfo contactInfo = getContactInfo(TEST_INVALID_NUMBER, -1, null); + assertEquals(TEST_INVALID_NUMBER, contactInfo.name); + assertEquals(TEST_INVALID_NUMBER, contactInfo.formattedNumber); + assertEquals(null, contactInfo.normalizedNumber); + } + + public void testGetContactInfo_NonNullCachedLookup() { + when(mContactInfoHelper.lookupNumber(anyString(), anyString())).thenReturn(null); + ContactInfo contactInfo = getContactInfo(TEST_VALID_NUMBER, -1, TEST_COUNTRY_ISO); + assertEquals(TEST_VALID_NUMBER, contactInfo.number); + assertEquals(TEST_FORMATTED_NUMBER, contactInfo.formattedNumber); + } + + public void testGetContactInfo_NullCachedLookup() { + ContactInfo cachedContactInfo = new ContactInfo(); + cachedContactInfo.number = TEST_VALID_NUMBER; + cachedContactInfo.formattedNumber = TEST_FORMATTED_NUMBER; + when(mContactInfoHelper.lookupNumber(anyString(), anyString())) + .thenReturn(cachedContactInfo); + ContactInfo contactInfo = getContactInfo(TEST_VALID_NUMBER, -1, TEST_COUNTRY_ISO); + assertEquals(TEST_VALID_NUMBER, contactInfo.number); + assertEquals(TEST_FORMATTED_NUMBER, contactInfo.name); + } + + private ContactInfo getContactInfo(String number, int presentation, String countryIso) { + return mCallLogNotificationsHelper.getContactInfo(number, presentation, countryIso); + } +} -- cgit v1.2.3