The ArrayEquals, ArrayHashCode, ArrayToString, and ArraysAsListPrimitiveArray errorprone findings were demoted from errors to warnings. Fix existing occurrences of them so they can be made errors again. Bug: 242630963 Test: RUN_ERROR_PRONE=true m javac-check Change-Id: I8a507da97e99a7e86577fda91960dd477c0a6af4
307 lines
12 KiB
Java
307 lines
12 KiB
Java
/*
|
|
* Copyright (C) 2015 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.messaging.util;
|
|
|
|
import android.content.ContentProviderOperation;
|
|
import android.content.ContentValues;
|
|
import android.database.Cursor;
|
|
import android.net.Uri;
|
|
import android.provider.ContactsContract;
|
|
import android.provider.ContactsContract.Contacts;
|
|
import android.test.suitebuilder.annotation.LargeTest;
|
|
import android.text.TextUtils;
|
|
|
|
import com.android.messaging.BugleTestCase;
|
|
import com.android.messaging.FakeFactory;
|
|
|
|
import org.junit.Assert;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
/*
|
|
* Class for testing ContactUtil.
|
|
*/
|
|
@LargeTest
|
|
public class ContactUtilTest extends BugleTestCase {
|
|
private static final String TEST_NAME_PREFIX = "BugleTest:";
|
|
|
|
@Override
|
|
protected void setUp() throws Exception {
|
|
super.setUp();
|
|
|
|
// TODO: This test will actually mess with contacts on your phone.
|
|
// Ideally we would use a fake content provider to give us contact data...
|
|
FakeFactory.registerWithoutFakeContext(getTestContext());
|
|
|
|
// add test contacts.
|
|
addTestContact("John", "650-123-1233", "john@gmail.com", false);
|
|
addTestContact("Joe", "(650)123-1233", "joe@gmail.com", false);
|
|
addTestContact("Jim", "650 123 1233", "jim@gmail.com", false);
|
|
addTestContact("Samantha", "650-123-1235", "samantha@gmail.com", true);
|
|
addTestContact("Adrienne", "650-123-1236", "adrienne@gmail.com", true);
|
|
}
|
|
|
|
@Override
|
|
protected void tearDown() throws Exception {
|
|
deleteTestContacts();
|
|
super.tearDown();
|
|
}
|
|
|
|
/**
|
|
* Add a test contact based on contact name, phone and email.
|
|
*/
|
|
private void addTestContact(
|
|
final String name, final String phone, final String email, final boolean starred)
|
|
throws Exception {
|
|
final ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
|
|
|
|
ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
|
|
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
|
|
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
|
|
.build());
|
|
|
|
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
|
|
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
|
|
.withValue(ContactsContract.Data.MIMETYPE,
|
|
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
|
|
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
|
|
TEST_NAME_PREFIX + name).build());
|
|
|
|
if (phone != null) {
|
|
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
|
|
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
|
|
.withValue(ContactsContract.Data.MIMETYPE,
|
|
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
|
|
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone)
|
|
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
|
|
ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
|
|
.build());
|
|
}
|
|
|
|
if (email != null) {
|
|
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
|
|
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
|
|
.withValue(ContactsContract.Data.MIMETYPE,
|
|
ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
|
|
.withValue(ContactsContract.CommonDataKinds.Email.DATA, email)
|
|
.withValue(ContactsContract.CommonDataKinds.Email.TYPE,
|
|
ContactsContract.CommonDataKinds.Email.TYPE_WORK)
|
|
.build());
|
|
}
|
|
|
|
mContext.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
|
|
|
|
// Star the whole contact if needed.
|
|
if (starred) {
|
|
final ContentValues values = new ContentValues();
|
|
values.put(Contacts.STARRED, 1);
|
|
getContext().getContentResolver().update(Contacts.CONTENT_URI, values,
|
|
Contacts.DISPLAY_NAME + "= ?", new String[] { TEST_NAME_PREFIX + name });
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Remove test contacts added during test setup.
|
|
*/
|
|
private void deleteTestContacts() {
|
|
final Uri contactUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI,
|
|
Uri.encode(TEST_NAME_PREFIX));
|
|
final Cursor cur =
|
|
mContext.getContentResolver().query(contactUri, null, null, null, null);
|
|
try {
|
|
if (cur.moveToFirst()) {
|
|
do {
|
|
final String lookupKey = cur.getString(cur.getColumnIndex(Contacts.LOOKUP_KEY));
|
|
final Uri uri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey);
|
|
mContext.getContentResolver().delete(uri, null, null);
|
|
} while (cur.moveToNext());
|
|
}
|
|
} catch (final Exception e) {
|
|
LogUtil.e(LogUtil.BUGLE_TAG, "Failed to delete test contacts", e);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify ContactUtil.getPhone will return all phones, including the ones added for test.
|
|
*/
|
|
public void ingoredTestGetPhones() {
|
|
final Cursor cur = ContactUtil.getPhones(getContext())
|
|
.performSynchronousQuery();
|
|
|
|
LogUtil.i(LogUtil.BUGLE_TAG, "testGetPhones: Number of phones on the device:" +
|
|
cur.getCount());
|
|
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "John");
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Joe");
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Jim");
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Samantha");
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Adrienne");
|
|
}
|
|
|
|
/**
|
|
* Verify ContactUtil.filterPhone will work on name based matches.
|
|
*/
|
|
public void ingoredTestFilterPhonesByName() {
|
|
final Cursor cur = ContactUtil.filterPhones(getContext(), TEST_NAME_PREFIX)
|
|
.performSynchronousQuery();
|
|
|
|
if (cur.getCount() != 5) {
|
|
Assert.fail("Cursor should have size of 5");
|
|
return;
|
|
}
|
|
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "John");
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Joe");
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Jim");
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Samantha");
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Adrienne");
|
|
}
|
|
|
|
/**
|
|
* Verify ContactUtil.filterPhone will work on partial number matches.
|
|
*/
|
|
public void ingoredTestFilterPhonesByPartialNumber() {
|
|
final String[] filters = new String[] { "650123", "650-123", "(650)123", "650 123" };
|
|
|
|
for (final String filter : filters) {
|
|
final Cursor cur = ContactUtil.filterPhones(getContext(), filter)
|
|
.performSynchronousQuery();
|
|
|
|
LogUtil.i(LogUtil.BUGLE_TAG, "testFilterPhonesByPartialNumber: Number of phones:" +
|
|
cur.getCount());
|
|
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "John");
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Joe");
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Jim");
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Samantha");
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Adrienne");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify ContactUtil.filterPhone will work on full number matches.
|
|
*/
|
|
public void ingoredTestFilterPhonesByFullNumber() {
|
|
final String[] filters = new String[] {
|
|
"6501231233", "650-123-1233", "(650)123-1233", "650 123 1233" };
|
|
|
|
for (final String filter : filters) {
|
|
final Cursor cur = ContactUtil.filterPhones(getContext(), filter)
|
|
.performSynchronousQuery();
|
|
|
|
LogUtil.i(LogUtil.BUGLE_TAG, "testFilterPhonesByFullNumber: Number of phones:" +
|
|
cur.getCount());
|
|
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "John");
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Joe");
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Jim");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify ContactUtil.lookPhone will work on number including area code.
|
|
*/
|
|
public void ingoredTestLookupPhoneWithAreaCode() {
|
|
final String[] filters = new String[] {
|
|
"6501231233", "650-123-1233", "(650)123-1233", "650 123 1233" };
|
|
|
|
for (final String filter : filters) {
|
|
final Cursor cur = ContactUtil.lookupPhone(getContext(), filter)
|
|
.performSynchronousQuery();
|
|
|
|
LogUtil.i(LogUtil.BUGLE_TAG, "testLookupPhoneWithAreaCode: Number of phones:" +
|
|
cur.getCount());
|
|
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "John");
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Joe");
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Jim");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify ContactUtil.lookPhone will work on number without area code.
|
|
*/
|
|
public void ingoredTestLookupPhoneWithoutAreaCode() {
|
|
final String[] filters = new String[] {
|
|
"1231233", "123-1233", "123 1233" };
|
|
|
|
for (final String filter : filters) {
|
|
final Cursor cur = ContactUtil.lookupPhone(getContext(), filter)
|
|
.performSynchronousQuery();
|
|
|
|
LogUtil.i(LogUtil.BUGLE_TAG, "testLookupPhoneWithoutAreaCode: Number of phones:" +
|
|
cur.getCount());
|
|
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "John");
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Joe");
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Jim");
|
|
}
|
|
}
|
|
|
|
public void ingoredTestGetFrequentPhones() {
|
|
final Cursor cur = ContactUtil.getFrequentContacts(getContext())
|
|
.performSynchronousQuery();
|
|
|
|
LogUtil.i(LogUtil.BUGLE_TAG, "testGetFrequentPhones: Number of phones on the device:" +
|
|
cur.getCount());
|
|
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Samantha");
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "Adrienne");
|
|
}
|
|
|
|
/**
|
|
* Verify ContactUtil.filterEmails will work on partial email.
|
|
*/
|
|
public void ingoredTestFilterEmails() {
|
|
final Cursor cur = ContactUtil.filterEmails(getContext(), "john@")
|
|
.performSynchronousQuery();
|
|
|
|
LogUtil.i(LogUtil.BUGLE_TAG, "testFilterEmails: Number of emails:" +
|
|
cur.getCount());
|
|
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "John");
|
|
}
|
|
|
|
/**
|
|
* Verify ContactUtil.lookupEmail will work on full email.
|
|
*/
|
|
public void ingoredTestLookupEmail() {
|
|
final Cursor cur = ContactUtil.lookupEmail(getContext(), "john@gmail.com")
|
|
.performSynchronousQuery();
|
|
|
|
LogUtil.i(LogUtil.BUGLE_TAG, "testLookupEmail: Number of emails:" +
|
|
cur.getCount());
|
|
|
|
verifyCursorContains(cur, TEST_NAME_PREFIX + "John");
|
|
}
|
|
|
|
/**
|
|
* Utility method to check whether cursor contains a particular contact.
|
|
*/
|
|
private void verifyCursorContains(final Cursor cursor, final String nameToVerify) {
|
|
if (cursor.moveToFirst()) {
|
|
do {
|
|
final String name = cursor.getString(ContactUtil.INDEX_DISPLAY_NAME);
|
|
if (TextUtils.equals(name, nameToVerify)) {
|
|
return;
|
|
}
|
|
} while (cursor.moveToNext());
|
|
}
|
|
Assert.fail("Cursor should have " + nameToVerify);
|
|
}
|
|
}
|