/*
* Copyright (C) 2015 Open Whisper Systems
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.anhonesteffort.flock.test.sync.addressbook;
import android.accounts.Account;
import android.content.ContentValues;
import android.provider.ContactsContract;
import android.test.AndroidTestCase;
import org.anhonesteffort.flock.sync.addressbook.ContactFactory;
import org.anhonesteffort.flock.test.InstrumentationTestCaseWithMocks;
import org.anhonesteffort.flock.util.Base64;
import org.anhonesteffort.flock.util.guava.Optional;
import org.anhonesteffort.flock.webdav.ComponentETagPair;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import ezvcard.VCard;
import ezvcard.parameter.AddressType;
import ezvcard.parameter.EmailType;
import ezvcard.parameter.ImageType;
import ezvcard.parameter.TelephoneType;
import ezvcard.property.Address;
import ezvcard.property.Birthday;
import ezvcard.property.Email;
import ezvcard.property.FormattedName;
import ezvcard.property.Impp;
import ezvcard.property.Nickname;
import ezvcard.property.Note;
import ezvcard.property.Organization;
import ezvcard.property.Photo;
import ezvcard.property.RawProperty;
import ezvcard.property.Role;
import ezvcard.property.StructuredName;
import ezvcard.property.Telephone;
import ezvcard.property.Uid;
import ezvcard.property.Url;
import ezvcard.util.StringUtils;
/**
* rhodey
*/
public class ContactFactoryTest extends AndroidTestCase {
@Override
public void setUp() throws Exception {
super.setUp();
}
public void testGetValuesForRawContactNotStarred() throws Exception {
final String UID = "such-unique";
final String ETAG = "much-change";
final VCard inVCard = new VCard();
final ComponentETagPair<VCard> inVCardPair = new ComponentETagPair<>(inVCard, Optional.of(ETAG));
inVCard.setUid(new Uid(UID));
inVCard.setExtendedProperty(ContactFactory.PROPERTY_STARRED, "0");
final ContentValues outValues = ContactFactory.getValuesForRawContact(inVCardPair);
assertTrue(outValues.getAsString(ContactFactory.COLUMN_NAME_CONTACT_UID).equals(UID));
assertTrue(outValues.getAsString(ContactFactory.COLUMN_NAME_CONTACT_ETAG).equals(ETAG));
assertTrue(!outValues.getAsBoolean(ContactsContract.RawContacts.STARRED));
}
public void testGetValuesForRawContactStarred() throws Exception {
final String UID = "such-unique";
final String ETAG = "much-change";
final VCard inVCard = new VCard();
final ComponentETagPair<VCard> inVCardPair = new ComponentETagPair<>(inVCard, Optional.of(ETAG));
inVCard.setUid(new Uid(UID));
inVCard.setExtendedProperty(ContactFactory.PROPERTY_STARRED, "1");
final ContentValues outValues = ContactFactory.getValuesForRawContact(inVCardPair);
assertTrue(outValues.getAsString(ContactFactory.COLUMN_NAME_CONTACT_UID).equals(UID));
assertTrue(outValues.getAsString(ContactFactory.COLUMN_NAME_CONTACT_ETAG).equals(ETAG));
assertTrue(outValues.getAsBoolean(ContactsContract.RawContacts.STARRED));
}
public void testGetVCardNotStarred() throws Exception {
final String UID = "such-unique";
final String ETAG = "much-change";
final ContentValues inValues = new ContentValues();
inValues.put(ContactFactory.COLUMN_NAME_CONTACT_UID, UID);
inValues.put(ContactFactory.COLUMN_NAME_CONTACT_ETAG, ETAG);
inValues.put(ContactsContract.RawContacts.STARRED, false);
final ComponentETagPair<VCard> outVCardPair = ContactFactory.getVCard(inValues);
assertTrue(outVCardPair.getETag().get().equals(ETAG));
assertTrue(outVCardPair.getComponent().getUid().getValue().equals(UID));
assertTrue(outVCardPair.getComponent().getExtendedProperty(ContactFactory.PROPERTY_STARRED).getValue().equals("0"));
}
public void testGetVCardStarred() throws Exception {
final String UID = "such-unique";
final String ETAG = "much-change";
final ContentValues inValues = new ContentValues();
inValues.put(ContactFactory.COLUMN_NAME_CONTACT_UID, UID);
inValues.put(ContactFactory.COLUMN_NAME_CONTACT_ETAG, ETAG);
inValues.put(ContactsContract.RawContacts.STARRED, true);
final ComponentETagPair<VCard> outVCardPair = ContactFactory.getVCard(inValues);
assertTrue(outVCardPair.getETag().get().equals(ETAG));
assertTrue(outVCardPair.getComponent().getUid().getValue().equals(UID));
assertTrue(outVCardPair.getComponent().getExtendedProperty(ContactFactory.PROPERTY_STARRED).getValue().equals("1"));
}
public void testGetValuesForStructuredName() throws Exception {
final String DISPLAY_NAME = "ms. mr. crypto yolo doge jr. sr.";
final String PREFIXES = "ms. mr.";
final String GIVEN_NAME = "crypto";
final String MIDDLE_NAME = "yolo";
final String FAMILY_NAME = "doge";
final String SUFFIXES = "jr. sr.";
final String PHONETIC_GIVEN_NAME = "crip-toe";
final String PHONETIC_MIDDLE_NAME = "yo-low";
final String PHONETIC_FAMILY_NAME = "dough-eh";
final VCard inVCard = new VCard();
final StructuredName inStructuredName = new StructuredName();
inVCard.setFormattedName(DISPLAY_NAME);
inVCard.setStructuredName(inStructuredName);
inStructuredName.addPrefix(PREFIXES.split(" ")[0]);
inStructuredName.addPrefix(PREFIXES.split(" ")[1]);
inStructuredName.setGiven(GIVEN_NAME);
inStructuredName.addAdditional(MIDDLE_NAME);
inStructuredName.setFamily(FAMILY_NAME);
inStructuredName.addSuffix(SUFFIXES.split(" ")[0]);
inStructuredName.addSuffix(SUFFIXES.split(" ")[1]);
inVCard.setExtendedProperty(ContactFactory.PROPERTY_PHONETIC_GIVEN_NAME, PHONETIC_GIVEN_NAME);
inVCard.setExtendedProperty(ContactFactory.PROPERTY_PHONETIC_MIDDLE_NAME, PHONETIC_MIDDLE_NAME);
inVCard.setExtendedProperty(ContactFactory.PROPERTY_PHONETIC_FAMILY_NAME, PHONETIC_FAMILY_NAME);
final ContentValues outValues = ContactFactory.getValuesForStructuredName(inVCard).get();
assertTrue(outValues.getAsString(ContactsContract.Data.MIMETYPE).equals(ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME).equals(DISPLAY_NAME));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredName.PREFIX).equals(PREFIXES));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME).equals(GIVEN_NAME));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME).equals(MIDDLE_NAME));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME).equals(FAMILY_NAME));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredName.SUFFIX).equals(SUFFIXES));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_GIVEN_NAME).equals(PHONETIC_GIVEN_NAME));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_MIDDLE_NAME).equals(PHONETIC_MIDDLE_NAME));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_FAMILY_NAME).equals(PHONETIC_FAMILY_NAME));
}
public void testAddStructuredName() throws Exception {
final String DISPLAY_NAME = "ms. mr. crypto yolo doge jr. sr.";
final String PREFIXES = "ms. mr.";
final String GIVEN_NAME = "crypto";
final String MIDDLE_NAME = "yolo";
final String FAMILY_NAME = "doge";
final String SUFFIXES = "jr. sr.";
final String PHONETIC_GIVEN_NAME = "crip-toe";
final String PHONETIC_MIDDLE_NAME = "yo-low";
final String PHONETIC_FAMILY_NAME = "dough-eh";
final ContentValues inValues = new ContentValues();
inValues.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, DISPLAY_NAME);
inValues.put(ContactsContract.CommonDataKinds.StructuredName.PREFIX, PREFIXES);
inValues.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, GIVEN_NAME);
inValues.put(ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME, MIDDLE_NAME);
inValues.put(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, FAMILY_NAME);
inValues.put(ContactsContract.CommonDataKinds.StructuredName.SUFFIX, SUFFIXES);
inValues.put(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_GIVEN_NAME, PHONETIC_GIVEN_NAME);
inValues.put(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_MIDDLE_NAME, PHONETIC_MIDDLE_NAME);
inValues.put(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_FAMILY_NAME, PHONETIC_FAMILY_NAME);
final VCard outVCard = new VCard();
ContactFactory.addStructuredName(outVCard, inValues);
final FormattedName outFormattedName = outVCard.getFormattedName();
final StructuredName outStructuredName = outVCard.getStructuredName();
assertTrue(outFormattedName.getValue().equals(DISPLAY_NAME));
assertTrue(StringUtils.join(outStructuredName.getPrefixes(), " ").equals(PREFIXES));
assertTrue(outStructuredName.getGiven().equals(GIVEN_NAME));
assertTrue(StringUtils.join(outStructuredName.getAdditional(), " ").equals(MIDDLE_NAME));
assertTrue(outStructuredName.getFamily().equals(FAMILY_NAME));
assertTrue(StringUtils.join(outStructuredName.getSuffixes(), " ").equals(SUFFIXES));
assertTrue(outVCard.getExtendedProperty(ContactFactory.PROPERTY_PHONETIC_GIVEN_NAME).getValue().equals(PHONETIC_GIVEN_NAME));
assertTrue(outVCard.getExtendedProperty(ContactFactory.PROPERTY_PHONETIC_MIDDLE_NAME).getValue().equals(PHONETIC_MIDDLE_NAME));
assertTrue(outVCard.getExtendedProperty(ContactFactory.PROPERTY_PHONETIC_FAMILY_NAME).getValue().equals(PHONETIC_FAMILY_NAME));
}
public void testGetValuesForPhoneNumbers() throws Exception {
final String PHONE_NUMBER = "5555555555";
final TelephoneType[] PHONE_TYPES = {TelephoneType.CELL, TelephoneType.PREF};
final VCard inVCard = new VCard();
final Telephone inTelephone = new Telephone(PHONE_NUMBER);
for(TelephoneType type : PHONE_TYPES)
inTelephone.addType(type);
inVCard.addTelephoneNumber(inTelephone);
final List<ContentValues> outValuesList = ContactFactory.getValuesForPhoneNumbers(inVCard);
assertTrue(outValuesList.size() == 1);
final ContentValues outValues = outValuesList.get(0);
final String outMimeType = outValues.getAsString(ContactsContract.Data.MIMETYPE);
final String outPhoneNumber = outValues.getAsString(ContactsContract.CommonDataKinds.Phone.NUMBER);
final Integer outPhoneType = outValues.getAsInteger(ContactsContract.CommonDataKinds.Phone.TYPE);
final Integer outPhonePref = outValues.getAsInteger(ContactsContract.CommonDataKinds.Phone.IS_PRIMARY);
final Integer outPhoneSuperPref = outValues.getAsInteger(ContactsContract.CommonDataKinds.Phone.IS_SUPER_PRIMARY);
assertTrue(outMimeType.equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE));
assertTrue(outPhoneNumber.equals(PHONE_NUMBER));
assertTrue(outPhoneType.equals(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE));
assertTrue(outPhonePref == 1);
assertTrue(outPhoneSuperPref == 1);
}
public void testGetValuesForPhoneNumbersWithCustomLabel() throws Exception {
final String PHONE_NUMBER = "5555555555";
final String PHONE_TYPE_LABEL = "dogephone";
final TelephoneType PHONE_TYPE = TelephoneType.get(ContactFactory.labelToPropertyName(PHONE_TYPE_LABEL));
final VCard inVCard = new VCard();
final Telephone inTelephone = new Telephone(PHONE_NUMBER);
inTelephone.addType(PHONE_TYPE);
inVCard.addTelephoneNumber(inTelephone);
final List<ContentValues> outValuesList = ContactFactory.getValuesForPhoneNumbers(inVCard);
assertTrue(outValuesList.size() == 1);
final ContentValues outValues = outValuesList.get(0);
final String outMimeType = outValues.getAsString(ContactsContract.Data.MIMETYPE);
final String outPhoneNumber = outValues.getAsString(ContactsContract.CommonDataKinds.Phone.NUMBER);
final Integer outPhoneType = outValues.getAsInteger(ContactsContract.CommonDataKinds.Phone.TYPE);
final String outPhoneTypeLabel = outValues.getAsString(ContactsContract.CommonDataKinds.Phone.LABEL);
final Integer outPhonePref = outValues.getAsInteger(ContactsContract.CommonDataKinds.Phone.IS_PRIMARY);
final Integer outPhoneSuperPref = outValues.getAsInteger(ContactsContract.CommonDataKinds.Phone.IS_SUPER_PRIMARY);
assertTrue(outMimeType.equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE));
assertTrue(outPhoneNumber.equals(PHONE_NUMBER));
assertTrue(outPhoneType.equals(ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM));
assertTrue(outPhoneTypeLabel.toLowerCase().equals(PHONE_TYPE_LABEL.toLowerCase()));
assertTrue(outPhonePref == 0);
assertTrue(outPhoneSuperPref == 0);
}
public void testAddPhoneNumber() throws Exception {
final String PHONE_NUMBER = "5555555555";
final Integer PHONE_TYPE = ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE;
final ContentValues inValues = new ContentValues();
inValues.put(ContactsContract.CommonDataKinds.Phone.NUMBER, PHONE_NUMBER);
inValues.put(ContactsContract.CommonDataKinds.Phone.TYPE, PHONE_TYPE);
inValues.put(ContactsContract.CommonDataKinds.Phone.IS_PRIMARY, true);
inValues.put(ContactsContract.CommonDataKinds.Phone.IS_SUPER_PRIMARY, true);
final VCard outVCard = new VCard();
ContactFactory.addPhoneNumber(outVCard, inValues);
assertTrue(outVCard.getTelephoneNumbers().size() == 1);
final Telephone outPhone = outVCard.getTelephoneNumbers().get(0);
assertTrue(outPhone.getText().equals(PHONE_NUMBER));
assertTrue(outPhone.getTypes().size() == 2);
assertTrue(outPhone.getTypes().contains(TelephoneType.CELL));
assertTrue(outPhone.getTypes().contains(TelephoneType.PREF));
}
public void testAddPhoneNumberWithCustomLabel() throws Exception {
final String PHONE_NUMBER = "5555555555";
final String PHONE_TYPE_LABEL = "dogephone";
final Integer PHONE_TYPE = ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM;
final ContentValues inValues = new ContentValues();
inValues.put(ContactsContract.CommonDataKinds.Phone.NUMBER, PHONE_NUMBER);
inValues.put(ContactsContract.CommonDataKinds.Phone.TYPE, PHONE_TYPE);
inValues.put(ContactsContract.CommonDataKinds.Phone.LABEL, PHONE_TYPE_LABEL);
final VCard outVCard = new VCard();
ContactFactory.addPhoneNumber(outVCard, inValues);
assertTrue(outVCard.getTelephoneNumbers().size() == 1);
final Telephone outPhone = outVCard.getTelephoneNumbers().get(0);
assertTrue(outPhone.getText().equals(PHONE_NUMBER));
assertTrue(outPhone.getTypes().size() == 1);
final TelephoneType outPhoneType = outPhone.getTypes().iterator().next();
final String outPhoneLabel = ContactFactory.propertyNameToLabel(outPhoneType.getValue());
assertTrue(outPhoneLabel.toLowerCase().equals(PHONE_TYPE_LABEL.toLowerCase()));
}
public void testGetValuesForEmailAddress() throws Exception {
final String EMAIL_ADDRESS = "crypto@doge.wut";
final EmailType[] EMAIL_TYPES = {EmailType.HOME, EmailType.PREF};
final VCard inVCard = new VCard();
final Email inEmail = new Email(EMAIL_ADDRESS);
for (EmailType emailType : EMAIL_TYPES)
inEmail.addType(emailType);
inVCard.addEmail(inEmail);
final List<ContentValues> outValuesList = ContactFactory.getValuesForEmailAddresses(inVCard);
assertTrue(outValuesList.size() == 1);
final ContentValues outValues = outValuesList.get(0);
final String outMimeType = outValues.getAsString(ContactsContract.Data.MIMETYPE);
final String outEmailAddress = outValues.getAsString(ContactsContract.CommonDataKinds.Email.ADDRESS);
final Integer outEmailType = outValues.getAsInteger(ContactsContract.CommonDataKinds.Email.TYPE);
final Integer outEmailPref = outValues.getAsInteger(ContactsContract.CommonDataKinds.Email.IS_PRIMARY);
final Integer outEmailSuperPref = outValues.getAsInteger(ContactsContract.CommonDataKinds.Email.IS_SUPER_PRIMARY);
assertTrue(outMimeType.equals(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE));
assertTrue(outEmailAddress.equals(EMAIL_ADDRESS));
assertTrue(outEmailType.equals(ContactsContract.CommonDataKinds.Email.TYPE_HOME));
assertTrue(outEmailPref == 1);
assertTrue(outEmailSuperPref == 1);
}
public void testGetValuesForEmailAddressWithCustomLabel() throws Exception {
final String EMAIL_ADDRESS = "crypto@doge.wut";
final String EMAIL_TYPE_LABEL = "dogemail";
final EmailType EMAIL_TYPE = EmailType.get(ContactFactory.labelToPropertyName(EMAIL_TYPE_LABEL));
final VCard inVCard = new VCard();
final Email inEmail = new Email(EMAIL_ADDRESS);
inEmail.addType(EMAIL_TYPE);
inVCard.addEmail(inEmail);
final List<ContentValues> outValuesList = ContactFactory.getValuesForEmailAddresses(inVCard);
assertTrue(outValuesList.size() == 1);
final ContentValues outValues = outValuesList.get(0);
final String outMimeType = outValues.getAsString(ContactsContract.Data.MIMETYPE);
final String outEmailAddress = outValues.getAsString(ContactsContract.CommonDataKinds.Email.ADDRESS);
final Integer outEmailType = outValues.getAsInteger(ContactsContract.CommonDataKinds.Email.TYPE);
final String outEmailTypeLabel = outValues.getAsString(ContactsContract.CommonDataKinds.Email.LABEL);
final Integer outEmailPref = outValues.getAsInteger(ContactsContract.CommonDataKinds.Email.IS_PRIMARY);
final Integer outEmailSuperPref = outValues.getAsInteger(ContactsContract.CommonDataKinds.Email.IS_SUPER_PRIMARY);
assertTrue(outMimeType.equals(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE));
assertTrue(outEmailAddress.equals(EMAIL_ADDRESS));
assertTrue(outEmailType.equals(ContactsContract.CommonDataKinds.Email.TYPE_CUSTOM));
assertTrue(outEmailTypeLabel.toLowerCase().equals(EMAIL_TYPE_LABEL.toLowerCase()));
assertTrue(outEmailPref == 0);
assertTrue(outEmailSuperPref == 0);
}
public void testAddEmailAddress() throws Exception {
final String EMAIL_ADDRESS = "crypto@doge.wut";
final Integer EMAIL_ADDRESS_TYPE = ContactsContract.CommonDataKinds.Email.TYPE_HOME;
final ContentValues inValues = new ContentValues();
inValues.put(ContactsContract.CommonDataKinds.Email.ADDRESS, EMAIL_ADDRESS);
inValues.put(ContactsContract.CommonDataKinds.Email.TYPE, EMAIL_ADDRESS_TYPE);
inValues.put(ContactsContract.CommonDataKinds.Email.IS_PRIMARY, true);
inValues.put(ContactsContract.CommonDataKinds.Email.IS_SUPER_PRIMARY, true);
final VCard outVCard = new VCard();
ContactFactory.addEmailAddress(outVCard, inValues);
final List<Email> outEmailList = outVCard.getEmails();
assertTrue(outEmailList.size() == 1);
final Email outEmail = outEmailList.get(0);
assertTrue(outEmail.getValue().equals(EMAIL_ADDRESS));
assertTrue(outEmail.getTypes().size() == 2);
assertTrue(outEmail.getTypes().contains(EmailType.HOME));
assertTrue(outEmail.getTypes().contains(EmailType.PREF));
}
public void testAddEmailAddressWithCustomLabel() throws Exception {
final String EMAIL_ADDRESS = "crypto@doge.wut";
final String EMAIL_ADDRESS_TYPE_LABEL = "dogemail";
final Integer EMAIL_ADDRESS_TYPE = ContactsContract.CommonDataKinds.Email.TYPE_CUSTOM;
final ContentValues inValues = new ContentValues();
inValues.put(ContactsContract.CommonDataKinds.Email.ADDRESS, EMAIL_ADDRESS);
inValues.put(ContactsContract.CommonDataKinds.Email.TYPE, EMAIL_ADDRESS_TYPE);
inValues.put(ContactsContract.CommonDataKinds.Email.LABEL, EMAIL_ADDRESS_TYPE_LABEL);
final VCard outVCard = new VCard();
ContactFactory.addEmailAddress(outVCard, inValues);
final List<Email> outEmailList = outVCard.getEmails();
assertTrue(outEmailList.size() == 1);
final Email outEmail = outEmailList.get(0);
assertTrue(outEmail.getValue().equals(EMAIL_ADDRESS));
assertTrue(outEmail.getTypes().size() == 1);
final EmailType outEmailType = outEmail.getTypes().iterator().next();
final String outEmailTypeLabel = ContactFactory.propertyNameToLabel(outEmailType.getValue());
assertTrue(outEmailTypeLabel.toLowerCase().equals(EMAIL_ADDRESS_TYPE_LABEL));
}
public void testGetPhotoForValues() throws Exception {
final byte[] PHOTO_BYTES = {0x00, 0x01, 0x02, 0x03};
final ContentValues values = new ContentValues();
values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, PHOTO_BYTES);
final Photo outPhoto = ContactFactory.getPhotoForValues(values).get();
assertTrue(Arrays.equals(outPhoto.getData(), PHOTO_BYTES));
}
public void testGetValuesForPhoto() throws Exception {
final byte[]PHOTO_BYTES = {0x00, 0x01, 0x02, 0x03};
final Photo inPhoto = new Photo(PHOTO_BYTES, ImageType.PNG);
final VCard inVCard = new VCard();
inVCard.addPhoto(inPhoto);
ContentValues outValues = ContactFactory.getValuesForPhoto(inVCard).get();
assertTrue(outValues.getAsString(ContactsContract.Data.MIMETYPE).equals(ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE));
assertTrue(Arrays.equals(
outValues.getAsByteArray(ContactsContract.CommonDataKinds.Photo.PHOTO),
PHOTO_BYTES
));
}
public void testGetValuesForOrganization() throws Exception {
final String ORG_NAME = "Doge LLC";
final String ORG_TITLE = "CTO";
final VCard inVCard = new VCard();
final Organization inOrg = new Organization();
final Role inRole = new Role(ORG_TITLE);
inOrg.addValue(ORG_NAME);
inVCard.addOrganization(inOrg);
inVCard.addRole(inRole);
final List<ContentValues> outValuesList = ContactFactory.getValuesForOrganizations(inVCard);
assertTrue(outValuesList.size() == 1);
final ContentValues outValues = outValuesList.get(0);
assertTrue(outValues.getAsString(ContactsContract.Data.MIMETYPE).equals(ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.Organization.COMPANY).equals(ORG_NAME));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.Organization.TITLE).equals(ORG_TITLE));
}
public void testAddOrganization() throws Exception {
final String ORG_NAME = "Doge LLC";
final String ORG_TITLE = "CTO";
final ContentValues inValues = new ContentValues();
inValues.put(ContactsContract.CommonDataKinds.Organization.COMPANY, ORG_NAME);
inValues.put(ContactsContract.CommonDataKinds.Organization.TITLE, ORG_TITLE);
final VCard outVCard = new VCard();
ContactFactory.addOrganization(outVCard, inValues);
assertTrue(outVCard.getOrganizations().size() == 1);
assertTrue(outVCard.getRoles().size() == 1);
final Organization outOrg = outVCard.getOrganizations().get(0);
final Role outRole = outVCard.getRoles().get(0);
assertTrue(outOrg.getValues().size() == 1);
assertTrue(outOrg.getValues().get(0).equals(ORG_NAME));
assertTrue(outRole.getValue().equals(ORG_TITLE));
}
public void testGetValuesForInstantMessaging() throws Exception {
final String IM_HANDLE = "dogebot";
final Impp inImpp = Impp.aim(IM_HANDLE);
final VCard inVCard = new VCard();
inVCard.addImpp(inImpp);
final List<ContentValues> outValuesList = ContactFactory.getValuesForInstantMessaging(inVCard);
assertTrue(outValuesList.size() == 1);
final ContentValues outValues = outValuesList.get(0);
assertTrue(outValues.getAsString(ContactsContract.Data.MIMETYPE).equals(ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.Im.DATA).equals(IM_HANDLE));
assertTrue(outValues.getAsInteger(ContactsContract.CommonDataKinds.Im.PROTOCOL).equals(ContactsContract.CommonDataKinds.Im.PROTOCOL_AIM));
}
public void testGetValuesForInstantMessagingWithCustomProtocol() throws Exception {
final String IM_HANDLE = "dogebot";
final String IM_PROTOCOL = "doge-irc";
final Impp inImpp = new Impp(IM_PROTOCOL, IM_HANDLE);
final VCard inVCard = new VCard();
inVCard.addImpp(inImpp);
final List<ContentValues> outValuesList = ContactFactory.getValuesForInstantMessaging(inVCard);
assertTrue(outValuesList.size() == 1);
final ContentValues outValues = outValuesList.get(0);
assertTrue(outValues.getAsString(ContactsContract.Data.MIMETYPE).equals(ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.Im.DATA).equals(IM_HANDLE));
assertTrue(outValues.getAsInteger(ContactsContract.CommonDataKinds.Im.PROTOCOL).equals(ContactsContract.CommonDataKinds.Im.PROTOCOL_CUSTOM));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL).equals(IM_PROTOCOL));
}
public void testAddInstantMessaging() throws Exception {
final String IM_HANDLE = "dogebot";
final Integer IM_PROTOCOL = ContactsContract.CommonDataKinds.Im.PROTOCOL_AIM;
final ContentValues inValues = new ContentValues();
inValues.put(ContactsContract.CommonDataKinds.Im.DATA, IM_HANDLE);
inValues.put(ContactsContract.CommonDataKinds.Im.PROTOCOL, IM_PROTOCOL);
final VCard outVCard = new VCard();
ContactFactory.addInstantMessaging(outVCard, inValues);
assertTrue(outVCard.getImpps().size() == 1);
final Impp outImpp = outVCard.getImpps().get(0);
assertTrue(outImpp.getHandle().equals(IM_HANDLE));
assertTrue(outImpp.getProtocol().equals("aim"));
}
public void testAddInstantMessagingWithCustomProtocol() throws Exception {
final String IM_HANDLE = "dogebot";
final Integer IM_PROTOCOL_TYPE = ContactsContract.CommonDataKinds.Im.PROTOCOL_CUSTOM;
final String IM_PROTOCOL = "doge-irc";
final ContentValues inValues = new ContentValues();
inValues.put(ContactsContract.CommonDataKinds.Im.DATA, IM_HANDLE);
inValues.put(ContactsContract.CommonDataKinds.Im.PROTOCOL, IM_PROTOCOL_TYPE);
inValues.put(ContactsContract.CommonDataKinds.Im.CUSTOM_PROTOCOL, IM_PROTOCOL);
final VCard outVCard = new VCard();
ContactFactory.addInstantMessaging(outVCard, inValues);
assertTrue(outVCard.getImpps().size() == 1);
final Impp outImpp = outVCard.getImpps().get(0);
assertTrue(outImpp.getHandle().equals(IM_HANDLE));
assertTrue(outImpp.getProtocol().equals(IM_PROTOCOL));
}
public void testGetValuesForNickName() throws Exception {
final String NICK_NAME = "dge";
final Nickname inNick = new Nickname();
final VCard inVCard = new VCard();
inNick.addValue(NICK_NAME);
inVCard.addNickname(inNick);
final List<ContentValues> outValuesList = ContactFactory.getValuesForNickNames(inVCard);
assertTrue(outValuesList.size() == 1);
final ContentValues outValues = outValuesList.get(0);
assertTrue(outValues.getAsString(ContactsContract.Data.MIMETYPE).equals(ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.Nickname.NAME).equals(NICK_NAME));
}
public void testAddNickName() throws Exception {
final String NICK_NAME = "dge";
final ContentValues inValues = new ContentValues();
inValues.put(ContactsContract.CommonDataKinds.Nickname.NAME, NICK_NAME);
final VCard outVCard = new VCard();
ContactFactory.addNickName(outVCard, inValues);
assertTrue(outVCard.getNicknames().size() == 1);
final Nickname outNick = outVCard.getNicknames().get(0);
assertTrue(outNick.getValues().size() == 1);
assertTrue(outNick.getValues().get(0).equals(NICK_NAME));
}
public void testGetValuesForNotesWithoutBase64() throws Exception {
final String NOTE = "hello, this is doge";
final Note inNote = new Note(NOTE);
final VCard inVCard = new VCard();
inVCard.addNote(inNote);
final List<ContentValues> outValuesList = ContactFactory.getValuesForNotes(inVCard);
assertTrue(outValuesList.size() == 1);
final ContentValues outValues = outValuesList.get(0);
assertTrue(outValues.getAsString(ContactsContract.Data.MIMETYPE).equals(ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.Note.NOTE).equals(NOTE));
}
public void testGetValuesForNotesWithBase64() throws Exception {
final String NOTE = "hello, this is doge";
final Note inNote = new Note(Base64.encodeBytes(NOTE.getBytes()));
final VCard inVCard = new VCard();
inVCard.addNote(inNote);
final List<ContentValues> outValuesList = ContactFactory.getValuesForNotes(inVCard);
assertTrue(outValuesList.size() == 1);
final ContentValues outValues = outValuesList.get(0);
assertTrue(outValues.getAsString(ContactsContract.Data.MIMETYPE).equals(ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.Note.NOTE).equals(NOTE));
}
public void testAddNote() throws Exception {
final String NOTE = "hello, this is doge";
final ContentValues inValues = new ContentValues();
inValues.put(ContactsContract.CommonDataKinds.Note.NOTE, NOTE);
final VCard outVCard = new VCard();
ContactFactory.addNote(outVCard, inValues);
assertTrue(outVCard.getNotes().size() == 1);
final Note outNote = outVCard.getNotes().get(0);
assertTrue(new String(Base64.decode(outNote.getValue())).equals(NOTE));
}
public void testGetValuesForPostalAddressesWithoutBase64() throws Exception {
final AddressType ADDRESS_TYPE = AddressType.HOME;
final String FORMATTED_ADDRESS = "1337 doge blvd., PO BOX 9001, Oakland, CA 94607, US";
final String STREET = "1337 doge blvd.";
final String PO_BOX = "PO BOX 9001";
final String NEIGHBORHOOD = "";
final String LOCALITY = "Oakland";
final String REGION = "CA";
final String POST_CODE = "94607";
final String COUNTRY = "US";
final VCard inVCard = new VCard();
final Address inAddress = new Address();
inAddress.setLabel(FORMATTED_ADDRESS);
inAddress.setStreetAddress(STREET);
inAddress.setPoBox(PO_BOX);
inAddress.setExtendedAddress(NEIGHBORHOOD);
inAddress.setLocality(LOCALITY);
inAddress.setRegion(REGION);
inAddress.setPostalCode(POST_CODE);
inAddress.setCountry(COUNTRY);
inAddress.addType(ADDRESS_TYPE);
inVCard.addAddress(inAddress);
final List<ContentValues> outValuesList = ContactFactory.getValuesForPostalAddresses(inVCard);
assertTrue(outValuesList.size() == 1);
final ContentValues outValues = outValuesList.get(0);
assertTrue(outValues.getAsString(ContactsContract.Data.MIMETYPE).equals(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE));
assertTrue(outValues.getAsInteger(ContactsContract.CommonDataKinds.StructuredPostal.TYPE).equals(ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS).equals(FORMATTED_ADDRESS));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.STREET).equals(STREET));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.POBOX).equals(PO_BOX));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.NEIGHBORHOOD).equals(NEIGHBORHOOD));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.CITY).equals(LOCALITY));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.REGION).equals(REGION));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE).equals(POST_CODE));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY).equals(COUNTRY));
}
public void testGetValuesForPostalAddressesWithBase64() throws Exception {
final AddressType ADDRESS_TYPE = AddressType.HOME;
final String FORMATTED_ADDRESS = "1337 doge blvd., PO BOX 9001, Oakland, CA 94607, US";
final String STREET = "1337 doge blvd.";
final String PO_BOX = "PO BOX 9001";
final String NEIGHBORHOOD = "";
final String LOCALITY = "Oakland";
final String REGION = "CA";
final String POST_CODE = "94607";
final String COUNTRY = "US";
final VCard inVCard = new VCard();
final Address inAddress = new Address();
inAddress.setLabel(Base64.encodeBytes(FORMATTED_ADDRESS.getBytes()));
inAddress.setStreetAddress(STREET);
inAddress.setPoBox(PO_BOX);
inAddress.setExtendedAddress(NEIGHBORHOOD);
inAddress.setLocality(LOCALITY);
inAddress.setRegion(REGION);
inAddress.setPostalCode(POST_CODE);
inAddress.setCountry(COUNTRY);
inAddress.addType(ADDRESS_TYPE);
inVCard.addAddress(inAddress);
final List<ContentValues> outValuesList = ContactFactory.getValuesForPostalAddresses(inVCard);
assertTrue(outValuesList.size() == 1);
final ContentValues outValues = outValuesList.get(0);
assertTrue(outValues.getAsString(ContactsContract.Data.MIMETYPE).equals(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE));
assertTrue(outValues.getAsInteger(ContactsContract.CommonDataKinds.StructuredPostal.TYPE).equals(ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS).equals(FORMATTED_ADDRESS));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.STREET).equals(STREET));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.POBOX).equals(PO_BOX));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.NEIGHBORHOOD).equals(NEIGHBORHOOD));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.CITY).equals(LOCALITY));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.REGION).equals(REGION));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE).equals(POST_CODE));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY).equals(COUNTRY));
}
public void testGetValuesForPostalAddressesWithCustomLabel() throws Exception {
final String ADDRESS_TYPE_LABEL = "sumtype";
final AddressType ADDRESS_TYPE = AddressType.get(ADDRESS_TYPE_LABEL);
final String FORMATTED_ADDRESS = "1337 doge blvd., PO BOX 9001, Oakland, CA 94607, US";
final String STREET = "1337 doge blvd.";
final String PO_BOX = "PO BOX 9001";
final String NEIGHBORHOOD = "";
final String LOCALITY = "Oakland";
final String REGION = "CA";
final String POST_CODE = "94607";
final String COUNTRY = "US";
final VCard inVCard = new VCard();
final Address inAddress = new Address();
inAddress.setLabel(FORMATTED_ADDRESS);
inAddress.setStreetAddress(STREET);
inAddress.setPoBox(PO_BOX);
inAddress.setExtendedAddress(NEIGHBORHOOD);
inAddress.setLocality(LOCALITY);
inAddress.setRegion(REGION);
inAddress.setPostalCode(POST_CODE);
inAddress.setCountry(COUNTRY);
inAddress.addType(ADDRESS_TYPE);
inVCard.addAddress(inAddress);
final List<ContentValues> outValuesList = ContactFactory.getValuesForPostalAddresses(inVCard);
assertTrue(outValuesList.size() == 1);
final ContentValues outValues = outValuesList.get(0);
assertTrue(outValues.getAsString(ContactsContract.Data.MIMETYPE).equals(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE));
assertTrue(outValues.getAsInteger(ContactsContract.CommonDataKinds.StructuredPostal.TYPE).equals(ContactsContract.CommonDataKinds.StructuredPostal.TYPE_CUSTOM));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS).equals(FORMATTED_ADDRESS));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.STREET).equals(STREET));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.POBOX).equals(PO_BOX));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.NEIGHBORHOOD).equals(NEIGHBORHOOD));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.CITY).equals(LOCALITY));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.REGION).equals(REGION));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE).equals(POST_CODE));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY).equals(COUNTRY));
final String outAddressTypeLabel = outValues.getAsString(ContactsContract.CommonDataKinds.StructuredPostal.LABEL);
assertTrue(outAddressTypeLabel.toLowerCase().equals(ADDRESS_TYPE_LABEL.toLowerCase()));
}
public void testAddPostalAddress() throws Exception {
final Integer ADDRESS_TYPE = ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME;
final String FORMATTED_ADDRESS = "1337 doge blvd., PO BOX 9001, Oakland, CA 94607, US";
final String STREET = "1337 doge blvd.";
final String PO_BOX = "PO BOX 9001";
final String NEIGHBORHOOD = "";
final String LOCALITY = "Oakland";
final String REGION = "CA";
final String POST_CODE = "94607";
final String COUNTRY = "US";
final ContentValues inValues = new ContentValues();
inValues.put(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ADDRESS_TYPE);
inValues.put(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, FORMATTED_ADDRESS);
inValues.put(ContactsContract.CommonDataKinds.StructuredPostal.STREET, STREET);
inValues.put(ContactsContract.CommonDataKinds.StructuredPostal.POBOX, PO_BOX);
inValues.put(ContactsContract.CommonDataKinds.StructuredPostal.NEIGHBORHOOD, NEIGHBORHOOD);
inValues.put(ContactsContract.CommonDataKinds.StructuredPostal.CITY, LOCALITY);
inValues.put(ContactsContract.CommonDataKinds.StructuredPostal.REGION, REGION);
inValues.put(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, POST_CODE);
inValues.put(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, COUNTRY);
final VCard outVCard = new VCard();
ContactFactory.addPostalAddress(outVCard, inValues);
assertTrue(outVCard.getAddresses().size() == 1);
final Address outAddress = outVCard.getAddresses().get(0);
assertTrue(outAddress.getTypes().size() == 1);
assertTrue(outAddress.getTypes().iterator().next().equals(AddressType.HOME));
assertTrue(outAddress.getLabel().equals(Base64.encodeBytes(FORMATTED_ADDRESS.getBytes())));
assertTrue(outAddress.getStreetAddress().equals(STREET));
assertTrue(outAddress.getPoBox().equals(PO_BOX));
assertTrue(outAddress.getExtendedAddress().equals(NEIGHBORHOOD));
assertTrue(outAddress.getLocality().equals(LOCALITY));
assertTrue(outAddress.getRegion().equals(REGION));
assertTrue(outAddress.getPostalCode().equals(POST_CODE));
assertTrue(outAddress.getCountry().equals(COUNTRY));
}
public void testAddPostalAddressWithCustomLabel() throws Exception {
final Integer ADDRESS_TYPE = ContactsContract.CommonDataKinds.StructuredPostal.TYPE_CUSTOM;
final String ADDRESS_TYPE_LABEL = "sumtype";
final String FORMATTED_ADDRESS = "1337 doge blvd., PO BOX 9001, Oakland, CA 94607, US";
final String STREET = "1337 doge blvd.";
final String PO_BOX = "PO BOX 9001";
final String NEIGHBORHOOD = "";
final String LOCALITY = "Oakland";
final String REGION = "CA";
final String POST_CODE = "94607";
final String COUNTRY = "US";
final ContentValues inValues = new ContentValues();
inValues.put(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ADDRESS_TYPE);
inValues.put(ContactsContract.CommonDataKinds.StructuredPostal.LABEL, ADDRESS_TYPE_LABEL);
inValues.put(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, FORMATTED_ADDRESS);
inValues.put(ContactsContract.CommonDataKinds.StructuredPostal.STREET, STREET);
inValues.put(ContactsContract.CommonDataKinds.StructuredPostal.POBOX, PO_BOX);
inValues.put(ContactsContract.CommonDataKinds.StructuredPostal.NEIGHBORHOOD, NEIGHBORHOOD);
inValues.put(ContactsContract.CommonDataKinds.StructuredPostal.CITY, LOCALITY);
inValues.put(ContactsContract.CommonDataKinds.StructuredPostal.REGION, REGION);
inValues.put(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, POST_CODE);
inValues.put(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, COUNTRY);
final VCard outVCard = new VCard();
ContactFactory.addPostalAddress(outVCard, inValues);
assertTrue(outVCard.getAddresses().size() == 1);
final Address outAddress = outVCard.getAddresses().get(0);
assertTrue(outAddress.getTypes().size() == 1);
assertTrue(outAddress.getTypes().iterator().next().getValue().equals(ADDRESS_TYPE_LABEL));
assertTrue(outAddress.getLabel().equals(Base64.encodeBytes(FORMATTED_ADDRESS.getBytes())));
assertTrue(outAddress.getStreetAddress().equals(STREET));
assertTrue(outAddress.getPoBox().equals(PO_BOX));
assertTrue(outAddress.getExtendedAddress().equals(NEIGHBORHOOD));
assertTrue(outAddress.getLocality().equals(LOCALITY));
assertTrue(outAddress.getRegion().equals(REGION));
assertTrue(outAddress.getPostalCode().equals(POST_CODE));
assertTrue(outAddress.getCountry().equals(COUNTRY));
}
public void testGetValuesForWebsites() throws Exception {
final String WEBSITE_URL = "https://do.ge";
final VCard inVCard = new VCard();
final Url inUrl = new Url(WEBSITE_URL);
inVCard.addUrl(inUrl);
final List<ContentValues> outValuesList = ContactFactory.getValuesForWebsites(inVCard);
assertTrue(outValuesList.size() == 1);
final ContentValues outValues = outValuesList.get(0);
assertTrue(outValues.getAsString(ContactsContract.Data.MIMETYPE).equals(ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.Website.URL).equals(WEBSITE_URL));
}
public void testAddWebsite() throws Exception {
final String WEBSITE_URL = "https://do.ge";
final ContentValues inValues = new ContentValues();
inValues.put(ContactsContract.CommonDataKinds.Website.URL, WEBSITE_URL);
final VCard outVCard = new VCard();
ContactFactory.addWebsite(outVCard, inValues);
assertTrue(outVCard.getUrls().size() == 1);
assertTrue(outVCard.getUrls().get(0).getValue().equals(WEBSITE_URL));
}
public void testGetValuesForEvents() throws Exception {
final String EVENT_BIRTHDAY = "2001-01-01";
final String EVENT_ANNIVERSARY = "2002-02-02";
final String EVENT_OTHER = "2003-03-03";
final String EVENT_CUSTOM = "2004-04-04";
final String EVENT_CUSTOM_LABEL = "nothing really";
final VCard inVCard = new VCard();
final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
final Birthday inBirthday = new Birthday(formatter.parse(EVENT_BIRTHDAY));
inVCard.setBirthday(inBirthday);
inVCard.setExtendedProperty(ContactFactory.PROPERTY_EVENT_ANNIVERSARY, EVENT_ANNIVERSARY);
inVCard.setExtendedProperty(ContactFactory.PROPERTY_EVENT_OTHER, EVENT_OTHER);
inVCard.setExtendedProperty(ContactFactory.PROPERTY_EVENT_CUSTOM, EVENT_CUSTOM)
.setParameter(ContactFactory.PARAMETER_EVENT_CUSTOM_LABEL, EVENT_CUSTOM_LABEL);
final List<ContentValues> outValuesList = ContactFactory.getValuesForEvents(inVCard);
assertTrue(outValuesList.size() == 4);
boolean foundBirthday = false;
boolean foundAnniversary = false;
boolean foundOther = false;
boolean foundCustom = false;
for (ContentValues outValues : outValuesList) {
assertTrue(outValues.getAsString(ContactsContract.Data.MIMETYPE).equals(ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE));
switch (outValues.getAsInteger(ContactsContract.CommonDataKinds.Event.TYPE)) {
case ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY:
foundBirthday = true;
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.Event.START_DATE).equals(EVENT_BIRTHDAY));
break;
case ContactsContract.CommonDataKinds.Event.TYPE_ANNIVERSARY:
foundAnniversary = true;
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.Event.START_DATE).equals(EVENT_ANNIVERSARY));
break;
case ContactsContract.CommonDataKinds.Event.TYPE_OTHER:
foundOther = true;
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.Event.START_DATE).equals(EVENT_OTHER));
break;
case ContactsContract.CommonDataKinds.Event.TYPE_CUSTOM:
foundCustom = true;
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.Event.LABEL).equals(EVENT_CUSTOM_LABEL));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.Event.START_DATE).equals(EVENT_CUSTOM));
break;
default:
throw new RuntimeException("unexpected event type!");
}
}
assertTrue(foundBirthday && foundAnniversary && foundOther && foundCustom);
}
public void testAddBirthdayEvent() throws Exception {
final String EVENT_BIRTHDAY = "2001-01-01";
final ContentValues inValues = new ContentValues();
inValues.put(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY);
inValues.put(ContactsContract.CommonDataKinds.Event.START_DATE, EVENT_BIRTHDAY);
final VCard outVCard = new VCard();
ContactFactory.addEvent("wow", outVCard, inValues);
final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
assertTrue(outVCard.getBirthday().getDate().equals(formatter.parse(EVENT_BIRTHDAY)));
}
public void testAddAnniversaryEvent() throws Exception {
final String EVENT_ANNIVERSARY = "2002-02-02";
final ContentValues inValues = new ContentValues();
inValues.put(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_ANNIVERSARY);
inValues.put(ContactsContract.CommonDataKinds.Event.START_DATE, EVENT_ANNIVERSARY);
final VCard outVCard = new VCard();
ContactFactory.addEvent("wow", outVCard, inValues);
assertTrue(outVCard.getExtendedProperty(ContactFactory.PROPERTY_EVENT_ANNIVERSARY).getValue().equals(EVENT_ANNIVERSARY));
}
public void testAddOtherEvent() throws Exception {
final String EVENT_OTHER = "2002-03-03";
final ContentValues inValues = new ContentValues();
inValues.put(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_OTHER);
inValues.put(ContactsContract.CommonDataKinds.Event.START_DATE, EVENT_OTHER);
final VCard outVCard = new VCard();
ContactFactory.addEvent("wow", outVCard, inValues);
assertTrue(outVCard.getExtendedProperty(ContactFactory.PROPERTY_EVENT_OTHER).getValue().equals(EVENT_OTHER));
}
public void testAddCustomEvent() throws Exception {
final String EVENT_CUSTOM = "2003-03-03";
final String EVENT_LABEL = "nothing really";
final ContentValues inValues = new ContentValues();
inValues.put(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_CUSTOM);
inValues.put(ContactsContract.CommonDataKinds.Event.START_DATE, EVENT_CUSTOM);
inValues.put(ContactsContract.CommonDataKinds.Event.LABEL, EVENT_LABEL);
final VCard outVCard = new VCard();
ContactFactory.addEvent("wow", outVCard, inValues);
final RawProperty outEvent = outVCard.getExtendedProperty(ContactFactory.PROPERTY_EVENT_CUSTOM);
assertTrue(outEvent.getValue().equals(EVENT_CUSTOM));
assertTrue(outEvent.getParameter(ContactFactory.PARAMETER_EVENT_CUSTOM_LABEL).equals(EVENT_LABEL));
}
public void testGetValuesForSipAddresses() throws Exception {
final String SIP_ADDRESS = "sip:1-999-123-4567@voip-provider.example.net";
final VCard inVCard = new VCard();
inVCard.setExtendedProperty(ContactFactory.PROPERTY_SIP, SIP_ADDRESS);
final List<ContentValues> outValuesList = ContactFactory.getValuesForSipAddresses(inVCard);
assertTrue(outValuesList.size() == 1);
final ContentValues outValues = outValuesList.get(0);
assertTrue(outValues.getAsString(ContactsContract.Data.MIMETYPE).equals(ContactsContract.CommonDataKinds.SipAddress.CONTENT_ITEM_TYPE));
assertTrue(outValues.getAsInteger(ContactsContract.CommonDataKinds.SipAddress.TYPE).equals(ContactsContract.CommonDataKinds.SipAddress.TYPE_OTHER));
assertTrue(outValues.getAsString(ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS).equals(SIP_ADDRESS));
}
public void testAddSipAddress() throws Exception {
final String SIP_ADDRESS = "sip:1-999-123-4567@voip-provider.example.net";
final ContentValues inValues = new ContentValues();
inValues.put(ContactsContract.CommonDataKinds.SipAddress.SIP_ADDRESS, SIP_ADDRESS);
final VCard outVCard = new VCard();
ContactFactory.addSipAddress(outVCard, inValues);
assertTrue(outVCard.getExtendedProperty(ContactFactory.PROPERTY_SIP).getValue().equals(SIP_ADDRESS));
}
public void testAddGetAggregationExceptions() throws Exception {
final Integer AGGREGATE_TYPE = ContactsContract.AggregationExceptions.TYPE_KEEP_SEPARATE;
final Account CONTACT_ACCOUNT = new Account("doge@wow", "org.doge.wow");
final String CONTACT_UID = "such-unique";
final List<ContactFactory.AggregationException> inExceptions = new LinkedList<>();
inExceptions.add(
new ContactFactory.AggregationException(AGGREGATE_TYPE, CONTACT_ACCOUNT, CONTACT_UID)
);
inExceptions.add(
new ContactFactory.AggregationException(AGGREGATE_TYPE, CONTACT_ACCOUNT, CONTACT_UID)
);
final VCard outInVCard = new VCard();
ContactFactory.addAggregationExceptions(outInVCard, inExceptions);
final List<ContactFactory.AggregationException> outExceptions =
ContactFactory.getAggregationExceptions(outInVCard);
assertTrue(outExceptions.size() == 2);
for (ContactFactory.AggregationException outException : outExceptions) {
assertTrue(outException.getType() == AGGREGATE_TYPE);
assertTrue(outException.getContactAccount().equals(CONTACT_ACCOUNT));
assertTrue(outException.getContactUid().equals(CONTACT_UID));
}
}
}