14199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa/*
24199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * Copyright (C) 2009 The Android Open Source Project
34199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa *
44199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * Licensed under the Apache License, Version 2.0 (the "License");
54199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * you may not use this file except in compliance with the License.
64199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * You may obtain a copy of the License at
74199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa *
84199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa *      http://www.apache.org/licenses/LICENSE-2.0
94199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa *
104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * Unless required by applicable law or agreed to in writing, software
114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * distributed under the License is distributed on an "AS IS" BASIS,
124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * See the License for the specific language governing permissions and
144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * limitations under the License.
154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa */
164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawapackage com.android.vcard.tests;
184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
19422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawaimport com.android.vcard.VCardConfig;
20677ef21613a9d35053ec098444832ce4125a847eDaisuke Miyakawaimport com.android.vcard.tests.testutils.ContactEntry;
21677ef21613a9d35053ec098444832ce4125a847eDaisuke Miyakawaimport com.android.vcard.tests.testutils.PropertyNodesVerifierElem;
22677ef21613a9d35053ec098444832ce4125a847eDaisuke Miyakawaimport com.android.vcard.tests.testutils.PropertyNodesVerifierElem.TypeSet;
2395e66b00988bc16ecc17df31e47c873b2554b8ccinshikimport com.android.vcard.tests.testutils.VCardTestsBase;
24422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa
254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.content.ContentValues;
264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Email;
274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Event;
284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Im;
294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Nickname;
304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Note;
314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Organization;
324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Phone;
334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Photo;
344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Relation;
35422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.SipAddress;
364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.StructuredName;
374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Website;
394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport java.util.Arrays;
414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa/**
434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * Tests for the code related to vCard exporter, inculding vCard composer.
444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * This test class depends on vCard importer code, so if tests for vCard importer fail,
454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * the result of this class will not be reliable.
464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa */
474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawapublic class VCardExporterTests extends VCardTestsBase {
484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private static final byte[] sPhotoByteArray =
494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        VCardImporterTests.sPhotoByteArrayForComplicatedCase;
504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testSimpleV21() {
524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(V21);
534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredName.CONTENT_ITEM_TYPE)
544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "Ando")
554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "Roid");
564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElem()
574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("FN", "Roid Ando")
584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("N", "Ando;Roid;;;",
594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("Ando", "Roid", "", "", ""));
604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testStructuredNameBasic(int vcardType) {
634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredName.CONTENT_ITEM_TYPE)
654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "AppropriatePrefix")
694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "AppropriateSuffix")
703d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "DISPLAY NAME");
714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
723d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElem()
734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("N",
744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        + "AppropriatePrefix;AppropriateSuffix",
764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"))
783d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .addExpectedNodeWithOrder("FN", "DISPLAY NAME");
794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testStructuredNameBasicV21() {
824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testStructuredNameBasic(V21);
834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testStructuredNameBasicV30() {
864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testStructuredNameBasic(V30);
874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
893d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameBasicV40() {
903d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameBasic(V40);
913d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
923d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Test that only "primary" StructuredName is emitted, so that our vCard file
954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * will not confuse the external importer, assuming there may be some importer
964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * which presume that there's only one property toward each of  "N", "FN", etc.
974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Note that more than one "N", "FN", etc. properties are acceptable in vCard spec.
984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testStructuredNameUsePrimaryCommon(int vcardType) {
1004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
1013d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
1024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName1")
1044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName1")
1054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName1")
1064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix1")
1074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix1")
1083d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "DoNotEmitDisplayName1");
1094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // With "IS_PRIMARY=1". This is what we should use.
1114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
1134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
1144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
1154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "AppropriatePrefix")
1164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "AppropriateSuffix")
1173d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "AppropriateDisplayName")
1184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);
1194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // With "IS_PRIMARY=1", but we should ignore this time, since this is second, not first.
1213d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        // vCard 2.1 does not specify anything about the number of N properties. We choose not
1223d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        // emitting this property.
1233d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        // vCard 3.0 does (There must be one N property)
1243d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        // vCard 4.0 (rev13) does (cardinality (0, 1)).
1254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName2")
1274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName2")
1284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName2")
1294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix2")
1304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix2")
1313d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "DoNotEmitDisplayName2")
1324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);
1334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1343d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa       mVerifier.addPropertyNodesVerifierElem()
1354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("N",
1364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
1374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        + "AppropriatePrefix;AppropriateSuffix",
1384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
1394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"))
1403d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .addExpectedNodeWithOrder("FN", "AppropriateDisplayName");
1414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
1424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testStructuredNameUsePrimaryV21() {
1444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testStructuredNameUsePrimaryCommon(V21);
1454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
1464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testStructuredNameUsePrimaryV30() {
1484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testStructuredNameUsePrimaryCommon(V30);
1494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
1504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1513d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameUsePrimaryV40() {
15236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testStructuredNameUsePrimaryCommon(V40);
15336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
15436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
1554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
1564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Tests that only "super primary" StructuredName is emitted.
1574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * See also the comment in {@link #testStructuredNameUsePrimaryCommon(int)}.
1584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
1594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testStructuredNameUseSuperPrimaryCommon(int vcardType) {
1604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
1613d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
1623d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1633d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName1")
1643d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName1")
1653d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName1")
1663d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix1")
1673d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix1")
1683d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "DoNotEmitDisplay1");
1693d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
1703d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        // With "IS_PRIMARY=1", but we should ignore this time.
1713d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1723d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName2")
1733d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName2")
1743d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName2")
1753d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix2")
1763d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix2")
1773d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "DoNotEmitDisplay2")
1783d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);
1793d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
1803d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        // With "IS_SUPER_PRIMARY=1". This is what we should use.
1813d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1823d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
1833d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
1843d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
1853d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PREFIX, "AppropriatePrefix")
1863d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.SUFFIX, "AppropriateSuffix")
1873d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "AppropriateDisplayName")
1883d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.IS_SUPER_PRIMARY, 1);
1893d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
1903d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1913d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName3")
1923d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName3")
1933d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName3")
1943d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix3")
1953d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix3")
1963d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "DoNotEmitDisplay3")
1973d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);
1983d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
1993d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final PropertyNodesVerifierElem elem = mVerifier.addPropertyNodesVerifierElem();
2003d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        elem.addExpectedNodeWithOrder("N",
2013d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
2023d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                + "AppropriatePrefix;AppropriateSuffix",
2033d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
2043d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                        "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"));
2053d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2063d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        elem.addExpectedNodeWithOrder("FN", "AppropriateDisplayName");
2073d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2083d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2093d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameUseSuperPrimaryV21() {
2103d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameUseSuperPrimaryCommon(V21);
2113d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2123d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2133d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameUseSuperPrimaryV30() {
2143d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameUseSuperPrimaryCommon(V30);
2153d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2163d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2173d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameUseSuperPrimaryV40() {
2183d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameUseSuperPrimaryCommon(V40);
2193d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2203d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2213d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    /**
2223d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * Tests phonetic names field are handled correctly.
2233d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     *
2243d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * vCard 2.1 does not have any field corresponding to them.
2253d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * vCard 3.0 has SORT-STRING property, which does not support multiple values inside it.
2263d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * vCard 4.0 (rev13) has SORT-AS parameter, which has three values (family, given, middle)
2273d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * inside it.
2283d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     */
2293d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    private void testStructuredNamePhoneticNameCommon(int vcardType) {
2303d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
2313d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
2323d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
2333d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
2343d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
2353d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
2363d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PREFIX, "AppropriatePrefix")
2373d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.SUFFIX, "AppropriateSuffix")
2383d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "AppropriateDisplayName")
2393d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PHONETIC_FAMILY_NAME, "AppropriatePhoneticFamily")
2403d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PHONETIC_GIVEN_NAME, "AppropriatePhoneticGiven")
2413d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PHONETIC_MIDDLE_NAME, "AppropriatePhoneticMiddle");
2423d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2433d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final PropertyNodesVerifierElem elem = mVerifier.addPropertyNodesVerifierElem();
2443d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        if (VCardConfig.isVersion40(vcardType)) {
2453d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            final ContentValues contentValues = new ContentValues();
2463d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            contentValues.put("SORT-AS",
2473d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName");
2483d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            // vCard 4.0 (rev13) now uses SORT-AS parameter, which is not compatible with
2493d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            // either 2.1 nor 3.0.
2503d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            elem.addExpectedNodeWithOrder("N",
2513d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
2523d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    + "AppropriatePrefix;AppropriateSuffix",
2533d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
2543d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                            "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"),
2553d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    contentValues);
2563d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        } else {
2573d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            elem.addExpectedNodeWithOrder("N",
2583d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
2593d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    + "AppropriatePrefix;AppropriateSuffix",
2603d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
2613d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                            "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"));
2623d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            if (VCardConfig.isVersion30(vcardType)) {
2633d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                elem.addExpectedNode("SORT-STRING",
2643d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                        "AppropriatePhoneticGiven AppropriatePhoneticMiddle"
2653d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                        + " AppropriatePhoneticFamily");
2663d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            }
2673d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        }
2683d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2693d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        elem.addExpectedNodeWithOrder("FN", "AppropriateDisplayName")
2703d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            .addExpectedNode("X-PHONETIC-FIRST-NAME", "AppropriatePhoneticGiven")
2713d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            .addExpectedNode("X-PHONETIC-MIDDLE-NAME", "AppropriatePhoneticMiddle")
2723d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            .addExpectedNode("X-PHONETIC-LAST-NAME", "AppropriatePhoneticFamily");
2733d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2743d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2753d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNamePhoneticNameV21() {
2763d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNamePhoneticNameCommon(V21);
2773d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2783d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2793d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNamePhoneticNameV30() {
2803d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNamePhoneticNameCommon(V30);
2813d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2823d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2833d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNamePhoneticNameV40() {
2843d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNamePhoneticNameCommon(V40);
2853d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2863d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2873d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    // TODO: need to add test cases confirming escaping, empty values, etc.
2883d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2893d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    /**
2903d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * Confirms all the other sides of the handling is correctly interpreted at one time.
2913d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     *
2923d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * A kind of regression test for StructuredName handling.
2933d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     */
2943d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    private void testStructuredNameComplicatedCommon(int vcardType) {
2953d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
2963d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
2974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
2984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName1")
2994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName1")
3004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName1")
3014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix1")
3024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix1")
3034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_FAMILY_NAME, "DoNotEmitPhoneticFamily1")
3044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_GIVEN_NAME, "DoNotEmitPhoneticGiven1")
3054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_MIDDLE_NAME, "DoNotEmitPhoneticMiddle1");
3064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // With "IS_PRIMARY=1", but we should ignore this time.
3084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
3094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName2")
3104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName2")
3114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName2")
3124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix2")
3134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix2")
3144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_FAMILY_NAME, "DoNotEmitPhoneticFamily2")
3154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_GIVEN_NAME, "DoNotEmitPhoneticGiven2")
3164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_MIDDLE_NAME, "DoNotEmitPhoneticMiddle2")
3174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);
3184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // With "IS_SUPER_PRIMARY=1". This is what we should use.
3204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
3214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
3224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
3234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
3244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "AppropriatePrefix")
3254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "AppropriateSuffix")
3264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_FAMILY_NAME, "AppropriatePhoneticFamily")
3274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_GIVEN_NAME, "AppropriatePhoneticGiven")
3284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_MIDDLE_NAME, "AppropriatePhoneticMiddle")
3294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_SUPER_PRIMARY, 1);
3304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
3324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName3")
3334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName3")
3344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName3")
3354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix3")
3364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix3")
3374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_FAMILY_NAME, "DoNotEmitPhoneticFamily3")
3384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_GIVEN_NAME, "DoNotEmitPhoneticGiven3")
3394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_MIDDLE_NAME, "DoNotEmitPhoneticMiddle3")
3404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);
3414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3423d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final PropertyNodesVerifierElem elem = mVerifier.addPropertyNodesVerifierElem();
3433d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        if (VCardConfig.isVersion40(vcardType)) {
3443d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            final ContentValues contentValues = new ContentValues();
3453d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            contentValues.put("SORT-AS",
3463d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName");
3473d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            // vCard 4.0 (rev13) now uses SORT-AS parameter, which is not compatible with
3483d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            // either 2.1 nor 3.0.
3493d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            elem.addExpectedNodeWithOrder("N",
3503d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
3513d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    + "AppropriatePrefix;AppropriateSuffix",
3523d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
3533d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                            "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"),
3543d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    contentValues);
3553d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        } else {
3563d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            elem.addExpectedNodeWithOrder("N",
3573d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
3583d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    + "AppropriatePrefix;AppropriateSuffix",
3593d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
3603d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                            "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"));
3613d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            if (VCardConfig.isVersion30(vcardType)) {
3623d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                elem.addExpectedNode("SORT-STRING",
3633d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                        "AppropriatePhoneticGiven AppropriatePhoneticMiddle"
3643d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                        + " AppropriatePhoneticFamily");
3653d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            }
3664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        }
3673d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
3683d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        elem.addExpectedNodeWithOrder("FN",
3693d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                "AppropriatePrefix AppropriateGivenName "
3703d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                + "AppropriateMiddleName AppropriateFamilyName AppropriateSuffix")
3713d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            .addExpectedNode("X-PHONETIC-FIRST-NAME", "AppropriatePhoneticGiven")
3723d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            .addExpectedNode("X-PHONETIC-MIDDLE-NAME", "AppropriatePhoneticMiddle")
3733d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            .addExpectedNode("X-PHONETIC-LAST-NAME", "AppropriatePhoneticFamily");
3744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
3754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3763d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameComplicatedV21() {
3773d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameComplicatedCommon(V21);
3784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
3794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3803d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameComplicatedV30() {
3813d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameComplicatedCommon(V30);
3823d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
3833d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
3843d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameComplicatedV40() {
3853d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameComplicatedCommon(V40);
3864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
3874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testNickNameV30() {
3894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(V30);
3904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Nickname.CONTENT_ITEM_TYPE)
3914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Nickname.NAME, "Nicky");
3924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
3944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            .addExpectedNodeWithOrder("NICKNAME", "Nicky");
3954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
3964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
39736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testNickNameV40() {
39836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        mVerifier.initForExportTest(V40);
39936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Nickname.CONTENT_ITEM_TYPE)
40036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa                .put(Nickname.NAME, "Nicky");
40136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
40236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
40336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa            .addExpectedNodeWithOrder("NICKNAME", "Nicky");
40436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
40536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
4064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPhoneBasicCommon(int vcardType) {
4074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
4084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Phone.CONTENT_ITEM_TYPE)
4094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "1")
4104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_HOME);
411465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa        if (VCardConfig.isVersion40(vcardType)) {
412465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa            mVerifier.addPropertyNodesVerifierElemWithEmptyName()
413465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:1", new TypeSet("HOME"));
414465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa        } else {
415465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa            mVerifier.addPropertyNodesVerifierElemWithEmptyName()
416465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "1", new TypeSet("HOME"));
417465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa        }
4184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneBasicV21() {
4214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhoneBasicCommon(V21);
4224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneBasicV30() {
4254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhoneBasicCommon(V30);
4264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
42836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPhoneBasicV40() {
42936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPhoneBasicCommon(V40);
43036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
43136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
4324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneRefrainFormatting() {
4334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(V21 | VCardConfig.FLAG_REFRAIN_PHONE_NUMBER_FORMATTING);
4344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Phone.CONTENT_ITEM_TYPE)
4354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "1234567890(abcdefghijklmnopqrstuvwxyz)")
4364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_HOME);
4374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
4384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "1234567890(abcdefghijklmnopqrstuvwxyz)",
4394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        new TypeSet("HOME"));
4404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
4434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Tests that vCard composer emits corresponding type param which we expect.
4444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
4454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPhoneVariousTypeSupport(int vcardType) {
4464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
4474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
4484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "10")
4504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_HOME);
4514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "20")
4534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_WORK);
4544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "30")
4564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_FAX_HOME);
4574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "40")
4594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_FAX_WORK);
4604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "50")
4624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_MOBILE);
4634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "60")
4654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_PAGER);
4664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "70")
4684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_OTHER);
4694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "80")
4714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CAR);
4724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "90")
4744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_COMPANY_MAIN);
4754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "100")
4774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_ISDN);
4784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "110")
4804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_MAIN);
4814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "120")
4834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_OTHER_FAX);
4844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "130")
4864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_TELEX);
4874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "140")
4894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_WORK_MOBILE);
4904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "150")
4924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_WORK_PAGER);
4934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "160")
4954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_MMS);
4964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
497465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa        if (VCardConfig.isVersion40(vcardType)) {
498465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa            // Currently pager type has special logic...
499465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa            mVerifier.addPropertyNodesVerifierElemWithEmptyName()
500465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:10", new TypeSet("HOME"))
501465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:20", new TypeSet("WORK"))
502465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:30", new TypeSet("HOME", "FAX"))
503465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:40", new TypeSet("WORK", "FAX"))
504465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:50", new TypeSet("CELL"))
505465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "60", new TypeSet("PAGER"))
506465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:70", new TypeSet("VOICE"))
507465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:80", new TypeSet("CAR"))
508465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:90", new TypeSet("WORK", "PREF"))
509465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:100", new TypeSet("ISDN"))
510465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:110", new TypeSet("PREF"))
511465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:120", new TypeSet("FAX"))
512465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:130", new TypeSet("TLX"))
513465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:140", new TypeSet("WORK", "CELL"))
514465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:150", new TypeSet("WORK", "PAGER"))
515465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:160", new TypeSet("MSG"));
516465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa        } else {
517465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa            mVerifier.addPropertyNodesVerifierElemWithEmptyName()
518465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "10", new TypeSet("HOME"))
519465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "20", new TypeSet("WORK"))
520465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "30", new TypeSet("HOME", "FAX"))
521465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "40", new TypeSet("WORK", "FAX"))
522465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "50", new TypeSet("CELL"))
523465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "60", new TypeSet("PAGER"))
524465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "70", new TypeSet("VOICE"))
525465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "80", new TypeSet("CAR"))
526465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "90", new TypeSet("WORK", "PREF"))
527465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "100", new TypeSet("ISDN"))
528465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "110", new TypeSet("PREF"))
529465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "120", new TypeSet("FAX"))
530465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "130", new TypeSet("TLX"))
531465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "140", new TypeSet("WORK", "CELL"))
532465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "150", new TypeSet("WORK", "PAGER"))
533465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "160", new TypeSet("MSG"));
534465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa        }
5354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
5364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
5374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneVariousTypeSupportV21() {
5384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhoneVariousTypeSupport(V21);
5394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
5404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
5414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneVariousTypeSupportV30() {
5424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhoneVariousTypeSupport(V30);
5434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
5444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
54536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPhoneVariousTypeSupportV40() {
54636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPhoneVariousTypeSupport(V40);
54736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
54836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
5494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
5504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Tests that "PREF"s are emitted appropriately.
5514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
5524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPhonePrefHandlingCommon(int vcardType) {
5534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
5544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
5554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "1")
5574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_HOME);
5584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "2")
5604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_WORK)
5614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.IS_PRIMARY, 1);
5624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "3")
5644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_FAX_HOME)
5654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.IS_PRIMARY, 1);
5664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "4")
5684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_FAX_WORK);
5694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
570465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa        if (VCardConfig.isVersion40(vcardType)) {
571465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa            mVerifier.addPropertyNodesVerifierElemWithEmptyName()
572465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:4", new TypeSet("WORK", "FAX"))
573465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:3", new TypeSet("HOME", "FAX", "PREF"))
574465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:2", new TypeSet("WORK", "PREF"))
575465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:1", new TypeSet("HOME"));
576465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa        } else {
577465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa            mVerifier.addPropertyNodesVerifierElemWithEmptyName()
578465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "4", new TypeSet("WORK", "FAX"))
579465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "3", new TypeSet("HOME", "FAX", "PREF"))
580465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "2", new TypeSet("WORK", "PREF"))
581465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "1", new TypeSet("HOME"));
582465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa        }
5834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
5844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
5854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhonePrefHandlingV21() {
5864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhonePrefHandlingCommon(V21);
5874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
5884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
5894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhonePrefHandlingV30() {
5904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhonePrefHandlingCommon(V30);
5914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
5924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
59336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPhonePrefHandlingV40() {
59436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPhonePrefHandlingCommon(V40);
59536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
59636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
5974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testMiscPhoneTypeHandling(int vcardType) {
5984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
5994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
6004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
6014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "1")
6024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
6034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "Modem");
6044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
6054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "2")
6064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
6074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "MSG");
6084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
6094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "3")
6104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
6114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "BBS");
6124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
6134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "4")
6144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
6154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "VIDEO");
6164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
6174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "5")
6184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM);
6194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
6204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "6")
6214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
6224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "_AUTO_CELL");  // The old indicator for the type mobile.
6234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
6244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "7")
6254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
6264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "\u643A\u5E2F");  // Mobile phone in Japanese Kanji
6274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
6284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "8")
6294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
6304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "invalid");
6314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        PropertyNodesVerifierElem elem = mVerifier.addPropertyNodesVerifierElemWithEmptyName();
632465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa        if (VCardConfig.isVersion40(vcardType)) {
633465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa            // vCard 4.0 (rev.13) does not allow bare number but URI.
634465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa            elem.addExpectedNode("TEL", "tel:1", new TypeSet("Modem"))
635465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:2", new TypeSet("MSG"))
636465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:3", new TypeSet("BBS"))
637465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:4", new TypeSet("VIDEO"))
638465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:5", new TypeSet("VOICE"))
639465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:6", new TypeSet("CELL"))
640465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:7", new TypeSet("CELL"))
641465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa                    .addExpectedNode("TEL", "tel:8", new TypeSet("invalid"));
642465aa5d5706ba56c74c1249a17a6df80b0f42972Daisuke Miyakawa        } else if (VCardConfig.isVersion30(vcardType)) {
6432bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa            // vCard 3.0 accepts "invalid". Also stop using toUpper()
6442bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa            elem.addExpectedNode("TEL", "1", new TypeSet("Modem"))
6452bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "2", new TypeSet("MSG"))
6462bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "3", new TypeSet("BBS"))
6472bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "4", new TypeSet("VIDEO"))
6482bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "5", new TypeSet("VOICE"))
6492bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "6", new TypeSet("CELL"))
6502bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "7", new TypeSet("CELL"))
6512bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "8", new TypeSet("invalid"));
6522bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa        } else {
6532bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa            elem.addExpectedNode("TEL", "1", new TypeSet("MODEM"))
6542bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "2", new TypeSet("MSG"))
6552bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "3", new TypeSet("BBS"))
6562bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "4", new TypeSet("VIDEO"))
6572bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "5", new TypeSet("VOICE"))
6582bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "6", new TypeSet("CELL"))
6592bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "7", new TypeSet("CELL"))
6602bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "8", new TypeSet("X-invalid"));
6612bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa        }
6624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
6644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneTypeHandlingV21() {
6654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testMiscPhoneTypeHandling(V21);
6664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
6684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneTypeHandlingV30() {
6694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testMiscPhoneTypeHandling(V30);
6704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
67236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPhoneTypeHandlingV40() {
67336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testMiscPhoneTypeHandling(V40);
67436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
67536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
6764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testEmailBasicCommon(int vcardType) {
6774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
6784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Email.CONTENT_ITEM_TYPE)
6794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "sample@example.com");
6804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
6814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            .addExpectedNode("EMAIL", "sample@example.com");
6824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
6844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEmailBasicV21() {
6854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEmailBasicCommon(V21);
6864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
6884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEmailBasicV30() {
6894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEmailBasicCommon(V30);
6904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
69236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testEmailBasicV40() {
69336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testEmailBasicCommon(V40);
69436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
69536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
6964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testEmailVariousTypeSupportCommon(int vcardType) {
6974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
6984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
6994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
7004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "type_home@example.com")
7014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.TYPE, Email.TYPE_HOME);
7024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
7034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "type_work@example.com")
7044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.TYPE, Email.TYPE_WORK);
7054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
7064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "type_mobile@example.com")
7074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.TYPE, Email.TYPE_MOBILE);
7084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
7094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "type_other@example.com")
7104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.TYPE, Email.TYPE_OTHER);
7114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
7124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("EMAIL", "type_home@example.com", new TypeSet("HOME"))
7134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("EMAIL", "type_work@example.com", new TypeSet("WORK"))
7144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("EMAIL", "type_mobile@example.com", new TypeSet("CELL"))
7154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("EMAIL", "type_other@example.com");
7164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEmailVariousTypeSupportV21() {
7194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEmailVariousTypeSupportCommon(V21);
7204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEmailVariousTypeSupportV30() {
7234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEmailVariousTypeSupportCommon(V30);
7244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
72636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testEmailVariousTypeSupportV40() {
72736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testEmailVariousTypeSupportCommon(V40);
72836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
72936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
7304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testEmailPrefHandlingCommon(int vcardType) {
7314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
7324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
7334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
7344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "type_home@example.com")
7354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.TYPE, Email.TYPE_HOME)
7364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.IS_PRIMARY, 1);
7374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
7384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "type_notype@example.com")
7394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.IS_PRIMARY, 1);
7404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
7424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("EMAIL", "type_notype@example.com", new TypeSet("PREF"))
7434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("EMAIL", "type_home@example.com", new TypeSet("HOME", "PREF"));
7444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEmailPrefHandlingV21() {
7474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEmailPrefHandlingCommon(V21);
7484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEmailPrefHandlingV30() {
7514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEmailPrefHandlingCommon(V30);
7524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
75436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testEmailPrefHandlingV40() {
75536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testEmailPrefHandlingCommon(V40);
75636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
75736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
7584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPostalAddressCommon(int vcardType) {
7594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
7604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
7614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.POBOX, "Pobox")
7624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.NEIGHBORHOOD, "Neighborhood")
7634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.STREET, "Street")
7644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.CITY, "City")
7654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.REGION, "Region")
7664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.POSTCODE, "100")
7674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.COUNTRY, "Country")
7684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.FORMATTED_ADDRESS, "Formatted Address")
7694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK);
7704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // adr-value    = 0*6(text-value ";") text-value
7714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        //              ; PO Box, Extended Address, Street, Locality, Region, Postal Code,
7724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        //              ; Country Name
7734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        //
7744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // The NEIGHBORHOOD field is appended after the CITY field.
7754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
7764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("ADR",
7774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("Pobox", "", "Street", "City Neighborhood",
7784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                "Region", "100", "Country"), new TypeSet("WORK"));
7794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalAddressV21() {
7824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalAddressCommon(V21);
7834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalAddressV30() {
7864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalAddressCommon(V30);
7874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
78936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPostalAddressV40() {
79036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPostalAddressCommon(V40);
79136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
79236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
7934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPostalAddressNonNeighborhood(int vcardType) {
7944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
7954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
7964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.CITY, "City");
7974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
7984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("ADR",
7994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("", "", "", "City", "", "", ""), new TypeSet("HOME"));
8004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalAddressNonNeighborhoodV21() {
8034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalAddressNonNeighborhood(V21);
8044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalAddressNonNeighborhoodV30() {
8074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalAddressNonNeighborhood(V30);
8084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
81036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPostalAddressNonNeighborhoodV40() {
81136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPostalAddressNonNeighborhood(V40);
81236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
81336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
8144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPostalAddressNonCity(int vcardType) {
8154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
8164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
8174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.NEIGHBORHOOD, "Neighborhood");
8184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
8194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("ADR",
8204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("", "", "", "Neighborhood", "", "", ""), new TypeSet("HOME"));
8214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalAddressNonCityV21() {
8244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalAddressNonCity(V21);
8254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalAddressNonCityV30() {
8284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalAddressNonCity(V30);
8294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
83136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPostalAddressNonCityV40() {
83236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPostalAddressNonCity(V40);
83336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
83436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
8354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPostalOnlyWithFormattedAddressCommon(int vcardType) {
8364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
8374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
8384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.REGION, "")  // Must be ignored.
8394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.FORMATTED_ADDRESS,
8404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                "Formatted address CA 123-334 United Statue");
8414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
8424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("ADR", ";Formatted address CA 123-334 United Statue;;;;;",
8434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("", "Formatted address CA 123-334 United Statue",
8444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                "", "", "", "", ""), new TypeSet("HOME"));
8454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalOnlyWithFormattedAddressV21() {
8484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalOnlyWithFormattedAddressCommon(V21);
8494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalOnlyWithFormattedAddressV30() {
8524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalOnlyWithFormattedAddressCommon(V30);
8534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
85536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPostalOnlyWithFormattedAddressV40() {
85636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPostalOnlyWithFormattedAddressCommon(V40);
85736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
85836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
8594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
8604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Tests that the vCard composer honors formatted data when it is available
8614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * even when it is partial.
8624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
8634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPostalWithBothStructuredAndFormattedCommon(int vcardType) {
8644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
8654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
8664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.POBOX, "Pobox")
8674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.COUNTRY, "Country")
8684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.FORMATTED_ADDRESS,
8694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        "Formatted address CA 123-334 United Statue");  // Should be ignored
8704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
8714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("ADR", "Pobox;;;;;;Country",
8724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("Pobox", "", "", "", "", "", "Country"),
8734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        new TypeSet("HOME"));
8744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalWithBothStructuredAndFormattedV21() {
8774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalWithBothStructuredAndFormattedCommon(V21);
8784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalWithBothStructuredAndFormattedV30() {
8814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalWithBothStructuredAndFormattedCommon(V30);
8824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
88436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPostalWithBothStructuredAndFormattedV40() {
88536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPostalWithBothStructuredAndFormattedCommon(V40);
88636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
88736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
8884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testOrganizationCommon(int vcardType) {
8894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
8904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
8914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Organization.CONTENT_ITEM_TYPE)
8924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.COMPANY, "CompanyX")
8934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.DEPARTMENT, "DepartmentY")
8944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.TITLE, "TitleZ")
8954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.JOB_DESCRIPTION, "Description Rambda")  // Ignored.
8964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.OFFICE_LOCATION, "Mountain View")  // Ignored.
8974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.PHONETIC_NAME, "PhoneticName!")  // Ignored
8984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.SYMBOL, "(^o^)/~~");  // Ignore him (her).
8994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Organization.CONTENT_ITEM_TYPE)
9004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .putNull(Organization.COMPANY)
9014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.DEPARTMENT, "DepartmentXX")
9024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .putNull(Organization.TITLE);
9034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Organization.CONTENT_ITEM_TYPE)
9044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.COMPANY, "CompanyXYZ")
9054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .putNull(Organization.DEPARTMENT)
9064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.TITLE, "TitleXYZYX");
9074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // Currently we do not use group but depend on the order.
9084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
9094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("ORG", "CompanyX;DepartmentY",
9104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("CompanyX", "DepartmentY"))
9114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("TITLE", "TitleZ")
9124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("ORG", "DepartmentXX")
9134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("ORG", "CompanyXYZ")
9144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("TITLE", "TitleXYZYX");
9154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testOrganizationV21() {
9184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testOrganizationCommon(V21);
9194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testOrganizationV30() {
9224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testOrganizationCommon(V30);
9234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
92536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testOrganizationV40() {
92636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testOrganizationCommon(V40);
92736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
92836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
9294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testImVariousTypeSupportCommon(int vcardType) {
9304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
9314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
9324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_AIM)
9344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "aim");
9354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_MSN)
9374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "msn");
9384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_YAHOO)
9404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "yahoo");
9414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_SKYPE)
9434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "skype");
9444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_QQ)
9464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "qq");
9474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK)
9494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "google talk");
9504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_ICQ)
9524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "icq");
9534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_JABBER)
9554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "jabber");
9564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_NETMEETING)
9584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "netmeeting");
9594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // No determined way to express unknown type...
9614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
9624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-JABBER", "jabber")
9634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-ICQ", "icq")
9644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-GOOGLE-TALK", "google talk")
9654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-QQ", "qq")
9664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-SKYPE-USERNAME", "skype")
9674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-YAHOO", "yahoo")
9684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-MSN", "msn")
9694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-NETMEETING", "netmeeting")
9704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-AIM", "aim");
9714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testImBasiV21() {
9744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testImVariousTypeSupportCommon(V21);
9754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testImBasicV30() {
9784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testImVariousTypeSupportCommon(V30);
9794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
98136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testImBasicV40() {
98236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testImVariousTypeSupportCommon(V40);
98336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
98436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
9854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testImPrefHandlingCommon(int vcardType) {
9864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
9874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
9884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_AIM)
9904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "aim1");
9914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_AIM)
9934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "aim2")
9944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.TYPE, Im.TYPE_HOME)
9954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.IS_PRIMARY, 1);
9964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
9984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-AIM", "aim1")
9994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-AIM", "aim2", new TypeSet("HOME", "PREF"));
10004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testImPrefHandlingV21() {
10034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testImPrefHandlingCommon(V21);
10044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testImPrefHandlingV30() {
10074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testImPrefHandlingCommon(V30);
10084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10103d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testImPrefHandlingV40() {
101136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testImPrefHandlingCommon(V40);
101236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
101336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
10144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testWebsiteCommon(int vcardType) {
10154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
10164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
10174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Website.CONTENT_ITEM_TYPE)
10184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Website.URL, "http://website.example.android.com/index.html")
10194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Website.TYPE, Website.TYPE_BLOG);
10204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Website.CONTENT_ITEM_TYPE)
10214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Website.URL, "ftp://ftp.example.android.com/index.html")
10224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Website.TYPE, Website.TYPE_FTP);
10234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // We drop TYPE information since vCard (especially 3.0) does not allow us to emit it.
10254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
10264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("URL", "ftp://ftp.example.android.com/index.html")
10274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("URL", "http://website.example.android.com/index.html");
10284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testWebsiteV21() {
10314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testWebsiteCommon(V21);
10324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testWebsiteV30() {
10354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testWebsiteCommon(V30);
10364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
103836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testWebsiteV40() {
103936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testWebsiteCommon(V40);
104036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
104136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
10424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private String getAndroidPropValue(final String mimeType, String value, Integer type) {
10434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        return getAndroidPropValue(mimeType, value, type, null);
10444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private String getAndroidPropValue(final String mimeType, String value,
10474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            Integer type, String label) {
10484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        return (mimeType + ";" + value + ";"
10494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                + (type != null ? type : "") + ";"
10504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                + (label != null ? label : "") + ";;;;;;;;;;;;");
10514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testEventCommon(int vcardType) {
10544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
10554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
10564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
10574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.TYPE, Event.TYPE_ANNIVERSARY)
10584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.START_DATE, "1982-06-16");
10594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
10604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.TYPE, Event.TYPE_BIRTHDAY)
10614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.START_DATE, "2008-10-22");
10624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
10634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.TYPE, Event.TYPE_OTHER)
10644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.START_DATE, "2018-03-12");
10654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
10664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.TYPE, Event.TYPE_CUSTOM)
10674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.LABEL, "The last day")
10684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.START_DATE, "When the Tower of Hanoi with 64 rings is completed.");
10694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
10704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.TYPE, Event.TYPE_BIRTHDAY)
10714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.START_DATE, "2009-05-19");  // Should be ignored.
10724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
10734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("BDAY", "2008-10-22")
10744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-ANDROID-CUSTOM",
10754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        getAndroidPropValue(
10764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                Event.CONTENT_ITEM_TYPE, "1982-06-16", Event.TYPE_ANNIVERSARY))
10774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-ANDROID-CUSTOM",
10784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        getAndroidPropValue(
10794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                Event.CONTENT_ITEM_TYPE, "2018-03-12", Event.TYPE_OTHER))
10804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-ANDROID-CUSTOM",
10814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        getAndroidPropValue(
10824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                Event.CONTENT_ITEM_TYPE,
10834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                "When the Tower of Hanoi with 64 rings is completed.",
10844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                Event.TYPE_CUSTOM, "The last day"));
10854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEventV21() {
10884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEventCommon(V21);
10894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEventV30() {
10924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEventCommon(V30);
10934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
109536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testEventV40() {
109636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testEventCommon(V40);
109736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
109836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
10994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testNoteCommon(int vcardType) {
11004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
11014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
11024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Note.CONTENT_ITEM_TYPE)
11034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Note.NOTE, "note1");
11044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Note.CONTENT_ITEM_TYPE)
11054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Note.NOTE, "note2")
11064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Note.IS_PRIMARY, 1);  // Just ignored.
11074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
11084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("NOTE", "note1")
11094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("NOTE", "note2");
11104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testNoteV21() {
11134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testNoteCommon(V21);
11144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testNoteV30() {
11174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testNoteCommon(V30);
11184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
112036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testNoteV40() {
112136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testNoteCommon(V40);
112236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
112336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
11244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPhotoCommon(int vcardType) {
112536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        final boolean useB =
112636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa            (VCardConfig.isVersion30(vcardType) || VCardConfig.isVersion40(vcardType));
11274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
11284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
11294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
11304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "PhotoTest");
11314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Photo.CONTENT_ITEM_TYPE)
11324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Photo.PHOTO, sPhotoByteArray);
11334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContentValues contentValuesForPhoto = new ContentValues();
113536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        contentValuesForPhoto.put("ENCODING", (useB ? "b" : "BASE64"));
11364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElem()
11374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("FN", "PhotoTest")
11384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("N", "PhotoTest;;;;",
11394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("PhotoTest", "", "", "", ""))
11404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("PHOTO", null, null, sPhotoByteArray,
11414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        contentValuesForPhoto, new TypeSet("JPEG"), null);
11424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhotoV21() {
11454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhotoCommon(V21);
11464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhotoV30() {
11494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhotoCommon(V30);
11504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
115236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPhotoV40() {
115336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPhotoCommon(V40);
115436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
115536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
11564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testRelationCommon(int vcardType) {
11574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
11584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Relation.CONTENT_ITEM_TYPE)
11594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Relation.TYPE, Relation.TYPE_MOTHER)
11604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Relation.NAME, "Ms. Mother");
11614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addContentValuesVerifierElem().addExpected(Relation.CONTENT_ITEM_TYPE)
11624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Relation.TYPE, Relation.TYPE_MOTHER)
11634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Relation.NAME, "Ms. Mother");
11644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testRelationV21() {
11674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testRelationCommon(V21);
11684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testRelationV30() {
11714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testRelationCommon(V30);
11724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testV30HandleEscape() {
11754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(V30);
11764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredName.CONTENT_ITEM_TYPE)
11774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "\\")
11784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, ";")
11794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, ",")
11804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "\n")
11814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "[<{Unescaped:Asciis}>]");
11824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // Verifies the vCard String correctly escapes each character which must be escaped.
11834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addLineVerifierElem()
11844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpected("N:\\\\;\\;;\\,;\\n;")
11854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpected("FN:[<{Unescaped:Asciis}>]");
11864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElem()
11874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("FN", "[<{Unescaped:Asciis}>]")
11884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("N", Arrays.asList("\\", ";", ",", "\n", ""));
11894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
11924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * There's no "NICKNAME" property in vCard 2.1, while there is in vCard 3.0.
11934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * We use Android-specific "X-ANDROID-CUSTOM" property.
11944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * This test verifies the functionality.
11954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
11964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testNickNameV21() {
11974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(V21);
11984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Nickname.CONTENT_ITEM_TYPE)
11994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Nickname.NAME, "Nicky");
12004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
12014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-ANDROID-CUSTOM",
12024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Nickname.CONTENT_ITEM_TYPE + ";Nicky;;;;;;;;;;;;;;");
12034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addContentValuesVerifierElem().addExpected(Nickname.CONTENT_ITEM_TYPE)
12044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Nickname.NAME, "Nicky");
12054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
12064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
12074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testTolerateBrokenPhoneNumberEntryV21() {
12084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(V21);
12094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
12104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
12114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_HOME)
121295e66b00988bc16ecc17df31e47c873b2554b8ccinshik                .put(Phone.NUMBER, "111-222-3333 (Miami)\n444-5555-666 (Tokyo)\n"
121395e66b00988bc16ecc17df31e47c873b2554b8ccinshik                        + "777-888-9999 (Chicago)\n111-222-3333 (Miami)");
12144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
12154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "111-222-3333", new TypeSet("HOME"))
12164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "444-555-5666", new TypeSet("HOME"))
12174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "777-888-9999", new TypeSet("HOME"));
12184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
12194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
12204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPickUpNonEmptyContentValuesCommon(int vcardType) {
12214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
12224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
12234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
12244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);  // Empty name. Should be ignored.
12254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
12263d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "family1")  // Not primary. Should be ignored.
12273d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "display");
12284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
12294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1)
12303d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "family2")  // This entry is what we want.
12313d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "display");
12324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
12334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1)
12343d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "family3")
12353d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "display");
12364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
12373d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "family4")
12383d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "display");
12394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElem()
12404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("N", Arrays.asList("family2", "", "", "", ""))
12413d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .addExpectedNode("FN", "display");
12424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
12434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
12444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPickUpNonEmptyContentValuesV21() {
12454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPickUpNonEmptyContentValuesCommon(V21);
12464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
12474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
12484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPickUpNonEmptyContentValuesV30() {
12494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPickUpNonEmptyContentValuesCommon(V30);
12504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
125158ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa
125236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPickUpNonEmptyContentValuesV40() {
125336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPickUpNonEmptyContentValuesCommon(V40);
125436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
125536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
125658ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa    public void testUseMultiByteTypeV30() {
125758ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa        mVerifier.initForExportTest(V30);
125858ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
125958ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
126058ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
126158ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .put(Phone.LABEL, "\u96FB\u8A71")
126258ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .put(Phone.NUMBER, "1");
126358ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa        mVerifier.addLineVerifierElem()
126458ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .addExpected("N:")
126558ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .addExpected("FN:")
126658ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .addExpected("TEL;TYPE=\u96FB\u8A71:1");
126758ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
126858ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .addExpectedNode("TEL", "1", new TypeSet("\u96FB\u8A71"));
126958ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa    }
1270422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa
12715db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa    public void testSipAddressV21() {
12725db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa        mVerifier.initForExportTest(V21);
12735db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
12745db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa        entry.addContentValues(SipAddress.CONTENT_ITEM_TYPE)
12755db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa                .put(SipAddress.SIP_ADDRESS, "gold");
12765db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa        mVerifier.addLineVerifierElem()
12775db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa                .addExpected("X-SIP:gold");
12785db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
12795db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa                .addExpectedNode("X-SIP", "gold");
12805db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa    }
12815db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa
1282422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa    public void testSipAddressV30() {
1283422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        mVerifier.initForExportTest(V30);
1284422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
1285422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        entry.addContentValues(SipAddress.CONTENT_ITEM_TYPE)
1286422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa                .put(SipAddress.SIP_ADDRESS, "android@example.com");
1287422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        mVerifier.addLineVerifierElem()
1288422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa                .addExpected("N:")
1289422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa                .addExpected("FN:")
1290422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa                .addExpected("IMPP:sip:android@example.com");
1291422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
1292422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa                .addExpectedNode("IMPP", "sip:android@example.com");
1293422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa    }
1294422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa
129595e66b00988bc16ecc17df31e47c873b2554b8ccinshik    public void testPauseAndWaitConversionV30() {
129695e66b00988bc16ecc17df31e47c873b2554b8ccinshik        mVerifier.initForExportTest(V30);
129795e66b00988bc16ecc17df31e47c873b2554b8ccinshik        final ContactEntry entry = mVerifier.addInputEntry();
129895e66b00988bc16ecc17df31e47c873b2554b8ccinshik        // Insert numbers with PAUSE (',' internally, 'p' for outside) and
129995e66b00988bc16ecc17df31e47c873b2554b8ccinshik        // WAIT (';' internally, 'w' for outside)
130095e66b00988bc16ecc17df31e47c873b2554b8ccinshik        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
130195e66b00988bc16ecc17df31e47c873b2554b8ccinshik                .put(Phone.TYPE, Phone.TYPE_HOME)
130295e66b00988bc16ecc17df31e47c873b2554b8ccinshik                .put(Phone.NUMBER, "111,222;333");
130395e66b00988bc16ecc17df31e47c873b2554b8ccinshik        mVerifier.addLineVerifierElem()
130495e66b00988bc16ecc17df31e47c873b2554b8ccinshik                .addExpected("N:")
130595e66b00988bc16ecc17df31e47c873b2554b8ccinshik                .addExpected("FN:")
130695e66b00988bc16ecc17df31e47c873b2554b8ccinshik                .addExpected("TEL;TYPE=HOME:111p222w333");
130795e66b00988bc16ecc17df31e47c873b2554b8ccinshik        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
130895e66b00988bc16ecc17df31e47c873b2554b8ccinshik                .addExpectedNode("TEL", "111p222w333", new TypeSet("HOME"));
130995e66b00988bc16ecc17df31e47c873b2554b8ccinshik    }
131095e66b00988bc16ecc17df31e47c873b2554b8ccinshik
1311422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa    public void testSipAddressV40() {
1312422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        mVerifier.initForExportTest(V40);
1313422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
1314422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        entry.addContentValues(SipAddress.CONTENT_ITEM_TYPE)
1315422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa                .put(SipAddress.SIP_ADDRESS, "android@example.com");
1316422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        mVerifier.addLineVerifierElem()
1317422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa                .addExpected("FN:")
131837634a0179f74431317f50d2ce493e3fad36f5a9Daisuke Miyakawa                .addExpected("TEL:sip:android@example.com");
1319422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
132037634a0179f74431317f50d2ce493e3fad36f5a9Daisuke Miyakawa                .addExpectedNode("TEL", "sip:android@example.com");
1321422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa    }
13224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa}
1323