VCardExporterTests.java revision 237dd947f2e22d34f490bf35ef4b850d05cfffa9
1bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/*
2bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * Copyright (C) 2009 The Android Open Source Project
3bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee *
4bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * Licensed under the Apache License, Version 2.0 (the "License");
5bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * you may not use this file except in compliance with the License.
6bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * You may obtain a copy of the License at
7bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee *
8bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee *      http://www.apache.org/licenses/LICENSE-2.0
9bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee *
10bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * Unless required by applicable law or agreed to in writing, software
11bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * distributed under the License is distributed on an "AS IS" BASIS,
12bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * See the License for the specific language governing permissions and
14bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * limitations under the License.
15bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */
16bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
17bd8388b4555645b3d29abc6a94c303638064d69awonjong.leepackage com.android.vcard.tests;
18bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
19bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeimport android.content.ContentValues;
20bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeimport android.provider.ContactsContract.CommonDataKinds.Email;
21bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeimport android.provider.ContactsContract.CommonDataKinds.Event;
22bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeimport android.provider.ContactsContract.CommonDataKinds.Im;
23bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeimport android.provider.ContactsContract.CommonDataKinds.Nickname;
24bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeimport android.provider.ContactsContract.CommonDataKinds.Note;
25bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeimport android.provider.ContactsContract.CommonDataKinds.Organization;
26bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeimport android.provider.ContactsContract.CommonDataKinds.Phone;
27bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeimport android.provider.ContactsContract.CommonDataKinds.Photo;
28bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeimport android.provider.ContactsContract.CommonDataKinds.Relation;
29bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeimport android.provider.ContactsContract.CommonDataKinds.StructuredName;
30bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeimport android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
31bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeimport android.provider.ContactsContract.CommonDataKinds.Website;
32bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
33bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeimport com.android.vcard.VCardConfig;
34bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeimport com.android.vcard.tests.test_utils.ContactEntry;
35bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeimport com.android.vcard.tests.test_utils.PropertyNodesVerifierElem;
36bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeimport com.android.vcard.tests.test_utils.PropertyNodesVerifierElem.TypeSet;
37bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeimport com.android.vcard.tests.test_utils.VCardTestsBase;
38bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
39bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeimport java.util.Arrays;
40bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
41bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/**
42bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * Tests for the code related to vCard exporter, inculding vCard composer.
43bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * This test class depends on vCard importer code, so if tests for vCard importer fail,
44bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * the result of this class will not be reliable.
45bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */
46bd8388b4555645b3d29abc6a94c303638064d69awonjong.leepublic class VCardExporterTests extends VCardTestsBase {
47bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private static final byte[] sPhotoByteArray =
48bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        VCardImporterTests.sPhotoByteArrayForComplicatedCase;
49bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
50bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testSimpleV21() {
51bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(V21);
52bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addInputEntry().addContentValues(StructuredName.CONTENT_ITEM_TYPE)
53bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.FAMILY_NAME, "Ando")
54bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.GIVEN_NAME, "Roid");
55bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElem()
56bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("FN", "Roid Ando")
57bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("N", "Ando;Roid;;;",
58bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        Arrays.asList("Ando", "Roid", "", "", ""));
59bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
60bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
61bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testStructuredNameBasic(int vcardType) {
62bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        final boolean isV21 = VCardConfig.isVersion21(vcardType);
63bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
64bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addInputEntry().addContentValues(StructuredName.CONTENT_ITEM_TYPE)
65bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
66bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
67bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
68bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PREFIX, "AppropriatePrefix")
69bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.SUFFIX, "AppropriateSuffix")
70bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_FAMILY_NAME, "AppropriatePhoneticFamily")
71bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_GIVEN_NAME, "AppropriatePhoneticGiven")
72bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_MIDDLE_NAME, "AppropriatePhoneticMiddle");
73bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
74bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        PropertyNodesVerifierElem elem = mVerifier.addPropertyNodesVerifierElem()
75bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNodeWithOrder("N",
76bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
77bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        + "AppropriatePrefix;AppropriateSuffix",
78bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
79bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                                "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"))
80bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNodeWithOrder("FN",
81bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        "AppropriatePrefix AppropriateGivenName "
82bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        + "AppropriateMiddleName AppropriateFamilyName AppropriateSuffix")
83bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-PHONETIC-FIRST-NAME", "AppropriatePhoneticGiven")
84bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-PHONETIC-MIDDLE-NAME", "AppropriatePhoneticMiddle")
85bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-PHONETIC-LAST-NAME", "AppropriatePhoneticFamily");
86bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
87bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        if (!isV21) {
88bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            elem.addExpectedNode("SORT-STRING",
89bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    "AppropriatePhoneticGiven AppropriatePhoneticMiddle "
90bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    + "AppropriatePhoneticFamily");
91bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        }
92bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
93bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
94bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testStructuredNameBasicV21() {
95bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testStructuredNameBasic(V21);
96bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
97bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
98bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testStructuredNameBasicV30() {
99bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testStructuredNameBasic(V30);
100bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
101bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
102bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    /**
103bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee     * Test that only "primary" StructuredName is emitted, so that our vCard file
104bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee     * will not confuse the external importer, assuming there may be some importer
105bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee     * which presume that there's only one property toward each of  "N", "FN", etc.
106bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee     * Note that more than one "N", "FN", etc. properties are acceptable in vCard spec.
107bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee     */
108bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testStructuredNameUsePrimaryCommon(int vcardType) {
109bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        final boolean isV30 = (vcardType == V30);
110bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
111bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        ContactEntry entry = mVerifier.addInputEntry();
112bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
113bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName1")
114bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName1")
115bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName1")
116bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PREFIX, "DoNotEmitPrefix1")
117bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.SUFFIX, "DoNotEmitSuffix1")
118bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_FAMILY_NAME, "DoNotEmitPhoneticFamily1")
119bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_GIVEN_NAME, "DoNotEmitPhoneticGiven1")
120bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_MIDDLE_NAME, "DoNotEmitPhoneticMiddle1");
121bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
122bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        // With "IS_PRIMARY=1". This is what we should use.
123bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
124bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
125bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
126bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
127bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PREFIX, "AppropriatePrefix")
128bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.SUFFIX, "AppropriateSuffix")
129bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_FAMILY_NAME, "AppropriatePhoneticFamily")
130bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_GIVEN_NAME, "AppropriatePhoneticGiven")
131bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_MIDDLE_NAME, "AppropriatePhoneticMiddle")
132bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.IS_PRIMARY, 1);
133bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
134bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        // With "IS_PRIMARY=1", but we should ignore this time, since this is second, not first.
135bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
136bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName2")
137bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName2")
138bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName2")
139bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PREFIX, "DoNotEmitPrefix2")
140bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.SUFFIX, "DoNotEmitSuffix2")
141bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_FAMILY_NAME, "DoNotEmitPhoneticFamily2")
142bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_GIVEN_NAME, "DoNotEmitPhoneticGiven2")
143bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_MIDDLE_NAME, "DoNotEmitPhoneticMiddle2")
144bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.IS_PRIMARY, 1);
145bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
146bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        PropertyNodesVerifierElem elem = mVerifier.addPropertyNodesVerifierElem()
147bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNodeWithOrder("N",
148bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
149bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        + "AppropriatePrefix;AppropriateSuffix",
150bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
151bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                                "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"))
152bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNodeWithOrder("FN",
153bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        "AppropriatePrefix AppropriateGivenName "
154bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        + "AppropriateMiddleName AppropriateFamilyName AppropriateSuffix")
155bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-PHONETIC-FIRST-NAME", "AppropriatePhoneticGiven")
156bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-PHONETIC-MIDDLE-NAME", "AppropriatePhoneticMiddle")
157bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-PHONETIC-LAST-NAME", "AppropriatePhoneticFamily");
158bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
159bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        if (isV30) {
160bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            elem.addExpectedNode("SORT-STRING",
161bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    "AppropriatePhoneticGiven AppropriatePhoneticMiddle "
162bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    + "AppropriatePhoneticFamily");
163bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        }
164bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
165bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
166bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testStructuredNameUsePrimaryV21() {
167bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testStructuredNameUsePrimaryCommon(V21);
168bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
169bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
170bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testStructuredNameUsePrimaryV30() {
171bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testStructuredNameUsePrimaryCommon(V30);
172bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
173bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
174bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    /**
175bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee     * Tests that only "super primary" StructuredName is emitted.
176bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee     * See also the comment in {@link #testStructuredNameUsePrimaryCommon(int)}.
177bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee     */
178bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testStructuredNameUseSuperPrimaryCommon(int vcardType) {
179bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        final boolean isV30 = (vcardType == V30);
180bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
181bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        ContactEntry entry = mVerifier.addInputEntry();
182bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
183bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName1")
184bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName1")
185bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName1")
186bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PREFIX, "DoNotEmitPrefix1")
187bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.SUFFIX, "DoNotEmitSuffix1")
188bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_FAMILY_NAME, "DoNotEmitPhoneticFamily1")
189bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_GIVEN_NAME, "DoNotEmitPhoneticGiven1")
190bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_MIDDLE_NAME, "DoNotEmitPhoneticMiddle1");
191bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
192bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        // With "IS_PRIMARY=1", but we should ignore this time.
193bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
194bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName2")
195bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName2")
196bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName2")
197bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PREFIX, "DoNotEmitPrefix2")
198bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.SUFFIX, "DoNotEmitSuffix2")
199bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_FAMILY_NAME, "DoNotEmitPhoneticFamily2")
200bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_GIVEN_NAME, "DoNotEmitPhoneticGiven2")
201bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_MIDDLE_NAME, "DoNotEmitPhoneticMiddle2")
202bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.IS_PRIMARY, 1);
203bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
204bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        // With "IS_SUPER_PRIMARY=1". This is what we should use.
205bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
206bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
207bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
208bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
209bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PREFIX, "AppropriatePrefix")
210bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.SUFFIX, "AppropriateSuffix")
211bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_FAMILY_NAME, "AppropriatePhoneticFamily")
212bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_GIVEN_NAME, "AppropriatePhoneticGiven")
213bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_MIDDLE_NAME, "AppropriatePhoneticMiddle")
214bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.IS_SUPER_PRIMARY, 1);
215bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
216bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
217bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName3")
218bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName3")
219bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName3")
220bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PREFIX, "DoNotEmitPrefix3")
221bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.SUFFIX, "DoNotEmitSuffix3")
222bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_FAMILY_NAME, "DoNotEmitPhoneticFamily3")
223bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_GIVEN_NAME, "DoNotEmitPhoneticGiven3")
224bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PHONETIC_MIDDLE_NAME, "DoNotEmitPhoneticMiddle3")
225bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.IS_PRIMARY, 1);
226bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
227bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        PropertyNodesVerifierElem elem = mVerifier.addPropertyNodesVerifierElem()
228bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNodeWithOrder("N",
229bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
230bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        + "AppropriatePrefix;AppropriateSuffix",
231bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
232bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                                "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"))
233bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNodeWithOrder("FN",
234bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        "AppropriatePrefix AppropriateGivenName "
235bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        + "AppropriateMiddleName AppropriateFamilyName AppropriateSuffix")
236bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-PHONETIC-FIRST-NAME", "AppropriatePhoneticGiven")
237bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-PHONETIC-MIDDLE-NAME", "AppropriatePhoneticMiddle")
238bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-PHONETIC-LAST-NAME", "AppropriatePhoneticFamily");
239bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
240bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        if (isV30) {
241bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            elem.addExpectedNode("SORT-STRING",
242bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    "AppropriatePhoneticGiven AppropriatePhoneticMiddle"
243bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    + " AppropriatePhoneticFamily");
244bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        }
245bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
246bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
247bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testStructuredNameUseSuperPrimaryV21() {
248bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testStructuredNameUseSuperPrimaryCommon(V21);
249bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
250bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
251bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testStructuredNameUseSuperPrimaryV30() {
252bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testStructuredNameUseSuperPrimaryCommon(V30);
253bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
254bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
255bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testNickNameV30() {
256bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(V30);
257bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addInputEntry().addContentValues(Nickname.CONTENT_ITEM_TYPE)
258bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Nickname.NAME, "Nicky");
259bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
260bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
261bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            .addExpectedNodeWithOrder("NICKNAME", "Nicky");
262bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
263bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
264bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testPhoneBasicCommon(int vcardType) {
265bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
266bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addInputEntry().addContentValues(Phone.CONTENT_ITEM_TYPE)
267bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "1")
268bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_HOME);
269bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
270bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "1", new TypeSet("HOME"));
271bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
272bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
273bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPhoneBasicV21() {
274bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPhoneBasicCommon(V21);
275bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
276bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
277bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPhoneBasicV30() {
278bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPhoneBasicCommon(V30);
279bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
280bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
281bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPhoneRefrainFormatting() {
282bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(V21 | VCardConfig.FLAG_REFRAIN_PHONE_NUMBER_FORMATTING);
283bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addInputEntry().addContentValues(Phone.CONTENT_ITEM_TYPE)
284bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "1234567890(abcdefghijklmnopqrstuvwxyz)")
285bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_HOME);
286bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
287bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "1234567890(abcdefghijklmnopqrstuvwxyz)",
288bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        new TypeSet("HOME"));
289bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
290bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
291bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    /**
292bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee     * Tests that vCard composer emits corresponding type param which we expect.
293bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee     */
294bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testPhoneVariousTypeSupport(int vcardType) {
295bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
296bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        ContactEntry entry = mVerifier.addInputEntry();
297bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
298bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "10")
299bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_HOME);
300bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
301bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "20")
302bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_WORK);
303bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
304bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "30")
305bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_FAX_HOME);
306bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
307bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "40")
308bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_FAX_WORK);
309bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
310bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "50")
311bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_MOBILE);
312bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
313bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "60")
314bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_PAGER);
315bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
316bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "70")
317bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_OTHER);
318bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
319bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "80")
320bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_CAR);
321bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
322bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "90")
323bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_COMPANY_MAIN);
324bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
325bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "100")
326bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_ISDN);
327bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
328bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "110")
329bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_MAIN);
330bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
331bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "120")
332bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_OTHER_FAX);
333bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
334bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "130")
335bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_TELEX);
336bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
337bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "140")
338bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_WORK_MOBILE);
339bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
340bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "150")
341bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_WORK_PAGER);
342bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
343bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "160")
344bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_MMS);
345bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
346bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
347bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "10", new TypeSet("HOME"))
348bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "20", new TypeSet("WORK"))
349bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "30", new TypeSet("HOME", "FAX"))
350bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "40", new TypeSet("WORK", "FAX"))
351bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "50", new TypeSet("CELL"))
352bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "60", new TypeSet("PAGER"))
353bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "70", new TypeSet("VOICE"))
354bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "80", new TypeSet("CAR"))
355bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "90", new TypeSet("WORK", "PREF"))
356bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "100", new TypeSet("ISDN"))
357bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "110", new TypeSet("PREF"))
358bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "120", new TypeSet("FAX"))
359bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "130", new TypeSet("TLX"))
360bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "140", new TypeSet("WORK", "CELL"))
361bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "150", new TypeSet("WORK", "PAGER"))
362bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "160", new TypeSet("MSG"));
363bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
364bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
365bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPhoneVariousTypeSupportV21() {
366bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPhoneVariousTypeSupport(V21);
367bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
368bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
369bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPhoneVariousTypeSupportV30() {
370bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPhoneVariousTypeSupport(V30);
371bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
372bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
373bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    /**
374bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee     * Tests that "PREF"s are emitted appropriately.
375bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee     */
376bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testPhonePrefHandlingCommon(int vcardType) {
377bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
378bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        ContactEntry entry = mVerifier.addInputEntry();
379bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
380bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "1")
381bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_HOME);
382bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
383bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "2")
384bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_WORK)
385bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.IS_PRIMARY, 1);
386bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
387bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "3")
388bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_FAX_HOME)
389bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.IS_PRIMARY, 1);
390bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
391bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "4")
392bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_FAX_WORK);
393bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
394bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
395bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "4", new TypeSet("WORK", "FAX"))
396bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "3", new TypeSet("HOME", "FAX", "PREF"))
397bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "2", new TypeSet("WORK", "PREF"))
398bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "1", new TypeSet("HOME"));
399bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
400bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
401bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPhonePrefHandlingV21() {
402bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPhonePrefHandlingCommon(V21);
403bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
404bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
405bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPhonePrefHandlingV30() {
406bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPhonePrefHandlingCommon(V30);
407bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
408bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
409bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testMiscPhoneTypeHandling(int vcardType) {
410bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
411bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        ContactEntry entry = mVerifier.addInputEntry();
412bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
413bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "1")
414bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
415bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.LABEL, "Modem");
416bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
417bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "2")
418bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
419bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.LABEL, "MSG");
420bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
421bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "3")
422bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
423bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.LABEL, "BBS");
424bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
425bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "4")
426bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
427bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.LABEL, "VIDEO");
428bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
429bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "5")
430bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_CUSTOM);
431bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
432bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "6")
433bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
434bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.LABEL, "_AUTO_CELL");  // The old indicator for the type mobile.
435bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
436bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "7")
437bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
438bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.LABEL, "\u643A\u5E2F");  // Mobile phone in Japanese Kanji
439bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
440bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "8")
441bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
442bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.LABEL, "invalid");
443bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        PropertyNodesVerifierElem elem = mVerifier.addPropertyNodesVerifierElemWithEmptyName();
444bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        if (VCardConfig.isVersion30(vcardType)) {
445bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            // vCard 3.0 accepts "invalid". Also stop using toUpper()
446bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            elem.addExpectedNode("TEL", "1", new TypeSet("Modem"))
447bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    .addExpectedNode("TEL", "2", new TypeSet("MSG"))
448bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    .addExpectedNode("TEL", "3", new TypeSet("BBS"))
449bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    .addExpectedNode("TEL", "4", new TypeSet("VIDEO"))
450bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    .addExpectedNode("TEL", "5", new TypeSet("VOICE"))
451bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    .addExpectedNode("TEL", "6", new TypeSet("CELL"))
452bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    .addExpectedNode("TEL", "7", new TypeSet("CELL"))
453bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    .addExpectedNode("TEL", "8", new TypeSet("invalid"));
454bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        } else {
455bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            elem.addExpectedNode("TEL", "1", new TypeSet("MODEM"))
456bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    .addExpectedNode("TEL", "2", new TypeSet("MSG"))
457bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    .addExpectedNode("TEL", "3", new TypeSet("BBS"))
458bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    .addExpectedNode("TEL", "4", new TypeSet("VIDEO"))
459bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    .addExpectedNode("TEL", "5", new TypeSet("VOICE"))
460bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    .addExpectedNode("TEL", "6", new TypeSet("CELL"))
461bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    .addExpectedNode("TEL", "7", new TypeSet("CELL"))
462bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                    .addExpectedNode("TEL", "8", new TypeSet("X-invalid"));
463bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        }
464bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
465bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
466bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPhoneTypeHandlingV21() {
467bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testMiscPhoneTypeHandling(V21);
468bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
469bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
470bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPhoneTypeHandlingV30() {
471bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testMiscPhoneTypeHandling(V30);
472bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
473bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
474bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testEmailBasicCommon(int vcardType) {
475bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
476bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addInputEntry().addContentValues(Email.CONTENT_ITEM_TYPE)
477bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Email.DATA, "sample@example.com");
478bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
479bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            .addExpectedNode("EMAIL", "sample@example.com");
480bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
481bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
482bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testEmailBasicV21() {
483bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testEmailBasicCommon(V21);
484bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
485bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
486bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testEmailBasicV30() {
487bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testEmailBasicCommon(V30);
488bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
489bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
490bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testEmailVariousTypeSupportCommon(int vcardType) {
491bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
492bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        ContactEntry entry = mVerifier.addInputEntry();
493bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
494bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Email.DATA, "type_home@example.com")
495bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Email.TYPE, Email.TYPE_HOME);
496bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
497bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Email.DATA, "type_work@example.com")
498bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Email.TYPE, Email.TYPE_WORK);
499bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
500bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Email.DATA, "type_mobile@example.com")
501bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Email.TYPE, Email.TYPE_MOBILE);
502bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
503bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Email.DATA, "type_other@example.com")
504bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Email.TYPE, Email.TYPE_OTHER);
505bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
506bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("EMAIL", "type_home@example.com", new TypeSet("HOME"))
507bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("EMAIL", "type_work@example.com", new TypeSet("WORK"))
508bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("EMAIL", "type_mobile@example.com", new TypeSet("CELL"))
509bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("EMAIL", "type_other@example.com");
510bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
511bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
512bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testEmailVariousTypeSupportV21() {
513bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testEmailVariousTypeSupportCommon(V21);
514bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
515bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
516bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testEmailVariousTypeSupportV30() {
517bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testEmailVariousTypeSupportCommon(V30);
518bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
519bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
520bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testEmailPrefHandlingCommon(int vcardType) {
521bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
522bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        ContactEntry entry = mVerifier.addInputEntry();
523bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
524bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Email.DATA, "type_home@example.com")
525bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Email.TYPE, Email.TYPE_HOME)
526bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Email.IS_PRIMARY, 1);
527bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
528bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Email.DATA, "type_notype@example.com")
529bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Email.IS_PRIMARY, 1);
530bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
531bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
532bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("EMAIL", "type_notype@example.com", new TypeSet("PREF"))
533bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("EMAIL", "type_home@example.com", new TypeSet("HOME", "PREF"));
534bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
535bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
536bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testEmailPrefHandlingV21() {
537bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testEmailPrefHandlingCommon(V21);
538bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
539bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
540bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testEmailPrefHandlingV30() {
541bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testEmailPrefHandlingCommon(V30);
542bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
543bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
544bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testPostalAddressCommon(int vcardType) {
545bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
546bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
547bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredPostal.POBOX, "Pobox")
548bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredPostal.NEIGHBORHOOD, "Neighborhood")
549bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredPostal.STREET, "Street")
550bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredPostal.CITY, "City")
551bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredPostal.REGION, "Region")
552bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredPostal.POSTCODE, "100")
553bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredPostal.COUNTRY, "Country")
554bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredPostal.FORMATTED_ADDRESS, "Formatted Address")
555bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK);
556bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        // adr-value    = 0*6(text-value ";") text-value
557bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        //              ; PO Box, Extended Address, Street, Locality, Region, Postal Code,
558bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        //              ; Country Name
559bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        //
560bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        // The NEIGHBORHOOD field is appended after the CITY field.
561bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
562bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("ADR",
563bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        Arrays.asList("Pobox", "", "Street", "City Neighborhood",
564bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                                "Region", "100", "Country"), new TypeSet("WORK"));
565bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
566bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
567bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPostalAddressV21() {
568bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPostalAddressCommon(V21);
569bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
570bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
571bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPostalAddressV30() {
572bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPostalAddressCommon(V30);
573bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
574bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
575bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testPostalAddressNonNeighborhood(int vcardType) {
576bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
577bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
578bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredPostal.CITY, "City");
579bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
580bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("ADR",
581bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        Arrays.asList("", "", "", "City", "", "", ""), new TypeSet("HOME"));
582bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
583bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
584bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPostalAddressNonNeighborhoodV21() {
585bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPostalAddressNonNeighborhood(V21);
586bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
587bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
588bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPostalAddressNonNeighborhoodV30() {
589bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPostalAddressNonNeighborhood(V30);
590bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
591bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
592bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testPostalAddressNonCity(int vcardType) {
593bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
594bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
595bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredPostal.NEIGHBORHOOD, "Neighborhood");
596bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
597bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("ADR",
598bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        Arrays.asList("", "", "", "Neighborhood", "", "", ""), new TypeSet("HOME"));
599bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
600bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
601bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPostalAddressNonCityV21() {
602bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPostalAddressNonCity(V21);
603bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
604bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
605bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPostalAddressNonCityV30() {
606bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPostalAddressNonCity(V30);
607bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
608bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
609bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testPostalOnlyWithFormattedAddressCommon(int vcardType) {
610bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
611bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
612bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredPostal.REGION, "")  // Must be ignored.
613bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredPostal.FORMATTED_ADDRESS,
614bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                "Formatted address CA 123-334 United Statue");
615bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
616bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNodeWithOrder("ADR", ";Formatted address CA 123-334 United Statue;;;;;",
617bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        Arrays.asList("", "Formatted address CA 123-334 United Statue",
618bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                                "", "", "", "", ""), new TypeSet("HOME"));
619bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
620bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
621bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPostalOnlyWithFormattedAddressV21() {
622bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPostalOnlyWithFormattedAddressCommon(V21);
623bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
624bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
625bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPostalOnlyWithFormattedAddressV30() {
626bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPostalOnlyWithFormattedAddressCommon(V30);
627bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
628bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
629bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    /**
630bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee     * Tests that the vCard composer honors formatted data when it is available
631bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee     * even when it is partial.
632bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee     */
633bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testPostalWithBothStructuredAndFormattedCommon(int vcardType) {
634bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
635bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
636bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredPostal.POBOX, "Pobox")
637bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredPostal.COUNTRY, "Country")
638bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredPostal.FORMATTED_ADDRESS,
639bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        "Formatted address CA 123-334 United Statue");  // Should be ignored
640bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
641bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("ADR", "Pobox;;;;;;Country",
642bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        Arrays.asList("Pobox", "", "", "", "", "", "Country"),
643bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        new TypeSet("HOME"));
644bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
645bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
646bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPostalWithBothStructuredAndFormattedV21() {
647bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPostalWithBothStructuredAndFormattedCommon(V21);
648bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
649bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
650bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPostalWithBothStructuredAndFormattedV30() {
651bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPostalWithBothStructuredAndFormattedCommon(V30);
652bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
653bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
654bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testOrganizationCommon(int vcardType) {
655bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
656bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        ContactEntry entry = mVerifier.addInputEntry();
657bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Organization.CONTENT_ITEM_TYPE)
658bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Organization.COMPANY, "CompanyX")
659bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Organization.DEPARTMENT, "DepartmentY")
660bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Organization.TITLE, "TitleZ")
661bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Organization.JOB_DESCRIPTION, "Description Rambda")  // Ignored.
662bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Organization.OFFICE_LOCATION, "Mountain View")  // Ignored.
663bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Organization.PHONETIC_NAME, "PhoneticName!")  // Ignored
664bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Organization.SYMBOL, "(^o^)/~~");  // Ignore him (her).
665bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Organization.CONTENT_ITEM_TYPE)
666bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .putNull(Organization.COMPANY)
667bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Organization.DEPARTMENT, "DepartmentXX")
668bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .putNull(Organization.TITLE);
669bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Organization.CONTENT_ITEM_TYPE)
670bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Organization.COMPANY, "CompanyXYZ")
671bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .putNull(Organization.DEPARTMENT)
672bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Organization.TITLE, "TitleXYZYX");
673bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        // Currently we do not use group but depend on the order.
674bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
675bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNodeWithOrder("ORG", "CompanyX;DepartmentY",
676bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        Arrays.asList("CompanyX", "DepartmentY"))
677bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNodeWithOrder("TITLE", "TitleZ")
678bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNodeWithOrder("ORG", "DepartmentXX")
679bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNodeWithOrder("ORG", "CompanyXYZ")
680bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNodeWithOrder("TITLE", "TitleXYZYX");
681bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
682bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
683bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testOrganizationV21() {
684bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testOrganizationCommon(V21);
685bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
686bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
687bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testOrganizationV30() {
688bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testOrganizationCommon(V30);
689bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
690bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
691bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testImVariousTypeSupportCommon(int vcardType) {
692bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
693bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        ContactEntry entry = mVerifier.addInputEntry();
694bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
695bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.PROTOCOL, Im.PROTOCOL_AIM)
696bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.DATA, "aim");
697bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
698bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.PROTOCOL, Im.PROTOCOL_MSN)
699bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.DATA, "msn");
700bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
701bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.PROTOCOL, Im.PROTOCOL_YAHOO)
702bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.DATA, "yahoo");
703bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
704bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.PROTOCOL, Im.PROTOCOL_SKYPE)
705bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.DATA, "skype");
706bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
707bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.PROTOCOL, Im.PROTOCOL_QQ)
708bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.DATA, "qq");
709bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
710bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK)
711bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.DATA, "google talk");
712bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
713bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.PROTOCOL, Im.PROTOCOL_ICQ)
714bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.DATA, "icq");
715bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
716bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.PROTOCOL, Im.PROTOCOL_JABBER)
717bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.DATA, "jabber");
718bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
719bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.PROTOCOL, Im.PROTOCOL_NETMEETING)
720bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.DATA, "netmeeting");
721bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
722bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        // No determined way to express unknown type...
723bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
724bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-JABBER", "jabber")
725bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-ICQ", "icq")
726bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-GOOGLE-TALK", "google talk")
727bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-QQ", "qq")
728bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-SKYPE-USERNAME", "skype")
729bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-YAHOO", "yahoo")
730bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-MSN", "msn")
731bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-NETMEETING", "netmeeting")
732bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-AIM", "aim");
733bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
734bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
735bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testImBasiV21() {
736bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testImVariousTypeSupportCommon(V21);
737bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
738bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
739bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testImBasicV30() {
740bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testImVariousTypeSupportCommon(V30);
741bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
742bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
743bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testImPrefHandlingCommon(int vcardType) {
744bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
745bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        ContactEntry entry = mVerifier.addInputEntry();
746bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
747bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.PROTOCOL, Im.PROTOCOL_AIM)
748bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.DATA, "aim1");
749bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
750bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.PROTOCOL, Im.PROTOCOL_AIM)
751bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.DATA, "aim2")
752bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.TYPE, Im.TYPE_HOME)
753bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Im.IS_PRIMARY, 1);
754bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
755bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
756bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-AIM", "aim1")
757bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-AIM", "aim2", new TypeSet("HOME", "PREF"));
758bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
759bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
760bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testImPrefHandlingV21() {
761bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testImPrefHandlingCommon(V21);
762bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
763bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
764bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testImPrefHandlingV30() {
765bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testImPrefHandlingCommon(V30);
766bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
767bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
768bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testWebsiteCommon(int vcardType) {
769bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
770bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        ContactEntry entry = mVerifier.addInputEntry();
771bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Website.CONTENT_ITEM_TYPE)
772bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Website.URL, "http://website.example.android.com/index.html")
773bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Website.TYPE, Website.TYPE_BLOG);
774bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Website.CONTENT_ITEM_TYPE)
775bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Website.URL, "ftp://ftp.example.android.com/index.html")
776bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Website.TYPE, Website.TYPE_FTP);
777bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
778bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        // We drop TYPE information since vCard (especially 3.0) does not allow us to emit it.
779bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
780bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("URL", "ftp://ftp.example.android.com/index.html")
781bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("URL", "http://website.example.android.com/index.html");
782bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
783bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
784bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testWebsiteV21() {
785bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testWebsiteCommon(V21);
786bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
787bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
788bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testWebsiteV30() {
789bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testWebsiteCommon(V30);
790bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
791bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
792bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private String getAndroidPropValue(final String mimeType, String value, Integer type) {
793bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        return getAndroidPropValue(mimeType, value, type, null);
794bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
795bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
796bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private String getAndroidPropValue(final String mimeType, String value,
797bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee            Integer type, String label) {
798bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        return (mimeType + ";" + value + ";"
799bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                + (type != null ? type : "") + ";"
800bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                + (label != null ? label : "") + ";;;;;;;;;;;;");
801bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
802bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
803bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testEventCommon(int vcardType) {
804bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
805bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        ContactEntry entry = mVerifier.addInputEntry();
806bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
807bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Event.TYPE, Event.TYPE_ANNIVERSARY)
808bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Event.START_DATE, "1982-06-16");
809bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
810bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Event.TYPE, Event.TYPE_BIRTHDAY)
811bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Event.START_DATE, "2008-10-22");
812bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
813bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Event.TYPE, Event.TYPE_OTHER)
814bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Event.START_DATE, "2018-03-12");
815bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
816bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Event.TYPE, Event.TYPE_CUSTOM)
817bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Event.LABEL, "The last day")
818bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Event.START_DATE, "When the Tower of Hanoi with 64 rings is completed.");
819bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
820bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Event.TYPE, Event.TYPE_BIRTHDAY)
821bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Event.START_DATE, "2009-05-19");  // Should be ignored.
822bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
823bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("BDAY", "2008-10-22")
824bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-ANDROID-CUSTOM",
825bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        getAndroidPropValue(
826bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                                Event.CONTENT_ITEM_TYPE, "1982-06-16", Event.TYPE_ANNIVERSARY))
827bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-ANDROID-CUSTOM",
828bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        getAndroidPropValue(
829bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                                Event.CONTENT_ITEM_TYPE, "2018-03-12", Event.TYPE_OTHER))
830bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-ANDROID-CUSTOM",
831bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        getAndroidPropValue(
832bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                                Event.CONTENT_ITEM_TYPE,
833bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                                "When the Tower of Hanoi with 64 rings is completed.",
834bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                                Event.TYPE_CUSTOM, "The last day"));
835bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
836bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
837bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testEventV21() {
838bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testEventCommon(V21);
839bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
840bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
841bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testEventV30() {
842bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testEventCommon(V30);
843bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
844bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
845bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testNoteCommon(int vcardType) {
846bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
847bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        ContactEntry entry = mVerifier.addInputEntry();
848bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Note.CONTENT_ITEM_TYPE)
849bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Note.NOTE, "note1");
850bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Note.CONTENT_ITEM_TYPE)
851bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Note.NOTE, "note2")
852bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Note.IS_PRIMARY, 1);  // Just ignored.
853bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
854bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNodeWithOrder("NOTE", "note1")
855bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNodeWithOrder("NOTE", "note2");
856bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
857bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
858bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testNoteV21() {
859bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testNoteCommon(V21);
860bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
861bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
862bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testNoteV30() {
863bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testNoteCommon(V30);
864bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
865bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
866bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testPhotoCommon(int vcardType) {
867bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        final boolean isV30 = vcardType == V30;
868bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
869bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        ContactEntry entry = mVerifier.addInputEntry();
870bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
871bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.FAMILY_NAME, "PhotoTest");
872bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Photo.CONTENT_ITEM_TYPE)
873bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Photo.PHOTO, sPhotoByteArray);
874bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
875bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        ContentValues contentValuesForPhoto = new ContentValues();
876bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        contentValuesForPhoto.put("ENCODING", (isV30 ? "b" : "BASE64"));
877bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElem()
878bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("FN", "PhotoTest")
879bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("N", "PhotoTest;;;;",
880bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        Arrays.asList("PhotoTest", "", "", "", ""))
881bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNodeWithOrder("PHOTO", null, null, sPhotoByteArray,
882bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        contentValuesForPhoto, new TypeSet("JPEG"), null);
883bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
884bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
885bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPhotoV21() {
886bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPhotoCommon(V21);
887bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
888bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
889bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPhotoV30() {
890bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPhotoCommon(V30);
891bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
892bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
893bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testRelationCommon(int vcardType) {
894bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
895bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addInputEntry().addContentValues(Relation.CONTENT_ITEM_TYPE)
896bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Relation.TYPE, Relation.TYPE_MOTHER)
897bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Relation.NAME, "Ms. Mother");
898bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addContentValuesVerifierElem().addExpected(Relation.CONTENT_ITEM_TYPE)
899bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Relation.TYPE, Relation.TYPE_MOTHER)
900bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Relation.NAME, "Ms. Mother");
901bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
902bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
903bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testRelationV21() {
904bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testRelationCommon(V21);
905bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
906bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
907bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testRelationV30() {
908bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testRelationCommon(V30);
909bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
910bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
911bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testV30HandleEscape() {
912bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(V30);
913bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addInputEntry().addContentValues(StructuredName.CONTENT_ITEM_TYPE)
914bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.FAMILY_NAME, "\\")
915bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.GIVEN_NAME, ";")
916bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.MIDDLE_NAME, ",")
917bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.PREFIX, "\n")
918bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.DISPLAY_NAME, "[<{Unescaped:Asciis}>]");
919bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        // Verifies the vCard String correctly escapes each character which must be escaped.
920bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addLineVerifierElem()
921bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpected("N:\\\\;\\;;\\,;\\n;")
922bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpected("FN:[<{Unescaped:Asciis}>]");
923bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElem()
924bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("FN", "[<{Unescaped:Asciis}>]")
925bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("N", Arrays.asList("\\", ";", ",", "\n", ""));
926bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
927bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
928bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    /**
929bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee     * There's no "NICKNAME" property in vCard 2.1, while there is in vCard 3.0.
930bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee     * We use Android-specific "X-ANDROID-CUSTOM" property.
931bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee     * This test verifies the functionality.
932bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee     */
933bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testNickNameV21() {
934bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(V21);
935bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addInputEntry().addContentValues(Nickname.CONTENT_ITEM_TYPE)
936bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Nickname.NAME, "Nicky");
937bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
938bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("X-ANDROID-CUSTOM",
939bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        Nickname.CONTENT_ITEM_TYPE + ";Nicky;;;;;;;;;;;;;;");
940bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addContentValuesVerifierElem().addExpected(Nickname.CONTENT_ITEM_TYPE)
941bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Nickname.NAME, "Nicky");
942bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
943bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
944bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testTolerateBrokenPhoneNumberEntryV21() {
945bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(V21);
946bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        ContactEntry entry = mVerifier.addInputEntry();
947bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
948bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_HOME)
949bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "111-222-3333 (Miami)\n444-5555-666 (Tokyo);"
950bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                        + "777-888-9999 (Chicago);111-222-3333 (Miami)");
951bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
952bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "111-222-3333", new TypeSet("HOME"))
953bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "444-555-5666", new TypeSet("HOME"))
954bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "777-888-9999", new TypeSet("HOME"));
955bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
956bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
957bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    private void testPickUpNonEmptyContentValuesCommon(int vcardType) {
958bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(vcardType);
959bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        ContactEntry entry = mVerifier.addInputEntry();
960bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
961bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.IS_PRIMARY, 1);  // Empty name. Should be ignored.
962bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
963bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.FAMILY_NAME, "family1");  // Not primary. Should be ignored.
964bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
965bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.IS_PRIMARY, 1)
966bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.FAMILY_NAME, "family2");  // This entry is what we want.
967bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
968bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.IS_PRIMARY, 1)
969bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.FAMILY_NAME, "family3");
970bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
971bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(StructuredName.FAMILY_NAME, "family4");
972bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElem()
973bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("N", Arrays.asList("family2", "", "", "", ""))
974bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("FN", "family2");
975bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
976bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
977bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPickUpNonEmptyContentValuesV21() {
978bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPickUpNonEmptyContentValuesCommon(V21);
979bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
980bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
981bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testPickUpNonEmptyContentValuesV30() {
982bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        testPickUpNonEmptyContentValuesCommon(V30);
983bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
984bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee
985bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    public void testUseMultiByteTypeV30() {
986bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.initForExportTest(V30);
987bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        final ContactEntry entry = mVerifier.addInputEntry();
988bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
989bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
990bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.LABEL, "\u96FB\u8A71")
991bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .put(Phone.NUMBER, "1");
992bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addLineVerifierElem()
993bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpected("N:")
994bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpected("FN:")
995bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpected("TEL;TYPE=\u96FB\u8A71:1");
996bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
997bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee                .addExpectedNode("TEL", "1", new TypeSet("\u96FB\u8A71"));
998bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee    }
999bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee}
1000bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee