1e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey/*
2e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey * Copyright (C) 2009 The Android Open Source Project
3e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey *
4e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License");
5e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey * you may not use this file except in compliance with the License.
6e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey * You may obtain a copy of the License at
7e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey *
8e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey *      http://www.apache.org/licenses/LICENSE-2.0
9e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey *
10e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey * Unless required by applicable law or agreed to in writing, software
11e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS,
12e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey * See the License for the specific language governing permissions and
14e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey * limitations under the License.
15e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey */
16e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey
17e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkeypackage com.android.contacts;
18e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey
19e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkeyimport android.content.Intent;
20c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onukiimport android.provider.ContactsContract.CommonDataKinds.Phone;
21e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkeyimport android.test.AndroidTestCase;
22dfe20250b9f3d2cf134ba2a8a97399322ad48010Dmitri Plotnikovimport android.test.suitebuilder.annotation.SmallTest;
23e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey
24e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey/**
25e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey * Tests for {@link ContactsUtils}.
26e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey */
27dfe20250b9f3d2cf134ba2a8a97399322ad48010Dmitri Plotnikov@SmallTest
28e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkeypublic class ContactsUtilsTests extends AndroidTestCase {
29e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey
30e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey    public void testIsGraphicNull() throws Exception {
31e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey        assertFalse(ContactsUtils.isGraphic(null));
32e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey    }
33e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey
34e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey    public void testIsGraphicEmpty() throws Exception {
35e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey        assertFalse(ContactsUtils.isGraphic(""));
36e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey    }
37e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey
38e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey    public void testIsGraphicSpaces() throws Exception {
39e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey        assertFalse(ContactsUtils.isGraphic("  "));
40e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey    }
41e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey
42e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey    public void testIsGraphicPunctuation() throws Exception {
43e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey        assertTrue(ContactsUtils.isGraphic("."));
44e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey    }
45c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki
46c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki    public void testAreObjectsEqual() throws Exception {
47c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki        assertTrue("null:null", ContactsUtils.areObjectsEqual(null, null));
48c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki        assertTrue("1:1", ContactsUtils.areObjectsEqual(1, 1));
49c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki
50c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki        assertFalse("null:1", ContactsUtils.areObjectsEqual(null, 1));
51c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki        assertFalse("1:null", ContactsUtils.areObjectsEqual(1, null));
52c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki        assertFalse("1:2", ContactsUtils.areObjectsEqual(1, 2));
53c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki    }
54c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki
55d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann    public void testShouldCollapse() throws Exception {
56dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("1", true, null, null, null, null);
57dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("2", true, "a", "b", "a", "b");
58dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann
59dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("11", false, "a", null, null, null);
60dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("12", false, null, "a", null, null);
61dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("13", false, null, null, "a", null);
62dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("14", false, null, null, null, "a");
63dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann
64dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("21", false, "a", "b", null, null);
65dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("22", false, "a", "b", "a", null);
66dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("23", false, "a", "b", null, "b");
67dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("24", false, "a", "b", "a", "x");
68dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("25", false, "a", "b", "x", "b");
69dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann
70dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("31", false, null, null, "a", "b");
71dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("32", false, "a", null, "a", "b");
72dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("33", false, null, "b", "a", "b");
73dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("34", false, "a", "x", "a", "b");
74dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("35", false, "x", "b", "a", "b");
75dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann
76dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("41", true, Phone.CONTENT_ITEM_TYPE, null, Phone.CONTENT_ITEM_TYPE,
77c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki                null);
78dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("42", true, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, "1");
79c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki
80dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("51", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE,
81d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                "2");
82dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("52", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE,
83d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                null);
84dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("53", false, Phone.CONTENT_ITEM_TYPE, null, Phone.CONTENT_ITEM_TYPE,
85d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                "2");
86d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann
87d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann        // Test phone numbers
88dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("60", true,
89d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                Phone.CONTENT_ITEM_TYPE, "1234567",
90d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                Phone.CONTENT_ITEM_TYPE, "1234567");
91dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("61", false,
92d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                Phone.CONTENT_ITEM_TYPE, "1234567",
93d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                Phone.CONTENT_ITEM_TYPE, "1234568");
94dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("62", true,
95d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                Phone.CONTENT_ITEM_TYPE, "1234567;0",
96d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                Phone.CONTENT_ITEM_TYPE, "1234567;0");
97dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("63", false,
98d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                Phone.CONTENT_ITEM_TYPE, "1234567;89321",
99dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                Phone.CONTENT_ITEM_TYPE, "1234567;89322");
100dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("64", true,
101d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                Phone.CONTENT_ITEM_TYPE, "1234567;89321",
102d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                Phone.CONTENT_ITEM_TYPE, "1234567;89321");
103dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("65", false,
104d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                Phone.CONTENT_ITEM_TYPE, "1234567;0111111111",
105d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                Phone.CONTENT_ITEM_TYPE, "1234567;");
106dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("66", false,
107d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                Phone.CONTENT_ITEM_TYPE, "12345675426;91970xxxxx",
108d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                Phone.CONTENT_ITEM_TYPE, "12345675426");
109dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("67", false,
110d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                Phone.CONTENT_ITEM_TYPE, "12345675426;23456xxxxx",
111d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                Phone.CONTENT_ITEM_TYPE, "12345675426;234567xxxx");
112dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("68", true,
113d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567",
114d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567");
115dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("69", false,
116d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567",
117d8b0a05f88099a734b75ed6b4628660feb00445fDaniel Lehmann                Phone.CONTENT_ITEM_TYPE, "1234567;1234567");
118dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann
119dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        // test some numbers with country and area code
120dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("70", true,
121dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678",
122dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678");
123dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("71", true,
124dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678",
125dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                Phone.CONTENT_ITEM_TYPE, "+49 (89)12345678");
126dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("72", true,
127dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234",
128dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                Phone.CONTENT_ITEM_TYPE, "+49 (8092)1234");
129ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki        assertCollapses("73", false,
130dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                Phone.CONTENT_ITEM_TYPE, "0049 (8092) 1234",
131dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                Phone.CONTENT_ITEM_TYPE, "+49/80921234");
132dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("74", false,
133dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678",
134dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345679");
135dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann
136dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        // test some numbers with wait symbol and area code
137dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("80", true,
138dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234;89321",
139dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                Phone.CONTENT_ITEM_TYPE, "+49/80921234;89321");
140dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("81", false,
141dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234;89321",
142dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                Phone.CONTENT_ITEM_TYPE, "+49/80921235;89321");
143dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("82", false,
144dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234;89322",
145dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                Phone.CONTENT_ITEM_TYPE, "+49/80921234;89321");
146dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertCollapses("83", true,
147dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                Phone.CONTENT_ITEM_TYPE, "1234567;+49 (8092) 1234",
148dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                Phone.CONTENT_ITEM_TYPE, "1234567;+49/80921234");
149dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann
150ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki        assertCollapses("86", true,
151ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki                Phone.CONTENT_ITEM_TYPE, "",
152ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki                Phone.CONTENT_ITEM_TYPE, "");
153ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki
154ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki        assertCollapses("87", false,
155ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki                Phone.CONTENT_ITEM_TYPE, "1",
156ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki                Phone.CONTENT_ITEM_TYPE, "");
157ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki
158ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki        assertCollapses("88", false,
159ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki                Phone.CONTENT_ITEM_TYPE, "",
160ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki                Phone.CONTENT_ITEM_TYPE, "1");
161ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki
162ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki        assertCollapses("89", true,
163ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki                Phone.CONTENT_ITEM_TYPE, "---",
164ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki                Phone.CONTENT_ITEM_TYPE, "---");
165ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki
166ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki        assertCollapses("90", true,
167ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki                Phone.CONTENT_ITEM_TYPE, "1-/().",
168ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki                Phone.CONTENT_ITEM_TYPE, "--$%1");
169ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki
170ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki        assertCollapses("91", true,
171ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki                Phone.CONTENT_ITEM_TYPE, "abcdefghijklmnopqrstuvwxyz",
172ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki                Phone.CONTENT_ITEM_TYPE, "22233344455566677778889999");
173ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki
174ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki        assertCollapses("92", false,
175ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki                Phone.CONTENT_ITEM_TYPE, "1;2",
176ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki                Phone.CONTENT_ITEM_TYPE, "12");
177ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki
178ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki        assertCollapses("93", false,
179ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki                Phone.CONTENT_ITEM_TYPE, "1,2",
180ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki                Phone.CONTENT_ITEM_TYPE, "12");
181c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki    }
182c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki
183dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann    private void assertCollapses(String message, boolean expected, CharSequence mimetype1,
184c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki            CharSequence data1, CharSequence mimetype2, CharSequence data2) {
185c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki        assertEquals(message, expected,
18601a9fac7bd963d29c607cb17d579b68a71aa8854Dave Santoro                ContactsUtils.shouldCollapse(mimetype1, data1, mimetype2, data2));
187dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        assertEquals(message, expected,
18801a9fac7bd963d29c607cb17d579b68a71aa8854Dave Santoro                ContactsUtils.shouldCollapse(mimetype2, data2, mimetype1, data1));
189dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann
190ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki        // If data1 and data2 are the same instance, make sure the same test passes with different
191ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki        // instances.
192dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        if (data1 == data2 && data1 != null) {
193ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki            // Create a different instance
194ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki            final CharSequence data2_newref = new StringBuilder(data2).append("").toString();
195ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki
196ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki            if (data1 == data2_newref) {
197ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki                // In some cases no matter what we do the runtime reuses the same instance, so
198ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki                // we can't do the "different instance" test.
199ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki                return;
200ac1bc8c58ba9d03ff5a24d1094f663042b7164d9Makoto Onuki            }
201dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann
202dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann            // we have two different instances, now make sure we get the same result as before
203dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann            assertEquals(message, expected,
20401a9fac7bd963d29c607cb17d579b68a71aa8854Dave Santoro                    ContactsUtils.shouldCollapse(mimetype1, data1, mimetype2,
205dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                    data2_newref));
206dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann            assertEquals(message, expected,
20701a9fac7bd963d29c607cb17d579b68a71aa8854Dave Santoro                    ContactsUtils.shouldCollapse(mimetype2, data2_newref, mimetype1,
208dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann                    data1));
209dabe1234137b8edb472421d5afdc7b657f148142Daniel Lehmann        }
210c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki    }
211c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki
212c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki    public void testAreIntentActionEqual() throws Exception {
213c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki        assertTrue("1", ContactsUtils.areIntentActionEqual(null, null));
214c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki        assertTrue("1", ContactsUtils.areIntentActionEqual(new Intent("a"), new Intent("a")));
215c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki
216c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki        assertFalse("11", ContactsUtils.areIntentActionEqual(new Intent("a"), null));
217c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki        assertFalse("12", ContactsUtils.areIntentActionEqual(null, new Intent("a")));
218c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki
219c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki        assertFalse("21", ContactsUtils.areIntentActionEqual(new Intent("a"), new Intent()));
220c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki        assertFalse("22", ContactsUtils.areIntentActionEqual(new Intent(), new Intent("b")));
221c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki        assertFalse("23", ContactsUtils.areIntentActionEqual(new Intent("a"), new Intent("b")));
222c710b0e7a7932288763d7e3d08a882ac188303a8Makoto Onuki    }
223e31dac84479a4c7b356edfc062a447cdfb5efc69Jeff Sharkey}
224