/* * Copyright (C) 2012 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.ex.chips; import android.database.Cursor; import android.database.MatrixCursor; import android.net.Uri; import android.provider.ContactsContract.DisplayNameSources; import android.test.AndroidTestCase; import com.android.ex.chips.RecipientAlternatesAdapter; import com.android.ex.chips.RecipientEntry; public class RecipientAlternatesAdapterTest extends AndroidTestCase { public void testRemoveUndesiredDestinations() { MatrixCursor c = new MatrixCursor(Queries.EMAIL.getProjection()); Cursor result; // Test: Empty input assertEquals(0, RecipientAlternatesAdapter.removeUndesiredDestinations(c, null /* desiredMimeType */, null /* lookupKey */).getCount()); // Test: One row addRow(c, "a", "1@android.com", 1, "home", 1000, 2000, "x", 0); result = RecipientAlternatesAdapter.removeUndesiredDestinations(c, null /* desiredMimeType */, null /* lookupKey */); assertEquals(1, result.getCount()); assertRow(result, 0, "a", "1@android.com", 1, "home", 1000, 2000, "x", 0); // Test: two unique rows, different destinations addRow(c, "a", "2@android.com", 1, "home", 1000, 2000, "x", 0); result = RecipientAlternatesAdapter.removeUndesiredDestinations(c, null /* desiredMimeType */, null /* lookupKey */); assertEquals(2, result.getCount()); assertRow(result, 0, "a", "1@android.com", 1, "home", 1000, 2000, "x", 0); assertRow(result, 1, "a", "2@android.com", 1, "home", 1000, 2000, "x", 0); // Test: add a third row with a non-unique destination. addRow(c, "ax", "1@android.com", 11, "homex", 10001, 2000, "xx", 1); // Third row should be removed. result = RecipientAlternatesAdapter.removeUndesiredDestinations(c, null /* desiredMimeType */, null /* lookupKey */); assertEquals(2, result.getCount()); assertRow(result, 0, "a", "1@android.com", 1, "home", 1000, 2000, "x", 0); assertRow(result, 1, "a", "2@android.com", 1, "home", 1000, 2000, "x", 0); // Test: add a forth row with a non-unique destination again. addRow(c, "ax", "2@android.com", 11, "homex", 10001, 2000, "xx", 1); // Forth row should also be removed. result = RecipientAlternatesAdapter.removeUndesiredDestinations(c, null /* desiredMimeType */, null /* lookupKey */); assertEquals(2, result.getCount()); assertRow(result, 0, "a", "1@android.com", 1, "home", 1000, 2000, "x", 0); assertRow(result, 1, "a", "2@android.com", 1, "home", 1000, 2000, "x", 0); } private static MatrixCursor addRow(MatrixCursor c, String displayName, String destination, int destinationType, String destinationLabel, long contactId, long dataId, String photoUri, int displayNameSource ) { c.addRow(new Object[] {displayName, destination, destinationType, destinationLabel, contactId, dataId, photoUri, displayNameSource}); return c; } private static void assertRow(Cursor c, int position, String displayName, String destination, int destinationType, String destinationLabel, long contactId, long dataId, String photoUri, int displayNameSource ) { assertTrue(c.moveToPosition(position)); assertEquals(displayName, c.getString(0)); assertEquals(destination, c.getString(1)); assertEquals(destinationType, c.getInt(2)); assertEquals(destinationLabel, c.getString(3)); assertEquals(contactId, c.getLong(4)); assertEquals(dataId, c.getLong(5)); assertEquals(photoUri, c.getString(6)); assertEquals(displayNameSource, c.getInt(7)); } public void testGetBetterRecipient() { // Ensure that if either (but not both) parameters are null, the other is returned { final RecipientEntry entry1 = RecipientEntry.constructFakeEntry("1@android.com", true); final RecipientEntry entry2 = null; assertEquals(RecipientAlternatesAdapter.getBetterRecipient(entry1, entry2), entry1); assertEquals(RecipientAlternatesAdapter.getBetterRecipient(entry2, entry1), entry1); } // Ensure that if only one has a display name, it is used { final RecipientEntry entry1 = RecipientEntry.constructTopLevelEntry("Android", DisplayNameSources.NICKNAME, "1@android.com", 0, null, 0, null /* directoryId */, 0, (Uri) null, true, null /* lookupKey */); final RecipientEntry entry2 = RecipientEntry.constructFakeEntry("1@android.com", true); assertEquals(RecipientAlternatesAdapter.getBetterRecipient(entry1, entry2), entry1); assertEquals(RecipientAlternatesAdapter.getBetterRecipient(entry2, entry1), entry1); } // Ensure that if one has a display name different from its destination, and the other's // is equal to its destination, we use the unique one { final RecipientEntry entry1 = RecipientEntry.constructTopLevelEntry("Android", DisplayNameSources.NICKNAME, "1@android.com", 0, null, 0, null /* directoryId */, 0, (Uri) null, true, null /* lookupKey */); final RecipientEntry entry2 = RecipientEntry.constructTopLevelEntry("2@android.com", DisplayNameSources.EMAIL, "2@android.com", 0, null, 0, null /* directoryId */, 0, (Uri) null, true, null /* lookupKey */); assertEquals(RecipientAlternatesAdapter.getBetterRecipient(entry1, entry2), entry1); assertEquals(RecipientAlternatesAdapter.getBetterRecipient(entry2, entry1), entry1); } // Ensure that if only one has a photo, it is used { final RecipientEntry entry1 = RecipientEntry.constructTopLevelEntry("Android", DisplayNameSources.NICKNAME, "1@android.com", 0, null, 0, null /* directoryId */, 0, Uri.parse("http://www.android.com"), true, null /* lookupKey */); final RecipientEntry entry2 = RecipientEntry.constructTopLevelEntry("Android", DisplayNameSources.EMAIL, "2@android.com", 0, null, 0, null /* directoryId */, 0, (Uri) null, true, null /* lookupKey */); assertEquals(RecipientAlternatesAdapter.getBetterRecipient(entry1, entry2), entry1); assertEquals(RecipientAlternatesAdapter.getBetterRecipient(entry2, entry1), entry1); } } }