blob: a95a79e08550af2396824aea9c0c248de5891bb2 [file] [log] [blame]
/*
* Copyright (C) 2013 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.database;
import static com.android.dialer.database.DatabaseTestUtils.*;
import android.database.MatrixCursor;
import android.database.sqlite.SQLiteDatabase;
import android.test.suitebuilder.annotation.SmallTest;
import android.test.suitebuilder.annotation.Suppress;
import android.test.AndroidTestCase;
import com.android.dialer.database.DialerDatabaseHelper;
import com.android.dialer.database.DialerDatabaseHelper.ContactNumber;
import com.android.dialer.dialpad.SmartDialNameMatcher;
import com.android.dialer.dialpad.SmartDialPrefix;
import java.lang.Exception;
import java.lang.Override;
import java.util.ArrayList;
/**
* Validates the behavior of the smart dial database helper with regards to contact updates and
* deletes.
* To run this test, use the command:
* adb shell am instrument -w -e class com.android.dialer.database.DialerDatabaseHelperTest /
* com.android.dialer.tests/android.test.InstrumentationTestRunner
*/
@SmallTest
public class DialerDatabaseHelperTest extends AndroidTestCase {
private DialerDatabaseHelper mTestHelper;
private SQLiteDatabase mDb;
@Override
protected void setUp() {
mTestHelper = DialerDatabaseHelper.getNewInstanceForTest(getContext());
mDb = mTestHelper.getWritableDatabase();
}
@Override
protected void tearDown() throws Exception {
final SQLiteDatabase db = mTestHelper.getWritableDatabase();
mTestHelper.removeAllContacts(db);
super.tearDown();
}
/**
* Verifies that a new contact added into the database is a match after the update.
*/
public void testForNewContacts() {
final MatrixCursor nameCursor = constructNewNameCursor();
final MatrixCursor contactCursor = constructNewContactCursor();
mTestHelper.insertUpdatedContactsAndNumberPrefix(mDb, contactCursor, 0L);
mTestHelper.insertNamePrefixes(mDb, nameCursor);
assertEquals(0, getMatchesFromDb("5105272357").size());
// Insert new contact
constructNewContactWithDummyIds(contactCursor, nameCursor,
"510-527-2357", 0, "James");
mTestHelper.insertUpdatedContactsAndNumberPrefix(mDb, contactCursor, 1L);
mTestHelper.insertNamePrefixes(mDb, nameCursor);
assertEquals(1, getMatchesFromDb("5105272357").size());
}
/**
* Verifies that a contact that has its phone number changed is a match after the update.
*/
public void testForUpdatedContacts() {
final MatrixCursor nameCursor = constructNewNameCursor();
final MatrixCursor contactCursor = constructNewContactCursor();
constructNewContactWithDummyIds(contactCursor, nameCursor,
"510-527-2357", 0, "James");
mTestHelper.insertUpdatedContactsAndNumberPrefix(mDb, contactCursor, 0L);
mTestHelper.insertNamePrefixes(mDb, nameCursor);
assertEquals(1, getMatchesFromDb("5105272357").size());
assertEquals(0, getMatchesFromDb("6501234567").size());
// Update the database with the new contact information
final MatrixCursor nameCursor2 = constructNewNameCursor();
final MatrixCursor contactCursor2 = constructNewContactCursor();
constructNewContactWithDummyIds(contactCursor2, nameCursor2,
"650-123-4567", 0, "James");
mTestHelper.removeUpdatedContacts(mDb, contactCursor2);
mTestHelper.insertUpdatedContactsAndNumberPrefix(mDb, contactCursor2, 1L);
mTestHelper.insertNamePrefixes(mDb, nameCursor2);
// Now verify the matches are correct based on the new information
assertEquals(0, getMatchesFromDb("5105272357").size());
assertEquals(1, getMatchesFromDb("6501234567").size());
}
/**
* Verifies that a contact that is deleted from CP2 is similarly deleted from the database
*/
public void testForDeletedContacts() {
final MatrixCursor nameCursor = constructNewNameCursor();
final MatrixCursor contactCursor = constructNewContactCursor();
constructNewContactWithDummyIds(contactCursor, nameCursor,
"510-527-2357", 0, "James");
mTestHelper.insertUpdatedContactsAndNumberPrefix(mDb, contactCursor, 0L);
mTestHelper.insertNamePrefixes(mDb, nameCursor);
assertEquals(1, getMatchesFromDb("5105272357").size());
// Delete the contact and update its projection.
final MatrixCursor deletedCursor =
new MatrixCursor(DialerDatabaseHelper.DeleteContactQuery.PROJECTION);
deletedCursor.addRow(new Object[] {0, 1L});
mTestHelper.removeDeletedContacts(mDb, deletedCursor);
assertEquals(0, getMatchesFromDb("5105272357").size());
}
/**
* Verifies that when a contact's number is deleted (but not the entire contact), the
* number is correctly deleted from the database.
*/
public void testForDeletedNumber() {
final MatrixCursor nameCursor = constructNewNameCursor();
final MatrixCursor contactCursor = constructNewContactCursor();
constructNewContactWithDummyIds(contactCursor, nameCursor,
"510-527-2357", 0, "James");
mTestHelper.insertUpdatedContactsAndNumberPrefix(mDb, contactCursor, 0L);
mTestHelper.insertNamePrefixes(mDb, nameCursor);
assertEquals(1, getMatchesFromDb("5105272357").size());
// Match no longer exists after number was deleted from contact
final MatrixCursor updatedContactCursor =
new MatrixCursor(DialerDatabaseHelper.UpdatedContactQuery.PROJECTION);
updatedContactCursor.addRow(new Object[] {0});
mTestHelper.removeUpdatedContacts(mDb, updatedContactCursor);
assertEquals(0, getMatchesFromDb("5105272357").size());
}
private ArrayList<ContactNumber> getMatchesFromDb(String query) {
final SmartDialNameMatcher nameMatcher = new SmartDialNameMatcher(query,
SmartDialPrefix.getMap());
return mTestHelper.getLooseMatches(query, nameMatcher);
}
}