1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License 15 */ 16 package com.android.contacts.model.dataitem; 17 18 import android.content.ContentValues; 19 import android.provider.ContactsContract.CommonDataKinds.Email; 20 import android.provider.ContactsContract.CommonDataKinds.Event; 21 import android.provider.ContactsContract.CommonDataKinds.Im; 22 import android.provider.ContactsContract.CommonDataKinds.Nickname; 23 import android.provider.ContactsContract.CommonDataKinds.Note; 24 import android.provider.ContactsContract.CommonDataKinds.Organization; 25 import android.provider.ContactsContract.CommonDataKinds.Phone; 26 import android.provider.ContactsContract.CommonDataKinds.Relation; 27 import android.provider.ContactsContract.CommonDataKinds.SipAddress; 28 import android.provider.ContactsContract.CommonDataKinds.StructuredName; 29 import android.provider.ContactsContract.CommonDataKinds.StructuredPostal; 30 import android.provider.ContactsContract.CommonDataKinds.Website; 31 import android.provider.ContactsContract.Contacts.Data; 32 import android.test.AndroidTestCase; 33 import android.test.suitebuilder.annotation.SmallTest; 34 import com.android.contacts.Collapser; 35 import com.android.contacts.model.account.AccountType.EditType; 36 import com.android.contacts.model.account.BaseAccountType; 37 import com.android.contacts.model.account.GoogleAccountType; 38 import java.util.ArrayList; 39 import java.util.List; 40 41 /** 42 * Test case for {@link DataItem}. 43 */ 44 @SmallTest 45 public class DataItemTests extends AndroidTestCase { 46 47 private ContentValues mValues1; 48 private ContentValues mValues2; 49 private ContentValues mValues3; 50 private ContentValues mValues4; 51 private GoogleAccountType mGoogleAccountType; 52 53 @Override setUp()54 protected void setUp() { 55 mValues1 = new ContentValues(); 56 mValues2 = new ContentValues(); 57 mValues3 = new ContentValues(); 58 mValues4 = new ContentValues(); 59 60 mValues1.put(Data._ID, 1); 61 mValues2.put(Data._ID, 2); 62 mValues3.put(Data._ID, 3); 63 mValues4.put(Data._ID, 4); 64 65 mGoogleAccountType = new GoogleAccountType(getContext(), "packageName"); 66 } 67 createDataItemsAndCollapse(DataKind kind, ContentValues... values)68 private List<DataItem> createDataItemsAndCollapse(DataKind kind, ContentValues... values) { 69 final List<DataItem> dataList = new ArrayList<>(values.length); 70 for (ContentValues value : values) { 71 final DataItem data = DataItem.createFrom(value); 72 data.setDataKind(kind); 73 dataList.add(data); 74 } 75 Collapser.collapseList(dataList, getContext()); 76 return dataList; 77 } 78 testDataItemCollapsing_genericDataItemFields()79 public void testDataItemCollapsing_genericDataItemFields() { 80 mValues1.put(Data.IS_SUPER_PRIMARY, 1); 81 mValues2.put(Data.IS_PRIMARY, 0); 82 83 final DataKind kind = new DataKind("test.mimetype", 0, 0, false); 84 kind.actionBody = new BaseAccountType.SimpleInflater(0); 85 kind.typeList = new ArrayList<>(); 86 kind.typeList.add(new EditType(1, -1)); 87 kind.typeList.add(new EditType(2, -1)); 88 kind.typeColumn = Data.DATA2; 89 90 mValues1.put(kind.typeColumn, 2); 91 mValues2.put(kind.typeColumn, 1); 92 93 final List<DataItem> dataList = createDataItemsAndCollapse(kind, mValues1, mValues2); 94 95 assertEquals(1, dataList.size()); 96 assertEquals(true, dataList.get(0).isSuperPrimary()); 97 assertEquals(true, dataList.get(0).isPrimary()); 98 assertEquals(1, dataList.get(0).getKindTypeColumn(kind)); 99 } 100 testDataItemCollapsing_email()101 public void testDataItemCollapsing_email() { 102 final String email1 = "email1@google.com"; 103 final String email2 = "email2@google.com"; 104 105 mValues1.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE); 106 mValues2.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE); 107 mValues3.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE); 108 109 mValues1.put(Email.ADDRESS, email1); 110 mValues2.put(Email.ADDRESS, email1); 111 mValues3.put(Email.ADDRESS, email2); 112 113 mValues1.put(Email.TYPE, Email.TYPE_MOBILE); 114 mValues2.put(Email.TYPE, Email.TYPE_HOME); 115 mValues3.put(Email.TYPE, Email.TYPE_WORK); 116 117 final DataKind kind = mGoogleAccountType.getKindForMimetype(Email.CONTENT_ITEM_TYPE); 118 119 final List<DataItem> dataList = 120 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3); 121 122 assertEquals(2, dataList.size()); 123 assertEquals(email1, ((EmailDataItem) dataList.get(0)).getAddress()); 124 assertEquals(email2, ((EmailDataItem) dataList.get(1)).getAddress()); 125 assertEquals(Math.min(Email.TYPE_MOBILE, Email.TYPE_HOME), 126 ((EmailDataItem) dataList.get(0)).getKindTypeColumn(kind)); 127 } 128 testDataItemCollapsing_event()129 public void testDataItemCollapsing_event() { 130 final String date1 = "2014-01-01"; 131 final String date2 = "2014-02-02"; 132 final String customLabel1 = "custom label1"; 133 final String customLabel2 = "custom label2"; 134 135 mValues1.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE); 136 mValues2.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE); 137 mValues3.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE); 138 mValues4.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE); 139 140 mValues1.put(Event.START_DATE, date1); 141 mValues2.put(Event.START_DATE, date1); 142 mValues3.put(Event.START_DATE, date1); 143 mValues4.put(Event.START_DATE, date2); 144 145 mValues1.put(Event.TYPE, Event.TYPE_CUSTOM); 146 mValues2.put(Event.TYPE, Event.TYPE_CUSTOM); 147 mValues3.put(Event.TYPE, Event.TYPE_CUSTOM); 148 mValues4.put(Event.TYPE, Event.TYPE_ANNIVERSARY); 149 150 mValues1.put(Event.LABEL, customLabel1); 151 mValues2.put(Event.LABEL, customLabel1); 152 mValues3.put(Event.LABEL, customLabel2); 153 154 final DataKind kind = mGoogleAccountType.getKindForMimetype(Event.CONTENT_ITEM_TYPE); 155 156 final List<DataItem> dataList = 157 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4); 158 159 assertEquals(3, dataList.size()); 160 assertEquals(customLabel1, ((EventDataItem) dataList.get(0)).getLabel()); 161 assertEquals(customLabel2, ((EventDataItem) dataList.get(1)).getLabel()); 162 assertEquals(date2, ((EventDataItem) dataList.get(2)).getStartDate()); 163 } 164 testDataItemCollapsing_im()165 public void testDataItemCollapsing_im() { 166 final String address1 = "address 1"; 167 final String address2 = "address 2"; 168 final String customProtocol1 = "custom 1"; 169 final String customProtocol2 = "custom 2"; 170 171 mValues1.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE); 172 mValues2.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE); 173 mValues3.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE); 174 mValues4.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE); 175 176 mValues1.put(Im.DATA, address1); 177 mValues2.put(Im.DATA, address1); 178 mValues3.put(Im.DATA, address1); 179 mValues4.put(Im.DATA, address2); 180 181 mValues1.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM); 182 mValues2.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM); 183 mValues3.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM); 184 mValues4.put(Im.PROTOCOL, Im.PROTOCOL_AIM); 185 186 mValues1.put(Im.CUSTOM_PROTOCOL, customProtocol1); 187 mValues2.put(Im.CUSTOM_PROTOCOL, customProtocol1); 188 mValues3.put(Im.CUSTOM_PROTOCOL, customProtocol2); 189 190 final DataKind kind = mGoogleAccountType.getKindForMimetype(Im.CONTENT_ITEM_TYPE); 191 192 final List<DataItem> dataList = 193 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4); 194 195 assertEquals(3, dataList.size()); 196 assertEquals(address1, ((ImDataItem) dataList.get(0)).getData()); 197 assertEquals(address1, ((ImDataItem) dataList.get(1)).getData()); 198 assertEquals(address2, ((ImDataItem) dataList.get(2)).getData()); 199 200 assertEquals(customProtocol1, ((ImDataItem) dataList.get(0)).getCustomProtocol()); 201 assertEquals(customProtocol2, ((ImDataItem) dataList.get(1)).getCustomProtocol()); 202 assertEquals(Im.PROTOCOL_AIM, (int) ((ImDataItem) dataList.get(2)).getProtocol()); 203 } 204 testDataItemCollapsing_nickname()205 public void testDataItemCollapsing_nickname() { 206 final String nickname1 = "nickname 1"; 207 final String nickname2 = "nickname 2"; 208 209 mValues1.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE); 210 mValues2.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE); 211 mValues3.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE); 212 213 mValues1.put(Nickname.NAME, nickname1); 214 mValues2.put(Nickname.NAME, nickname1); 215 mValues3.put(Nickname.NAME, nickname2); 216 217 final DataKind kind = mGoogleAccountType.getKindForMimetype(Nickname.CONTENT_ITEM_TYPE); 218 219 final List<DataItem> dataList = 220 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3); 221 222 assertEquals(2, dataList.size()); 223 assertEquals(nickname1, ((NicknameDataItem) dataList.get(0)).getName()); 224 assertEquals(nickname2, ((NicknameDataItem) dataList.get(1)).getName()); 225 } 226 testDataItemCollapsing_note()227 public void testDataItemCollapsing_note() { 228 final String note1 = "note 1"; 229 final String note2 = "note 2"; 230 231 mValues1.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE); 232 mValues2.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE); 233 mValues3.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE); 234 235 mValues1.put(Note.NOTE, note1); 236 mValues2.put(Note.NOTE, note1); 237 mValues3.put(Note.NOTE, note2); 238 239 DataKind kind = mGoogleAccountType.getKindForMimetype(Note.CONTENT_ITEM_TYPE); 240 241 final List<DataItem> dataList = 242 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3); 243 244 assertEquals(2, dataList.size()); 245 assertEquals(note1, ((NoteDataItem) dataList.get(0)).getNote()); 246 assertEquals(note2, ((NoteDataItem) dataList.get(1)).getNote()); 247 } 248 testDataItemCollapsing_organization()249 public void testDataItemCollapsing_organization() { 250 final String company1 = "company1"; 251 final String company2 = "company2"; 252 final String title1 = "title1"; 253 final String title2 = "title2"; 254 255 mValues1.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE); 256 mValues2.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE); 257 mValues3.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE); 258 mValues4.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE); 259 260 mValues1.put(Organization.COMPANY, company1); 261 mValues2.put(Organization.COMPANY, company1); 262 mValues3.put(Organization.COMPANY, company1); 263 mValues4.put(Organization.COMPANY, company2); 264 265 mValues1.put(Organization.TITLE, title1); 266 mValues2.put(Organization.TITLE, title1); 267 mValues3.put(Organization.TITLE, title2); 268 mValues4.put(Organization.TITLE, title1); 269 270 final DataKind kind = 271 mGoogleAccountType.getKindForMimetype(Organization.CONTENT_ITEM_TYPE); 272 273 final List<DataItem> dataList = 274 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4); 275 276 assertEquals(3, dataList.size()); 277 assertEquals(company1, ((OrganizationDataItem) dataList.get(0)).getCompany()); 278 assertEquals(company1, ((OrganizationDataItem) dataList.get(1)).getCompany()); 279 assertEquals(company2, ((OrganizationDataItem) dataList.get(2)).getCompany()); 280 281 assertEquals(title1, ((OrganizationDataItem) dataList.get(0)).getTitle()); 282 assertEquals(title2, ((OrganizationDataItem) dataList.get(1)).getTitle()); 283 } 284 testDataItemCollapsing_phone()285 public void testDataItemCollapsing_phone() { 286 final String phone1 = "111-111-1111"; 287 final String phone1a = "1111111111"; 288 final String phone2 = "222-222-2222"; 289 290 mValues1.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); 291 mValues2.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); 292 mValues3.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); 293 294 mValues1.put(Phone.NUMBER, phone1); 295 mValues2.put(Phone.NUMBER, phone1a); 296 mValues3.put(Phone.NUMBER, phone2); 297 298 mValues1.put(Phone.TYPE, Phone.TYPE_MOBILE); 299 mValues2.put(Phone.TYPE, Phone.TYPE_HOME); 300 mValues3.put(Phone.TYPE, Phone.TYPE_WORK); 301 302 final DataKind kind = mGoogleAccountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE); 303 304 final List<DataItem> dataList = 305 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3); 306 assertEquals(2, dataList.size()); 307 assertEquals(phone1, ((PhoneDataItem) dataList.get(0)).getNumber()); 308 assertEquals(phone2, ((PhoneDataItem) dataList.get(1)).getNumber()); 309 assertEquals(Phone.TYPE_MOBILE, 310 ((PhoneDataItem) dataList.get(0)).getKindTypeColumn(kind)); 311 } 312 testDataItemCollapsing_relation()313 public void testDataItemCollapsing_relation() { 314 final String name1 = "name1"; 315 final String name2 = "name2"; 316 final String customRelation1 = "custom relation 1"; 317 final String customRelation2 = "custom relation 2"; 318 319 mValues1.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE); 320 mValues2.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE); 321 mValues3.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE); 322 mValues4.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE); 323 324 mValues1.put(Relation.NAME, name1); 325 mValues2.put(Relation.NAME, name1); 326 mValues3.put(Relation.NAME, name1); 327 mValues4.put(Relation.NAME, name2); 328 329 mValues1.put(Relation.TYPE, Relation.TYPE_CUSTOM); 330 mValues2.put(Relation.TYPE, Relation.TYPE_CUSTOM); 331 mValues3.put(Relation.TYPE, Relation.TYPE_CUSTOM); 332 mValues4.put(Relation.TYPE, Relation.TYPE_BROTHER); 333 334 mValues1.put(Relation.LABEL, customRelation1); 335 mValues2.put(Relation.LABEL, customRelation1); 336 mValues3.put(Relation.LABEL, customRelation2); 337 338 final DataKind kind = mGoogleAccountType.getKindForMimetype(Relation.CONTENT_ITEM_TYPE); 339 340 final List<DataItem> dataList = 341 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4); 342 343 assertEquals(3, dataList.size()); 344 assertEquals(name1, ((RelationDataItem) dataList.get(0)).getName()); 345 assertEquals(name2, ((RelationDataItem) dataList.get(2)).getName()); 346 347 assertEquals(customRelation1, ((RelationDataItem) dataList.get(0)).getLabel()); 348 assertEquals(customRelation2, ((RelationDataItem) dataList.get(1)).getLabel()); 349 } 350 testDataItemCollapsing_sip()351 public void testDataItemCollapsing_sip() { 352 final String sip1 = "sip 1"; 353 final String sip2 = "sip 2"; 354 355 mValues1.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE); 356 mValues2.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE); 357 mValues3.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE); 358 359 mValues1.put(SipAddress.SIP_ADDRESS, sip1); 360 mValues2.put(SipAddress.SIP_ADDRESS, sip1); 361 mValues3.put(SipAddress.SIP_ADDRESS, sip2); 362 363 mValues1.put(SipAddress.TYPE, SipAddress.TYPE_WORK); 364 mValues2.put(SipAddress.TYPE, SipAddress.TYPE_HOME); 365 mValues3.put(SipAddress.TYPE, SipAddress.TYPE_WORK); 366 367 final DataKind kind = mGoogleAccountType.getKindForMimetype(SipAddress.CONTENT_ITEM_TYPE); 368 369 final List<DataItem> dataList = 370 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3); 371 372 assertEquals(2, dataList.size()); 373 assertEquals(sip1, ((SipAddressDataItem) dataList.get(0)).getSipAddress()); 374 assertEquals(sip2, ((SipAddressDataItem) dataList.get(1)).getSipAddress()); 375 } 376 testDataItemCollapsing_structuredName()377 public void testDataItemCollapsing_structuredName() { 378 final String displayName1 = "Display Name 1"; 379 final String displayName2 = "Display Name 2"; 380 381 mValues1.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); 382 mValues2.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); 383 mValues3.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); 384 385 mValues1.put(StructuredName.DISPLAY_NAME, displayName1); 386 mValues2.put(StructuredName.DISPLAY_NAME, displayName1); 387 mValues3.put(StructuredName.DISPLAY_NAME, displayName2); 388 389 final DataKind kind = 390 mGoogleAccountType.getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE); 391 392 final List<DataItem> dataList = 393 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3); 394 395 assertEquals(2, dataList.size()); 396 assertEquals(displayName1, ((StructuredNameDataItem) dataList.get(0)).getDisplayName()); 397 assertEquals(displayName2, ((StructuredNameDataItem) dataList.get(1)).getDisplayName()); 398 } 399 testDataItemCollapsing_structuredPostal()400 public void testDataItemCollapsing_structuredPostal() { 401 final String formattedAddress1 = "Formatted Address 1"; 402 final String formattedAddress2 = "Formatted Address 2"; 403 404 mValues1.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE); 405 mValues2.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE); 406 mValues3.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE); 407 408 mValues1.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress1); 409 mValues2.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress1); 410 mValues3.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress2); 411 412 final DataKind kind = 413 mGoogleAccountType.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE); 414 415 final List<DataItem> dataList = 416 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3); 417 418 assertEquals(2, dataList.size()); 419 assertEquals(formattedAddress1, 420 ((StructuredPostalDataItem) dataList.get(0)).getFormattedAddress()); 421 assertEquals(formattedAddress2, 422 ((StructuredPostalDataItem) dataList.get(1)).getFormattedAddress()); 423 } 424 testDataItemCollapsing_website()425 public void testDataItemCollapsing_website() { 426 final String url1 = "www.url1.com"; 427 final String url2 = "www.url2.com"; 428 429 mValues1.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE); 430 mValues2.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE); 431 mValues3.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE); 432 433 mValues1.put(Website.URL, url1); 434 mValues2.put(Website.URL, url1); 435 mValues3.put(Website.URL, url2); 436 437 final DataKind kind = mGoogleAccountType.getKindForMimetype(Website.CONTENT_ITEM_TYPE); 438 439 final List<DataItem> dataList = 440 createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3); 441 442 assertEquals(2, dataList.size()); 443 assertEquals(url1, ((WebsiteDataItem) dataList.get(0)).getUrl()); 444 assertEquals(url2, ((WebsiteDataItem) dataList.get(1)).getUrl()); 445 } 446 } 447