/*
* Copyright (C) 2009 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.contacts;
import android.content.ContentValues;
import android.content.Intent;
import android.net.Uri;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Im;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.LargeTest;
/**
* Tests for {@link ContactsUtils}.
*/
@LargeTest
public class ContactsUtilsTests extends AndroidTestCase {
private static final String TEST_ADDRESS = "user@example.org";
private static final String TEST_PROTOCOL = "prot%col";
public void testImIntent() throws Exception {
// Normal IM is appended as path
final ContentValues values = new ContentValues();
values.put(Im.MIMETYPE, Im.CONTENT_ITEM_TYPE);
values.put(Im.TYPE, Im.TYPE_HOME);
values.put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK);
values.put(Im.DATA, TEST_ADDRESS);
final Intent intent = ContactsUtils.buildImIntent(values);
assertEquals(Intent.ACTION_SENDTO, intent.getAction());
final Uri data = intent.getData();
assertEquals("imto", data.getScheme());
assertEquals("gtalk", data.getAuthority());
assertEquals(TEST_ADDRESS, data.getPathSegments().get(0));
}
public void testImIntentCustom() throws Exception {
// Custom IM types have encoded authority
final ContentValues values = new ContentValues();
values.put(Im.MIMETYPE, Im.CONTENT_ITEM_TYPE);
values.put(Im.TYPE, Im.TYPE_HOME);
values.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
values.put(Im.CUSTOM_PROTOCOL, TEST_PROTOCOL);
values.put(Im.DATA, TEST_ADDRESS);
final Intent intent = ContactsUtils.buildImIntent(values);
assertEquals(Intent.ACTION_SENDTO, intent.getAction());
final Uri data = intent.getData();
assertEquals("imto", data.getScheme());
assertEquals(TEST_PROTOCOL, data.getAuthority());
assertEquals(TEST_ADDRESS, data.getPathSegments().get(0));
}
public void testImEmailIntent() throws Exception {
// Email addresses are treated as Google Talk entries
final ContentValues values = new ContentValues();
values.put(Email.MIMETYPE, Email.CONTENT_ITEM_TYPE);
values.put(Email.TYPE, Email.TYPE_HOME);
values.put(Email.DATA, TEST_ADDRESS);
final Intent intent = ContactsUtils.buildImIntent(values);
assertEquals(Intent.ACTION_SENDTO, intent.getAction());
final Uri data = intent.getData();
assertEquals("imto", data.getScheme());
assertEquals("gtalk", data.getAuthority());
assertEquals(TEST_ADDRESS, data.getPathSegments().get(0));
}
public void testIsGraphicNull() throws Exception {
assertFalse(ContactsUtils.isGraphic(null));
}
public void testIsGraphicEmpty() throws Exception {
assertFalse(ContactsUtils.isGraphic(""));
}
public void testIsGraphicSpaces() throws Exception {
assertFalse(ContactsUtils.isGraphic(" "));
}
public void testIsGraphicPunctuation() throws Exception {
assertTrue(ContactsUtils.isGraphic("."));
}
public void testAreObjectsEqual() throws Exception {
assertTrue("null:null", ContactsUtils.areObjectsEqual(null, null));
assertTrue("1:1", ContactsUtils.areObjectsEqual(1, 1));
assertFalse("null:1", ContactsUtils.areObjectsEqual(null, 1));
assertFalse("1:null", ContactsUtils.areObjectsEqual(1, null));
assertFalse("1:2", ContactsUtils.areObjectsEqual(1, 2));
}
public void testShouldCollapse() throws Exception {
checkShouldCollapse("1", true, null, null, null, null);
checkShouldCollapse("2", true, "a", "b", "a", "b");
checkShouldCollapse("11", false, "a", null, null, null);
checkShouldCollapse("12", false, null, "a", null, null);
checkShouldCollapse("13", false, null, null, "a", null);
checkShouldCollapse("14", false, null, null, null, "a");
checkShouldCollapse("21", false, "a", "b", null, null);
checkShouldCollapse("22", false, "a", "b", "a", null);
checkShouldCollapse("23", false, "a", "b", null, "b");
checkShouldCollapse("24", false, "a", "b", "a", "x");
checkShouldCollapse("25", false, "a", "b", "x", "b");
checkShouldCollapse("31", false, null, null, "a", "b");
checkShouldCollapse("32", false, "a", null, "a", "b");
checkShouldCollapse("33", false, null, "b", "a", "b");
checkShouldCollapse("34", false, "a", "x", "a", "b");
checkShouldCollapse("35", false, "x", "b", "a", "b");
checkShouldCollapse("41", true, Phone.CONTENT_ITEM_TYPE, null, Phone.CONTENT_ITEM_TYPE,
null);
checkShouldCollapse("42", true, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, "1");
checkShouldCollapse("51", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE,
"2");
checkShouldCollapse("52", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE,
null);
checkShouldCollapse("53", false, Phone.CONTENT_ITEM_TYPE, null, Phone.CONTENT_ITEM_TYPE,
"2");
// Test phone numbers
checkShouldCollapse("60", true,
Phone.CONTENT_ITEM_TYPE, "1234567",
Phone.CONTENT_ITEM_TYPE, "1234567");
checkShouldCollapse("61", false,
Phone.CONTENT_ITEM_TYPE, "1234567",
Phone.CONTENT_ITEM_TYPE, "1234568");
checkShouldCollapse("62", true,
Phone.CONTENT_ITEM_TYPE, "1234567;0",
Phone.CONTENT_ITEM_TYPE, "1234567;0");
checkShouldCollapse("63", false,
Phone.CONTENT_ITEM_TYPE, "1234567;89321",
Phone.CONTENT_ITEM_TYPE, "1234567;321");
checkShouldCollapse("64", true,
Phone.CONTENT_ITEM_TYPE, "1234567;89321",
Phone.CONTENT_ITEM_TYPE, "1234567;89321");
checkShouldCollapse("65", false,
Phone.CONTENT_ITEM_TYPE, "1234567;0111111111",
Phone.CONTENT_ITEM_TYPE, "1234567;");
checkShouldCollapse("66", false,
Phone.CONTENT_ITEM_TYPE, "12345675426;91970xxxxx",
Phone.CONTENT_ITEM_TYPE, "12345675426");
checkShouldCollapse("67", false,
Phone.CONTENT_ITEM_TYPE, "12345675426;23456xxxxx",
Phone.CONTENT_ITEM_TYPE, "12345675426;234567xxxx");
checkShouldCollapse("68", true,
Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567",
Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567");
checkShouldCollapse("69", false,
Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567",
Phone.CONTENT_ITEM_TYPE, "1234567;1234567");
}
private void checkShouldCollapse(String message, boolean expected, CharSequence mimetype1,
CharSequence data1, CharSequence mimetype2, CharSequence data2) {
assertEquals(message, expected,
ContactsUtils.shouldCollapse(mContext, mimetype1, data1, mimetype2, data2));
}
public void testAreIntentActionEqual() throws Exception {
assertTrue("1", ContactsUtils.areIntentActionEqual(null, null));
assertTrue("1", ContactsUtils.areIntentActionEqual(new Intent("a"), new Intent("a")));
assertFalse("11", ContactsUtils.areIntentActionEqual(new Intent("a"), null));
assertFalse("12", ContactsUtils.areIntentActionEqual(null, new Intent("a")));
assertFalse("21", ContactsUtils.areIntentActionEqual(new Intent("a"), new Intent()));
assertFalse("22", ContactsUtils.areIntentActionEqual(new Intent(), new Intent("b")));
assertFalse("23", ContactsUtils.areIntentActionEqual(new Intent("a"), new Intent("b")));
}
}