summaryrefslogtreecommitdiff
path: root/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
diff options
context:
space:
mode:
authorChiao Cheng <chiaocheng@google.com>2012-08-17 16:59:12 -0700
committerChiao Cheng <chiaocheng@google.com>2012-08-21 13:31:19 -0700
commit94b10b530c0fc297e2974e57e094c500d3ee6003 (patch)
treeb74d663c2663b5db2f6da888081648ce054480f5 /tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
parentdab5cd8890c0d0ca9001a13c2197114a4002338a (diff)
Initial move of dialer features from contacts app.
Bug: 6993891 Change-Id: I758ce359ca7e87a1d184303822979318be171921
Diffstat (limited to 'tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java')
-rw-r--r--tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java328
1 files changed, 328 insertions, 0 deletions
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("<font color='#33b5e5'><b>yesterday</b></font>",
+ 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));
+ }
+}