From 94b10b530c0fc297e2974e57e094c500d3ee6003 Mon Sep 17 00:00:00 2001 From: Chiao Cheng Date: Fri, 17 Aug 2012 16:59:12 -0700 Subject: Initial move of dialer features from contacts app. Bug: 6993891 Change-Id: I758ce359ca7e87a1d184303822979318be171921 --- .../android/dialer/PhoneCallDetailsHelperTest.java | 328 +++++++++++++++++++++ 1 file changed, 328 insertions(+) create mode 100644 tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java (limited to 'tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java') diff --git a/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java b/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java new file mode 100644 index 000000000..961764475 --- /dev/null +++ b/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java @@ -0,0 +1,328 @@ +/* + * 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; + +import android.content.Context; +import android.content.res.Resources; +import android.provider.CallLog.Calls; +import android.test.AndroidTestCase; +import android.text.Html; +import android.text.Spanned; +import android.view.View; +import android.widget.TextView; + +import com.android.dialer.calllog.CallTypeHelper; +import com.android.dialer.calllog.PhoneNumberHelper; +import com.android.dialer.calllog.TestPhoneNumberHelper; +import com.android.dialer.util.LocaleTestUtils; +import com.android.internal.telephony.CallerInfo; + +import java.util.GregorianCalendar; +import java.util.Locale; + +/** + * Unit tests for {@link PhoneCallDetailsHelper}. + */ +public class PhoneCallDetailsHelperTest extends AndroidTestCase { + /** The number to be used to access the voicemail. */ + private static final String TEST_VOICEMAIL_NUMBER = "125"; + /** The date of the call log entry. */ + private static final long TEST_DATE = + new GregorianCalendar(2011, 5, 3, 13, 0, 0).getTimeInMillis(); + /** A test duration value for phone calls. */ + private static final long TEST_DURATION = 62300; + /** The number of the caller/callee in the log entry. */ + private static final String TEST_NUMBER = "14125555555"; + /** The formatted version of {@link #TEST_NUMBER}. */ + private static final String TEST_FORMATTED_NUMBER = "1-412-255-5555"; + /** The country ISO name used in the tests. */ + private static final String TEST_COUNTRY_ISO = "US"; + /** The geocoded location used in the tests. */ + private static final String TEST_GEOCODE = "United States"; + + /** The object under test. */ + private PhoneCallDetailsHelper mHelper; + /** The views to fill. */ + private PhoneCallDetailsViews mViews; + private TextView mNameView; + private PhoneNumberHelper mPhoneNumberHelper; + private LocaleTestUtils mLocaleTestUtils; + + @Override + protected void setUp() throws Exception { + super.setUp(); + Context context = getContext(); + Resources resources = context.getResources(); + CallTypeHelper callTypeHelper = new CallTypeHelper(resources); + mPhoneNumberHelper = new TestPhoneNumberHelper(resources, TEST_VOICEMAIL_NUMBER); + mHelper = new PhoneCallDetailsHelper(resources, callTypeHelper, mPhoneNumberHelper); + mHelper.setCurrentTimeForTest( + new GregorianCalendar(2011, 5, 4, 13, 0, 0).getTimeInMillis()); + mViews = PhoneCallDetailsViews.createForTest(context); + mNameView = new TextView(context); + mLocaleTestUtils = new LocaleTestUtils(getContext()); + mLocaleTestUtils.setLocale(Locale.US); + } + + @Override + protected void tearDown() throws Exception { + mLocaleTestUtils.restoreLocale(); + mNameView = null; + mViews = null; + mHelper = null; + mPhoneNumberHelper = null; + super.tearDown(); + } + + public void testSetPhoneCallDetails_Unknown() { + setPhoneCallDetailsWithNumber(CallerInfo.UNKNOWN_NUMBER, CallerInfo.UNKNOWN_NUMBER); + assertNameEqualsResource(R.string.unknown); + } + + public void testSetPhoneCallDetails_Private() { + setPhoneCallDetailsWithNumber(CallerInfo.PRIVATE_NUMBER, CallerInfo.PRIVATE_NUMBER); + assertNameEqualsResource(R.string.private_num); + } + + public void testSetPhoneCallDetails_Payphone() { + setPhoneCallDetailsWithNumber(CallerInfo.PAYPHONE_NUMBER, CallerInfo.PAYPHONE_NUMBER); + assertNameEqualsResource(R.string.payphone); + } + + public void testSetPhoneCallDetails_Voicemail() { + setPhoneCallDetailsWithNumber(TEST_VOICEMAIL_NUMBER, TEST_VOICEMAIL_NUMBER); + assertNameEqualsResource(R.string.voicemail); + } + + public void testSetPhoneCallDetails_Normal() { + setPhoneCallDetailsWithNumber("14125551212", "1-412-555-1212"); + assertEquals("yesterday", mViews.callTypeAndDate.getText().toString()); + assertEqualsHtml("yesterday", + mViews.callTypeAndDate.getText()); + } + + /** Asserts that a char sequence is actually a Spanned corresponding to the expected HTML. */ + private void assertEqualsHtml(String expectedHtml, CharSequence actualText) { + // In order to contain HTML, the text should actually be a Spanned. + assertTrue(actualText instanceof Spanned); + Spanned actualSpanned = (Spanned) actualText; + // Convert from and to HTML to take care of alternative formatting of HTML. + assertEquals(Html.toHtml(Html.fromHtml(expectedHtml)), Html.toHtml(actualSpanned)); + + } + + public void testSetPhoneCallDetails_Date() { + mHelper.setCurrentTimeForTest( + new GregorianCalendar(2011, 5, 3, 13, 0, 0).getTimeInMillis()); + + setPhoneCallDetailsWithDate( + new GregorianCalendar(2011, 5, 3, 13, 0, 0).getTimeInMillis()); + assertDateEquals("0 mins ago"); + + setPhoneCallDetailsWithDate( + new GregorianCalendar(2011, 5, 3, 12, 0, 0).getTimeInMillis()); + assertDateEquals("1 hour ago"); + + setPhoneCallDetailsWithDate( + new GregorianCalendar(2011, 5, 2, 13, 0, 0).getTimeInMillis()); + assertDateEquals("yesterday"); + + setPhoneCallDetailsWithDate( + new GregorianCalendar(2011, 5, 1, 13, 0, 0).getTimeInMillis()); + assertDateEquals("2 days ago"); + } + + public void testSetPhoneCallDetails_CallTypeIcons() { + setPhoneCallDetailsWithCallTypeIcons(Calls.INCOMING_TYPE); + assertCallTypeIconsEquals(Calls.INCOMING_TYPE); + + setPhoneCallDetailsWithCallTypeIcons(Calls.OUTGOING_TYPE); + assertCallTypeIconsEquals(Calls.OUTGOING_TYPE); + + setPhoneCallDetailsWithCallTypeIcons(Calls.MISSED_TYPE); + assertCallTypeIconsEquals(Calls.MISSED_TYPE); + + setPhoneCallDetailsWithCallTypeIcons(Calls.VOICEMAIL_TYPE); + assertCallTypeIconsEquals(Calls.VOICEMAIL_TYPE); + } + + public void testSetPhoneCallDetails_MultipleCallTypeIcons() { + setPhoneCallDetailsWithCallTypeIcons(Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE); + assertCallTypeIconsEquals(Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE); + + setPhoneCallDetailsWithCallTypeIcons(Calls.MISSED_TYPE, Calls.MISSED_TYPE); + assertCallTypeIconsEquals(Calls.MISSED_TYPE, Calls.MISSED_TYPE); + } + + public void testSetPhoneCallDetails_MultipleCallTypeIconsLastOneDropped() { + setPhoneCallDetailsWithCallTypeIcons(Calls.MISSED_TYPE, Calls.MISSED_TYPE, + Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE); + assertCallTypeIconsEqualsPlusOverflow("(4)", + Calls.MISSED_TYPE, Calls.MISSED_TYPE, Calls.INCOMING_TYPE); + } + + public void testSetPhoneCallDetails_Geocode() { + setPhoneCallDetailsWithNumberAndGeocode("+14125555555", "1-412-555-5555", "Pennsylvania"); + assertNameEquals("1-412-555-5555"); // The phone number is shown as the name. + assertNumberEquals("Pennsylvania"); // The geocode is shown as the number. + } + + public void testSetPhoneCallDetails_NoGeocode() { + setPhoneCallDetailsWithNumberAndGeocode("+14125555555", "1-412-555-5555", null); + assertNameEquals("1-412-555-5555"); // The phone number is shown as the name. + assertNumberEquals("-"); // The empty geocode is shown as the number. + } + + public void testSetPhoneCallDetails_EmptyGeocode() { + setPhoneCallDetailsWithNumberAndGeocode("+14125555555", "1-412-555-5555", ""); + assertNameEquals("1-412-555-5555"); // The phone number is shown as the name. + assertNumberEquals("-"); // The empty geocode is shown as the number. + } + + public void testSetPhoneCallDetails_NoGeocodeForVoicemail() { + setPhoneCallDetailsWithNumberAndGeocode(TEST_VOICEMAIL_NUMBER, "", "United States"); + assertNumberEquals("-"); // The empty geocode is shown as the number. + } + + public void testSetPhoneCallDetails_Highlighted() { + setPhoneCallDetailsWithNumber(TEST_VOICEMAIL_NUMBER, ""); + } + + public void testSetCallDetailsHeader_NumberOnly() { + setCallDetailsHeaderWithNumberOnly(TEST_NUMBER); + assertEquals(View.VISIBLE, mNameView.getVisibility()); + assertEquals("Add to contacts", mNameView.getText().toString()); + } + + public void testSetCallDetailsHeader_UnknownNumber() { + setCallDetailsHeaderWithNumberOnly(CallerInfo.UNKNOWN_NUMBER); + assertEquals(View.VISIBLE, mNameView.getVisibility()); + assertEquals("Unknown", mNameView.getText().toString()); + } + + public void testSetCallDetailsHeader_PrivateNumber() { + setCallDetailsHeaderWithNumberOnly(CallerInfo.PRIVATE_NUMBER); + assertEquals(View.VISIBLE, mNameView.getVisibility()); + assertEquals("Private number", mNameView.getText().toString()); + } + + public void testSetCallDetailsHeader_PayphoneNumber() { + setCallDetailsHeaderWithNumberOnly(CallerInfo.PAYPHONE_NUMBER); + assertEquals(View.VISIBLE, mNameView.getVisibility()); + assertEquals("Pay phone", mNameView.getText().toString()); + } + + public void testSetCallDetailsHeader_VoicemailNumber() { + setCallDetailsHeaderWithNumberOnly(TEST_VOICEMAIL_NUMBER); + assertEquals(View.VISIBLE, mNameView.getVisibility()); + assertEquals("Voicemail", mNameView.getText().toString()); + } + + public void testSetCallDetailsHeader() { + setCallDetailsHeader("John Doe"); + assertEquals(View.VISIBLE, mNameView.getVisibility()); + assertEquals("John Doe", mNameView.getText().toString()); + } + + /** Asserts that the name text field contains the value of the given string resource. */ + private void assertNameEqualsResource(int resId) { + assertNameEquals(getContext().getString(resId)); + } + + /** Asserts that the name text field contains the given string value. */ + private void assertNameEquals(String text) { + assertEquals(text, mViews.nameView.getText().toString()); + } + + /** Asserts that the number text field contains the given string value. */ + private void assertNumberEquals(String text) { + assertEquals(text, mViews.numberView.getText().toString()); + } + + /** Asserts that the date text field contains the given string value. */ + private void assertDateEquals(String text) { + assertEquals(text, mViews.callTypeAndDate.getText().toString()); + } + + /** Asserts that the call type contains the images with the given drawables. */ + private void assertCallTypeIconsEquals(int... ids) { + assertEquals(ids.length, mViews.callTypeIcons.getCount()); + for (int index = 0; index < ids.length; ++index) { + int id = ids[index]; + assertEquals(id, mViews.callTypeIcons.getCallType(index)); + } + assertEquals(View.VISIBLE, mViews.callTypeIcons.getVisibility()); + assertEquals("yesterday", mViews.callTypeAndDate.getText().toString()); + } + + /** + * Asserts that the call type contains the images with the given drawables and shows the given + * text next to the icons. + */ + private void assertCallTypeIconsEqualsPlusOverflow(String overflowText, int... ids) { + assertEquals(ids.length, mViews.callTypeIcons.getCount()); + for (int index = 0; index < ids.length; ++index) { + int id = ids[index]; + assertEquals(id, mViews.callTypeIcons.getCallType(index)); + } + assertEquals(View.VISIBLE, mViews.callTypeIcons.getVisibility()); + assertEquals(overflowText + " yesterday", mViews.callTypeAndDate.getText().toString()); + } + + /** Sets the phone call details with default values and the given number. */ + private void setPhoneCallDetailsWithNumber(String number, String formattedNumber) { + setPhoneCallDetailsWithNumberAndGeocode(number, formattedNumber, TEST_GEOCODE); + } + + /** Sets the phone call details with default values and the given number. */ + private void setPhoneCallDetailsWithNumberAndGeocode(String number, String formattedNumber, + String geocodedLocation) { + mHelper.setPhoneCallDetails(mViews, + new PhoneCallDetails(number, formattedNumber, TEST_COUNTRY_ISO, geocodedLocation, + new int[]{ Calls.VOICEMAIL_TYPE }, TEST_DATE, TEST_DURATION), + true); + } + + /** Sets the phone call details with default values and the given date. */ + private void setPhoneCallDetailsWithDate(long date) { + mHelper.setPhoneCallDetails(mViews, + new PhoneCallDetails(TEST_NUMBER, TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, + TEST_GEOCODE, new int[]{ Calls.INCOMING_TYPE }, date, TEST_DURATION), + false); + } + + /** Sets the phone call details with default values and the given call types using icons. */ + private void setPhoneCallDetailsWithCallTypeIcons(int... callTypes) { + mHelper.setPhoneCallDetails(mViews, + new PhoneCallDetails(TEST_NUMBER, TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, + TEST_GEOCODE, callTypes, TEST_DATE, TEST_DURATION), + false); + } + + private void setCallDetailsHeaderWithNumberOnly(String number) { + mHelper.setCallDetailsHeader(mNameView, + new PhoneCallDetails(number, TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, + TEST_GEOCODE, new int[]{ Calls.INCOMING_TYPE }, TEST_DATE, TEST_DURATION)); + } + + private void setCallDetailsHeader(String name) { + mHelper.setCallDetailsHeader(mNameView, + new PhoneCallDetails(TEST_NUMBER, TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, + TEST_GEOCODE, new int[]{ Calls.INCOMING_TYPE }, TEST_DATE, TEST_DURATION, + name, 0, "", null, null)); + } +} -- cgit v1.2.3