148dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa/* 248dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * Copyright (C) 2011 The Android Open Source Project 348dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * 448dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * Licensed under the Apache License, Version 2.0 (the "License"); 548dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * you may not use this file except in compliance with the License. 648dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * You may obtain a copy of the License at 748dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * 848dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * http://www.apache.org/licenses/LICENSE-2.0 948dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * 1048dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * Unless required by applicable law or agreed to in writing, software 1148dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * distributed under the License is distributed on an "AS IS" BASIS, 1248dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1348dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * See the License for the specific language governing permissions and 1448dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * limitations under the License. 1548dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa */ 1648dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawapackage com.android.vcard.tests; 1748dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa 181de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport com.android.vcard.VCardConfig; 1948dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawaimport com.android.vcard.VCardConstants; 2048dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawaimport com.android.vcard.VCardEntry; 211de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport com.android.vcard.VCardEntry.AndroidCustomData; 221de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport com.android.vcard.VCardEntry.AnniversaryData; 231de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport com.android.vcard.VCardEntry.BirthdayData; 241de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport com.android.vcard.VCardEntry.EmailData; 251de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport com.android.vcard.VCardEntry.EntryElement; 261de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport com.android.vcard.VCardEntry.EntryLabel; 271de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport com.android.vcard.VCardEntry.ImData; 281de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport com.android.vcard.VCardEntry.NameData; 291de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport com.android.vcard.VCardEntry.NicknameData; 301de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport com.android.vcard.VCardEntry.NoteData; 311de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport com.android.vcard.VCardEntry.OrganizationData; 321de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport com.android.vcard.VCardEntry.PhoneData; 331de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport com.android.vcard.VCardEntry.PhotoData; 341de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport com.android.vcard.VCardEntry.PostalData; 351de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport com.android.vcard.VCardEntry.SipData; 3648dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawaimport com.android.vcard.VCardEntryConstructor; 3748dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawaimport com.android.vcard.VCardEntryHandler; 3848dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawaimport com.android.vcard.VCardInterpreter; 391de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport com.android.vcard.VCardProperty; 4048dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa 4148dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawaimport android.content.ContentProviderOperation; 4248dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawaimport android.content.ContentResolver; 431de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Email; 441de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Im; 451de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Organization; 461de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Phone; 471de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.StructuredPostal; 481de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.SipAddress; 4948dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawaimport android.test.AndroidTestCase; 5048dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa 5148dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawaimport java.util.ArrayList; 5248dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawaimport java.util.Arrays; 531de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport java.util.HashMap; 5448dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawaimport java.util.List; 551de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawaimport java.util.Map; 5648dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa 5748dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawapublic class VCardEntryTests extends AndroidTestCase { 5848dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa private class MockVCardEntryHandler implements VCardEntryHandler { 5948dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa private List<VCardEntry> mEntries = new ArrayList<VCardEntry>(); 6048dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa private boolean mOnStartCalled; 6148dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa private boolean mOnEndCalled; 6248dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa 6348dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa @Override 6448dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa public void onStart() { 6548dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa assertFalse(mOnStartCalled); 6648dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa mOnStartCalled = true; 6748dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa } 6848dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa 6948dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa @Override 7048dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa public void onEntryCreated(VCardEntry entry) { 7148dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa assertTrue(mOnStartCalled); 7248dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa assertFalse(mOnEndCalled); 7348dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa mEntries.add(entry); 7448dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa } 7548dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa 7648dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa @Override 7748dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa public void onEnd() { 7848dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa assertTrue(mOnStartCalled); 7948dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa assertFalse(mOnEndCalled); 8048dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa mOnEndCalled = true; 8148dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa } 8248dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa 8348dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa public List<VCardEntry> getEntries() { 8448dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa return mEntries; 8548dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa } 8648dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa } 8748dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa 8848dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa /** 8948dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * Tests VCardEntry and related clasess can handle nested classes given 9048dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * {@link VCardInterpreter} is called appropriately. 9148dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * 9248dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * This test manually calls VCardInterpreter's callback mechanism and checks 9348dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * {@link VCardEntryConstructor} constructs {@link VCardEntry} per given calls. 9448dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * 9548dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * Intended vCard is as follows: 9648dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * <code> 9748dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * BEGIN:VCARD 9848dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * N:test1 9948dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * BEGIN:VCARD 10048dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * N:test2 10148dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * END:VCARD 10248dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * TEL:1 10348dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * END:VCARD 10448dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * </code> 10548dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa */ 10648dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa public void testNestHandling() { 10748dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa VCardEntryConstructor entryConstructor = new VCardEntryConstructor(); 10848dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa MockVCardEntryHandler entryHandler = new MockVCardEntryHandler(); 10948dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa entryConstructor.addEntryHandler(entryHandler); 11048dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa 1111de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entryConstructor.onVCardStarted(); 1121de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entryConstructor.onEntryStarted(); 1131de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa VCardProperty property = new VCardProperty(); 1141de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setName(VCardConstants.PROPERTY_N); 1151de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setValues("test1"); 1161de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entryConstructor.onPropertyCreated(property); 1171de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 1181de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entryConstructor.onEntryStarted(); // begin nest 1191de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property = new VCardProperty(); 1201de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setName(VCardConstants.PROPERTY_N); 1211de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setValues("test2"); 1221de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entryConstructor.onPropertyCreated(property); 1231de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entryConstructor.onEntryEnded(); // end nest 1241de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 1251de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property = new VCardProperty(); 1261de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setName(VCardConstants.PROPERTY_TEL); 1271de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setValues("1"); 1281de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entryConstructor.onPropertyCreated(property); 1291de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entryConstructor.onEntryEnded(); 1301de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entryConstructor.onVCardEnded(); 13148dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa 13248dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa List<VCardEntry> entries = entryHandler.getEntries(); 13348dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa assertEquals(2, entries.size()); 13448dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa VCardEntry parent = entries.get(1); 13548dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa VCardEntry child = entries.get(0); 13648dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa assertEquals("test1", parent.getDisplayName()); 13748dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa assertEquals("test2", child.getDisplayName()); 13848dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa List<VCardEntry.PhoneData> phoneList = parent.getPhoneList(); 13948dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa assertNotNull(phoneList); 14048dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa assertEquals(1, phoneList.size()); 1411de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertEquals("1", phoneList.get(0).getNumber()); 1421de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa } 1431de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 1441de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa private class MockEntryElementIterator implements VCardEntry.EntryElementIterator { 1451de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa private boolean mStartCalled; 1461de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa private boolean mEndCalled; 1471de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa private EntryLabel mLabel; 1481de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa private final Map<EntryLabel, EntryElement> mExpectedElements = 1491de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa new HashMap<EntryLabel, EntryElement>(); 1501de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 1511de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa public void addExpectedElement(EntryElement elem) { 1521de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa mExpectedElements.put(elem.getEntryLabel(), elem); 1531de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa } 1541de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 1551de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa @Override 1561de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa public void onIterationStarted() { 1571de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertFalse(mStartCalled); 1581de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertFalse(mEndCalled); 1591de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertNull(mLabel); 1601de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa mStartCalled = true; 1611de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa } 1621de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 1631de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa @Override 1641de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa public void onIterationEnded() { 1651de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertTrue(mStartCalled); 1661de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertFalse(mEndCalled); 1671de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertNull(mLabel); 1681de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertTrue("Expected Elements remaining: " + 1691de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa Arrays.toString(mExpectedElements.values().toArray()), 1701de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa mExpectedElements.isEmpty()); 1711de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa } 1721de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 1731de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa @Override 1741de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa public void onElementGroupStarted(EntryLabel label) { 1751de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertTrue(mStartCalled); 1761de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertFalse(mEndCalled); 1771de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertNull(mLabel); 1781de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa mLabel = label; 1791de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa } 1801de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 1811de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa @Override 1821de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa public void onElementGroupEnded() { 1831de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertTrue(mStartCalled); 1841de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertFalse(mEndCalled); 1851de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertNotNull(mLabel); 1861de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa mLabel = null; 1871de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa } 1881de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 1891de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa @Override 1901de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa public boolean onElement(EntryElement elem) { 1911de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa EntryElement expectedElem = mExpectedElements.remove(elem.getEntryLabel()); 1921de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertNotNull("Unexpected elem: " + elem.toString(), expectedElem); 1931de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertEquals(expectedElem, elem); 1941de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa return true; 1951de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa } 1961de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa } 1971de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 1981de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa /** 1991de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa * Tests every element in VCardEntry is iterated by 2001de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa * {@link VCardEntry#iterateAllData(com.android.vcard.VCardEntry.EntryElementIterator)}. 2011de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa */ 2021de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa public void testEntryElementIterator() { 2031de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa VCardEntry entry = new VCardEntry(); 2041de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa MockEntryElementIterator iterator = new MockEntryElementIterator(); 2051de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 2061de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa VCardProperty property = new VCardProperty(); 2071de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setName("N"); 2081de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setValues("family", "given", "middle", "prefix", "suffix"); 2091de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entry.addProperty(property); 2101de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa NameData nameData = new NameData(); 2111de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa nameData.setFamily("family"); 2121de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa nameData.setGiven("given"); 2131de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa nameData.setMiddle("middle"); 2141de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa nameData.setPrefix("prefix"); 2151de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa nameData.setSuffix("suffix"); 2161de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa iterator.addExpectedElement(nameData); 2171de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 2181de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property = new VCardProperty(); 2191de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setName("TEL"); 2201de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setParameter("TYPE", "HOME"); 2211de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setValues("1"); 2221de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entry.addProperty(property); 2231de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa PhoneData phoneData = new PhoneData("1", Phone.TYPE_HOME, null, false); 2241de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa iterator.addExpectedElement(phoneData); 2251de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 2261de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property = new VCardProperty(); 2271de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setName("EMAIL"); 2281de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setParameter("TYPE", "WORK"); 2291de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setValues("email"); 2301de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entry.addProperty(property); 2311de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa EmailData emailData = new EmailData("email", Email.TYPE_WORK, null, false); 2321de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa iterator.addExpectedElement(emailData); 2331de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 2341de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property = new VCardProperty(); 2351de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setName("ADR"); 2361de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setParameter("TYPE", "HOME"); 2371de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setValues(null, null, "street"); 2381de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entry.addProperty(property); 2391de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa PostalData postalData = new PostalData(null, null, "street", null, null, null, 2401de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa null, StructuredPostal.TYPE_HOME, null, false, 2411de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa VCardConfig.VCARD_TYPE_DEFAULT); 2421de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa iterator.addExpectedElement(postalData); 2431de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 2441de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property = new VCardProperty(); 2451de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setName("ORG"); 2461de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setValues("organization", "depertment"); 2471de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entry.addProperty(property); 2481de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa OrganizationData organizationData = new OrganizationData( 2491de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa "organization", "depertment", null, null, Organization.TYPE_WORK, false); 2501de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa iterator.addExpectedElement(organizationData); 2511de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 2521de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property = new VCardProperty(); 2531de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setName("X-GOOGLE-TALK"); 2541de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setParameter("TYPE", "WORK"); 2551de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setValues("googletalk"); 2561de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entry.addProperty(property); 2571de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa ImData imData = new ImData( 2581de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa Im.PROTOCOL_GOOGLE_TALK, null, "googletalk", Im.TYPE_WORK, false); 2591de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa iterator.addExpectedElement(imData); 2601de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 2611de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property = new VCardProperty(); 2621de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setName("PHOTO"); 2631de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setParameter("TYPE", "PNG"); 2641de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa byte[] photoBytes = new byte[] {1}; 2651de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setByteValue(photoBytes); 2661de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entry.addProperty(property); 2671de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa PhotoData photoData = new PhotoData("PNG", photoBytes, false); 2681de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa iterator.addExpectedElement(photoData); 2691de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 2701de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property = new VCardProperty(); 2711de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setName("X-SIP"); 2721de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setValues("sipdata"); 2731de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entry.addProperty(property); 2741de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa SipData sipData = new SipData("sip:sipdata", SipAddress.TYPE_OTHER, null, false); 2751de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa iterator.addExpectedElement(sipData); 2761de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 2771de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property = new VCardProperty(); 2781de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setName("NICKNAME"); 2791de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setValues("nickname"); 2801de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entry.addProperty(property); 2811de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa NicknameData nicknameData = new NicknameData("nickname"); 2821de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa iterator.addExpectedElement(nicknameData); 2831de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 2841de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property = new VCardProperty(); 2851de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setName("NOTE"); 2861de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setValues("note"); 2871de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entry.addProperty(property); 2881de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa NoteData noteData = new NoteData("note"); 2891de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa iterator.addExpectedElement(noteData); 2901de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 2911de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property = new VCardProperty(); 2921de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setName("BDAY"); 2931de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setValues("birthday"); 2941de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entry.addProperty(property); 2951de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa BirthdayData birthdayData = new BirthdayData("birthday"); 2961de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa iterator.addExpectedElement(birthdayData); 2971de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 2981de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property = new VCardProperty(); 2991de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setName("ANNIVERSARY"); 3001de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setValues("anniversary"); 3011de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entry.addProperty(property); 3021de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa AnniversaryData anniversaryData = new AnniversaryData("anniversary"); 3031de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa iterator.addExpectedElement(anniversaryData); 3041de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 3051de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property = new VCardProperty(); 3061de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setName("X-ANDROID-CUSTOM"); 3071de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setValues("mime;value"); 3081de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entry.addProperty(property); 3091de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa AndroidCustomData androidCustom = new AndroidCustomData("mime", Arrays.asList("value")); 3101de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa iterator.addExpectedElement(androidCustom); 3111de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 3121de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entry.iterateAllData(iterator); 3131de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa } 3141de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 3151de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa public void testToString() { 3161de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa VCardEntry entry = new VCardEntry(); 3171de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa VCardProperty property = new VCardProperty(); 3181de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setName("N"); 3191de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setValues("Family", "Given", "Middle", "Prefix", "Suffix"); 3201de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entry.addProperty(property); 3211de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa entry.consolidateFields(); 3221de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 3231de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa String result = entry.toString(); 3241de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertNotNull(result); 3251de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa 3261de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertTrue(result.contains(String.valueOf(entry.hashCode()))); 3271de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertTrue(result.contains(VCardEntry.EntryLabel.NAME.toString())); 3281de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertTrue(result.contains("Family")); 3291de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertTrue(result.contains("Given")); 3301de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertTrue(result.contains("Middle")); 3311de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertTrue(result.contains("Prefix")); 3321de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertTrue(result.contains("Suffix")); 33348dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa } 33448dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa 33548dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa /** 33648dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * Tests that VCardEntry emits correct insert operation for name field. 33748dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa */ 33848dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa public void testConstructInsertOperationsInsertName() { 33948dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa VCardEntry entry = new VCardEntry(); 3401de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa VCardProperty property = new VCardProperty(); 3411de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setName("N"); 3421de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa property.setValues("Family", "Given", "Middle", "Prefix", "Suffix"); 34348dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa entry.addProperty(property); 34448dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa entry.consolidateFields(); 34548dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa 3461de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa NameData nameData = entry.getNameData(); 3471de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertEquals("Family", nameData.getFamily()); 3481de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertEquals("Given", nameData.getGiven()); 3491de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertEquals("Middle", nameData.getMiddle()); 3501de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertEquals("Prefix", nameData.getPrefix()); 3511de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa assertEquals("Suffix", nameData.getSuffix()); 35248dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa 35348dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa ContentResolver resolver = getContext().getContentResolver(); 35448dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa ArrayList<ContentProviderOperation> operationList = 35548dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa new ArrayList<ContentProviderOperation>(); 35648dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa entry.constructInsertOperations(resolver, operationList); 35748dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa 35848dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa // Need too many details for testing these. Just check basics. 35948dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa // TODO: introduce nice-to-test mechanism here. 36048dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa assertEquals(2, operationList.size()); 36148dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa assertEquals(ContentProviderOperation.TYPE_INSERT, operationList.get(0).getType()); 36248dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa assertEquals(ContentProviderOperation.TYPE_INSERT, operationList.get(1).getType()); 36348dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa } 36448dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa 36548dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa /** 36648dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa * Tests that VCardEntry refrains from emitting unnecessary insert operation. 36748dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa */ 36848dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa public void testConstructInsertOperationsEmptyData() { 36948dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa VCardEntry entry = new VCardEntry(); 37048dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa ContentResolver resolver = getContext().getContentResolver(); 37148dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa ArrayList<ContentProviderOperation> operationList = 37248dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa new ArrayList<ContentProviderOperation>(); 37348dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa entry.constructInsertOperations(resolver, operationList); 37448dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa assertEquals(0, operationList.size()); 37548dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa } 37648dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa 37748dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa // TODO: add bunch of test for constructInsertOperations.. 37848dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa}