/* * Copyright (C) 2014 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.contacts.common.model.dataitem; import android.content.ContentValues; import android.provider.ContactsContract.CommonDataKinds.Email; import android.provider.ContactsContract.CommonDataKinds.Event; import android.provider.ContactsContract.CommonDataKinds.Im; import android.provider.ContactsContract.CommonDataKinds.Nickname; import android.provider.ContactsContract.CommonDataKinds.Note; import android.provider.ContactsContract.CommonDataKinds.Organization; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.CommonDataKinds.Relation; import android.provider.ContactsContract.CommonDataKinds.SipAddress; import android.provider.ContactsContract.CommonDataKinds.StructuredName; import android.provider.ContactsContract.CommonDataKinds.StructuredPostal; import android.provider.ContactsContract.CommonDataKinds.Website; import android.provider.ContactsContract.Contacts.Data; import android.provider.ContactsContract.Contacts.Entity; import android.test.AndroidTestCase; import com.android.contacts.common.Collapser; import com.android.contacts.common.model.account.AccountType.EditType; import com.android.contacts.common.model.account.BaseAccountType; import com.android.contacts.common.model.account.GoogleAccountType; import com.android.contacts.common.model.dataitem.DataItem; import com.android.contacts.common.model.dataitem.DataKind; import java.lang.Math; import java.util.ArrayList; import java.util.List; /** * Test case for {@link DataItem}. */ public class DataItemTests extends AndroidTestCase { private ContentValues mValues1; private ContentValues mValues2; private ContentValues mValues3; private ContentValues mValues4; private GoogleAccountType mGoogleAccountType; @Override protected void setUp() { mValues1 = new ContentValues(); mValues2 = new ContentValues(); mValues3 = new ContentValues(); mValues4 = new ContentValues(); mValues1.put(Data._ID, 1); mValues2.put(Data._ID, 2); mValues3.put(Data._ID, 3); mValues4.put(Data._ID, 4); mGoogleAccountType = new GoogleAccountType(getContext(), "packageName"); } private List createDataItemsAndCollapse(DataKind kind, ContentValues... values) { final List dataList = new ArrayList<>(values.length); for (ContentValues value : values) { final DataItem data = DataItem.createFrom(value); data.setDataKind(kind); dataList.add(data); } Collapser.collapseList(dataList, getContext()); return dataList; } public void testDataItemCollapsing_genericDataItemFields() { mValues1.put(Data.IS_SUPER_PRIMARY, 1); mValues2.put(Data.IS_PRIMARY, 0); mValues1.put(Entity.TIMES_USED, 5); mValues2.put(Entity.TIMES_USED, 4); mValues1.put(Entity.LAST_TIME_USED, 555); mValues2.put(Entity.LAST_TIME_USED, 999); final DataKind kind = new DataKind("test.mimetype", 0, 0, false); kind.actionBody = new BaseAccountType.SimpleInflater(0); kind.typeList = new ArrayList<>(); kind.typeList.add(new EditType(1, -1)); kind.typeList.add(new EditType(2, -1)); kind.typeColumn = Data.DATA2; mValues1.put(kind.typeColumn, 2); mValues2.put(kind.typeColumn, 1); final List dataList = createDataItemsAndCollapse(kind, mValues1, mValues2); assertEquals(1, dataList.size()); assertEquals(true, dataList.get(0).isSuperPrimary()); assertEquals(true, dataList.get(0).isPrimary()); assertEquals(9, (int) dataList.get(0).getTimesUsed()); assertEquals(999L, (long) dataList.get(0).getLastTimeUsed()); assertEquals(1, dataList.get(0).getKindTypeColumn(kind)); } public void testDataItemCollapsing_email() { final String email1 = "email1@google.com"; final String email2 = "email2@google.com"; mValues1.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE); mValues2.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE); mValues3.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE); mValues1.put(Email.ADDRESS, email1); mValues2.put(Email.ADDRESS, email1); mValues3.put(Email.ADDRESS, email2); mValues1.put(Email.TYPE, Email.TYPE_MOBILE); mValues2.put(Email.TYPE, Email.TYPE_HOME); mValues3.put(Email.TYPE, Email.TYPE_WORK); final DataKind kind = mGoogleAccountType.getKindForMimetype(Email.CONTENT_ITEM_TYPE); final List dataList = createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3); assertEquals(2, dataList.size()); assertEquals(email1, ((EmailDataItem) dataList.get(0)).getAddress()); assertEquals(email2, ((EmailDataItem) dataList.get(1)).getAddress()); assertEquals(Math.min(Email.TYPE_MOBILE, Email.TYPE_HOME), ((EmailDataItem) dataList.get(0)).getKindTypeColumn(kind)); } public void testDataItemCollapsing_event() { final String date1 = "2014-01-01"; final String date2 = "2014-02-02"; final String customLabel1 = "custom label1"; final String customLabel2 = "custom label2"; mValues1.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE); mValues2.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE); mValues3.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE); mValues4.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE); mValues1.put(Event.START_DATE, date1); mValues2.put(Event.START_DATE, date1); mValues3.put(Event.START_DATE, date1); mValues4.put(Event.START_DATE, date2); mValues1.put(Event.TYPE, Event.TYPE_CUSTOM); mValues2.put(Event.TYPE, Event.TYPE_CUSTOM); mValues3.put(Event.TYPE, Event.TYPE_CUSTOM); mValues4.put(Event.TYPE, Event.TYPE_ANNIVERSARY); mValues1.put(Event.LABEL, customLabel1); mValues2.put(Event.LABEL, customLabel1); mValues3.put(Event.LABEL, customLabel2); final DataKind kind = mGoogleAccountType.getKindForMimetype(Event.CONTENT_ITEM_TYPE); final List dataList = createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4); assertEquals(3, dataList.size()); assertEquals(customLabel1, ((EventDataItem) dataList.get(0)).getLabel()); assertEquals(customLabel2, ((EventDataItem) dataList.get(1)).getLabel()); assertEquals(date2, ((EventDataItem) dataList.get(2)).getStartDate()); } public void testDataItemCollapsing_im() { final String address1 = "address 1"; final String address2 = "address 2"; final String customProtocol1 = "custom 1"; final String customProtocol2 = "custom 2"; mValues1.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE); mValues2.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE); mValues3.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE); mValues4.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE); mValues1.put(Im.DATA, address1); mValues2.put(Im.DATA, address1); mValues3.put(Im.DATA, address1); mValues4.put(Im.DATA, address2); mValues1.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM); mValues2.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM); mValues3.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM); mValues4.put(Im.PROTOCOL, Im.PROTOCOL_AIM); mValues1.put(Im.CUSTOM_PROTOCOL, customProtocol1); mValues2.put(Im.CUSTOM_PROTOCOL, customProtocol1); mValues3.put(Im.CUSTOM_PROTOCOL, customProtocol2); final DataKind kind = mGoogleAccountType.getKindForMimetype(Im.CONTENT_ITEM_TYPE); final List dataList = createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4); assertEquals(3, dataList.size()); assertEquals(address1, ((ImDataItem) dataList.get(0)).getData()); assertEquals(address1, ((ImDataItem) dataList.get(1)).getData()); assertEquals(address2, ((ImDataItem) dataList.get(2)).getData()); assertEquals(customProtocol1, ((ImDataItem) dataList.get(0)).getCustomProtocol()); assertEquals(customProtocol2, ((ImDataItem) dataList.get(1)).getCustomProtocol()); assertEquals(Im.PROTOCOL_AIM, (int) ((ImDataItem) dataList.get(2)).getProtocol()); } public void testDataItemCollapsing_nickname() { final String nickname1 = "nickname 1"; final String nickname2 = "nickname 2"; mValues1.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE); mValues2.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE); mValues3.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE); mValues1.put(Nickname.NAME, nickname1); mValues2.put(Nickname.NAME, nickname1); mValues3.put(Nickname.NAME, nickname2); final DataKind kind = mGoogleAccountType.getKindForMimetype(Nickname.CONTENT_ITEM_TYPE); final List dataList = createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3); assertEquals(2, dataList.size()); assertEquals(nickname1, ((NicknameDataItem) dataList.get(0)).getName()); assertEquals(nickname2, ((NicknameDataItem) dataList.get(1)).getName()); } public void testDataItemCollapsing_note() { final String note1 = "note 1"; final String note2 = "note 2"; mValues1.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE); mValues2.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE); mValues3.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE); mValues1.put(Note.NOTE, note1); mValues2.put(Note.NOTE, note1); mValues3.put(Note.NOTE, note2); DataKind kind = mGoogleAccountType.getKindForMimetype(Note.CONTENT_ITEM_TYPE); final List dataList = createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3); assertEquals(2, dataList.size()); assertEquals(note1, ((NoteDataItem) dataList.get(0)).getNote()); assertEquals(note2, ((NoteDataItem) dataList.get(1)).getNote()); } public void testDataItemCollapsing_organization() { final String company1 = "company1"; final String company2 = "company2"; final String title1 = "title1"; final String title2 = "title2"; mValues1.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE); mValues2.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE); mValues3.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE); mValues4.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE); mValues1.put(Organization.COMPANY, company1); mValues2.put(Organization.COMPANY, company1); mValues3.put(Organization.COMPANY, company1); mValues4.put(Organization.COMPANY, company2); mValues1.put(Organization.TITLE, title1); mValues2.put(Organization.TITLE, title1); mValues3.put(Organization.TITLE, title2); mValues4.put(Organization.TITLE, title1); final DataKind kind = mGoogleAccountType.getKindForMimetype(Organization.CONTENT_ITEM_TYPE); final List dataList = createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4); assertEquals(3, dataList.size()); assertEquals(company1, ((OrganizationDataItem) dataList.get(0)).getCompany()); assertEquals(company1, ((OrganizationDataItem) dataList.get(1)).getCompany()); assertEquals(company2, ((OrganizationDataItem) dataList.get(2)).getCompany()); assertEquals(title1, ((OrganizationDataItem) dataList.get(0)).getTitle()); assertEquals(title2, ((OrganizationDataItem) dataList.get(1)).getTitle()); } public void testDataItemCollapsing_phone() { final String phone1 = "111-111-1111"; final String phone1a = "1111111111"; final String phone2 = "222-222-2222"; mValues1.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); mValues2.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); mValues3.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); mValues1.put(Phone.NUMBER, phone1); mValues2.put(Phone.NUMBER, phone1a); mValues3.put(Phone.NUMBER, phone2); mValues1.put(Phone.TYPE, Phone.TYPE_MOBILE); mValues2.put(Phone.TYPE, Phone.TYPE_HOME); mValues3.put(Phone.TYPE, Phone.TYPE_WORK); final DataKind kind = mGoogleAccountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE); final List dataList = createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3); assertEquals(2, dataList.size()); assertEquals(phone1, ((PhoneDataItem) dataList.get(0)).getNumber()); assertEquals(phone2, ((PhoneDataItem) dataList.get(1)).getNumber()); assertEquals(Phone.TYPE_MOBILE, ((PhoneDataItem) dataList.get(0)).getKindTypeColumn(kind)); } public void testDataItemCollapsing_relation() { final String name1 = "name1"; final String name2 = "name2"; final String customRelation1 = "custom relation 1"; final String customRelation2 = "custom relation 2"; mValues1.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE); mValues2.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE); mValues3.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE); mValues4.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE); mValues1.put(Relation.NAME, name1); mValues2.put(Relation.NAME, name1); mValues3.put(Relation.NAME, name1); mValues4.put(Relation.NAME, name2); mValues1.put(Relation.TYPE, Relation.TYPE_CUSTOM); mValues2.put(Relation.TYPE, Relation.TYPE_CUSTOM); mValues3.put(Relation.TYPE, Relation.TYPE_CUSTOM); mValues4.put(Relation.TYPE, Relation.TYPE_BROTHER); mValues1.put(Relation.LABEL, customRelation1); mValues2.put(Relation.LABEL, customRelation1); mValues3.put(Relation.LABEL, customRelation2); final DataKind kind = mGoogleAccountType.getKindForMimetype(Relation.CONTENT_ITEM_TYPE); final List dataList = createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4); assertEquals(3, dataList.size()); assertEquals(name1, ((RelationDataItem) dataList.get(0)).getName()); assertEquals(name2, ((RelationDataItem) dataList.get(2)).getName()); assertEquals(customRelation1, ((RelationDataItem) dataList.get(0)).getLabel()); assertEquals(customRelation2, ((RelationDataItem) dataList.get(1)).getLabel()); } public void testDataItemCollapsing_sip() { final String sip1 = "sip 1"; final String sip2 = "sip 2"; mValues1.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE); mValues2.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE); mValues3.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE); mValues1.put(SipAddress.SIP_ADDRESS, sip1); mValues2.put(SipAddress.SIP_ADDRESS, sip1); mValues3.put(SipAddress.SIP_ADDRESS, sip2); mValues1.put(SipAddress.TYPE, SipAddress.TYPE_WORK); mValues2.put(SipAddress.TYPE, SipAddress.TYPE_HOME); mValues3.put(SipAddress.TYPE, SipAddress.TYPE_WORK); final DataKind kind = mGoogleAccountType.getKindForMimetype(SipAddress.CONTENT_ITEM_TYPE); final List dataList = createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3); assertEquals(2, dataList.size()); assertEquals(sip1, ((SipAddressDataItem) dataList.get(0)).getSipAddress()); assertEquals(sip2, ((SipAddressDataItem) dataList.get(1)).getSipAddress()); } public void testDataItemCollapsing_structuredName() { final String displayName1 = "Display Name 1"; final String displayName2 = "Display Name 2"; mValues1.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); mValues2.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); mValues3.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); mValues1.put(StructuredName.DISPLAY_NAME, displayName1); mValues2.put(StructuredName.DISPLAY_NAME, displayName1); mValues3.put(StructuredName.DISPLAY_NAME, displayName2); final DataKind kind = mGoogleAccountType.getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE); final List dataList = createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3); assertEquals(2, dataList.size()); assertEquals(displayName1, ((StructuredNameDataItem) dataList.get(0)).getDisplayName()); assertEquals(displayName2, ((StructuredNameDataItem) dataList.get(1)).getDisplayName()); } public void testDataItemCollapsing_structuredPostal() { final String formattedAddress1 = "Formatted Address 1"; final String formattedAddress2 = "Formatted Address 2"; mValues1.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE); mValues2.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE); mValues3.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE); mValues1.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress1); mValues2.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress1); mValues3.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress2); final DataKind kind = mGoogleAccountType.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE); final List dataList = createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3); assertEquals(2, dataList.size()); assertEquals(formattedAddress1, ((StructuredPostalDataItem) dataList.get(0)).getFormattedAddress()); assertEquals(formattedAddress2, ((StructuredPostalDataItem) dataList.get(1)).getFormattedAddress()); } public void testDataItemCollapsing_website() { final String url1 = "www.url1.com"; final String url2 = "www.url2.com"; mValues1.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE); mValues2.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE); mValues3.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE); mValues1.put(Website.URL, url1); mValues2.put(Website.URL, url1); mValues3.put(Website.URL, url2); final DataKind kind = mGoogleAccountType.getKindForMimetype(Website.CONTENT_ITEM_TYPE); final List dataList = createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3); assertEquals(2, dataList.size()); assertEquals(url1, ((WebsiteDataItem) dataList.get(0)).getUrl()); assertEquals(url2, ((WebsiteDataItem) dataList.get(1)).getUrl()); } }