VCardExporterTests.java revision 3d77102a83d0e412046ca0ff9dfdef1a44050ca3
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
194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.content.ContentValues;
204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Email;
214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Event;
224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Im;
234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Nickname;
244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Note;
254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Organization;
264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Phone;
274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Photo;
284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Relation;
294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.StructuredName;
304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Website;
324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport com.android.vcard.VCardConfig;
344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport com.android.vcard.tests.test_utils.ContactEntry;
354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport com.android.vcard.tests.test_utils.PropertyNodesVerifierElem;
364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport com.android.vcard.tests.test_utils.PropertyNodesVerifierElem.TypeSet;
37237dd947f2e22d34f490bf35ef4b850d05cfffa9Daisuke Miyakawaimport com.android.vcard.tests.test_utils.VCardTestsBase;
384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport java.util.Arrays;
404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa/**
424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * Tests for the code related to vCard exporter, inculding vCard composer.
434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * This test class depends on vCard importer code, so if tests for vCard importer fail,
444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * the result of this class will not be reliable.
454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa */
464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawapublic class VCardExporterTests extends VCardTestsBase {
474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private static final byte[] sPhotoByteArray =
484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        VCardImporterTests.sPhotoByteArrayForComplicatedCase;
494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testSimpleV21() {
514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(V21);
524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredName.CONTENT_ITEM_TYPE)
534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "Ando")
544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "Roid");
554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElem()
564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("FN", "Roid Ando")
574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("N", "Ando;Roid;;;",
584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("Ando", "Roid", "", "", ""));
594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testStructuredNameBasic(int vcardType) {
624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredName.CONTENT_ITEM_TYPE)
644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "AppropriatePrefix")
684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "AppropriateSuffix")
693d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "DISPLAY NAME");
704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
713d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElem()
724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("N",
734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        + "AppropriatePrefix;AppropriateSuffix",
754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"))
773d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .addExpectedNodeWithOrder("FN", "DISPLAY NAME");
784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testStructuredNameBasicV21() {
814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testStructuredNameBasic(V21);
824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testStructuredNameBasicV30() {
854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testStructuredNameBasic(V30);
864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
883d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameBasicV40() {
893d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameBasic(V40);
903d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
913d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Test that only "primary" StructuredName is emitted, so that our vCard file
944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * will not confuse the external importer, assuming there may be some importer
954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * which presume that there's only one property toward each of  "N", "FN", etc.
964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Note that more than one "N", "FN", etc. properties are acceptable in vCard spec.
974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testStructuredNameUsePrimaryCommon(int vcardType) {
994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
1003d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
1014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName1")
1034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName1")
1044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName1")
1054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix1")
1064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix1")
1073d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "DoNotEmitDisplayName1");
1084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // With "IS_PRIMARY=1". This is what we should use.
1104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
1124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
1134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
1144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "AppropriatePrefix")
1154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "AppropriateSuffix")
1163d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "AppropriateDisplayName")
1174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);
1184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // With "IS_PRIMARY=1", but we should ignore this time, since this is second, not first.
1203d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        // vCard 2.1 does not specify anything about the number of N properties. We choose not
1213d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        // emitting this property.
1223d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        // vCard 3.0 does (There must be one N property)
1233d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        // vCard 4.0 (rev13) does (cardinality (0, 1)).
1244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName2")
1264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName2")
1274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName2")
1284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix2")
1294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix2")
1303d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "DoNotEmitDisplayName2")
1314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);
1324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1333d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa       mVerifier.addPropertyNodesVerifierElem()
1344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("N",
1354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
1364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        + "AppropriatePrefix;AppropriateSuffix",
1374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
1384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"))
1393d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .addExpectedNodeWithOrder("FN", "AppropriateDisplayName");
1404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
1414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testStructuredNameUsePrimaryV21() {
1434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testStructuredNameUsePrimaryCommon(V21);
1444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
1454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testStructuredNameUsePrimaryV30() {
1474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testStructuredNameUsePrimaryCommon(V30);
1484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
1494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1503d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameUsePrimaryV40() {
15136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testStructuredNameUsePrimaryCommon(V40);
15236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
15336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
1544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
1554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Tests that only "super primary" StructuredName is emitted.
1564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * See also the comment in {@link #testStructuredNameUsePrimaryCommon(int)}.
1574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
1584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testStructuredNameUseSuperPrimaryCommon(int vcardType) {
1594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
1603d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
1613d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1623d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName1")
1633d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName1")
1643d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName1")
1653d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix1")
1663d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix1")
1673d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "DoNotEmitDisplay1");
1683d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
1693d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        // With "IS_PRIMARY=1", but we should ignore this time.
1703d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1713d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName2")
1723d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName2")
1733d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName2")
1743d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix2")
1753d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix2")
1763d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "DoNotEmitDisplay2")
1773d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);
1783d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
1793d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        // With "IS_SUPER_PRIMARY=1". This is what we should use.
1803d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1813d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
1823d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
1833d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
1843d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PREFIX, "AppropriatePrefix")
1853d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.SUFFIX, "AppropriateSuffix")
1863d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "AppropriateDisplayName")
1873d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.IS_SUPER_PRIMARY, 1);
1883d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
1893d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1903d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName3")
1913d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName3")
1923d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName3")
1933d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix3")
1943d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix3")
1953d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "DoNotEmitDisplay3")
1963d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);
1973d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
1983d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final PropertyNodesVerifierElem elem = mVerifier.addPropertyNodesVerifierElem();
1993d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        elem.addExpectedNodeWithOrder("N",
2003d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
2013d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                + "AppropriatePrefix;AppropriateSuffix",
2023d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
2033d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                        "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"));
2043d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2053d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        elem.addExpectedNodeWithOrder("FN", "AppropriateDisplayName");
2063d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2073d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2083d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameUseSuperPrimaryV21() {
2093d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameUseSuperPrimaryCommon(V21);
2103d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2113d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2123d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameUseSuperPrimaryV30() {
2133d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameUseSuperPrimaryCommon(V30);
2143d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2153d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2163d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameUseSuperPrimaryV40() {
2173d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameUseSuperPrimaryCommon(V40);
2183d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2193d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2203d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    /**
2213d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * Tests phonetic names field are handled correctly.
2223d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     *
2233d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * vCard 2.1 does not have any field corresponding to them.
2243d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * vCard 3.0 has SORT-STRING property, which does not support multiple values inside it.
2253d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * vCard 4.0 (rev13) has SORT-AS parameter, which has three values (family, given, middle)
2263d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * inside it.
2273d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     */
2283d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    private void testStructuredNamePhoneticNameCommon(int vcardType) {
2293d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
2303d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
2313d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
2323d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
2333d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
2343d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
2353d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PREFIX, "AppropriatePrefix")
2363d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.SUFFIX, "AppropriateSuffix")
2373d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "AppropriateDisplayName")
2383d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PHONETIC_FAMILY_NAME, "AppropriatePhoneticFamily")
2393d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PHONETIC_GIVEN_NAME, "AppropriatePhoneticGiven")
2403d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PHONETIC_MIDDLE_NAME, "AppropriatePhoneticMiddle");
2413d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2423d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final PropertyNodesVerifierElem elem = mVerifier.addPropertyNodesVerifierElem();
2433d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        if (VCardConfig.isVersion40(vcardType)) {
2443d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            final ContentValues contentValues = new ContentValues();
2453d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            contentValues.put("SORT-AS",
2463d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName");
2473d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            // vCard 4.0 (rev13) now uses SORT-AS parameter, which is not compatible with
2483d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            // either 2.1 nor 3.0.
2493d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            elem.addExpectedNodeWithOrder("N",
2503d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
2513d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    + "AppropriatePrefix;AppropriateSuffix",
2523d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
2533d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                            "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"),
2543d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    contentValues);
2553d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        } else {
2563d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            elem.addExpectedNodeWithOrder("N",
2573d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
2583d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    + "AppropriatePrefix;AppropriateSuffix",
2593d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
2603d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                            "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"));
2613d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            if (VCardConfig.isVersion30(vcardType)) {
2623d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                elem.addExpectedNode("SORT-STRING",
2633d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                        "AppropriatePhoneticGiven AppropriatePhoneticMiddle"
2643d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                        + " AppropriatePhoneticFamily");
2653d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            }
2663d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        }
2673d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2683d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        elem.addExpectedNodeWithOrder("FN", "AppropriateDisplayName")
2693d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            .addExpectedNode("X-PHONETIC-FIRST-NAME", "AppropriatePhoneticGiven")
2703d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            .addExpectedNode("X-PHONETIC-MIDDLE-NAME", "AppropriatePhoneticMiddle")
2713d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            .addExpectedNode("X-PHONETIC-LAST-NAME", "AppropriatePhoneticFamily");
2723d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2733d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2743d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNamePhoneticNameV21() {
2753d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNamePhoneticNameCommon(V21);
2763d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2773d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2783d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNamePhoneticNameV30() {
2793d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNamePhoneticNameCommon(V30);
2803d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2813d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2823d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNamePhoneticNameV40() {
2833d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNamePhoneticNameCommon(V40);
2843d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2853d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2863d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    // TODO: need to add test cases confirming escaping, empty values, etc.
2873d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2883d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    /**
2893d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * Confirms all the other sides of the handling is correctly interpreted at one time.
2903d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     *
2913d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * A kind of regression test for StructuredName handling.
2923d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     */
2933d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    private void testStructuredNameComplicatedCommon(int vcardType) {
2943d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
2953d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
2964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
2974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName1")
2984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName1")
2994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName1")
3004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix1")
3014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix1")
3024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_FAMILY_NAME, "DoNotEmitPhoneticFamily1")
3034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_GIVEN_NAME, "DoNotEmitPhoneticGiven1")
3044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_MIDDLE_NAME, "DoNotEmitPhoneticMiddle1");
3054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // With "IS_PRIMARY=1", but we should ignore this time.
3074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
3084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName2")
3094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName2")
3104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName2")
3114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix2")
3124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix2")
3134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_FAMILY_NAME, "DoNotEmitPhoneticFamily2")
3144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_GIVEN_NAME, "DoNotEmitPhoneticGiven2")
3154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_MIDDLE_NAME, "DoNotEmitPhoneticMiddle2")
3164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);
3174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // With "IS_SUPER_PRIMARY=1". This is what we should use.
3194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
3204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
3214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
3224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
3234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "AppropriatePrefix")
3244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "AppropriateSuffix")
3254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_FAMILY_NAME, "AppropriatePhoneticFamily")
3264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_GIVEN_NAME, "AppropriatePhoneticGiven")
3274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_MIDDLE_NAME, "AppropriatePhoneticMiddle")
3284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_SUPER_PRIMARY, 1);
3294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
3314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName3")
3324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName3")
3334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName3")
3344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix3")
3354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix3")
3364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_FAMILY_NAME, "DoNotEmitPhoneticFamily3")
3374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_GIVEN_NAME, "DoNotEmitPhoneticGiven3")
3384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_MIDDLE_NAME, "DoNotEmitPhoneticMiddle3")
3394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);
3404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3413d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final PropertyNodesVerifierElem elem = mVerifier.addPropertyNodesVerifierElem();
3423d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        if (VCardConfig.isVersion40(vcardType)) {
3433d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            final ContentValues contentValues = new ContentValues();
3443d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            contentValues.put("SORT-AS",
3453d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName");
3463d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            // vCard 4.0 (rev13) now uses SORT-AS parameter, which is not compatible with
3473d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            // either 2.1 nor 3.0.
3483d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            elem.addExpectedNodeWithOrder("N",
3493d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
3503d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    + "AppropriatePrefix;AppropriateSuffix",
3513d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
3523d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                            "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"),
3533d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    contentValues);
3543d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        } else {
3553d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            elem.addExpectedNodeWithOrder("N",
3563d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
3573d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    + "AppropriatePrefix;AppropriateSuffix",
3583d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
3593d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                            "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"));
3603d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            if (VCardConfig.isVersion30(vcardType)) {
3613d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                elem.addExpectedNode("SORT-STRING",
3623d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                        "AppropriatePhoneticGiven AppropriatePhoneticMiddle"
3633d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                        + " AppropriatePhoneticFamily");
3643d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            }
3654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        }
3663d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
3673d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        elem.addExpectedNodeWithOrder("FN",
3683d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                "AppropriatePrefix AppropriateGivenName "
3693d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                + "AppropriateMiddleName AppropriateFamilyName AppropriateSuffix")
3703d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            .addExpectedNode("X-PHONETIC-FIRST-NAME", "AppropriatePhoneticGiven")
3713d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            .addExpectedNode("X-PHONETIC-MIDDLE-NAME", "AppropriatePhoneticMiddle")
3723d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            .addExpectedNode("X-PHONETIC-LAST-NAME", "AppropriatePhoneticFamily");
3734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
3744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3753d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameComplicatedV21() {
3763d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameComplicatedCommon(V21);
3774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
3784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3793d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameComplicatedV30() {
3803d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameComplicatedCommon(V30);
3813d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
3823d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
3833d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameComplicatedV40() {
3843d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameComplicatedCommon(V40);
3854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
3864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
38736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    /*public void testStructuredNameUseSuperPrimaryV40() {
38836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        // TODO: add appropriate SORT-AS
38936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        // testStructuredNameUseSuperPrimaryCommon(V40);
39036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }*/
39136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
3924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testNickNameV30() {
3934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(V30);
3944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Nickname.CONTENT_ITEM_TYPE)
3954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Nickname.NAME, "Nicky");
3964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
3984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            .addExpectedNodeWithOrder("NICKNAME", "Nicky");
3994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
40136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testNickNameV40() {
40236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        mVerifier.initForExportTest(V40);
40336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Nickname.CONTENT_ITEM_TYPE)
40436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa                .put(Nickname.NAME, "Nicky");
40536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
40636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
40736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa            .addExpectedNodeWithOrder("NICKNAME", "Nicky");
40836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
40936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
4104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPhoneBasicCommon(int vcardType) {
4114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
4124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Phone.CONTENT_ITEM_TYPE)
4134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "1")
4144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_HOME);
4154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
4164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "1", new TypeSet("HOME"));
4174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneBasicV21() {
4204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhoneBasicCommon(V21);
4214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneBasicV30() {
4244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhoneBasicCommon(V30);
4254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
42736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPhoneBasicV40() {
42836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPhoneBasicCommon(V40);
42936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
43036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
4314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneRefrainFormatting() {
4324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(V21 | VCardConfig.FLAG_REFRAIN_PHONE_NUMBER_FORMATTING);
4334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Phone.CONTENT_ITEM_TYPE)
4344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "1234567890(abcdefghijklmnopqrstuvwxyz)")
4354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_HOME);
4364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
4374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "1234567890(abcdefghijklmnopqrstuvwxyz)",
4384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        new TypeSet("HOME"));
4394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
4424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Tests that vCard composer emits corresponding type param which we expect.
4434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
4444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPhoneVariousTypeSupport(int vcardType) {
4454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
4464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
4474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "10")
4494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_HOME);
4504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "20")
4524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_WORK);
4534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "30")
4554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_FAX_HOME);
4564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "40")
4584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_FAX_WORK);
4594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "50")
4614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_MOBILE);
4624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "60")
4644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_PAGER);
4654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "70")
4674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_OTHER);
4684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "80")
4704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CAR);
4714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "90")
4734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_COMPANY_MAIN);
4744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "100")
4764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_ISDN);
4774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "110")
4794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_MAIN);
4804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "120")
4824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_OTHER_FAX);
4834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "130")
4854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_TELEX);
4864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "140")
4884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_WORK_MOBILE);
4894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "150")
4914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_WORK_PAGER);
4924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "160")
4944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_MMS);
4954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
4974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "10", new TypeSet("HOME"))
4984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "20", new TypeSet("WORK"))
4994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "30", new TypeSet("HOME", "FAX"))
5004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "40", new TypeSet("WORK", "FAX"))
5014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "50", new TypeSet("CELL"))
5024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "60", new TypeSet("PAGER"))
5034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "70", new TypeSet("VOICE"))
5044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "80", new TypeSet("CAR"))
5054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "90", new TypeSet("WORK", "PREF"))
5064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "100", new TypeSet("ISDN"))
5074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "110", new TypeSet("PREF"))
5084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "120", new TypeSet("FAX"))
5094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "130", new TypeSet("TLX"))
5104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "140", new TypeSet("WORK", "CELL"))
5114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "150", new TypeSet("WORK", "PAGER"))
5124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "160", new TypeSet("MSG"));
5134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
5144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
5154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneVariousTypeSupportV21() {
5164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhoneVariousTypeSupport(V21);
5174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
5184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
5194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneVariousTypeSupportV30() {
5204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhoneVariousTypeSupport(V30);
5214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
5224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
52336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPhoneVariousTypeSupportV40() {
52436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPhoneVariousTypeSupport(V40);
52536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
52636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
5274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
5284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Tests that "PREF"s are emitted appropriately.
5294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
5304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPhonePrefHandlingCommon(int vcardType) {
5314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
5324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
5334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "1")
5354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_HOME);
5364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "2")
5384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_WORK)
5394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.IS_PRIMARY, 1);
5404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "3")
5424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_FAX_HOME)
5434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.IS_PRIMARY, 1);
5444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "4")
5464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_FAX_WORK);
5474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
5484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
5494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "4", new TypeSet("WORK", "FAX"))
5504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "3", new TypeSet("HOME", "FAX", "PREF"))
5514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "2", new TypeSet("WORK", "PREF"))
5524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "1", new TypeSet("HOME"));
5534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
5544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
5554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhonePrefHandlingV21() {
5564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhonePrefHandlingCommon(V21);
5574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
5584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
5594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhonePrefHandlingV30() {
5604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhonePrefHandlingCommon(V30);
5614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
5624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
56336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPhonePrefHandlingV40() {
56436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPhonePrefHandlingCommon(V40);
56536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
56636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
5674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testMiscPhoneTypeHandling(int vcardType) {
5684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
5694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
5704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "1")
5724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
5734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "Modem");
5744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "2")
5764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
5774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "MSG");
5784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "3")
5804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
5814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "BBS");
5824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "4")
5844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
5854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "VIDEO");
5864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "5")
5884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM);
5894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "6")
5914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
5924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "_AUTO_CELL");  // The old indicator for the type mobile.
5934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "7")
5954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
5964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "\u643A\u5E2F");  // Mobile phone in Japanese Kanji
5974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "8")
5994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
6004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "invalid");
6014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        PropertyNodesVerifierElem elem = mVerifier.addPropertyNodesVerifierElemWithEmptyName();
60236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        if (VCardConfig.isVersion30(vcardType) || VCardConfig.isVersion40(vcardType)) {
6032bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa            // vCard 3.0 accepts "invalid". Also stop using toUpper()
6042bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa            elem.addExpectedNode("TEL", "1", new TypeSet("Modem"))
6052bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "2", new TypeSet("MSG"))
6062bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "3", new TypeSet("BBS"))
6072bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "4", new TypeSet("VIDEO"))
6082bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "5", new TypeSet("VOICE"))
6092bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "6", new TypeSet("CELL"))
6102bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "7", new TypeSet("CELL"))
6112bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "8", new TypeSet("invalid"));
6122bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa        } else {
6132bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa            elem.addExpectedNode("TEL", "1", new TypeSet("MODEM"))
6142bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "2", new TypeSet("MSG"))
6152bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "3", new TypeSet("BBS"))
6162bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "4", new TypeSet("VIDEO"))
6172bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "5", new TypeSet("VOICE"))
6182bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "6", new TypeSet("CELL"))
6192bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "7", new TypeSet("CELL"))
6202bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "8", new TypeSet("X-invalid"));
6212bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa        }
6224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
6244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneTypeHandlingV21() {
6254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testMiscPhoneTypeHandling(V21);
6264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
6284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneTypeHandlingV30() {
6294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testMiscPhoneTypeHandling(V30);
6304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
63236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPhoneTypeHandlingV40() {
63336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testMiscPhoneTypeHandling(V40);
63436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
63536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
6364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testEmailBasicCommon(int vcardType) {
6374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
6384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Email.CONTENT_ITEM_TYPE)
6394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "sample@example.com");
6404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
6414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            .addExpectedNode("EMAIL", "sample@example.com");
6424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
6444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEmailBasicV21() {
6454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEmailBasicCommon(V21);
6464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
6484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEmailBasicV30() {
6494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEmailBasicCommon(V30);
6504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
65236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testEmailBasicV40() {
65336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testEmailBasicCommon(V40);
65436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
65536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
6564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testEmailVariousTypeSupportCommon(int vcardType) {
6574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
6584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
6594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
6604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "type_home@example.com")
6614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.TYPE, Email.TYPE_HOME);
6624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
6634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "type_work@example.com")
6644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.TYPE, Email.TYPE_WORK);
6654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
6664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "type_mobile@example.com")
6674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.TYPE, Email.TYPE_MOBILE);
6684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
6694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "type_other@example.com")
6704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.TYPE, Email.TYPE_OTHER);
6714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
6724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("EMAIL", "type_home@example.com", new TypeSet("HOME"))
6734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("EMAIL", "type_work@example.com", new TypeSet("WORK"))
6744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("EMAIL", "type_mobile@example.com", new TypeSet("CELL"))
6754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("EMAIL", "type_other@example.com");
6764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
6784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEmailVariousTypeSupportV21() {
6794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEmailVariousTypeSupportCommon(V21);
6804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
6824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEmailVariousTypeSupportV30() {
6834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEmailVariousTypeSupportCommon(V30);
6844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
68636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testEmailVariousTypeSupportV40() {
68736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testEmailVariousTypeSupportCommon(V40);
68836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
68936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
6904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testEmailPrefHandlingCommon(int vcardType) {
6914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
6924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
6934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
6944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "type_home@example.com")
6954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.TYPE, Email.TYPE_HOME)
6964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.IS_PRIMARY, 1);
6974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
6984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "type_notype@example.com")
6994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.IS_PRIMARY, 1);
7004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
7024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("EMAIL", "type_notype@example.com", new TypeSet("PREF"))
7034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("EMAIL", "type_home@example.com", new TypeSet("HOME", "PREF"));
7044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEmailPrefHandlingV21() {
7074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEmailPrefHandlingCommon(V21);
7084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEmailPrefHandlingV30() {
7114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEmailPrefHandlingCommon(V30);
7124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
71436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testEmailPrefHandlingV40() {
71536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testEmailPrefHandlingCommon(V40);
71636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
71736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
7184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPostalAddressCommon(int vcardType) {
7194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
7204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
7214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.POBOX, "Pobox")
7224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.NEIGHBORHOOD, "Neighborhood")
7234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.STREET, "Street")
7244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.CITY, "City")
7254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.REGION, "Region")
7264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.POSTCODE, "100")
7274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.COUNTRY, "Country")
7284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.FORMATTED_ADDRESS, "Formatted Address")
7294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK);
7304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // adr-value    = 0*6(text-value ";") text-value
7314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        //              ; PO Box, Extended Address, Street, Locality, Region, Postal Code,
7324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        //              ; Country Name
7334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        //
7344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // The NEIGHBORHOOD field is appended after the CITY field.
7354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
7364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("ADR",
7374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("Pobox", "", "Street", "City Neighborhood",
7384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                "Region", "100", "Country"), new TypeSet("WORK"));
7394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalAddressV21() {
7424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalAddressCommon(V21);
7434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalAddressV30() {
7464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalAddressCommon(V30);
7474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
74936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPostalAddressV40() {
75036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPostalAddressCommon(V40);
75136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
75236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
7534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPostalAddressNonNeighborhood(int vcardType) {
7544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
7554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
7564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.CITY, "City");
7574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
7584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("ADR",
7594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("", "", "", "City", "", "", ""), new TypeSet("HOME"));
7604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalAddressNonNeighborhoodV21() {
7634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalAddressNonNeighborhood(V21);
7644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalAddressNonNeighborhoodV30() {
7674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalAddressNonNeighborhood(V30);
7684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
77036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPostalAddressNonNeighborhoodV40() {
77136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPostalAddressNonNeighborhood(V40);
77236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
77336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
7744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPostalAddressNonCity(int vcardType) {
7754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
7764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
7774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.NEIGHBORHOOD, "Neighborhood");
7784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
7794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("ADR",
7804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("", "", "", "Neighborhood", "", "", ""), new TypeSet("HOME"));
7814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalAddressNonCityV21() {
7844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalAddressNonCity(V21);
7854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalAddressNonCityV30() {
7884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalAddressNonCity(V30);
7894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
79136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPostalAddressNonCityV40() {
79236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPostalAddressNonCity(V40);
79336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
79436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
7954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPostalOnlyWithFormattedAddressCommon(int vcardType) {
7964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
7974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
7984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.REGION, "")  // Must be ignored.
7994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.FORMATTED_ADDRESS,
8004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                "Formatted address CA 123-334 United Statue");
8014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
8024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("ADR", ";Formatted address CA 123-334 United Statue;;;;;",
8034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("", "Formatted address CA 123-334 United Statue",
8044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                "", "", "", "", ""), new TypeSet("HOME"));
8054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalOnlyWithFormattedAddressV21() {
8084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalOnlyWithFormattedAddressCommon(V21);
8094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalOnlyWithFormattedAddressV30() {
8124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalOnlyWithFormattedAddressCommon(V30);
8134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
81536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPostalOnlyWithFormattedAddressV40() {
81636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPostalOnlyWithFormattedAddressCommon(V40);
81736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
81836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
8194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
8204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Tests that the vCard composer honors formatted data when it is available
8214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * even when it is partial.
8224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
8234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPostalWithBothStructuredAndFormattedCommon(int vcardType) {
8244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
8254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
8264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.POBOX, "Pobox")
8274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.COUNTRY, "Country")
8284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.FORMATTED_ADDRESS,
8294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        "Formatted address CA 123-334 United Statue");  // Should be ignored
8304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
8314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("ADR", "Pobox;;;;;;Country",
8324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("Pobox", "", "", "", "", "", "Country"),
8334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        new TypeSet("HOME"));
8344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalWithBothStructuredAndFormattedV21() {
8374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalWithBothStructuredAndFormattedCommon(V21);
8384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalWithBothStructuredAndFormattedV30() {
8414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalWithBothStructuredAndFormattedCommon(V30);
8424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
84436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPostalWithBothStructuredAndFormattedV40() {
84536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPostalWithBothStructuredAndFormattedCommon(V40);
84636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
84736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
8484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testOrganizationCommon(int vcardType) {
8494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
8504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
8514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Organization.CONTENT_ITEM_TYPE)
8524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.COMPANY, "CompanyX")
8534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.DEPARTMENT, "DepartmentY")
8544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.TITLE, "TitleZ")
8554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.JOB_DESCRIPTION, "Description Rambda")  // Ignored.
8564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.OFFICE_LOCATION, "Mountain View")  // Ignored.
8574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.PHONETIC_NAME, "PhoneticName!")  // Ignored
8584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.SYMBOL, "(^o^)/~~");  // Ignore him (her).
8594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Organization.CONTENT_ITEM_TYPE)
8604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .putNull(Organization.COMPANY)
8614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.DEPARTMENT, "DepartmentXX")
8624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .putNull(Organization.TITLE);
8634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Organization.CONTENT_ITEM_TYPE)
8644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.COMPANY, "CompanyXYZ")
8654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .putNull(Organization.DEPARTMENT)
8664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.TITLE, "TitleXYZYX");
8674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // Currently we do not use group but depend on the order.
8684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
8694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("ORG", "CompanyX;DepartmentY",
8704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("CompanyX", "DepartmentY"))
8714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("TITLE", "TitleZ")
8724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("ORG", "DepartmentXX")
8734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("ORG", "CompanyXYZ")
8744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("TITLE", "TitleXYZYX");
8754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testOrganizationV21() {
8784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testOrganizationCommon(V21);
8794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testOrganizationV30() {
8824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testOrganizationCommon(V30);
8834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
88536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testOrganizationV40() {
88636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testOrganizationCommon(V40);
88736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
88836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
8894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testImVariousTypeSupportCommon(int vcardType) {
8904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
8914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
8924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
8934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_AIM)
8944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "aim");
8954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
8964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_MSN)
8974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "msn");
8984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
8994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_YAHOO)
9004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "yahoo");
9014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_SKYPE)
9034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "skype");
9044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_QQ)
9064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "qq");
9074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK)
9094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "google talk");
9104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_ICQ)
9124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "icq");
9134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_JABBER)
9154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "jabber");
9164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_NETMEETING)
9184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "netmeeting");
9194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // No determined way to express unknown type...
9214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
9224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-JABBER", "jabber")
9234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-ICQ", "icq")
9244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-GOOGLE-TALK", "google talk")
9254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-QQ", "qq")
9264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-SKYPE-USERNAME", "skype")
9274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-YAHOO", "yahoo")
9284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-MSN", "msn")
9294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-NETMEETING", "netmeeting")
9304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-AIM", "aim");
9314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testImBasiV21() {
9344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testImVariousTypeSupportCommon(V21);
9354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testImBasicV30() {
9384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testImVariousTypeSupportCommon(V30);
9394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
94136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testImBasicV40() {
94236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testImVariousTypeSupportCommon(V40);
94336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
94436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
9454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testImPrefHandlingCommon(int vcardType) {
9464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
9474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
9484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_AIM)
9504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "aim1");
9514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_AIM)
9534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "aim2")
9544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.TYPE, Im.TYPE_HOME)
9554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.IS_PRIMARY, 1);
9564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
9584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-AIM", "aim1")
9594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-AIM", "aim2", new TypeSet("HOME", "PREF"));
9604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testImPrefHandlingV21() {
9634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testImPrefHandlingCommon(V21);
9644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testImPrefHandlingV30() {
9674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testImPrefHandlingCommon(V30);
9684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9703d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testImPrefHandlingV40() {
97136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testImPrefHandlingCommon(V40);
97236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
97336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
9744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testWebsiteCommon(int vcardType) {
9754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
9764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
9774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Website.CONTENT_ITEM_TYPE)
9784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Website.URL, "http://website.example.android.com/index.html")
9794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Website.TYPE, Website.TYPE_BLOG);
9804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Website.CONTENT_ITEM_TYPE)
9814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Website.URL, "ftp://ftp.example.android.com/index.html")
9824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Website.TYPE, Website.TYPE_FTP);
9834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // We drop TYPE information since vCard (especially 3.0) does not allow us to emit it.
9854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
9864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("URL", "ftp://ftp.example.android.com/index.html")
9874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("URL", "http://website.example.android.com/index.html");
9884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testWebsiteV21() {
9914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testWebsiteCommon(V21);
9924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testWebsiteV30() {
9954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testWebsiteCommon(V30);
9964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
99836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testWebsiteV40() {
99936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testWebsiteCommon(V40);
100036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
100136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
10024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private String getAndroidPropValue(final String mimeType, String value, Integer type) {
10034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        return getAndroidPropValue(mimeType, value, type, null);
10044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private String getAndroidPropValue(final String mimeType, String value,
10074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            Integer type, String label) {
10084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        return (mimeType + ";" + value + ";"
10094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                + (type != null ? type : "") + ";"
10104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                + (label != null ? label : "") + ";;;;;;;;;;;;");
10114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testEventCommon(int vcardType) {
10144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
10154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
10164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
10174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.TYPE, Event.TYPE_ANNIVERSARY)
10184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.START_DATE, "1982-06-16");
10194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
10204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.TYPE, Event.TYPE_BIRTHDAY)
10214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.START_DATE, "2008-10-22");
10224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
10234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.TYPE, Event.TYPE_OTHER)
10244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.START_DATE, "2018-03-12");
10254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
10264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.TYPE, Event.TYPE_CUSTOM)
10274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.LABEL, "The last day")
10284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.START_DATE, "When the Tower of Hanoi with 64 rings is completed.");
10294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
10304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.TYPE, Event.TYPE_BIRTHDAY)
10314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.START_DATE, "2009-05-19");  // Should be ignored.
10324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
10334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("BDAY", "2008-10-22")
10344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-ANDROID-CUSTOM",
10354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        getAndroidPropValue(
10364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                Event.CONTENT_ITEM_TYPE, "1982-06-16", Event.TYPE_ANNIVERSARY))
10374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-ANDROID-CUSTOM",
10384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        getAndroidPropValue(
10394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                Event.CONTENT_ITEM_TYPE, "2018-03-12", Event.TYPE_OTHER))
10404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-ANDROID-CUSTOM",
10414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        getAndroidPropValue(
10424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                Event.CONTENT_ITEM_TYPE,
10434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                "When the Tower of Hanoi with 64 rings is completed.",
10444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                Event.TYPE_CUSTOM, "The last day"));
10454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEventV21() {
10484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEventCommon(V21);
10494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEventV30() {
10524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEventCommon(V30);
10534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
105536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testEventV40() {
105636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testEventCommon(V40);
105736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
105836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
10594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testNoteCommon(int vcardType) {
10604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
10614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
10624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Note.CONTENT_ITEM_TYPE)
10634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Note.NOTE, "note1");
10644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Note.CONTENT_ITEM_TYPE)
10654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Note.NOTE, "note2")
10664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Note.IS_PRIMARY, 1);  // Just ignored.
10674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
10684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("NOTE", "note1")
10694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("NOTE", "note2");
10704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testNoteV21() {
10734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testNoteCommon(V21);
10744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testNoteV30() {
10774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testNoteCommon(V30);
10784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
108036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testNoteV40() {
108136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testNoteCommon(V40);
108236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
108336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
10844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPhotoCommon(int vcardType) {
108536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        final boolean useB =
108636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa            (VCardConfig.isVersion30(vcardType) || VCardConfig.isVersion40(vcardType));
10874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
10884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
10894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
10904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "PhotoTest");
10914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Photo.CONTENT_ITEM_TYPE)
10924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Photo.PHOTO, sPhotoByteArray);
10934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContentValues contentValuesForPhoto = new ContentValues();
109536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        contentValuesForPhoto.put("ENCODING", (useB ? "b" : "BASE64"));
10964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElem()
10974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("FN", "PhotoTest")
10984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("N", "PhotoTest;;;;",
10994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("PhotoTest", "", "", "", ""))
11004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("PHOTO", null, null, sPhotoByteArray,
11014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        contentValuesForPhoto, new TypeSet("JPEG"), null);
11024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhotoV21() {
11054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhotoCommon(V21);
11064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhotoV30() {
11094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhotoCommon(V30);
11104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
111236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPhotoV40() {
111336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPhotoCommon(V40);
111436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
111536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
11164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testRelationCommon(int vcardType) {
11174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
11184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Relation.CONTENT_ITEM_TYPE)
11194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Relation.TYPE, Relation.TYPE_MOTHER)
11204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Relation.NAME, "Ms. Mother");
11214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addContentValuesVerifierElem().addExpected(Relation.CONTENT_ITEM_TYPE)
11224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Relation.TYPE, Relation.TYPE_MOTHER)
11234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Relation.NAME, "Ms. Mother");
11244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testRelationV21() {
11274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testRelationCommon(V21);
11284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testRelationV30() {
11314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testRelationCommon(V30);
11324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testV30HandleEscape() {
11354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(V30);
11364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredName.CONTENT_ITEM_TYPE)
11374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "\\")
11384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, ";")
11394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, ",")
11404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "\n")
11414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "[<{Unescaped:Asciis}>]");
11424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // Verifies the vCard String correctly escapes each character which must be escaped.
11434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addLineVerifierElem()
11444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpected("N:\\\\;\\;;\\,;\\n;")
11454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpected("FN:[<{Unescaped:Asciis}>]");
11464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElem()
11474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("FN", "[<{Unescaped:Asciis}>]")
11484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("N", Arrays.asList("\\", ";", ",", "\n", ""));
11494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
11524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * There's no "NICKNAME" property in vCard 2.1, while there is in vCard 3.0.
11534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * We use Android-specific "X-ANDROID-CUSTOM" property.
11544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * This test verifies the functionality.
11554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
11564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testNickNameV21() {
11574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(V21);
11584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Nickname.CONTENT_ITEM_TYPE)
11594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Nickname.NAME, "Nicky");
11604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
11614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-ANDROID-CUSTOM",
11624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Nickname.CONTENT_ITEM_TYPE + ";Nicky;;;;;;;;;;;;;;");
11634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addContentValuesVerifierElem().addExpected(Nickname.CONTENT_ITEM_TYPE)
11644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Nickname.NAME, "Nicky");
11654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testTolerateBrokenPhoneNumberEntryV21() {
11684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(V21);
11694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
11704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
11714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_HOME)
11724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "111-222-3333 (Miami)\n444-5555-666 (Tokyo);"
11734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        + "777-888-9999 (Chicago);111-222-3333 (Miami)");
11744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
11754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "111-222-3333", new TypeSet("HOME"))
11764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "444-555-5666", new TypeSet("HOME"))
11774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "777-888-9999", new TypeSet("HOME"));
11784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPickUpNonEmptyContentValuesCommon(int vcardType) {
11814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
11824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
11834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
11844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);  // Empty name. Should be ignored.
11854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
11863d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "family1")  // Not primary. Should be ignored.
11873d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "display");
11884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
11894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1)
11903d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "family2")  // This entry is what we want.
11913d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "display");
11924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
11934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1)
11943d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "family3")
11953d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "display");
11964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
11973d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "family4")
11983d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "display");
11994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElem()
12004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("N", Arrays.asList("family2", "", "", "", ""))
12013d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .addExpectedNode("FN", "display");
12024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
12034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
12044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPickUpNonEmptyContentValuesV21() {
12054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPickUpNonEmptyContentValuesCommon(V21);
12064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
12074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
12084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPickUpNonEmptyContentValuesV30() {
12094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPickUpNonEmptyContentValuesCommon(V30);
12104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
121158ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa
121236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPickUpNonEmptyContentValuesV40() {
121336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPickUpNonEmptyContentValuesCommon(V40);
121436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
121536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
121658ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa    public void testUseMultiByteTypeV30() {
121758ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa        mVerifier.initForExportTest(V30);
121858ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
121958ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
122058ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
122158ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .put(Phone.LABEL, "\u96FB\u8A71")
122258ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .put(Phone.NUMBER, "1");
122358ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa        mVerifier.addLineVerifierElem()
122458ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .addExpected("N:")
122558ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .addExpected("FN:")
122658ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .addExpected("TEL;TYPE=\u96FB\u8A71:1");
122758ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
122858ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .addExpectedNode("TEL", "1", new TypeSet("\u96FB\u8A71"));
122958ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa    }
12304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa}
1231