1f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki/* 2f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki * Copyright (C) 2012 The Android Open Source Project 3f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki * 4f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki * Licensed under the Apache License, Version 2.0 (the "License"); 5f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki * you may not use this file except in compliance with the License. 6f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki * You may obtain a copy of the License at 7f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki * 8f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki * http://www.apache.org/licenses/LICENSE-2.0 9f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki * 10f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki * Unless required by applicable law or agreed to in writing, software 11f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki * distributed under the License is distributed on an "AS IS" BASIS, 12f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki * See the License for the specific language governing permissions and 14f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki * limitations under the License. 15f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki */ 16f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki 17f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onukipackage com.android.ex.chips; 18f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki 19f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onukiimport android.database.Cursor; 20f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onukiimport android.database.MatrixCursor; 21f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onukiimport android.test.AndroidTestCase; 22f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki 23f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onukipublic class RecipientAlternatesAdapterTest extends AndroidTestCase { 24f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki 25f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki public void testRemoveDuplicateDestinations() { 26f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki MatrixCursor c = new MatrixCursor(Queries.EMAIL.getProjection()); 27f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki Cursor result; 28f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki 29f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki // Test: Empty input 30f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertEquals(0, RecipientAlternatesAdapter.removeDuplicateDestinations(c).getCount()); 31f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki 32f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki 33f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki // Test: One row 34f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki addRow(c, "a", "1@android.com", 1, "home", 1000, 2000, "x", 0); 35f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki 36f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki result = RecipientAlternatesAdapter.removeDuplicateDestinations(c); 37f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertEquals(1, result.getCount()); 38f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertRow(result, 0, "a", "1@android.com", 1, "home", 1000, 2000, "x", 0); 39f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki 40f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki // Test: two unique rows, different destinations 41f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki addRow(c, "a", "2@android.com", 1, "home", 1000, 2000, "x", 0); 42f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki 43f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki result = RecipientAlternatesAdapter.removeDuplicateDestinations(c); 44f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertEquals(2, result.getCount()); 45f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertRow(result, 0, "a", "1@android.com", 1, "home", 1000, 2000, "x", 0); 46f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertRow(result, 1, "a", "2@android.com", 1, "home", 1000, 2000, "x", 0); 47f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki 48f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki // Test: add a third row with a non-unique destination. 49f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki addRow(c, "ax", "1@android.com", 11, "homex", 10001, 2000, "xx", 1); 50f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki 51f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki // Third row should be removed. 52f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki result = RecipientAlternatesAdapter.removeDuplicateDestinations(c); 53f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertEquals(2, result.getCount()); 54f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertRow(result, 0, "a", "1@android.com", 1, "home", 1000, 2000, "x", 0); 55f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertRow(result, 1, "a", "2@android.com", 1, "home", 1000, 2000, "x", 0); 56f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki 57f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki // Test: add a forth row with a non-unique destination again. 58f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki addRow(c, "ax", "2@android.com", 11, "homex", 10001, 2000, "xx", 1); 59f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki 60f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki // Forth row should also be removed. 61f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki result = RecipientAlternatesAdapter.removeDuplicateDestinations(c); 62f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertEquals(2, result.getCount()); 63f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertRow(result, 0, "a", "1@android.com", 1, "home", 1000, 2000, "x", 0); 64f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertRow(result, 1, "a", "2@android.com", 1, "home", 1000, 2000, "x", 0); 65f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki } 66f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki 67f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki private static MatrixCursor addRow(MatrixCursor c, 68f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki String displayName, 69f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki String destination, 70f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki int destinationType, 71f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki String destinationLabel, 72f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki long contactId, 73f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki long dataId, 74f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki String photoUri, 75f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki int displayNameSource 76f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki ) { 77f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki c.addRow(new Object[] {displayName, destination, destinationType, destinationLabel, 78f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki contactId, dataId, photoUri, displayNameSource}); 79f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki return c; 80f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki } 81f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki 82f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki private static void assertRow(Cursor c, int position, 83f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki String displayName, 84f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki String destination, 85f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki int destinationType, 86f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki String destinationLabel, 87f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki long contactId, 88f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki long dataId, 89f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki String photoUri, 90f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki int displayNameSource 91f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki ) { 92f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertTrue(c.moveToPosition(position)); 93f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertEquals(displayName, c.getString(0)); 94f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertEquals(destination, c.getString(1)); 95f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertEquals(destinationType, c.getInt(2)); 96f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertEquals(destinationLabel, c.getString(3)); 97f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertEquals(contactId, c.getLong(4)); 98f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertEquals(dataId, c.getLong(5)); 99f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertEquals(photoUri, c.getString(6)); 100f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki assertEquals(displayNameSource, c.getInt(7)); 101f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki } 102f64cbf19fb2bc09835a46472c8efd8c6c07fa5abMakoto Onuki} 103