VCardExporterTests.java revision 5db8b7baeffb35191032789cb0b0d643b78f0120
14199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa/*
24199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * Copyright (C) 2009 The Android Open Source Project
34199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa *
44199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * Licensed under the Apache License, Version 2.0 (the "License");
54199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * you may not use this file except in compliance with the License.
64199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * You may obtain a copy of the License at
74199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa *
84199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa *      http://www.apache.org/licenses/LICENSE-2.0
94199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa *
104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * Unless required by applicable law or agreed to in writing, software
114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * distributed under the License is distributed on an "AS IS" BASIS,
124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * See the License for the specific language governing permissions and
144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * limitations under the License.
154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa */
164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawapackage com.android.vcard.tests;
184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
19422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawaimport com.android.vcard.VCardConfig;
20422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawaimport com.android.vcard.tests.test_utils.ContactEntry;
21422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawaimport com.android.vcard.tests.test_utils.PropertyNodesVerifierElem;
22422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawaimport com.android.vcard.tests.test_utils.PropertyNodesVerifierElem.TypeSet;
23422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawaimport com.android.vcard.tests.test_utils.VCardTestsBase;
24422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa
254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.content.ContentValues;
264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Email;
274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Event;
284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Im;
294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Nickname;
304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Note;
314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Organization;
324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Phone;
334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Photo;
344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Relation;
35422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.SipAddress;
364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.StructuredName;
374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.provider.ContactsContract.CommonDataKinds.Website;
394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport java.util.Arrays;
414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa/**
434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * Tests for the code related to vCard exporter, inculding vCard composer.
444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * This test class depends on vCard importer code, so if tests for vCard importer fail,
454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * the result of this class will not be reliable.
464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa */
474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawapublic class VCardExporterTests extends VCardTestsBase {
484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private static final byte[] sPhotoByteArray =
494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        VCardImporterTests.sPhotoByteArrayForComplicatedCase;
504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testSimpleV21() {
524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(V21);
534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredName.CONTENT_ITEM_TYPE)
544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "Ando")
554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "Roid");
564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElem()
574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("FN", "Roid Ando")
584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("N", "Ando;Roid;;;",
594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("Ando", "Roid", "", "", ""));
604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testStructuredNameBasic(int vcardType) {
634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredName.CONTENT_ITEM_TYPE)
654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "AppropriatePrefix")
694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "AppropriateSuffix")
703d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "DISPLAY NAME");
714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
723d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElem()
734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("N",
744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        + "AppropriatePrefix;AppropriateSuffix",
764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"))
783d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .addExpectedNodeWithOrder("FN", "DISPLAY NAME");
794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testStructuredNameBasicV21() {
824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testStructuredNameBasic(V21);
834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testStructuredNameBasicV30() {
864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testStructuredNameBasic(V30);
874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
893d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameBasicV40() {
903d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameBasic(V40);
913d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
923d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Test that only "primary" StructuredName is emitted, so that our vCard file
954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * will not confuse the external importer, assuming there may be some importer
964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * which presume that there's only one property toward each of  "N", "FN", etc.
974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Note that more than one "N", "FN", etc. properties are acceptable in vCard spec.
984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testStructuredNameUsePrimaryCommon(int vcardType) {
1004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
1013d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
1024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName1")
1044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName1")
1054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName1")
1064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix1")
1074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix1")
1083d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "DoNotEmitDisplayName1");
1094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // With "IS_PRIMARY=1". This is what we should use.
1114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
1134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
1144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
1154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "AppropriatePrefix")
1164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "AppropriateSuffix")
1173d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "AppropriateDisplayName")
1184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);
1194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // With "IS_PRIMARY=1", but we should ignore this time, since this is second, not first.
1213d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        // vCard 2.1 does not specify anything about the number of N properties. We choose not
1223d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        // emitting this property.
1233d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        // vCard 3.0 does (There must be one N property)
1243d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        // vCard 4.0 (rev13) does (cardinality (0, 1)).
1254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName2")
1274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName2")
1284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName2")
1294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix2")
1304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix2")
1313d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "DoNotEmitDisplayName2")
1324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);
1334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1343d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa       mVerifier.addPropertyNodesVerifierElem()
1354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("N",
1364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
1374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        + "AppropriatePrefix;AppropriateSuffix",
1384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
1394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"))
1403d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .addExpectedNodeWithOrder("FN", "AppropriateDisplayName");
1414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
1424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testStructuredNameUsePrimaryV21() {
1444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testStructuredNameUsePrimaryCommon(V21);
1454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
1464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testStructuredNameUsePrimaryV30() {
1484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testStructuredNameUsePrimaryCommon(V30);
1494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
1504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
1513d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameUsePrimaryV40() {
15236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testStructuredNameUsePrimaryCommon(V40);
15336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
15436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
1554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
1564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Tests that only "super primary" StructuredName is emitted.
1574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * See also the comment in {@link #testStructuredNameUsePrimaryCommon(int)}.
1584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
1594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testStructuredNameUseSuperPrimaryCommon(int vcardType) {
1604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
1613d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
1623d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1633d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName1")
1643d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName1")
1653d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName1")
1663d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix1")
1673d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix1")
1683d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "DoNotEmitDisplay1");
1693d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
1703d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        // With "IS_PRIMARY=1", but we should ignore this time.
1713d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1723d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName2")
1733d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName2")
1743d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName2")
1753d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix2")
1763d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix2")
1773d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "DoNotEmitDisplay2")
1783d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);
1793d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
1803d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        // With "IS_SUPER_PRIMARY=1". This is what we should use.
1813d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1823d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
1833d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
1843d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
1853d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PREFIX, "AppropriatePrefix")
1863d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.SUFFIX, "AppropriateSuffix")
1873d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "AppropriateDisplayName")
1883d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.IS_SUPER_PRIMARY, 1);
1893d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
1903d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
1913d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName3")
1923d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName3")
1933d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName3")
1943d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix3")
1953d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix3")
1963d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "DoNotEmitDisplay3")
1973d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);
1983d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
1993d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final PropertyNodesVerifierElem elem = mVerifier.addPropertyNodesVerifierElem();
2003d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        elem.addExpectedNodeWithOrder("N",
2013d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
2023d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                + "AppropriatePrefix;AppropriateSuffix",
2033d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
2043d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                        "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"));
2053d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2063d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        elem.addExpectedNodeWithOrder("FN", "AppropriateDisplayName");
2073d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2083d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2093d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameUseSuperPrimaryV21() {
2103d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameUseSuperPrimaryCommon(V21);
2113d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2123d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2133d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameUseSuperPrimaryV30() {
2143d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameUseSuperPrimaryCommon(V30);
2153d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2163d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2173d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameUseSuperPrimaryV40() {
2183d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameUseSuperPrimaryCommon(V40);
2193d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2203d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2213d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    /**
2223d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * Tests phonetic names field are handled correctly.
2233d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     *
2243d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * vCard 2.1 does not have any field corresponding to them.
2253d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * vCard 3.0 has SORT-STRING property, which does not support multiple values inside it.
2263d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * vCard 4.0 (rev13) has SORT-AS parameter, which has three values (family, given, middle)
2273d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * inside it.
2283d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     */
2293d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    private void testStructuredNamePhoneticNameCommon(int vcardType) {
2303d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
2313d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
2323d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
2333d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
2343d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
2353d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
2363d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PREFIX, "AppropriatePrefix")
2373d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.SUFFIX, "AppropriateSuffix")
2383d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "AppropriateDisplayName")
2393d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PHONETIC_FAMILY_NAME, "AppropriatePhoneticFamily")
2403d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PHONETIC_GIVEN_NAME, "AppropriatePhoneticGiven")
2413d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.PHONETIC_MIDDLE_NAME, "AppropriatePhoneticMiddle");
2423d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2433d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final PropertyNodesVerifierElem elem = mVerifier.addPropertyNodesVerifierElem();
2443d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        if (VCardConfig.isVersion40(vcardType)) {
2453d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            final ContentValues contentValues = new ContentValues();
2463d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            contentValues.put("SORT-AS",
2473d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName");
2483d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            // vCard 4.0 (rev13) now uses SORT-AS parameter, which is not compatible with
2493d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            // either 2.1 nor 3.0.
2503d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            elem.addExpectedNodeWithOrder("N",
2513d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
2523d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    + "AppropriatePrefix;AppropriateSuffix",
2533d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
2543d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                            "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"),
2553d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    contentValues);
2563d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        } else {
2573d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            elem.addExpectedNodeWithOrder("N",
2583d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
2593d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    + "AppropriatePrefix;AppropriateSuffix",
2603d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
2613d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                            "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"));
2623d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            if (VCardConfig.isVersion30(vcardType)) {
2633d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                elem.addExpectedNode("SORT-STRING",
2643d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                        "AppropriatePhoneticGiven AppropriatePhoneticMiddle"
2653d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                        + " AppropriatePhoneticFamily");
2663d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            }
2673d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        }
2683d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2693d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        elem.addExpectedNodeWithOrder("FN", "AppropriateDisplayName")
2703d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            .addExpectedNode("X-PHONETIC-FIRST-NAME", "AppropriatePhoneticGiven")
2713d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            .addExpectedNode("X-PHONETIC-MIDDLE-NAME", "AppropriatePhoneticMiddle")
2723d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            .addExpectedNode("X-PHONETIC-LAST-NAME", "AppropriatePhoneticFamily");
2733d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2743d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2753d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNamePhoneticNameV21() {
2763d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNamePhoneticNameCommon(V21);
2773d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2783d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2793d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNamePhoneticNameV30() {
2803d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNamePhoneticNameCommon(V30);
2813d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2823d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2833d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNamePhoneticNameV40() {
2843d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNamePhoneticNameCommon(V40);
2853d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
2863d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2873d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    // TODO: need to add test cases confirming escaping, empty values, etc.
2883d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
2893d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    /**
2903d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * Confirms all the other sides of the handling is correctly interpreted at one time.
2913d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     *
2923d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     * A kind of regression test for StructuredName handling.
2933d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa     */
2943d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    private void testStructuredNameComplicatedCommon(int vcardType) {
2953d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
2963d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
2974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
2984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName1")
2994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName1")
3004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName1")
3014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix1")
3024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix1")
3034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_FAMILY_NAME, "DoNotEmitPhoneticFamily1")
3044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_GIVEN_NAME, "DoNotEmitPhoneticGiven1")
3054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_MIDDLE_NAME, "DoNotEmitPhoneticMiddle1");
3064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // With "IS_PRIMARY=1", but we should ignore this time.
3084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
3094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName2")
3104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName2")
3114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName2")
3124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix2")
3134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix2")
3144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_FAMILY_NAME, "DoNotEmitPhoneticFamily2")
3154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_GIVEN_NAME, "DoNotEmitPhoneticGiven2")
3164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_MIDDLE_NAME, "DoNotEmitPhoneticMiddle2")
3174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);
3184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // With "IS_SUPER_PRIMARY=1". This is what we should use.
3204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
3214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
3224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
3234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
3244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "AppropriatePrefix")
3254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "AppropriateSuffix")
3264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_FAMILY_NAME, "AppropriatePhoneticFamily")
3274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_GIVEN_NAME, "AppropriatePhoneticGiven")
3284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_MIDDLE_NAME, "AppropriatePhoneticMiddle")
3294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_SUPER_PRIMARY, 1);
3304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
3324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName3")
3334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName3")
3344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName3")
3354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "DoNotEmitPrefix3")
3364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.SUFFIX, "DoNotEmitSuffix3")
3374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_FAMILY_NAME, "DoNotEmitPhoneticFamily3")
3384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_GIVEN_NAME, "DoNotEmitPhoneticGiven3")
3394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PHONETIC_MIDDLE_NAME, "DoNotEmitPhoneticMiddle3")
3404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);
3414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3423d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        final PropertyNodesVerifierElem elem = mVerifier.addPropertyNodesVerifierElem();
3433d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        if (VCardConfig.isVersion40(vcardType)) {
3443d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            final ContentValues contentValues = new ContentValues();
3453d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            contentValues.put("SORT-AS",
3463d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName");
3473d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            // vCard 4.0 (rev13) now uses SORT-AS parameter, which is not compatible with
3483d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            // either 2.1 nor 3.0.
3493d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            elem.addExpectedNodeWithOrder("N",
3503d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
3513d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    + "AppropriatePrefix;AppropriateSuffix",
3523d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
3533d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                            "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"),
3543d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    contentValues);
3553d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        } else {
3563d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            elem.addExpectedNodeWithOrder("N",
3573d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    "AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
3583d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    + "AppropriatePrefix;AppropriateSuffix",
3593d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                    Arrays.asList("AppropriateFamilyName", "AppropriateGivenName",
3603d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                            "AppropriateMiddleName", "AppropriatePrefix", "AppropriateSuffix"));
3613d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            if (VCardConfig.isVersion30(vcardType)) {
3623d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                elem.addExpectedNode("SORT-STRING",
3633d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                        "AppropriatePhoneticGiven AppropriatePhoneticMiddle"
3643d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                        + " AppropriatePhoneticFamily");
3653d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            }
3664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        }
3673d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
3683d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        elem.addExpectedNodeWithOrder("FN",
3693d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                "AppropriatePrefix AppropriateGivenName "
3703d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                + "AppropriateMiddleName AppropriateFamilyName AppropriateSuffix")
3713d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            .addExpectedNode("X-PHONETIC-FIRST-NAME", "AppropriatePhoneticGiven")
3723d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            .addExpectedNode("X-PHONETIC-MIDDLE-NAME", "AppropriatePhoneticMiddle")
3733d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa            .addExpectedNode("X-PHONETIC-LAST-NAME", "AppropriatePhoneticFamily");
3744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
3754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3763d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameComplicatedV21() {
3773d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameComplicatedCommon(V21);
3784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
3794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3803d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameComplicatedV30() {
3813d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameComplicatedCommon(V30);
3823d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    }
3833d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa
3843d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testStructuredNameComplicatedV40() {
3853d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa        testStructuredNameComplicatedCommon(V40);
3864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
3874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testNickNameV30() {
3894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(V30);
3904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Nickname.CONTENT_ITEM_TYPE)
3914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Nickname.NAME, "Nicky");
3924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
3934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
3944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            .addExpectedNodeWithOrder("NICKNAME", "Nicky");
3954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
3964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
39736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testNickNameV40() {
39836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        mVerifier.initForExportTest(V40);
39936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Nickname.CONTENT_ITEM_TYPE)
40036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa                .put(Nickname.NAME, "Nicky");
40136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
40236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
40336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa            .addExpectedNodeWithOrder("NICKNAME", "Nicky");
40436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
40536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
4064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPhoneBasicCommon(int vcardType) {
4074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
4084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Phone.CONTENT_ITEM_TYPE)
4094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "1")
4104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_HOME);
4114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
4124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "1", new TypeSet("HOME"));
4134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneBasicV21() {
4164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhoneBasicCommon(V21);
4174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneBasicV30() {
4204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhoneBasicCommon(V30);
4214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
42336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPhoneBasicV40() {
42436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPhoneBasicCommon(V40);
42536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
42636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
4274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneRefrainFormatting() {
4284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(V21 | VCardConfig.FLAG_REFRAIN_PHONE_NUMBER_FORMATTING);
4294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Phone.CONTENT_ITEM_TYPE)
4304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "1234567890(abcdefghijklmnopqrstuvwxyz)")
4314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_HOME);
4324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
4334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "1234567890(abcdefghijklmnopqrstuvwxyz)",
4344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        new TypeSet("HOME"));
4354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
4364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
4384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Tests that vCard composer emits corresponding type param which we expect.
4394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
4404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPhoneVariousTypeSupport(int vcardType) {
4414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
4424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
4434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "10")
4454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_HOME);
4464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "20")
4484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_WORK);
4494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "30")
4514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_FAX_HOME);
4524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "40")
4544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_FAX_WORK);
4554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "50")
4574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_MOBILE);
4584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "60")
4604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_PAGER);
4614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "70")
4634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_OTHER);
4644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "80")
4664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CAR);
4674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "90")
4694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_COMPANY_MAIN);
4704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "100")
4724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_ISDN);
4734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "110")
4754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_MAIN);
4764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "120")
4784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_OTHER_FAX);
4794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "130")
4814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_TELEX);
4824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "140")
4844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_WORK_MOBILE);
4854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "150")
4874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_WORK_PAGER);
4884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
4894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "160")
4904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_MMS);
4914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
4924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
4934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "10", new TypeSet("HOME"))
4944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "20", new TypeSet("WORK"))
4954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "30", new TypeSet("HOME", "FAX"))
4964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "40", new TypeSet("WORK", "FAX"))
4974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "50", new TypeSet("CELL"))
4984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "60", new TypeSet("PAGER"))
4994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "70", new TypeSet("VOICE"))
5004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "80", new TypeSet("CAR"))
5014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "90", new TypeSet("WORK", "PREF"))
5024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "100", new TypeSet("ISDN"))
5034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "110", new TypeSet("PREF"))
5044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "120", new TypeSet("FAX"))
5054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "130", new TypeSet("TLX"))
5064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "140", new TypeSet("WORK", "CELL"))
5074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "150", new TypeSet("WORK", "PAGER"))
5084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "160", new TypeSet("MSG"));
5094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
5104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
5114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneVariousTypeSupportV21() {
5124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhoneVariousTypeSupport(V21);
5134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
5144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
5154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneVariousTypeSupportV30() {
5164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhoneVariousTypeSupport(V30);
5174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
5184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
51936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPhoneVariousTypeSupportV40() {
52036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPhoneVariousTypeSupport(V40);
52136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
52236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
5234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
5244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Tests that "PREF"s are emitted appropriately.
5254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
5264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPhonePrefHandlingCommon(int vcardType) {
5274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
5284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
5294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "1")
5314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_HOME);
5324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "2")
5344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_WORK)
5354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.IS_PRIMARY, 1);
5364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "3")
5384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_FAX_HOME)
5394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.IS_PRIMARY, 1);
5404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "4")
5424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_FAX_WORK);
5434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
5444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
5454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "4", new TypeSet("WORK", "FAX"))
5464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "3", new TypeSet("HOME", "FAX", "PREF"))
5474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "2", new TypeSet("WORK", "PREF"))
5484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "1", new TypeSet("HOME"));
5494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
5504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
5514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhonePrefHandlingV21() {
5524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhonePrefHandlingCommon(V21);
5534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
5544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
5554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhonePrefHandlingV30() {
5564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhonePrefHandlingCommon(V30);
5574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
5584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
55936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPhonePrefHandlingV40() {
56036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPhonePrefHandlingCommon(V40);
56136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
56236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
5634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testMiscPhoneTypeHandling(int vcardType) {
5644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
5654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
5664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "1")
5684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
5694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "Modem");
5704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "2")
5724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
5734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "MSG");
5744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "3")
5764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
5774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "BBS");
5784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "4")
5804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
5814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "VIDEO");
5824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "5")
5844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM);
5854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "6")
5874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
5884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "_AUTO_CELL");  // The old indicator for the type mobile.
5894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "7")
5914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
5924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "\u643A\u5E2F");  // Mobile phone in Japanese Kanji
5934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
5944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "8")
5954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
5964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.LABEL, "invalid");
5974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        PropertyNodesVerifierElem elem = mVerifier.addPropertyNodesVerifierElemWithEmptyName();
59836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        if (VCardConfig.isVersion30(vcardType) || VCardConfig.isVersion40(vcardType)) {
5992bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa            // vCard 3.0 accepts "invalid". Also stop using toUpper()
6002bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa            elem.addExpectedNode("TEL", "1", new TypeSet("Modem"))
6012bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "2", new TypeSet("MSG"))
6022bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "3", new TypeSet("BBS"))
6032bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "4", new TypeSet("VIDEO"))
6042bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "5", new TypeSet("VOICE"))
6052bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "6", new TypeSet("CELL"))
6062bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "7", new TypeSet("CELL"))
6072bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "8", new TypeSet("invalid"));
6082bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa        } else {
6092bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa            elem.addExpectedNode("TEL", "1", new TypeSet("MODEM"))
6102bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "2", new TypeSet("MSG"))
6112bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "3", new TypeSet("BBS"))
6122bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "4", new TypeSet("VIDEO"))
6132bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "5", new TypeSet("VOICE"))
6142bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "6", new TypeSet("CELL"))
6152bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "7", new TypeSet("CELL"))
6162bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa                    .addExpectedNode("TEL", "8", new TypeSet("X-invalid"));
6172bf85a1a15a3175119ab8415fc590fd5fe3d0752Daisuke Miyakawa        }
6184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
6204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneTypeHandlingV21() {
6214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testMiscPhoneTypeHandling(V21);
6224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
6244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhoneTypeHandlingV30() {
6254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testMiscPhoneTypeHandling(V30);
6264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
62836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPhoneTypeHandlingV40() {
62936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testMiscPhoneTypeHandling(V40);
63036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
63136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
6324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testEmailBasicCommon(int vcardType) {
6334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
6344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Email.CONTENT_ITEM_TYPE)
6354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "sample@example.com");
6364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
6374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            .addExpectedNode("EMAIL", "sample@example.com");
6384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
6404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEmailBasicV21() {
6414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEmailBasicCommon(V21);
6424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
6444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEmailBasicV30() {
6454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEmailBasicCommon(V30);
6464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
64836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testEmailBasicV40() {
64936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testEmailBasicCommon(V40);
65036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
65136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
6524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testEmailVariousTypeSupportCommon(int vcardType) {
6534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
6544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
6554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
6564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "type_home@example.com")
6574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.TYPE, Email.TYPE_HOME);
6584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
6594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "type_work@example.com")
6604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.TYPE, Email.TYPE_WORK);
6614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
6624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "type_mobile@example.com")
6634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.TYPE, Email.TYPE_MOBILE);
6644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
6654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "type_other@example.com")
6664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.TYPE, Email.TYPE_OTHER);
6674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
6684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("EMAIL", "type_home@example.com", new TypeSet("HOME"))
6694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("EMAIL", "type_work@example.com", new TypeSet("WORK"))
6704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("EMAIL", "type_mobile@example.com", new TypeSet("CELL"))
6714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("EMAIL", "type_other@example.com");
6724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
6744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEmailVariousTypeSupportV21() {
6754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEmailVariousTypeSupportCommon(V21);
6764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
6784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEmailVariousTypeSupportV30() {
6794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEmailVariousTypeSupportCommon(V30);
6804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
6814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
68236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testEmailVariousTypeSupportV40() {
68336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testEmailVariousTypeSupportCommon(V40);
68436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
68536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
6864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testEmailPrefHandlingCommon(int vcardType) {
6874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
6884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
6894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
6904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "type_home@example.com")
6914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.TYPE, Email.TYPE_HOME)
6924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.IS_PRIMARY, 1);
6934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Email.CONTENT_ITEM_TYPE)
6944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.DATA, "type_notype@example.com")
6954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Email.IS_PRIMARY, 1);
6964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
6974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
6984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("EMAIL", "type_notype@example.com", new TypeSet("PREF"))
6994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("EMAIL", "type_home@example.com", new TypeSet("HOME", "PREF"));
7004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEmailPrefHandlingV21() {
7034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEmailPrefHandlingCommon(V21);
7044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEmailPrefHandlingV30() {
7074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEmailPrefHandlingCommon(V30);
7084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
71036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testEmailPrefHandlingV40() {
71136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testEmailPrefHandlingCommon(V40);
71236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
71336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
7144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPostalAddressCommon(int vcardType) {
7154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
7164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
7174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.POBOX, "Pobox")
7184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.NEIGHBORHOOD, "Neighborhood")
7194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.STREET, "Street")
7204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.CITY, "City")
7214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.REGION, "Region")
7224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.POSTCODE, "100")
7234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.COUNTRY, "Country")
7244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.FORMATTED_ADDRESS, "Formatted Address")
7254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK);
7264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // adr-value    = 0*6(text-value ";") text-value
7274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        //              ; PO Box, Extended Address, Street, Locality, Region, Postal Code,
7284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        //              ; Country Name
7294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        //
7304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // The NEIGHBORHOOD field is appended after the CITY field.
7314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
7324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("ADR",
7334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("Pobox", "", "Street", "City Neighborhood",
7344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                "Region", "100", "Country"), new TypeSet("WORK"));
7354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalAddressV21() {
7384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalAddressCommon(V21);
7394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalAddressV30() {
7424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalAddressCommon(V30);
7434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
74536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPostalAddressV40() {
74636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPostalAddressCommon(V40);
74736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
74836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
7494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPostalAddressNonNeighborhood(int vcardType) {
7504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
7514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
7524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.CITY, "City");
7534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
7544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("ADR",
7554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("", "", "", "City", "", "", ""), new TypeSet("HOME"));
7564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalAddressNonNeighborhoodV21() {
7594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalAddressNonNeighborhood(V21);
7604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalAddressNonNeighborhoodV30() {
7634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalAddressNonNeighborhood(V30);
7644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
76636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPostalAddressNonNeighborhoodV40() {
76736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPostalAddressNonNeighborhood(V40);
76836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
76936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
7704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPostalAddressNonCity(int vcardType) {
7714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
7724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
7734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.NEIGHBORHOOD, "Neighborhood");
7744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
7754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("ADR",
7764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("", "", "", "Neighborhood", "", "", ""), new TypeSet("HOME"));
7774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalAddressNonCityV21() {
7804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalAddressNonCity(V21);
7814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
7834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalAddressNonCityV30() {
7844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalAddressNonCity(V30);
7854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
7864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
78736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPostalAddressNonCityV40() {
78836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPostalAddressNonCity(V40);
78936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
79036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
7914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPostalOnlyWithFormattedAddressCommon(int vcardType) {
7924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
7934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
7944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.REGION, "")  // Must be ignored.
7954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.FORMATTED_ADDRESS,
7964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                "Formatted address CA 123-334 United Statue");
7974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
7984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("ADR", ";Formatted address CA 123-334 United Statue;;;;;",
7994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("", "Formatted address CA 123-334 United Statue",
8004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                "", "", "", "", ""), new TypeSet("HOME"));
8014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalOnlyWithFormattedAddressV21() {
8044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalOnlyWithFormattedAddressCommon(V21);
8054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalOnlyWithFormattedAddressV30() {
8084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalOnlyWithFormattedAddressCommon(V30);
8094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
81136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPostalOnlyWithFormattedAddressV40() {
81236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPostalOnlyWithFormattedAddressCommon(V40);
81336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
81436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
8154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
8164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * Tests that the vCard composer honors formatted data when it is available
8174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * even when it is partial.
8184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
8194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPostalWithBothStructuredAndFormattedCommon(int vcardType) {
8204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
8214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
8224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.POBOX, "Pobox")
8234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.COUNTRY, "Country")
8244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredPostal.FORMATTED_ADDRESS,
8254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        "Formatted address CA 123-334 United Statue");  // Should be ignored
8264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
8274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("ADR", "Pobox;;;;;;Country",
8284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("Pobox", "", "", "", "", "", "Country"),
8294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        new TypeSet("HOME"));
8304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalWithBothStructuredAndFormattedV21() {
8334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalWithBothStructuredAndFormattedCommon(V21);
8344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPostalWithBothStructuredAndFormattedV30() {
8374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPostalWithBothStructuredAndFormattedCommon(V30);
8384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
84036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPostalWithBothStructuredAndFormattedV40() {
84136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPostalWithBothStructuredAndFormattedCommon(V40);
84236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
84336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
8444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testOrganizationCommon(int vcardType) {
8454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
8464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
8474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Organization.CONTENT_ITEM_TYPE)
8484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.COMPANY, "CompanyX")
8494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.DEPARTMENT, "DepartmentY")
8504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.TITLE, "TitleZ")
8514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.JOB_DESCRIPTION, "Description Rambda")  // Ignored.
8524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.OFFICE_LOCATION, "Mountain View")  // Ignored.
8534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.PHONETIC_NAME, "PhoneticName!")  // Ignored
8544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.SYMBOL, "(^o^)/~~");  // Ignore him (her).
8554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Organization.CONTENT_ITEM_TYPE)
8564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .putNull(Organization.COMPANY)
8574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.DEPARTMENT, "DepartmentXX")
8584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .putNull(Organization.TITLE);
8594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Organization.CONTENT_ITEM_TYPE)
8604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.COMPANY, "CompanyXYZ")
8614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .putNull(Organization.DEPARTMENT)
8624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Organization.TITLE, "TitleXYZYX");
8634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // Currently we do not use group but depend on the order.
8644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
8654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("ORG", "CompanyX;DepartmentY",
8664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("CompanyX", "DepartmentY"))
8674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("TITLE", "TitleZ")
8684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("ORG", "DepartmentXX")
8694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("ORG", "CompanyXYZ")
8704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("TITLE", "TitleXYZYX");
8714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testOrganizationV21() {
8744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testOrganizationCommon(V21);
8754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
8774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testOrganizationV30() {
8784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testOrganizationCommon(V30);
8794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
8804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
88136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testOrganizationV40() {
88236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testOrganizationCommon(V40);
88336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
88436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
8854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testImVariousTypeSupportCommon(int vcardType) {
8864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
8874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
8884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
8894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_AIM)
8904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "aim");
8914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
8924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_MSN)
8934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "msn");
8944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
8954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_YAHOO)
8964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "yahoo");
8974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
8984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_SKYPE)
8994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "skype");
9004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_QQ)
9024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "qq");
9034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK)
9054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "google talk");
9064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_ICQ)
9084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "icq");
9094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_JABBER)
9114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "jabber");
9124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_NETMEETING)
9144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "netmeeting");
9154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // No determined way to express unknown type...
9174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
9184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-JABBER", "jabber")
9194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-ICQ", "icq")
9204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-GOOGLE-TALK", "google talk")
9214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-QQ", "qq")
9224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-SKYPE-USERNAME", "skype")
9234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-YAHOO", "yahoo")
9244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-MSN", "msn")
9254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-NETMEETING", "netmeeting")
9264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-AIM", "aim");
9274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testImBasiV21() {
9304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testImVariousTypeSupportCommon(V21);
9314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testImBasicV30() {
9344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testImVariousTypeSupportCommon(V30);
9354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
93736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testImBasicV40() {
93836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testImVariousTypeSupportCommon(V40);
93936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
94036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
9414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testImPrefHandlingCommon(int vcardType) {
9424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
9434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
9444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_AIM)
9464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "aim1");
9474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Im.CONTENT_ITEM_TYPE)
9484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.PROTOCOL, Im.PROTOCOL_AIM)
9494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.DATA, "aim2")
9504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.TYPE, Im.TYPE_HOME)
9514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Im.IS_PRIMARY, 1);
9524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
9544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-AIM", "aim1")
9554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-AIM", "aim2", new TypeSet("HOME", "PREF"));
9564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testImPrefHandlingV21() {
9594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testImPrefHandlingCommon(V21);
9604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testImPrefHandlingV30() {
9634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testImPrefHandlingCommon(V30);
9644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9663d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa    public void testImPrefHandlingV40() {
96736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testImPrefHandlingCommon(V40);
96836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
96936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
9704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testWebsiteCommon(int vcardType) {
9714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
9724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
9734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Website.CONTENT_ITEM_TYPE)
9744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Website.URL, "http://website.example.android.com/index.html")
9754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Website.TYPE, Website.TYPE_BLOG);
9764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Website.CONTENT_ITEM_TYPE)
9774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Website.URL, "ftp://ftp.example.android.com/index.html")
9784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Website.TYPE, Website.TYPE_FTP);
9794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // We drop TYPE information since vCard (especially 3.0) does not allow us to emit it.
9814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
9824199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("URL", "ftp://ftp.example.android.com/index.html")
9834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("URL", "http://website.example.android.com/index.html");
9844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testWebsiteV21() {
9874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testWebsiteCommon(V21);
9884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
9904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testWebsiteV30() {
9914199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testWebsiteCommon(V30);
9924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
9934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
99436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testWebsiteV40() {
99536ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testWebsiteCommon(V40);
99636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
99736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
9984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private String getAndroidPropValue(final String mimeType, String value, Integer type) {
9994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        return getAndroidPropValue(mimeType, value, type, null);
10004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private String getAndroidPropValue(final String mimeType, String value,
10034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            Integer type, String label) {
10044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        return (mimeType + ";" + value + ";"
10054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                + (type != null ? type : "") + ";"
10064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                + (label != null ? label : "") + ";;;;;;;;;;;;");
10074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10084199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10094199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testEventCommon(int vcardType) {
10104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
10114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
10124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
10134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.TYPE, Event.TYPE_ANNIVERSARY)
10144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.START_DATE, "1982-06-16");
10154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
10164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.TYPE, Event.TYPE_BIRTHDAY)
10174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.START_DATE, "2008-10-22");
10184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
10194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.TYPE, Event.TYPE_OTHER)
10204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.START_DATE, "2018-03-12");
10214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
10224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.TYPE, Event.TYPE_CUSTOM)
10234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.LABEL, "The last day")
10244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.START_DATE, "When the Tower of Hanoi with 64 rings is completed.");
10254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Event.CONTENT_ITEM_TYPE)
10264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.TYPE, Event.TYPE_BIRTHDAY)
10274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Event.START_DATE, "2009-05-19");  // Should be ignored.
10284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
10294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("BDAY", "2008-10-22")
10304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-ANDROID-CUSTOM",
10314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        getAndroidPropValue(
10324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                Event.CONTENT_ITEM_TYPE, "1982-06-16", Event.TYPE_ANNIVERSARY))
10334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-ANDROID-CUSTOM",
10344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        getAndroidPropValue(
10354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                Event.CONTENT_ITEM_TYPE, "2018-03-12", Event.TYPE_OTHER))
10364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-ANDROID-CUSTOM",
10374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        getAndroidPropValue(
10384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                Event.CONTENT_ITEM_TYPE,
10394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                "When the Tower of Hanoi with 64 rings is completed.",
10404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                                Event.TYPE_CUSTOM, "The last day"));
10414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEventV21() {
10444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEventCommon(V21);
10454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testEventV30() {
10484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testEventCommon(V30);
10494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
105136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testEventV40() {
105236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testEventCommon(V40);
105336ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
105436ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
10554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testNoteCommon(int vcardType) {
10564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
10574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
10584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Note.CONTENT_ITEM_TYPE)
10594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Note.NOTE, "note1");
10604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Note.CONTENT_ITEM_TYPE)
10614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Note.NOTE, "note2")
10624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Note.IS_PRIMARY, 1);  // Just ignored.
10634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
10644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("NOTE", "note1")
10654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("NOTE", "note2");
10664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testNoteV21() {
10694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testNoteCommon(V21);
10704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testNoteV30() {
10734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testNoteCommon(V30);
10744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
107636ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testNoteV40() {
107736ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testNoteCommon(V40);
107836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
107936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
10804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPhotoCommon(int vcardType) {
108136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        final boolean useB =
108236ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa            (VCardConfig.isVersion30(vcardType) || VCardConfig.isVersion40(vcardType));
10834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
10844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
10854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
10864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "PhotoTest");
10874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Photo.CONTENT_ITEM_TYPE)
10884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Photo.PHOTO, sPhotoByteArray);
10894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
10904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContentValues contentValuesForPhoto = new ContentValues();
109136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        contentValuesForPhoto.put("ENCODING", (useB ? "b" : "BASE64"));
10924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElem()
10934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("FN", "PhotoTest")
10944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("N", "PhotoTest;;;;",
10954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Arrays.asList("PhotoTest", "", "", "", ""))
10964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNodeWithOrder("PHOTO", null, null, sPhotoByteArray,
10974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        contentValuesForPhoto, new TypeSet("JPEG"), null);
10984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
10994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhotoV21() {
11014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhotoCommon(V21);
11024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPhotoV30() {
11054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPhotoCommon(V30);
11064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11074199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
110836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPhotoV40() {
110936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPhotoCommon(V40);
111036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
111136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
11124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testRelationCommon(int vcardType) {
11134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
11144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Relation.CONTENT_ITEM_TYPE)
11154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Relation.TYPE, Relation.TYPE_MOTHER)
11164199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Relation.NAME, "Ms. Mother");
11174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addContentValuesVerifierElem().addExpected(Relation.CONTENT_ITEM_TYPE)
11184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Relation.TYPE, Relation.TYPE_MOTHER)
11194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Relation.NAME, "Ms. Mother");
11204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testRelationV21() {
11234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testRelationCommon(V21);
11244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testRelationV30() {
11274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testRelationCommon(V30);
11284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testV30HandleEscape() {
11314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(V30);
11324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(StructuredName.CONTENT_ITEM_TYPE)
11334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "\\")
11344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.GIVEN_NAME, ";")
11354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.MIDDLE_NAME, ",")
11364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.PREFIX, "\n")
11374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "[<{Unescaped:Asciis}>]");
11384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        // Verifies the vCard String correctly escapes each character which must be escaped.
11394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addLineVerifierElem()
11404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpected("N:\\\\;\\;;\\,;\\n;")
11414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpected("FN:[<{Unescaped:Asciis}>]");
11424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElem()
11434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("FN", "[<{Unescaped:Asciis}>]")
11444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("N", Arrays.asList("\\", ";", ",", "\n", ""));
11454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    /**
11484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * There's no "NICKNAME" property in vCard 2.1, while there is in vCard 3.0.
11494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * We use Android-specific "X-ANDROID-CUSTOM" property.
11504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     * This test verifies the functionality.
11514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa     */
11524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testNickNameV21() {
11534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(V21);
11544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addInputEntry().addContentValues(Nickname.CONTENT_ITEM_TYPE)
11554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Nickname.NAME, "Nicky");
11564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
11574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("X-ANDROID-CUSTOM",
11584199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        Nickname.CONTENT_ITEM_TYPE + ";Nicky;;;;;;;;;;;;;;");
11594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addContentValuesVerifierElem().addExpected(Nickname.CONTENT_ITEM_TYPE)
11604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Nickname.NAME, "Nicky");
11614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testTolerateBrokenPhoneNumberEntryV21() {
11644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(V21);
11654199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
11664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
11674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_HOME)
11684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(Phone.NUMBER, "111-222-3333 (Miami)\n444-5555-666 (Tokyo);"
11694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                        + "777-888-9999 (Chicago);111-222-3333 (Miami)");
11704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
11714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "111-222-3333", new TypeSet("HOME"))
11724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "444-555-5666", new TypeSet("HOME"))
11734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("TEL", "777-888-9999", new TypeSet("HOME"));
11744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
11764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private void testPickUpNonEmptyContentValuesCommon(int vcardType) {
11774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.initForExportTest(vcardType);
11784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        ContactEntry entry = mVerifier.addInputEntry();
11794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
11804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1);  // Empty name. Should be ignored.
11814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
11823d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "family1")  // Not primary. Should be ignored.
11833d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "display");
11844199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
11854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .put(StructuredName.IS_PRIMARY, 1)
11863d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "family2")  // This entry is what we want.
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, "family3")
11913d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "display");
11924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
11933d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.FAMILY_NAME, "family4")
11943d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .put(StructuredName.DISPLAY_NAME, "display");
11954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElem()
11964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                .addExpectedNode("N", Arrays.asList("family2", "", "", "", ""))
11973d77102a83d0e412046ca0ff9dfdef1a44050ca3Daisuke Miyakawa                .addExpectedNode("FN", "display");
11984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
11994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
12004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPickUpNonEmptyContentValuesV21() {
12014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPickUpNonEmptyContentValuesCommon(V21);
12024199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
12034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
12044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void testPickUpNonEmptyContentValuesV30() {
12054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        testPickUpNonEmptyContentValuesCommon(V30);
12064199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
120758ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa
120836ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    public void testPickUpNonEmptyContentValuesV40() {
120936ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa        testPickUpNonEmptyContentValuesCommon(V40);
121036ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa    }
121136ba003879c5583609af3afcec8df22f51d94cd3Daisuke Miyakawa
121258ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa    public void testUseMultiByteTypeV30() {
121358ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa        mVerifier.initForExportTest(V30);
121458ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
121558ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
121658ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .put(Phone.TYPE, Phone.TYPE_CUSTOM)
121758ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .put(Phone.LABEL, "\u96FB\u8A71")
121858ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .put(Phone.NUMBER, "1");
121958ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa        mVerifier.addLineVerifierElem()
122058ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .addExpected("N:")
122158ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .addExpected("FN:")
122258ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .addExpected("TEL;TYPE=\u96FB\u8A71:1");
122358ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
122458ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa                .addExpectedNode("TEL", "1", new TypeSet("\u96FB\u8A71"));
122558ca5f9943bb5c8aeeab3150ac96f1143dfd86baDaisuke Miyakawa    }
1226422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa
12275db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa    public void testSipAddressV21() {
12285db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa        mVerifier.initForExportTest(V21);
12295db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
12305db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa        entry.addContentValues(SipAddress.CONTENT_ITEM_TYPE)
12315db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa                .put(SipAddress.SIP_ADDRESS, "gold");
12325db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa        mVerifier.addLineVerifierElem()
12335db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa                .addExpected("X-SIP:gold");
12345db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
12355db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa                .addExpectedNode("X-SIP", "gold");
12365db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa    }
12375db8b7baeffb35191032789cb0b0d643b78f0120Daisuke Miyakawa
1238422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa    public void testSipAddressV30() {
1239422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        mVerifier.initForExportTest(V30);
1240422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
1241422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        entry.addContentValues(SipAddress.CONTENT_ITEM_TYPE)
1242422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa                .put(SipAddress.SIP_ADDRESS, "android@example.com");
1243422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        mVerifier.addLineVerifierElem()
1244422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa                .addExpected("N:")
1245422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa                .addExpected("FN:")
1246422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa                .addExpected("IMPP:sip:android@example.com");
1247422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
1248422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa                .addExpectedNode("IMPP", "sip:android@example.com");
1249422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa    }
1250422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa
1251422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa    public void testSipAddressV40() {
1252422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        mVerifier.initForExportTest(V40);
1253422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        final ContactEntry entry = mVerifier.addInputEntry();
1254422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        entry.addContentValues(SipAddress.CONTENT_ITEM_TYPE)
1255422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa                .put(SipAddress.SIP_ADDRESS, "android@example.com");
1256422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        mVerifier.addLineVerifierElem()
1257422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa                .addExpected("FN:")
1258422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa                .addExpected("IMPP:sip:android@example.com");
1259422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
1260422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa                .addExpectedNode("IMPP", "sip:android@example.com");
1261422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa    }
12624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa}
1263