VCardJapanizationTests.java revision be378d5b188f51cf717e5309e3c39180e85833a8
1/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.vcard.tests;
17
18import android.content.ContentValues;
19import android.provider.ContactsContract.CommonDataKinds.Nickname;
20import android.provider.ContactsContract.CommonDataKinds.Note;
21import android.provider.ContactsContract.CommonDataKinds.Phone;
22import android.provider.ContactsContract.CommonDataKinds.StructuredName;
23import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
24
25import com.android.vcard.VCardConfig;
26import com.android.vcard.tests.test_utils.ContactEntry;
27import com.android.vcard.tests.test_utils.ContentValuesBuilder;
28import com.android.vcard.tests.test_utils.PropertyNodesVerifierElem;
29import com.android.vcard.tests.test_utils.PropertyNodesVerifierElem.TypeSet;
30
31import java.util.Arrays;
32
33public class VCardJapanizationTests extends VCardTestsBase {
34    private void testNameUtf8Common(int vcardType) {
35        mVerifier.initForExportTest(vcardType);
36        ContactEntry entry = mVerifier.addInputEntry();
37        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
38                .put(StructuredName.FAMILY_NAME, "\u3075\u308B\u3069")
39                .put(StructuredName.GIVEN_NAME, "\u3091\u308A\u304B")
40                .put(StructuredName.MIDDLE_NAME, "B")
41                .put(StructuredName.PREFIX, "Dr.")
42                .put(StructuredName.SUFFIX, "Ph.D");
43        ContentValues contentValues =
44            (VCardConfig.isVersion21(vcardType) ? mContentValuesForQPAndUtf8 : null);
45        mVerifier.addPropertyNodesVerifierElem()
46                .addExpectedNode("FN", "Dr. \u3075\u308B\u3069 B \u3091\u308A\u304B Ph.D",
47                        contentValues)
48                .addExpectedNode("N", "\u3075\u308B\u3069;\u3091\u308A\u304B;B;Dr.;Ph.D",
49                        Arrays.asList(
50                                "\u3075\u308B\u3069", "\u3091\u308A\u304B", "B", "Dr.", "Ph.D"),
51                                null, contentValues, null, null);
52    }
53
54    public void testNameUtf8V21() {
55        testNameUtf8Common(VCardConfig.VCARD_TYPE_V21_JAPANESE);
56    }
57
58    public void testNameUtf8V30() {
59        testNameUtf8Common(VCardConfig.VCARD_TYPE_V30_JAPANESE);
60    }
61
62    public void testNameShiftJis() {
63        mVerifier.initForExportTest(VCardConfig.VCARD_TYPE_V30_JAPANESE, "Shift_JIS");
64        ContactEntry entry = mVerifier.addInputEntry();
65        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
66                .put(StructuredName.FAMILY_NAME, "\u3075\u308B\u3069")
67                .put(StructuredName.GIVEN_NAME, "\u3091\u308A\u304B")
68                .put(StructuredName.MIDDLE_NAME, "B")
69                .put(StructuredName.PREFIX, "Dr.")
70                .put(StructuredName.SUFFIX, "Ph.D");
71
72        mVerifier.addPropertyNodesVerifierElem()
73                .addExpectedNode("FN", "Dr. \u3075\u308B\u3069 B \u3091\u308A\u304B Ph.D",
74                        mContentValuesForSJis)
75                .addExpectedNode("N", "\u3075\u308B\u3069;\u3091\u308A\u304B;B;Dr.;Ph.D",
76                        Arrays.asList(
77                                "\u3075\u308B\u3069", "\u3091\u308A\u304B", "B", "Dr.", "Ph.D"),
78                                null, mContentValuesForSJis, null, null);
79    }
80
81    /**
82     * DoCoMo phones require all name elements should be in "family name" field.
83     */
84    public void testNameDoCoMo() {
85        mVerifier.initForExportTest(VCardConfig.VCARD_TYPE_DOCOMO, "Shift_JIS");
86        ContactEntry entry = mVerifier.addInputEntry();
87        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
88                .put(StructuredName.FAMILY_NAME, "\u3075\u308B\u3069")
89                .put(StructuredName.GIVEN_NAME, "\u3091\u308A\u304B")
90                .put(StructuredName.MIDDLE_NAME, "B")
91                .put(StructuredName.PREFIX, "Dr.")
92                .put(StructuredName.SUFFIX, "Ph.D");
93
94        final String fullName = "Dr. \u3075\u308B\u3069 B \u3091\u308A\u304B Ph.D";
95        mVerifier.addPropertyNodesVerifierElem()
96                .addExpectedNode("N", fullName + ";;;;",
97                        Arrays.asList(fullName, "", "", "", ""),
98                        null, mContentValuesForSJis, null, null)
99                .addExpectedNode("FN", fullName, mContentValuesForSJis)
100                .addExpectedNode("SOUND", ";;;;", new TypeSet("X-IRMC-N"))
101                .addExpectedNode("TEL", "", new TypeSet("HOME"))
102                .addExpectedNode("EMAIL", "", new TypeSet("HOME"))
103                .addExpectedNode("ADR", "", new TypeSet("HOME"))
104                .addExpectedNode("X-CLASS", "PUBLIC")
105                .addExpectedNode("X-REDUCTION", "")
106                .addExpectedNode("X-NO", "")
107                .addExpectedNode("X-DCM-HMN-MODE", "");
108    }
109
110    private void testPhoneticNameCommon(int vcardType, String charset) {
111        mVerifier.initForExportTest(vcardType, charset);
112        ContactEntry entry = mVerifier.addInputEntry();
113        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
114                .put(StructuredName.PHONETIC_FAMILY_NAME, "\u3084\u307E\u3060")
115                .put(StructuredName.PHONETIC_MIDDLE_NAME, "\u30DF\u30C9\u30EB\u30CD\u30FC\u30E0")
116                .put(StructuredName.PHONETIC_GIVEN_NAME, "\u305F\u308D\u3046");
117
118        final ContentValues contentValues =
119            ("SHIFT_JIS".equalsIgnoreCase(charset) ?
120                    (VCardConfig.isVersion21(vcardType) ? mContentValuesForQPAndSJis :
121                        mContentValuesForSJis) :
122                    (VCardConfig.isVersion21(vcardType) ? mContentValuesForQPAndUtf8 : null));
123        PropertyNodesVerifierElem elem = mVerifier.addPropertyNodesVerifierElemWithEmptyName();
124        elem.addExpectedNode("X-PHONETIC-LAST-NAME", "\u3084\u307E\u3060",
125                        contentValues)
126                .addExpectedNode("X-PHONETIC-MIDDLE-NAME",
127                        "\u30DF\u30C9\u30EB\u30CD\u30FC\u30E0",
128                        contentValues)
129                .addExpectedNode("X-PHONETIC-FIRST-NAME", "\u305F\u308D\u3046",
130                        contentValues);
131        if (!VCardConfig.isVersion21(vcardType)) {
132            elem.addExpectedNode("SORT-STRING",
133                    "\u3084\u307E\u3060 \u30DF\u30C9\u30EB\u30CD\u30FC\u30E0 \u305F\u308D\u3046",
134                    contentValues);
135        }
136        ContentValuesBuilder builder = mVerifier.addContentValuesVerifierElem()
137                .addExpected(StructuredName.CONTENT_ITEM_TYPE);
138        builder.put(StructuredName.PHONETIC_FAMILY_NAME, "\u3084\u307E\u3060")
139                .put(StructuredName.PHONETIC_MIDDLE_NAME, "\u30DF\u30C9\u30EB\u30CD\u30FC\u30E0")
140                .put(StructuredName.PHONETIC_GIVEN_NAME, "\u305F\u308D\u3046")
141                .put(StructuredName.DISPLAY_NAME,
142                        "\u3084\u307E\u3060 \u30DF\u30C9\u30EB\u30CD\u30FC\u30E0 " +
143                        "\u305F\u308D\u3046");
144    }
145
146    public void testPhoneticNameForJapaneseV21Utf8() {
147        testPhoneticNameCommon(VCardConfig.VCARD_TYPE_V21_JAPANESE, null);
148    }
149
150    public void testPhoneticNameForJapaneseV21Sjis() {
151        testPhoneticNameCommon(VCardConfig.VCARD_TYPE_V21_JAPANESE, "Shift_JIS");
152    }
153
154    public void testPhoneticNameForJapaneseV30Utf8() {
155        testPhoneticNameCommon(VCardConfig.VCARD_TYPE_V30_JAPANESE, null);
156    }
157
158    public void testPhoneticNameForJapaneseV30SJis() {
159        testPhoneticNameCommon(VCardConfig.VCARD_TYPE_V30_JAPANESE, "Shift_JIS");
160    }
161
162    public void testPhoneticNameForMobileV21_1() {
163        mVerifier.initForExportTest(VCardConfig.VCARD_TYPE_V21_JAPANESE_MOBILE, "Shift_JIS");
164        ContactEntry entry = mVerifier.addInputEntry();
165        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
166                .put(StructuredName.PHONETIC_FAMILY_NAME, "\u3084\u307E\u3060")
167                .put(StructuredName.PHONETIC_MIDDLE_NAME, "\u30DF\u30C9\u30EB\u30CD\u30FC\u30E0")
168                .put(StructuredName.PHONETIC_GIVEN_NAME, "\u305F\u308D\u3046");
169
170        mVerifier.addPropertyNodesVerifierElem()
171                .addExpectedNode("SOUND",
172                        "\uFF94\uFF8F\uFF80\uFF9E \uFF90\uFF84\uFF9E\uFF99\uFF88\uFF70\uFF91 " +
173                        "\uFF80\uFF9B\uFF73;;;;",
174                        mContentValuesForSJis, new TypeSet("X-IRMC-N"));
175        ContentValuesBuilder builder = mVerifier.addContentValuesVerifierElem()
176                .addExpected(StructuredName.CONTENT_ITEM_TYPE);
177        builder.put(StructuredName.PHONETIC_FAMILY_NAME, "\uFF94\uFF8F\uFF80\uFF9E")
178                .put(StructuredName.PHONETIC_MIDDLE_NAME,
179                        "\uFF90\uFF84\uFF9E\uFF99\uFF88\uFF70\uFF91")
180                .put(StructuredName.PHONETIC_GIVEN_NAME, "\uFF80\uFF9B\uFF73")
181                .put(StructuredName.DISPLAY_NAME,
182                        "\uFF94\uFF8F\uFF80\uFF9E \uFF90\uFF84\uFF9E\uFF99\uFF88\uFF70\uFF91 " +
183                        "\uFF80\uFF9B\uFF73");
184    }
185
186    public void testPhoneticNameForMobileV21_2() {
187        mVerifier.initForExportTest(VCardConfig.VCARD_TYPE_V21_JAPANESE_MOBILE, "Shift_JIS");
188        ContactEntry entry = mVerifier.addInputEntry();
189        entry.addContentValues(StructuredName.CONTENT_ITEM_TYPE)
190                .put(StructuredName.PHONETIC_FAMILY_NAME, "\u3084\u307E\u3060")
191                .put(StructuredName.PHONETIC_GIVEN_NAME, "\u305F\u308D\u3046");
192
193        mVerifier.addPropertyNodesVerifierElem()
194                .addExpectedNode("SOUND", "\uFF94\uFF8F\uFF80\uFF9E \uFF80\uFF9B\uFF73;;;;",
195                                mContentValuesForSJis, new TypeSet("X-IRMC-N"));
196        ContentValuesBuilder builder = mVerifier.addContentValuesVerifierElem()
197                .addExpected(StructuredName.CONTENT_ITEM_TYPE);
198        builder.put(StructuredName.PHONETIC_FAMILY_NAME, "\uFF94\uFF8F\uFF80\uFF9E")
199                .put(StructuredName.PHONETIC_GIVEN_NAME, "\uFF80\uFF9B\uFF73")
200                .put(StructuredName.DISPLAY_NAME, "\uFF94\uFF8F\uFF80\uFF9E \uFF80\uFF9B\uFF73");
201    }
202
203    private void testPostalAddressWithJapaneseCommon(int vcardType, String charset) {
204        mVerifier.initForExportTest(vcardType, charset);
205        ContactEntry entry = mVerifier.addInputEntry();
206        entry.addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
207                .put(StructuredPostal.POBOX, "\u79C1\u66F8\u7BB107")
208                .put(StructuredPostal.STREET, "\u96DB\u898B\u6CA2\u6751")
209                .put(StructuredPostal.CITY, "\u9E7F\u9AA8\u5E02")
210                .put(StructuredPostal.REGION, "\u00D7\u00D7\u770C")
211                .put(StructuredPostal.POSTCODE, "494-1313")
212                .put(StructuredPostal.COUNTRY, "\u65E5\u672C")
213                .put(StructuredPostal.FORMATTED_ADDRESS,
214                        "\u3053\u3093\u306A\u3068\u3053\u308D\u3092\u898B"
215                        + "\u308B\u306A\u3093\u3066\u6687\u4EBA\u3067\u3059\u304B\uFF1F")
216                .put(StructuredPostal.TYPE, StructuredPostal.TYPE_CUSTOM)
217                .put(StructuredPostal.LABEL, "\u304A\u3082\u3061\u304B\u3048\u308A");
218
219        ContentValues contentValues = ("UTF-8".equalsIgnoreCase(charset) ?
220                (VCardConfig.isVersion21(vcardType) ? mContentValuesForQPAndSJis :
221                    mContentValuesForSJis) :
222                (VCardConfig.isVersion21(vcardType) ? mContentValuesForQPAndUtf8 :
223                    mContentValuesForUtf8));
224
225        PropertyNodesVerifierElem elem = mVerifier.addPropertyNodesVerifierElemWithEmptyName();
226        // LABEL must be ignored in vCard 2.1. As for vCard 3.0, the current behavior is
227        // same as that in vCard 3.0, which can be changed in the future.
228        elem.addExpectedNode("ADR", Arrays.asList("\u79C1\u66F8\u7BB107",
229                "", "\u96DB\u898B\u6CA2\u6751", "\u9E7F\u9AA8\u5E02", "\u00D7\u00D7\u770C",
230                "494-1313", "\u65E5\u672C"),
231                contentValues);
232        mVerifier.addContentValuesVerifierElem().addExpected(StructuredPostal.CONTENT_ITEM_TYPE)
233                .put(StructuredPostal.POBOX, "\u79C1\u66F8\u7BB107")
234                .put(StructuredPostal.STREET, "\u96DB\u898B\u6CA2\u6751")
235                .put(StructuredPostal.CITY, "\u9E7F\u9AA8\u5E02")
236                .put(StructuredPostal.REGION, "\u00D7\u00D7\u770C")
237                .put(StructuredPostal.POSTCODE, "494-1313")
238                .put(StructuredPostal.COUNTRY, "\u65E5\u672C")
239                .put(StructuredPostal.FORMATTED_ADDRESS,
240                        "\u65E5\u672C 494-1313 \u00D7\u00D7\u770C \u9E7F\u9AA8\u5E02 " +
241                        "\u96DB\u898B\u6CA2\u6751 " + "\u79C1\u66F8\u7BB107")
242                .put(StructuredPostal.TYPE, StructuredPostal.TYPE_HOME);
243    }
244    public void testPostalAddresswithJapaneseV21() {
245        testPostalAddressWithJapaneseCommon(VCardConfig.VCARD_TYPE_V21_JAPANESE, "Shift_JIS");
246    }
247
248    /**
249     * Verifies that only one address field is emitted toward DoCoMo phones.
250     * Prefered type must (should?) be: HOME > WORK > OTHER > CUSTOM
251     */
252    public void testPostalAdrressForDoCoMo_1() {
253        mVerifier.initForExportTest(VCardConfig.VCARD_TYPE_DOCOMO, "Shift_JIS");
254        ContactEntry entry = mVerifier.addInputEntry();
255        entry.addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
256                .put(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK)
257                .put(StructuredPostal.POBOX, "1");
258        entry.addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
259                .put(StructuredPostal.TYPE, StructuredPostal.TYPE_OTHER)
260                .put(StructuredPostal.POBOX, "2");
261        entry.addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
262                .put(StructuredPostal.TYPE, StructuredPostal.TYPE_HOME)
263                .put(StructuredPostal.POBOX, "3");
264        entry.addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
265                .put(StructuredPostal.TYPE, StructuredPostal.TYPE_CUSTOM)
266                .put(StructuredPostal.LABEL, "custom")
267                .put(StructuredPostal.POBOX, "4");
268
269        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
270                .addExpectedNode("TEL", "", new TypeSet("HOME"))
271                .addExpectedNode("EMAIL", "", new TypeSet("HOME"))
272                .addExpectedNode("X-CLASS", "PUBLIC")
273                .addExpectedNode("X-REDUCTION", "")
274                .addExpectedNode("X-NO", "")
275                .addExpectedNode("X-DCM-HMN-MODE", "")
276                .addExpectedNode("ADR",
277                        Arrays.asList("3", "", "", "", "", "", ""), new TypeSet("HOME"));
278    }
279
280    public void testPostalAdrressForDoCoMo_2() {
281        mVerifier.initForExportTest(VCardConfig.VCARD_TYPE_DOCOMO, "Shift_JIS");
282        ContactEntry entry = mVerifier.addInputEntry();
283        entry.addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
284                .put(StructuredPostal.TYPE, StructuredPostal.TYPE_OTHER)
285                .put(StructuredPostal.POBOX, "1");
286        entry.addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
287                .put(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK)
288                .put(StructuredPostal.POBOX, "2");
289        entry.addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
290                .put(StructuredPostal.TYPE, StructuredPostal.TYPE_CUSTOM)
291                .put(StructuredPostal.LABEL, "custom")
292                .put(StructuredPostal.POBOX, "3");
293
294        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
295                .addExpectedNode("TEL", "", new TypeSet("HOME"))
296                .addExpectedNode("EMAIL", "", new TypeSet("HOME"))
297                .addExpectedNode("X-CLASS", "PUBLIC")
298                .addExpectedNode("X-REDUCTION", "")
299                .addExpectedNode("X-NO", "")
300                .addExpectedNode("X-DCM-HMN-MODE", "")
301                .addExpectedNode("ADR",
302                        Arrays.asList("2", "", "", "", "", "", ""), new TypeSet("WORK"));
303    }
304
305    public void testPostalAdrressForDoCoMo_3() {
306        mVerifier.initForExportTest(VCardConfig.VCARD_TYPE_DOCOMO, "Shift_JIS");
307        ContactEntry entry = mVerifier.addInputEntry();
308        entry.addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
309                .put(StructuredPostal.TYPE, StructuredPostal.TYPE_CUSTOM)
310                .put(StructuredPostal.LABEL, "custom1")
311                .put(StructuredPostal.POBOX, "1");
312        entry.addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
313                .put(StructuredPostal.TYPE, StructuredPostal.TYPE_OTHER)
314                .put(StructuredPostal.POBOX, "2");
315        entry.addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
316                .put(StructuredPostal.TYPE, StructuredPostal.TYPE_CUSTOM)
317                .put(StructuredPostal.LABEL, "custom2")
318                .put(StructuredPostal.POBOX, "3");
319
320        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
321                .addExpectedNode("TEL", "", new TypeSet("HOME"))
322                .addExpectedNode("EMAIL", "", new TypeSet("HOME"))
323                .addExpectedNode("X-CLASS", "PUBLIC")
324                .addExpectedNode("X-REDUCTION", "")
325                .addExpectedNode("X-NO", "")
326                .addExpectedNode("X-DCM-HMN-MODE", "")
327                .addExpectedNode("ADR", Arrays.asList("2", "", "", "", "", "", ""));
328    }
329
330    /**
331     * Verifies the vCard exporter tolerates null TYPE.
332     */
333    public void testPostalAdrressForDoCoMo_4() {
334        mVerifier.initForExportTest(VCardConfig.VCARD_TYPE_DOCOMO, "Shift_JIS");
335        ContactEntry entry = mVerifier.addInputEntry();
336        entry.addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
337                .put(StructuredPostal.POBOX, "1");
338        entry.addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
339                .put(StructuredPostal.TYPE, StructuredPostal.TYPE_OTHER)
340                .put(StructuredPostal.POBOX, "2");
341        entry.addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
342                .put(StructuredPostal.TYPE, StructuredPostal.TYPE_HOME)
343                .put(StructuredPostal.POBOX, "3");
344        entry.addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
345                .put(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK)
346                .put(StructuredPostal.POBOX, "4");
347        entry.addContentValues(StructuredPostal.CONTENT_ITEM_TYPE)
348                .put(StructuredPostal.POBOX, "5");
349
350        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
351                .addExpectedNode("TEL", "", new TypeSet("HOME"))
352                .addExpectedNode("EMAIL", "", new TypeSet("HOME"))
353                .addExpectedNode("X-CLASS", "PUBLIC")
354                .addExpectedNode("X-REDUCTION", "")
355                .addExpectedNode("X-NO", "")
356                .addExpectedNode("X-DCM-HMN-MODE", "")
357                .addExpectedNode("ADR",
358                        Arrays.asList("3", "", "", "", "", "", ""), new TypeSet("HOME"));
359    }
360
361    private void testJapanesePhoneNumberCommon(int vcardType) {
362        mVerifier.initForExportTest(vcardType);
363        ContactEntry entry = mVerifier.addInputEntry();
364        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
365                .put(Phone.NUMBER, "0312341234")
366                .put(Phone.TYPE, Phone.TYPE_HOME);
367        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
368                .put(Phone.NUMBER, "09012341234")
369                .put(Phone.TYPE, Phone.TYPE_MOBILE);
370        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
371                .addExpectedNode("TEL", "03-1234-1234", new TypeSet("HOME"))
372                .addExpectedNode("TEL", "090-1234-1234", new TypeSet("CELL"));
373    }
374
375    public void testJapanesePhoneNumberV21_1() {
376        testJapanesePhoneNumberCommon(VCardConfig.VCARD_TYPE_V21_JAPANESE);
377    }
378
379    public void testJapanesePhoneNumberV30() {
380        testJapanesePhoneNumberCommon(VCardConfig.VCARD_TYPE_V30_JAPANESE);
381    }
382
383    public void testJapanesePhoneNumberDoCoMo() {
384        mVerifier.initForExportTest(VCardConfig.VCARD_TYPE_DOCOMO, "Shift_JIS");
385        ContactEntry entry = mVerifier.addInputEntry();
386        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
387                .put(Phone.NUMBER, "0312341234")
388                .put(Phone.TYPE, Phone.TYPE_HOME);
389        entry.addContentValues(Phone.CONTENT_ITEM_TYPE)
390                .put(Phone.NUMBER, "09012341234")
391                .put(Phone.TYPE, Phone.TYPE_MOBILE);
392        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
393                .addExpectedNode("EMAIL", "", new TypeSet("HOME"))
394                .addExpectedNode("X-CLASS", "PUBLIC")
395                .addExpectedNode("X-REDUCTION", "")
396                .addExpectedNode("X-NO", "")
397                .addExpectedNode("X-DCM-HMN-MODE", "")
398                .addExpectedNode("ADR", "", new TypeSet("HOME"))
399                .addExpectedNode("TEL", "03-1234-1234", new TypeSet("HOME"))
400                .addExpectedNode("TEL", "090-1234-1234", new TypeSet("CELL"));
401    }
402
403    public void testNoteDoCoMo() {
404        mVerifier.initForExportTest(VCardConfig.VCARD_TYPE_DOCOMO, "Shift_JIS");
405        ContactEntry entry = mVerifier.addInputEntry();
406        entry.addContentValues(Note.CONTENT_ITEM_TYPE)
407                .put(Note.NOTE, "note1");
408        entry.addContentValues(Note.CONTENT_ITEM_TYPE)
409                .put(Note.NOTE, "note2");
410        entry.addContentValues(Note.CONTENT_ITEM_TYPE)
411                .put(Note.NOTE, "note3");
412
413        // More than one note fields must be aggregated into one note.
414        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
415                .addExpectedNode("TEL", "", new TypeSet("HOME"))
416                .addExpectedNode("EMAIL", "", new TypeSet("HOME"))
417                .addExpectedNode("X-CLASS", "PUBLIC")
418                .addExpectedNode("X-REDUCTION", "")
419                .addExpectedNode("X-NO", "")
420                .addExpectedNode("X-DCM-HMN-MODE", "")
421                .addExpectedNode("ADR", "", new TypeSet("HOME"))
422                .addExpectedNode("NOTE", "note1\nnote2\nnote3", mContentValuesForQP);
423    }
424
425    public void testAndroidCustomV21() {
426        mVerifier.initForExportTest(VCardConfig.VCARD_TYPE_V21_GENERIC);
427        mVerifier.addInputEntry().addContentValues(Nickname.CONTENT_ITEM_TYPE)
428                .put(Nickname.NAME, "\u304D\u3083\u30FC\u30A8\u30C3\u30C1\u30FC");
429        mVerifier.addPropertyNodesVerifierElemWithEmptyName()
430                .addExpectedNode("X-ANDROID-CUSTOM",
431                        Arrays.asList(Nickname.CONTENT_ITEM_TYPE,
432                                "\u304D\u3083\u30FC\u30A8\u30C3\u30C1\u30FC",
433                                "", "", "", "", "", "", "", "", "", "", "", "", "", ""),
434                        mContentValuesForQPAndUtf8);
435    }
436}
437