VCardExporterTests.java revision 422643669a44d08ca8b22a73286fae988a288b0e
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 1227422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa public void testSipAddressV30() { 1228422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa mVerifier.initForExportTest(V30); 1229422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa final ContactEntry entry = mVerifier.addInputEntry(); 1230422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa entry.addContentValues(SipAddress.CONTENT_ITEM_TYPE) 1231422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa .put(SipAddress.SIP_ADDRESS, "android@example.com"); 1232422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa mVerifier.addLineVerifierElem() 1233422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa .addExpected("N:") 1234422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa .addExpected("FN:") 1235422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa .addExpected("IMPP:sip:android@example.com"); 1236422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa mVerifier.addPropertyNodesVerifierElemWithEmptyName() 1237422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa .addExpectedNode("IMPP", "sip:android@example.com"); 1238422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa } 1239422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa 1240422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa public void testSipAddressV40() { 1241422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa mVerifier.initForExportTest(V40); 1242422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa final ContactEntry entry = mVerifier.addInputEntry(); 1243422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa entry.addContentValues(SipAddress.CONTENT_ITEM_TYPE) 1244422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa .put(SipAddress.SIP_ADDRESS, "android@example.com"); 1245422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa mVerifier.addLineVerifierElem() 1246422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa .addExpected("FN:") 1247422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa .addExpected("IMPP:sip:android@example.com"); 1248422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa mVerifier.addPropertyNodesVerifierElemWithEmptyName() 1249422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa .addExpectedNode("IMPP", "sip:android@example.com"); 1250422643669a44d08ca8b22a73286fae988a288b0eDaisuke Miyakawa } 12514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa} 1252