Merge "Fix importing SHIFT_JIS vcard with backslash byte breakage"
diff --git a/java/com/android/vcard/VCardParserImpl_V21.java b/java/com/android/vcard/VCardParserImpl_V21.java
index 386d626..e8655a8 100644
--- a/java/com/android/vcard/VCardParserImpl_V21.java
+++ b/java/com/android/vcard/VCardParserImpl_V21.java
@@ -685,8 +685,8 @@
}
ArrayList<String> propertyValueList = new ArrayList<String>();
- String value = VCardUtils.convertStringCharset(
- maybeUnescapeText(propertyRawValue), sourceCharset, targetCharset);
+ String value = maybeUnescapeText(VCardUtils.convertStringCharset(
+ propertyRawValue, sourceCharset, targetCharset));
propertyValueList.add(value);
property.setValues(propertyValueList);
for (VCardInterpreter interpreter : mInterpreterList) {
@@ -720,12 +720,12 @@
encodedValueList.add(encoded);
}
} else {
- final String propertyValue = getPotentialMultiline(propertyRawValue);
- final List<String> rawValueList =
+ final String propertyValue = VCardUtils.convertStringCharset(
+ getPotentialMultiline(propertyRawValue), sourceCharset, targetCharset);
+ final List<String> valueList =
VCardUtils.constructListFromValue(propertyValue, getVersion());
- for (String rawValue : rawValueList) {
- encodedValueList.add(VCardUtils.convertStringCharset(
- rawValue, sourceCharset, targetCharset));
+ for (String value : valueList) {
+ encodedValueList.add(value);
}
}
diff --git a/tests/res/raw/v21_japanese_3.vcf b/tests/res/raw/v21_japanese_3.vcf
new file mode 100644
index 0000000..e54124d
--- /dev/null
+++ b/tests/res/raw/v21_japanese_3.vcf
@@ -0,0 +1,5 @@
+BEGIN:VCARD
+VERSION:2.1
+FN;CHARSET=SHIFT_JIS:É\ \ê É\
+N;CHARSET=SHIFT_JIS:É\;\ê;É\;;
+END:VCARD
diff --git a/tests/res/raw/v30_japanese.vcf b/tests/res/raw/v30_japanese.vcf
new file mode 100644
index 0000000..8ab7674
--- /dev/null
+++ b/tests/res/raw/v30_japanese.vcf
@@ -0,0 +1,5 @@
+BEGIN:VCARD
+VERSION:3.0
+FN;CHARSET=SHIFT_JIS:É\ \ê É\
+N;CHARSET=SHIFT_JIS:É\;\ê;É\;;
+END:VCARD
diff --git a/tests/src/com/android/vcard/tests/VCardImporterTests.java b/tests/src/com/android/vcard/tests/VCardImporterTests.java
index 12addd6..6091826 100644
--- a/tests/src/com/android/vcard/tests/VCardImporterTests.java
+++ b/tests/src/com/android/vcard/tests/VCardImporterTests.java
@@ -869,6 +869,39 @@
.put(Note.NOTE, "\u30E1\u30E2");
}
+ public void testV21Japanese3_Parsing() {
+ mVerifier.initForImportTest(VCardConfig.VCARD_TYPE_V21_JAPANESE, R.raw.v21_japanese_3);
+ mVerifier.addPropertyNodesVerifierElem()
+ .addExpectedNodeWithOrder("N", "\u4f0a\u80fd;\u572d\u4e00;\u4f0a\u4e88;;",
+ Arrays.asList("\u4f0a\u80fd", "\u572d\u4e00", "\u4f0a\u4e88",
+ "", ""),
+ null, mContentValuesForSJis, null, null)
+ .addExpectedNodeWithOrder("FN", "\u4f0a\u80fd\u0020\u572d\u4e00\u0020\u4f0a\u4e88",
+ null, null, mContentValuesForSJis, null, null);
+ }
+
+ public void testV21Japanese3_Parsing_Utf8() {
+ mVerifier.initForImportTest(V21, R.raw.v21_japanese_3);
+ mVerifier.addPropertyNodesVerifierElem()
+ .addExpectedNodeWithOrder("N", "\u4f0a\u80fd;\u572d\u4e00;\u4f0a\u4e88;;",
+ Arrays.asList("\u4f0a\u80fd", "\u572d\u4e00", "\u4f0a\u4e88",
+ "", ""),
+ null, mContentValuesForSJis, null, null)
+ .addExpectedNodeWithOrder("FN", "\u4f0a\u80fd\u0020\u572d\u4e00\u0020\u4f0a\u4e88",
+ null, null, mContentValuesForSJis, null, null);
+ }
+
+ public void testV30Japanese_Parsing() {
+ mVerifier.initForImportTest(V30, R.raw.v30_japanese);
+ mVerifier.addPropertyNodesVerifierElem()
+ .addExpectedNodeWithOrder("N", "\u4f0a\u80fd;\u572d\u4e00;\u4f0a\u4e88;;",
+ Arrays.asList("\u4f0a\u80fd", "\u572d\u4e00", "\u4f0a\u4e88",
+ "", ""),
+ null, mContentValuesForSJis, null, null)
+ .addExpectedNodeWithOrder("FN", "\u4f0a\u80fd\u0020\u572d\u4e00\u0020\u4f0a\u4e88",
+ null, null, mContentValuesForSJis, null, null);
+ }
+
public void testV21MultipleEntryCase_Parse() {
mVerifier.initForImportTest(VCardConfig.VCARD_TYPE_V21_JAPANESE, R.raw.v21_multiple_entry);
mVerifier.addPropertyNodesVerifierElem()