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