am f035b477: Make test compontent support multiple vCard input.
Merge commit 'f035b47774aabf7397aec5c5459ac9860ad63bab' into eclair-mr2-plus-aosp * commit 'f035b47774aabf7397aec5c5459ac9860ad63bab': Make test compontent support multiple vCard input.
This commit is contained in:
@@ -392,7 +392,9 @@ public class VCardComposer {
|
||||
* Must call before {{@link #init()}.
|
||||
*/
|
||||
public void addHandler(OneEntryHandler handler) {
|
||||
mHandlerList.add(handler);
|
||||
if (handler != null) {
|
||||
mHandlerList.add(handler);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1865,11 +1867,11 @@ public class VCardComposer {
|
||||
switch (typeAsPrimitive) {
|
||||
case Phone.TYPE_HOME:
|
||||
parameterList.addAll(
|
||||
Arrays.asList(Constants.PARAM_TYPE_HOME, Constants.PARAM_TYPE_VOICE));
|
||||
Arrays.asList(Constants.PARAM_TYPE_HOME));
|
||||
break;
|
||||
case Phone.TYPE_WORK:
|
||||
parameterList.addAll(
|
||||
Arrays.asList(Constants.PARAM_TYPE_WORK, Constants.PARAM_TYPE_VOICE));
|
||||
Arrays.asList(Constants.PARAM_TYPE_WORK));
|
||||
break;
|
||||
case Phone.TYPE_FAX_HOME:
|
||||
parameterList.addAll(
|
||||
|
||||
@@ -17,14 +17,73 @@
|
||||
package com.android.unit_tests.vcard;
|
||||
|
||||
import android.content.ContentValues;
|
||||
import android.pim.vcard.VCardConfig;
|
||||
import android.pim.vcard.VCardParser;
|
||||
import android.pim.vcard.VCardParser_V21;
|
||||
import android.pim.vcard.VCardParser_V30;
|
||||
import android.pim.vcard.exception.VCardException;
|
||||
import android.test.AndroidTestCase;
|
||||
import android.util.Log;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
public class PropertyNodesVerifier extends VNodeBuilder {
|
||||
private final List<PropertyNodesVerifierElem> mPropertyNodesVerifierElemList;
|
||||
private final AndroidTestCase mAndroidTestCase;
|
||||
private int mIndex;
|
||||
|
||||
public PropertyNodesVerifier(AndroidTestCase testCase) {
|
||||
mPropertyNodesVerifierElemList = new ArrayList<PropertyNodesVerifierElem>();
|
||||
mAndroidTestCase = testCase;
|
||||
}
|
||||
|
||||
public PropertyNodesVerifierElem addPropertyNodesVerifierElem() {
|
||||
PropertyNodesVerifierElem elem = new PropertyNodesVerifierElem(mAndroidTestCase);
|
||||
mPropertyNodesVerifierElemList.add(elem);
|
||||
return elem;
|
||||
}
|
||||
|
||||
public void verify(int resId, int vCardType)
|
||||
throws IOException, VCardException {
|
||||
verify(mAndroidTestCase.getContext().getResources().openRawResource(resId), vCardType);
|
||||
}
|
||||
|
||||
public void verify(InputStream is, int vCardType) throws IOException, VCardException {
|
||||
final VCardParser vCardParser;
|
||||
if (VCardConfig.isV30(vCardType)) {
|
||||
vCardParser = new VCardParser_V30(true); // use StrictParsing
|
||||
} else {
|
||||
vCardParser = new VCardParser_V21();
|
||||
}
|
||||
try {
|
||||
vCardParser.parse(is, this);
|
||||
} finally {
|
||||
if (is != null) {
|
||||
try {
|
||||
is.close();
|
||||
} catch (IOException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endRecord() {
|
||||
super.endRecord();
|
||||
mAndroidTestCase.assertTrue(mIndex < mPropertyNodesVerifierElemList.size());
|
||||
mAndroidTestCase.assertTrue(mIndex < vNodeList.size());
|
||||
mPropertyNodesVerifierElemList.get(mIndex).verify(vNodeList.get(mIndex));
|
||||
mIndex++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility class which verifies input VNode.
|
||||
@@ -34,7 +93,7 @@ import junit.framework.TestCase;
|
||||
* If the node does not exist in the "ordered list", the class refers to
|
||||
* "unorderd expected property set" and checks the node is expected somewhere.
|
||||
*/
|
||||
public class PropertyNodesVerifier {
|
||||
class PropertyNodesVerifierElem {
|
||||
public static class TypeSet extends HashSet<String> {
|
||||
public TypeSet(String ... array) {
|
||||
super(Arrays.asList(array));
|
||||
@@ -53,7 +112,7 @@ public class PropertyNodesVerifier {
|
||||
private final ArrayList<PropertyNode> mUnorderedNodeList;
|
||||
private final TestCase mTestCase;
|
||||
|
||||
public PropertyNodesVerifier(TestCase testCase) {
|
||||
public PropertyNodesVerifierElem(TestCase testCase) {
|
||||
mOrderedNodeMap = new HashMap<String, List<PropertyNode>>();
|
||||
mUnorderedNodeList = new ArrayList<PropertyNode>();
|
||||
mTestCase = testCase;
|
||||
@@ -61,16 +120,16 @@ public class PropertyNodesVerifier {
|
||||
|
||||
// WithOrder
|
||||
|
||||
public PropertyNodesVerifier addNodeWithOrder(String propName, String propValue) {
|
||||
public PropertyNodesVerifierElem addNodeWithOrder(String propName, String propValue) {
|
||||
return addNodeWithOrder(propName, propValue, null, null, null, null, null);
|
||||
}
|
||||
|
||||
public PropertyNodesVerifier addNodeWithOrder(String propName, String propValue,
|
||||
public PropertyNodesVerifierElem addNodeWithOrder(String propName, String propValue,
|
||||
List<String> propValueList) {
|
||||
return addNodeWithOrder(propName, propValue, propValueList, null, null, null, null);
|
||||
}
|
||||
|
||||
public PropertyNodesVerifier addNodeWithOrder(String propName, List<String> propValueList) {
|
||||
public PropertyNodesVerifierElem addNodeWithOrder(String propName, List<String> propValueList) {
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
boolean first = true;
|
||||
for (String propValueElem : propValueList) {
|
||||
@@ -85,18 +144,18 @@ public class PropertyNodesVerifier {
|
||||
null, null, null, null);
|
||||
}
|
||||
|
||||
public PropertyNodesVerifier addNodeWithOrder(String propName, String propValue,
|
||||
public PropertyNodesVerifierElem addNodeWithOrder(String propName, String propValue,
|
||||
TypeSet paramMap_TYPE) {
|
||||
return addNodeWithOrder(propName, propValue, null, null, null, paramMap_TYPE, null);
|
||||
}
|
||||
|
||||
public PropertyNodesVerifier addNodeWithOrder(String propName, String propValue,
|
||||
public PropertyNodesVerifierElem addNodeWithOrder(String propName, String propValue,
|
||||
List<String> propValueList, TypeSet paramMap_TYPE) {
|
||||
return addNodeWithOrder(propName, propValue, propValueList, null, null,
|
||||
paramMap_TYPE, null);
|
||||
}
|
||||
|
||||
public PropertyNodesVerifier addNodeWithOrder(String propName, String propValue,
|
||||
public PropertyNodesVerifierElem addNodeWithOrder(String propName, String propValue,
|
||||
List<String> propValueList, byte[] propValue_bytes,
|
||||
ContentValues paramMap, TypeSet paramMap_TYPE, GroupSet propGroupSet) {
|
||||
PropertyNode propertyNode = new PropertyNode(propName,
|
||||
@@ -113,16 +172,16 @@ public class PropertyNodesVerifier {
|
||||
|
||||
// WithoutOrder
|
||||
|
||||
public PropertyNodesVerifier addNodeWithoutOrder(String propName, String propValue) {
|
||||
public PropertyNodesVerifierElem addNodeWithoutOrder(String propName, String propValue) {
|
||||
return addNodeWithoutOrder(propName, propValue, null, null, null, null, null);
|
||||
}
|
||||
|
||||
public PropertyNodesVerifier addNodeWithoutOrder(String propName, String propValue,
|
||||
public PropertyNodesVerifierElem addNodeWithoutOrder(String propName, String propValue,
|
||||
List<String> propValueList) {
|
||||
return addNodeWithoutOrder(propName, propValue, propValueList, null, null, null, null);
|
||||
}
|
||||
|
||||
public PropertyNodesVerifier addNodeWithoutOrder(String propName, List<String> propValueList) {
|
||||
public PropertyNodesVerifierElem addNodeWithoutOrder(String propName, List<String> propValueList) {
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
boolean first = true;
|
||||
for (String propValueElem : propValueList) {
|
||||
@@ -137,18 +196,18 @@ public class PropertyNodesVerifier {
|
||||
null, null, null, null);
|
||||
}
|
||||
|
||||
public PropertyNodesVerifier addNodeWithoutOrder(String propName, String propValue,
|
||||
public PropertyNodesVerifierElem addNodeWithoutOrder(String propName, String propValue,
|
||||
TypeSet paramMap_TYPE) {
|
||||
return addNodeWithoutOrder(propName, propValue, null, null, null, paramMap_TYPE, null);
|
||||
}
|
||||
|
||||
public PropertyNodesVerifier addNodeWithoutOrder(String propName, String propValue,
|
||||
public PropertyNodesVerifierElem addNodeWithoutOrder(String propName, String propValue,
|
||||
List<String> propValueList, TypeSet paramMap_TYPE) {
|
||||
return addNodeWithoutOrder(propName, propValue, propValueList, null, null,
|
||||
paramMap_TYPE, null);
|
||||
}
|
||||
|
||||
public PropertyNodesVerifier addNodeWithoutOrder(String propName, String propValue,
|
||||
public PropertyNodesVerifierElem addNodeWithoutOrder(String propName, String propValue,
|
||||
List<String> propValueList, byte[] propValue_bytes,
|
||||
ContentValues paramMap, TypeSet paramMap_TYPE, GroupSet propGroupSet) {
|
||||
mUnorderedNodeList.add(new PropertyNode(propName, propValue,
|
||||
@@ -185,8 +244,7 @@ public class PropertyNodesVerifier {
|
||||
if (size > 0) {
|
||||
for (int i = 0; i < size; i++) {
|
||||
PropertyNode expectedNode = expectedNodeList.get(i);
|
||||
List<PropertyNode> expectedButDifferentValueList =
|
||||
new ArrayList<PropertyNode>();
|
||||
List<PropertyNode> expectedButDifferentValueList = new ArrayList<PropertyNode>();
|
||||
if (expectedNode.propName.equals(propName)) {
|
||||
if (expectedNode.equals(actualNode)) {
|
||||
expectedNodeList.remove(i);
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
package com.android.unit_tests.vcard;
|
||||
|
||||
import android.content.ContentValues;
|
||||
import android.pim.vcard.VCardComposer;
|
||||
import android.pim.vcard.VCardConfig;
|
||||
import android.provider.ContactsContract.CommonDataKinds.Email;
|
||||
import android.provider.ContactsContract.CommonDataKinds.Event;
|
||||
@@ -31,7 +30,7 @@ import android.provider.ContactsContract.CommonDataKinds.StructuredName;
|
||||
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
|
||||
import android.provider.ContactsContract.CommonDataKinds.Website;
|
||||
|
||||
import com.android.unit_tests.vcard.PropertyNodesVerifier.TypeSet;
|
||||
import com.android.unit_tests.vcard.PropertyNodesVerifierElem.TypeSet;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@@ -44,42 +43,24 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
private static final byte[] sPhotoByteArray =
|
||||
VCardImporterTests.sPhotoByteArrayForComplicatedCase;
|
||||
|
||||
private void verifyOneComposition(ExportTestResolver resolver,
|
||||
VCardVerificationHandler handler, int version) {
|
||||
final boolean isV30 = (version == V30);
|
||||
|
||||
final int vcardType = (isV30 ? VCardConfig.VCARD_TYPE_V30_GENERIC_UTF8
|
||||
: VCardConfig.VCARD_TYPE_V21_GENERIC_UTF8);
|
||||
VCardComposer composer = new VCardComposer(new CustomMockContext(resolver), vcardType);
|
||||
composer.addHandler(handler);
|
||||
if (!composer.init(VCardComposer.CONTACTS_TEST_CONTENT_URI, null, null, null)) {
|
||||
fail("init() failed. Reason: " + composer.getErrorReason());
|
||||
}
|
||||
assertFalse(composer.isAfterLast());
|
||||
assertTrue(composer.createOneEntry());
|
||||
assertTrue(composer.isAfterLast());
|
||||
composer.terminate();
|
||||
}
|
||||
|
||||
public void testSimpleV21() {
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
resolver.buildInput(StructuredName.CONTENT_ITEM_TYPE)
|
||||
resolver.buildContactEntry().buildData(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "Ando")
|
||||
.put(StructuredName.GIVEN_NAME, "Roid");
|
||||
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, V21);
|
||||
handler.addPropertyNodesVerifier()
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, V21);
|
||||
verifier.addPropertyNodesVerifierElem()
|
||||
.addNodeWithoutOrder("FN", "Roid Ando")
|
||||
.addNodeWithoutOrder("N", "Ando;Roid;;;", Arrays.asList("Ando", "Roid", "", "", ""));
|
||||
|
||||
verifyOneComposition(resolver, handler, V21);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
private void testStructuredNameBasic(int version) {
|
||||
final boolean isV30 = (version == V30);
|
||||
final boolean isV30 = VCardConfig.isV30(version);
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
|
||||
resolver.buildInput(StructuredName.CONTENT_ITEM_TYPE)
|
||||
resolver.buildContactEntry().buildData(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
|
||||
.put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
|
||||
.put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
|
||||
@@ -89,8 +70,8 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
.put(StructuredName.PHONETIC_GIVEN_NAME, "AppropriatePhoneticGiven")
|
||||
.put(StructuredName.PHONETIC_MIDDLE_NAME, "AppropriatePhoneticMiddle");
|
||||
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
PropertyNodesVerifier verifier = handler.addPropertyNodesVerifier()
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
PropertyNodesVerifierElem elem = verifier.addPropertyNodesVerifierElem()
|
||||
.addNodeWithOrder("N",
|
||||
"AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
|
||||
+ "AppropriatePrefix;AppropriateSuffix",
|
||||
@@ -104,12 +85,12 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
.addNodeWithoutOrder("X-PHONETIC-LAST-NAME", "AppropriatePhoneticFamily");
|
||||
|
||||
if (isV30) {
|
||||
verifier.addNodeWithoutOrder("SORT-STRING",
|
||||
elem.addNodeWithoutOrder("SORT-STRING",
|
||||
"AppropriatePhoneticGiven AppropriatePhoneticMiddle "
|
||||
+ "AppropriatePhoneticFamily");
|
||||
}
|
||||
|
||||
verifyOneComposition(resolver, handler, version);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
public void testStructuredNameBasicV21() {
|
||||
@@ -130,7 +111,8 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
final boolean isV30 = (version == V30);
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
|
||||
resolver.buildInput(StructuredName.CONTENT_ITEM_TYPE)
|
||||
ContactEntry entry = resolver.buildContactEntry();
|
||||
entry.buildData(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName1")
|
||||
.put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName1")
|
||||
.put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName1")
|
||||
@@ -141,7 +123,7 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
.put(StructuredName.PHONETIC_MIDDLE_NAME, "DoNotEmitPhoneticMiddle1");
|
||||
|
||||
// With "IS_PRIMARY=1". This is what we should use.
|
||||
resolver.buildInput(StructuredName.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
|
||||
.put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
|
||||
.put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
|
||||
@@ -153,7 +135,7 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
.put(StructuredName.IS_PRIMARY, 1);
|
||||
|
||||
// With "IS_PRIMARY=1", but we should ignore this time, since this is second, not first.
|
||||
resolver.buildInput(StructuredName.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName2")
|
||||
.put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName2")
|
||||
.put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName2")
|
||||
@@ -164,8 +146,8 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
.put(StructuredName.PHONETIC_MIDDLE_NAME, "DoNotEmitPhoneticMiddle2")
|
||||
.put(StructuredName.IS_PRIMARY, 1);
|
||||
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
PropertyNodesVerifier verifier = handler.addPropertyNodesVerifier()
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
PropertyNodesVerifierElem elem = verifier.addPropertyNodesVerifierElem()
|
||||
.addNodeWithOrder("N",
|
||||
"AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
|
||||
+ "AppropriatePrefix;AppropriateSuffix",
|
||||
@@ -179,12 +161,12 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
.addNodeWithoutOrder("X-PHONETIC-LAST-NAME", "AppropriatePhoneticFamily");
|
||||
|
||||
if (isV30) {
|
||||
verifier.addNodeWithoutOrder("SORT-STRING",
|
||||
elem.addNodeWithoutOrder("SORT-STRING",
|
||||
"AppropriatePhoneticGiven AppropriatePhoneticMiddle "
|
||||
+ "AppropriatePhoneticFamily");
|
||||
}
|
||||
|
||||
verifyOneComposition(resolver, handler, version);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
public void testStructuredNameUsePrimaryV21() {
|
||||
@@ -203,7 +185,8 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
final boolean isV30 = (version == V30);
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
|
||||
resolver.buildInput(StructuredName.CONTENT_ITEM_TYPE)
|
||||
ContactEntry entry = resolver.buildContactEntry();
|
||||
entry.buildData(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName1")
|
||||
.put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName1")
|
||||
.put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName1")
|
||||
@@ -214,7 +197,7 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
.put(StructuredName.PHONETIC_MIDDLE_NAME, "DoNotEmitPhoneticMiddle1");
|
||||
|
||||
// With "IS_PRIMARY=1", but we should ignore this time.
|
||||
resolver.buildInput(StructuredName.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName2")
|
||||
.put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName2")
|
||||
.put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName2")
|
||||
@@ -226,7 +209,7 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
.put(StructuredName.IS_PRIMARY, 1);
|
||||
|
||||
// With "IS_SUPER_PRIMARY=1". This is what we should use.
|
||||
resolver.buildInput(StructuredName.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "AppropriateFamilyName")
|
||||
.put(StructuredName.GIVEN_NAME, "AppropriateGivenName")
|
||||
.put(StructuredName.MIDDLE_NAME, "AppropriateMiddleName")
|
||||
@@ -237,7 +220,7 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
.put(StructuredName.PHONETIC_MIDDLE_NAME, "AppropriatePhoneticMiddle")
|
||||
.put(StructuredName.IS_SUPER_PRIMARY, 1);
|
||||
|
||||
resolver.buildInput(StructuredName.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "DoNotEmitFamilyName3")
|
||||
.put(StructuredName.GIVEN_NAME, "DoNotEmitGivenName3")
|
||||
.put(StructuredName.MIDDLE_NAME, "DoNotEmitMiddleName3")
|
||||
@@ -248,8 +231,8 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
.put(StructuredName.PHONETIC_MIDDLE_NAME, "DoNotEmitPhoneticMiddle3")
|
||||
.put(StructuredName.IS_PRIMARY, 1);
|
||||
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
PropertyNodesVerifier verifier = handler.addPropertyNodesVerifier()
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
PropertyNodesVerifierElem elem = verifier.addPropertyNodesVerifierElem()
|
||||
.addNodeWithOrder("N",
|
||||
"AppropriateFamilyName;AppropriateGivenName;AppropriateMiddleName;"
|
||||
+ "AppropriatePrefix;AppropriateSuffix",
|
||||
@@ -263,12 +246,12 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
.addNodeWithoutOrder("X-PHONETIC-LAST-NAME", "AppropriatePhoneticFamily");
|
||||
|
||||
if (isV30) {
|
||||
verifier.addNodeWithoutOrder("SORT-STRING",
|
||||
elem.addNodeWithoutOrder("SORT-STRING",
|
||||
"AppropriatePhoneticGiven AppropriatePhoneticMiddle"
|
||||
+ " AppropriatePhoneticFamily");
|
||||
}
|
||||
|
||||
verifyOneComposition(resolver, handler, version);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
public void testStructuredNameUseSuperPrimaryV21() {
|
||||
@@ -281,28 +264,28 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
|
||||
public void testNickNameV30() {
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
resolver.buildInput(Nickname.CONTENT_ITEM_TYPE)
|
||||
resolver.buildContactEntry().buildData(Nickname.CONTENT_ITEM_TYPE)
|
||||
.put(Nickname.NAME, "Nicky");
|
||||
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, V30);
|
||||
handler.addPropertyVerifierWithEmptyName()
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, V30);
|
||||
verifier.addPropertyNodesVerifierWithEmptyName()
|
||||
.addNodeWithOrder("NICKNAME", "Nicky");
|
||||
|
||||
verifyOneComposition(resolver, handler, V30);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
private void testPhoneBasicCommon(int version) {
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
resolver.buildContactEntry().buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "1")
|
||||
.put(Phone.TYPE, Phone.TYPE_HOME);
|
||||
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
handler.addPropertyVerifierWithEmptyName()
|
||||
.addNodeWithoutOrder("TEL", "1", new TypeSet("HOME", "VOICE"));
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
verifier.addPropertyNodesVerifierWithEmptyName()
|
||||
.addNodeWithoutOrder("TEL", "1", new TypeSet("HOME"));
|
||||
|
||||
verifyOneComposition(resolver, handler, version);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
public void testPhoneBasicV21() {
|
||||
@@ -319,72 +302,58 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
private void testPhoneVariousTypeSupport(int version) {
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
ContactEntry entry = resolver.buildContactEntry();
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "10")
|
||||
.put(Phone.TYPE, Phone.TYPE_HOME);
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "20")
|
||||
.put(Phone.TYPE, Phone.TYPE_WORK);
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "30")
|
||||
.put(Phone.TYPE, Phone.TYPE_FAX_HOME);
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "40")
|
||||
.put(Phone.TYPE, Phone.TYPE_FAX_WORK);
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "50")
|
||||
.put(Phone.TYPE, Phone.TYPE_MOBILE);
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "60")
|
||||
.put(Phone.TYPE, Phone.TYPE_PAGER);
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "70")
|
||||
.put(Phone.TYPE, Phone.TYPE_OTHER);
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "80")
|
||||
.put(Phone.TYPE, Phone.TYPE_CAR);
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "90")
|
||||
.put(Phone.TYPE, Phone.TYPE_COMPANY_MAIN);
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "100")
|
||||
.put(Phone.TYPE, Phone.TYPE_ISDN);
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "110")
|
||||
.put(Phone.TYPE, Phone.TYPE_MAIN);
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "120")
|
||||
.put(Phone.TYPE, Phone.TYPE_OTHER_FAX);
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "130")
|
||||
.put(Phone.TYPE, Phone.TYPE_TELEX);
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "140")
|
||||
.put(Phone.TYPE, Phone.TYPE_WORK_MOBILE);
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "150")
|
||||
.put(Phone.TYPE, Phone.TYPE_WORK_PAGER);
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "160")
|
||||
.put(Phone.TYPE, Phone.TYPE_MMS);
|
||||
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
handler.addPropertyVerifierWithEmptyName()
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
verifier.addPropertyNodesVerifierWithEmptyName()
|
||||
.addNodeWithoutOrder("TEL", "10", new TypeSet("HOME"))
|
||||
.addNodeWithoutOrder("TEL", "20", new TypeSet("WORK"))
|
||||
.addNodeWithoutOrder("TEL", "30", new TypeSet("HOME", "FAX"))
|
||||
@@ -398,9 +367,10 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
.addNodeWithoutOrder("TEL", "110", new TypeSet("PREF"))
|
||||
.addNodeWithoutOrder("TEL", "120", new TypeSet("FAX"))
|
||||
.addNodeWithoutOrder("TEL", "130", new TypeSet("TLX"))
|
||||
.addNodeWithoutOrder("TEL", "140", new TypeSet("WORK", "MOBILE"))
|
||||
.addNodeWithoutOrder("TEL", "140", new TypeSet("WORK", "CELL"))
|
||||
.addNodeWithoutOrder("TEL", "150", new TypeSet("WORK", "PAGER"))
|
||||
.addNodeWithoutOrder("TEL", "160", new TypeSet("MSG"));
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
public void testPhoneVariousTypeSupportV21() {
|
||||
@@ -416,33 +386,29 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
*/
|
||||
private void testPhonePrefHandlingCommon(int version) {
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
ContactEntry entry = resolver.buildContactEntry();
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "1")
|
||||
.put(Phone.TYPE, Phone.TYPE_HOME);
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "2")
|
||||
.put(Phone.TYPE, Phone.TYPE_WORK)
|
||||
.put(Phone.IS_PRIMARY, 1);
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "3")
|
||||
.put(Phone.TYPE, Phone.TYPE_FAX_HOME)
|
||||
.put(Phone.IS_PRIMARY, 1);
|
||||
|
||||
resolver.buildInput(Phone.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "4")
|
||||
.put(Phone.TYPE, Phone.TYPE_FAX_WORK);
|
||||
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
handler.addPropertyVerifierWithEmptyName()
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
verifier.addPropertyNodesVerifierWithEmptyName()
|
||||
.addNodeWithoutOrder("TEL", "4", new TypeSet("WORK", "FAX"))
|
||||
.addNodeWithoutOrder("TEL", "3", new TypeSet("HOME", "FAX", "PREF"))
|
||||
.addNodeWithoutOrder("TEL", "2", new TypeSet("WORK", "VOICE", "PREF"))
|
||||
.addNodeWithoutOrder("TEL", "1", new TypeSet("HOME", "VOICE"));
|
||||
|
||||
verifyOneComposition(resolver, handler, version);
|
||||
.addNodeWithoutOrder("TEL", "2", new TypeSet("WORK", "PREF"))
|
||||
.addNodeWithoutOrder("TEL", "1", new TypeSet("HOME"));
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
public void testPhonePrefHandlingV21() {
|
||||
@@ -455,15 +421,15 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
|
||||
private void testEmailBasicCommon(int version) {
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
resolver.buildInput(Email.CONTENT_ITEM_TYPE)
|
||||
resolver.buildContactEntry().buildData(Email.CONTENT_ITEM_TYPE)
|
||||
.put(Email.DATA, "sample@example.com");
|
||||
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
|
||||
handler.addPropertyVerifierWithEmptyName()
|
||||
verifier.addPropertyNodesVerifierWithEmptyName()
|
||||
.addNodeWithoutOrder("EMAIL", "sample@example.com");
|
||||
|
||||
verifyOneComposition(resolver, handler, version);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
public void testEmailBasicV21() {
|
||||
@@ -477,31 +443,29 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
private void testEmailVariousTypeSupportCommon(int version) {
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
|
||||
resolver.buildInput(Email.CONTENT_ITEM_TYPE)
|
||||
ContactEntry entry = resolver.buildContactEntry();
|
||||
entry.buildData(Email.CONTENT_ITEM_TYPE)
|
||||
.put(Email.DATA, "type_home@example.com")
|
||||
.put(Email.TYPE, Email.TYPE_HOME);
|
||||
|
||||
resolver.buildInput(Email.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Email.CONTENT_ITEM_TYPE)
|
||||
.put(Email.DATA, "type_work@example.com")
|
||||
.put(Email.TYPE, Email.TYPE_WORK);
|
||||
|
||||
resolver.buildInput(Email.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Email.CONTENT_ITEM_TYPE)
|
||||
.put(Email.DATA, "type_mobile@example.com")
|
||||
.put(Email.TYPE, Email.TYPE_MOBILE);
|
||||
|
||||
resolver.buildInput(Email.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Email.CONTENT_ITEM_TYPE)
|
||||
.put(Email.DATA, "type_other@example.com")
|
||||
.put(Email.TYPE, Email.TYPE_OTHER);
|
||||
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
|
||||
handler.addPropertyVerifierWithEmptyName()
|
||||
verifier.addPropertyNodesVerifierWithEmptyName()
|
||||
.addNodeWithoutOrder("EMAIL", "type_home@example.com", new TypeSet("HOME"))
|
||||
.addNodeWithoutOrder("EMAIL", "type_work@example.com", new TypeSet("WORK"))
|
||||
.addNodeWithoutOrder("EMAIL", "type_mobile@example.com", new TypeSet("CELL"))
|
||||
.addNodeWithoutOrder("EMAIL", "type_other@example.com");
|
||||
|
||||
verifyOneComposition(resolver, handler, version);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
public void testEmailVariousTypeSupportV21() {
|
||||
@@ -515,22 +479,22 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
private void testEmailPrefHandlingCommon(int version) {
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
|
||||
resolver.buildInput(Email.CONTENT_ITEM_TYPE)
|
||||
ContactEntry entry = resolver.buildContactEntry();
|
||||
entry.buildData(Email.CONTENT_ITEM_TYPE)
|
||||
.put(Email.DATA, "type_home@example.com")
|
||||
.put(Email.TYPE, Email.TYPE_HOME)
|
||||
.put(Email.IS_PRIMARY, 1);
|
||||
|
||||
resolver.buildInput(Email.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Email.CONTENT_ITEM_TYPE)
|
||||
.put(Email.DATA, "type_notype@example.com")
|
||||
.put(Email.IS_PRIMARY, 1);
|
||||
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
|
||||
handler.addPropertyVerifierWithEmptyName()
|
||||
verifier.addPropertyNodesVerifierWithEmptyName()
|
||||
.addNodeWithoutOrder("EMAIL", "type_notype@example.com", new TypeSet("PREF"))
|
||||
.addNodeWithoutOrder("EMAIL", "type_home@example.com", new TypeSet("HOME", "PREF"));
|
||||
|
||||
verifyOneComposition(resolver, handler, version);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
public void testEmailPrefHandlingV21() {
|
||||
@@ -547,7 +511,7 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
// adr-value = 0*6(text-value ";") text-value
|
||||
// ; PO Box, Extended Address, Street, Locality, Region, Postal Code,
|
||||
// ; Country Name
|
||||
resolver.buildInput(StructuredPostal.CONTENT_ITEM_TYPE)
|
||||
resolver.buildContactEntry().buildData(StructuredPostal.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredPostal.POBOX, "Pobox")
|
||||
.put(StructuredPostal.NEIGHBORHOOD, "Neighborhood")
|
||||
.put(StructuredPostal.STREET, "Street")
|
||||
@@ -555,13 +519,13 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
.put(StructuredPostal.REGION, "Region")
|
||||
.put(StructuredPostal.POSTCODE, "100")
|
||||
.put(StructuredPostal.COUNTRY, "Country");
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
handler.addPropertyVerifierWithEmptyName()
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
verifier.addPropertyNodesVerifierWithEmptyName()
|
||||
.addNodeWithoutOrder("ADR", "Pobox;Neighborhood;Street;City;Region;100;Country",
|
||||
Arrays.asList("Pobox", "Neighborhood", "Street", "City",
|
||||
"Region", "100", "Country"), new TypeSet("HOME"));
|
||||
|
||||
verifyOneComposition(resolver, handler, version);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
public void testPostalOnlyWithStructuredDataV21() {
|
||||
@@ -575,17 +539,17 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
private void testPostalOnlyWithFormattedAddressCommon(int version) {
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
|
||||
resolver.buildInput(StructuredPostal.CONTENT_ITEM_TYPE)
|
||||
resolver.buildContactEntry().buildData(StructuredPostal.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredPostal.FORMATTED_ADDRESS,
|
||||
"Formatted address CA 123-334 United Statue");
|
||||
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
handler.addPropertyVerifierWithEmptyName()
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
verifier.addPropertyNodesVerifierWithEmptyName()
|
||||
.addNodeWithOrder("ADR", ";Formatted address CA 123-334 United Statue;;;;;",
|
||||
Arrays.asList("", "Formatted address CA 123-334 United Statue",
|
||||
"", "", "", "", ""), new TypeSet("HOME"));
|
||||
|
||||
verifyOneComposition(resolver, handler, version);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
public void testPostalOnlyWithFormattedAddressV21() {
|
||||
@@ -603,19 +567,19 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
private void testPostalWithBothStructuredAndFormattedCommon(int version) {
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
|
||||
resolver.buildInput(StructuredPostal.CONTENT_ITEM_TYPE)
|
||||
resolver.buildContactEntry().buildData(StructuredPostal.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredPostal.POBOX, "Pobox")
|
||||
.put(StructuredPostal.COUNTRY, "Country")
|
||||
.put(StructuredPostal.FORMATTED_ADDRESS,
|
||||
"Formatted address CA 123-334 United Statue"); // Should be ignored
|
||||
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
handler.addPropertyVerifierWithEmptyName()
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
verifier.addPropertyNodesVerifierWithEmptyName()
|
||||
.addNodeWithoutOrder("ADR", "Pobox;;;;;;Country",
|
||||
Arrays.asList("Pobox", "", "", "", "", "", "Country"),
|
||||
new TypeSet("HOME"));
|
||||
|
||||
verifyOneComposition(resolver, handler, version);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
public void testPostalWithBothStructuredAndFormattedV21() {
|
||||
@@ -628,7 +592,8 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
|
||||
private void testOrganizationCommon(int version) {
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
resolver.buildInput(Organization.CONTENT_ITEM_TYPE)
|
||||
ContactEntry entry = resolver.buildContactEntry();
|
||||
entry.buildData(Organization.CONTENT_ITEM_TYPE)
|
||||
.put(Organization.COMPANY, "CompanyX")
|
||||
.put(Organization.DEPARTMENT, "DepartmentY")
|
||||
.put(Organization.TITLE, "TitleZ")
|
||||
@@ -637,20 +602,20 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
.put(Organization.PHONETIC_NAME, "PhoneticName!") // Ignored
|
||||
.put(Organization.SYMBOL, "(^o^)/~~"); // Ignore him (her).
|
||||
|
||||
resolver.buildInput(Organization.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Organization.CONTENT_ITEM_TYPE)
|
||||
.putNull(Organization.COMPANY)
|
||||
.put(Organization.DEPARTMENT, "DepartmentXX")
|
||||
.putNull(Organization.TITLE);
|
||||
|
||||
resolver.buildInput(Organization.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Organization.CONTENT_ITEM_TYPE)
|
||||
.put(Organization.COMPANY, "CompanyXYZ")
|
||||
.putNull(Organization.DEPARTMENT)
|
||||
.put(Organization.TITLE, "TitleXYZYX");
|
||||
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
|
||||
// Currently we do not use group but depend on the order.
|
||||
handler.addPropertyVerifierWithEmptyName()
|
||||
verifier.addPropertyNodesVerifierWithEmptyName()
|
||||
.addNodeWithOrder("ORG", "CompanyX;DepartmentY",
|
||||
Arrays.asList("CompanyX", "DepartmentY"))
|
||||
.addNodeWithOrder("TITLE", "TitleZ")
|
||||
@@ -658,7 +623,7 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
.addNodeWithOrder("ORG", "CompanyXYZ")
|
||||
.addNodeWithOrder("TITLE", "TitleXYZYX");
|
||||
|
||||
verifyOneComposition(resolver, handler, version);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
public void testOrganizationV21() {
|
||||
@@ -672,46 +637,47 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
private void testImVariousTypeSupportCommon(int version) {
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
|
||||
resolver.buildInput(Im.CONTENT_ITEM_TYPE)
|
||||
ContactEntry entry = resolver.buildContactEntry();
|
||||
entry.buildData(Im.CONTENT_ITEM_TYPE)
|
||||
.put(Im.PROTOCOL, Im.PROTOCOL_AIM)
|
||||
.put(Im.DATA, "aim");
|
||||
|
||||
resolver.buildInput(Im.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Im.CONTENT_ITEM_TYPE)
|
||||
.put(Im.PROTOCOL, Im.PROTOCOL_MSN)
|
||||
.put(Im.DATA, "msn");
|
||||
|
||||
resolver.buildInput(Im.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Im.CONTENT_ITEM_TYPE)
|
||||
.put(Im.PROTOCOL, Im.PROTOCOL_YAHOO)
|
||||
.put(Im.DATA, "yahoo");
|
||||
|
||||
resolver.buildInput(Im.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Im.CONTENT_ITEM_TYPE)
|
||||
.put(Im.PROTOCOL, Im.PROTOCOL_SKYPE)
|
||||
.put(Im.DATA, "skype");
|
||||
|
||||
resolver.buildInput(Im.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Im.CONTENT_ITEM_TYPE)
|
||||
.put(Im.PROTOCOL, Im.PROTOCOL_QQ)
|
||||
.put(Im.DATA, "qq");
|
||||
|
||||
resolver.buildInput(Im.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Im.CONTENT_ITEM_TYPE)
|
||||
.put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK)
|
||||
.put(Im.DATA, "google talk");
|
||||
|
||||
resolver.buildInput(Im.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Im.CONTENT_ITEM_TYPE)
|
||||
.put(Im.PROTOCOL, Im.PROTOCOL_ICQ)
|
||||
.put(Im.DATA, "icq");
|
||||
|
||||
resolver.buildInput(Im.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Im.CONTENT_ITEM_TYPE)
|
||||
.put(Im.PROTOCOL, Im.PROTOCOL_JABBER)
|
||||
.put(Im.DATA, "jabber");
|
||||
|
||||
resolver.buildInput(Im.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Im.CONTENT_ITEM_TYPE)
|
||||
.put(Im.PROTOCOL, Im.PROTOCOL_NETMEETING)
|
||||
.put(Im.DATA, "netmeeting");
|
||||
|
||||
// No determined way to express unknown type...
|
||||
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
handler.addPropertyVerifierWithEmptyName()
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
verifier.addPropertyNodesVerifierWithEmptyName()
|
||||
.addNodeWithoutOrder("X-JABBER", "jabber")
|
||||
.addNodeWithoutOrder("X-ICQ", "icq")
|
||||
.addNodeWithoutOrder("X-GOOGLE-TALK", "google talk")
|
||||
@@ -722,7 +688,7 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
.addNodeWithoutOrder("X-NETMEETING", "netmeeting")
|
||||
.addNodeWithoutOrder("X-AIM", "aim");
|
||||
|
||||
verifyOneComposition(resolver, handler, version);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
public void testImBasiV21() {
|
||||
@@ -736,22 +702,23 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
private void testImPrefHandlingCommon(int version) {
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
|
||||
resolver.buildInput(Im.CONTENT_ITEM_TYPE)
|
||||
ContactEntry entry = resolver.buildContactEntry();
|
||||
entry.buildData(Im.CONTENT_ITEM_TYPE)
|
||||
.put(Im.PROTOCOL, Im.PROTOCOL_AIM)
|
||||
.put(Im.DATA, "aim1");
|
||||
|
||||
resolver.buildInput(Im.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Im.CONTENT_ITEM_TYPE)
|
||||
.put(Im.PROTOCOL, Im.PROTOCOL_AIM)
|
||||
.put(Im.DATA, "aim2")
|
||||
.put(Im.TYPE, Im.TYPE_HOME)
|
||||
.put(Im.IS_PRIMARY, 1);
|
||||
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
handler.addPropertyVerifierWithEmptyName()
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
verifier.addPropertyNodesVerifierWithEmptyName()
|
||||
.addNodeWithoutOrder("X-AIM", "aim1")
|
||||
.addNodeWithoutOrder("X-AIM", "aim2", new TypeSet("HOME", "PREF"));
|
||||
|
||||
verifyOneComposition(resolver, handler, version);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
public void testImPrefHandlingV21() {
|
||||
@@ -765,21 +732,21 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
private void testWebsiteCommon(int version) {
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
|
||||
resolver.buildInput(Website.CONTENT_ITEM_TYPE)
|
||||
ContactEntry entry = resolver.buildContactEntry();
|
||||
entry.buildData(Website.CONTENT_ITEM_TYPE)
|
||||
.put(Website.URL, "http://website.example.android.com/index.html")
|
||||
.put(Website.TYPE, Website.TYPE_BLOG);
|
||||
|
||||
resolver.buildInput(Website.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Website.CONTENT_ITEM_TYPE)
|
||||
.put(Website.URL, "ftp://ftp.example.android.com/index.html")
|
||||
.put(Website.TYPE, Website.TYPE_FTP);
|
||||
|
||||
// We drop TYPE information since vCard (especially 3.0) does not allow us to emit it.
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
handler.addPropertyVerifierWithEmptyName()
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
verifier.addPropertyNodesVerifierWithEmptyName()
|
||||
.addNodeWithoutOrder("URL", "ftp://ftp.example.android.com/index.html")
|
||||
.addNodeWithoutOrder("URL", "http://website.example.android.com/index.html");
|
||||
|
||||
verifyOneComposition(resolver, handler, version);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
public void testWebsiteV21() {
|
||||
@@ -793,32 +760,29 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
private void testEventCommon(int version) {
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
|
||||
resolver.buildInput(Event.CONTENT_ITEM_TYPE)
|
||||
ContactEntry entry = resolver.buildContactEntry();
|
||||
entry.buildData(Event.CONTENT_ITEM_TYPE)
|
||||
.put(Event.TYPE, Event.TYPE_ANNIVERSARY)
|
||||
.put(Event.START_DATE, "1982-06-16");
|
||||
|
||||
resolver.buildInput(Event.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Event.CONTENT_ITEM_TYPE)
|
||||
.put(Event.TYPE, Event.TYPE_BIRTHDAY)
|
||||
.put(Event.START_DATE, "2008-10-22");
|
||||
|
||||
resolver.buildInput(Event.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Event.CONTENT_ITEM_TYPE)
|
||||
.put(Event.TYPE, Event.TYPE_OTHER)
|
||||
.put(Event.START_DATE, "2018-03-12");
|
||||
|
||||
resolver.buildInput(Event.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Event.CONTENT_ITEM_TYPE)
|
||||
.put(Event.TYPE, Event.TYPE_CUSTOM)
|
||||
.put(Event.LABEL, "The last day")
|
||||
.put(Event.START_DATE, "When the Tower of Hanoi with 64 rings is completed.");
|
||||
|
||||
resolver.buildInput(Event.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Event.CONTENT_ITEM_TYPE)
|
||||
.put(Event.TYPE, Event.TYPE_BIRTHDAY)
|
||||
.put(Event.START_DATE, "2009-05-19");
|
||||
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
handler.addPropertyVerifierWithEmptyName()
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
verifier.addPropertyNodesVerifierWithEmptyName()
|
||||
.addNodeWithoutOrder("BDAY", "2008-10-22");
|
||||
|
||||
verifyOneComposition(resolver, handler, version);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
public void testEventV21() {
|
||||
@@ -832,19 +796,19 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
private void testNoteCommon(int version) {
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
|
||||
resolver.buildInput(Note.CONTENT_ITEM_TYPE)
|
||||
ContactEntry entry = resolver.buildContactEntry();
|
||||
entry.buildData(Note.CONTENT_ITEM_TYPE)
|
||||
.put(Note.NOTE, "note1");
|
||||
|
||||
resolver.buildInput(Note.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Note.CONTENT_ITEM_TYPE)
|
||||
.put(Note.NOTE, "note2")
|
||||
.put(Note.IS_PRIMARY, 1); // Just ignored.
|
||||
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
handler.addPropertyVerifierWithEmptyName()
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
verifier.addPropertyNodesVerifierWithEmptyName()
|
||||
.addNodeWithOrder("NOTE", "note1")
|
||||
.addNodeWithOrder("NOTE", "note2");
|
||||
|
||||
verifyOneComposition(resolver, handler, version);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
public void testNoteV21() {
|
||||
@@ -858,23 +822,23 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
private void testPhotoCommon(int version) {
|
||||
final boolean isV30 = version == V30;
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
resolver.buildInput(StructuredName.CONTENT_ITEM_TYPE)
|
||||
ContactEntry entry = resolver.buildContactEntry();
|
||||
entry.buildData(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "PhotoTest");
|
||||
|
||||
resolver.buildInput(Photo.CONTENT_ITEM_TYPE)
|
||||
entry.buildData(Photo.CONTENT_ITEM_TYPE)
|
||||
.put(Photo.PHOTO, sPhotoByteArray);
|
||||
|
||||
ContentValues contentValuesForPhoto = new ContentValues();
|
||||
contentValuesForPhoto.put("ENCODING", (isV30 ? "b" : "BASE64"));
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
handler.addPropertyNodesVerifier()
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
verifier.addPropertyNodesVerifierElem()
|
||||
.addNodeWithoutOrder("FN", "PhotoTest")
|
||||
.addNodeWithoutOrder("N", "PhotoTest;;;;",
|
||||
Arrays.asList("PhotoTest", "", "", "", ""))
|
||||
.addNodeWithOrder("PHOTO", null, null, sPhotoByteArray,
|
||||
contentValuesForPhoto, new TypeSet("JPEG"), null);
|
||||
|
||||
verifyOneComposition(resolver, handler, version);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
public void testPhotoV21() {
|
||||
@@ -888,21 +852,22 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
public void testV30HandleEscape() {
|
||||
final int version = V30;
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
resolver.buildInput(StructuredName.CONTENT_ITEM_TYPE)
|
||||
resolver.buildContactEntry().buildData(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "\\")
|
||||
.put(StructuredName.GIVEN_NAME, ";")
|
||||
.put(StructuredName.MIDDLE_NAME, ",")
|
||||
.put(StructuredName.PREFIX, "\n")
|
||||
.put(StructuredName.DISPLAY_NAME, "[<{Unescaped:Asciis}>]");
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, version);
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, version);
|
||||
// Verifies the vCard String correctly escapes each character which must be escaped.
|
||||
handler.addExpectedLine("N:\\\\;\\;;\\,;\\n;")
|
||||
.addExpectedLine("FN:[<{Unescaped:Asciis}>]");
|
||||
handler.addPropertyNodesVerifier()
|
||||
verifier.addLineVerifier()
|
||||
.addExpected("N:\\\\;\\;;\\,;\\n;")
|
||||
.addExpected("FN:[<{Unescaped:Asciis}>]");
|
||||
verifier.addPropertyNodesVerifierElem()
|
||||
.addNodeWithoutOrder("FN", "[<{Unescaped:Asciis}>]")
|
||||
.addNodeWithoutOrder("N", Arrays.asList("\\", ";", ",", "\n", ""));
|
||||
|
||||
verifyOneComposition(resolver, handler, version);
|
||||
verifier.verify();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -912,18 +877,16 @@ public class VCardExporterTests extends VCardTestsBase {
|
||||
*/
|
||||
public void testNickNameV21() {
|
||||
ExportTestResolver resolver = new ExportTestResolver();
|
||||
resolver.buildInput(Nickname.CONTENT_ITEM_TYPE)
|
||||
resolver.buildContactEntry().buildData(Nickname.CONTENT_ITEM_TYPE)
|
||||
.put(Nickname.NAME, "Nicky");
|
||||
|
||||
VCardVerificationHandler handler = new VCardVerificationHandler(this, V21);
|
||||
handler.addPropertyVerifierWithEmptyName()
|
||||
VCardVerifier verifier = new VCardVerifier(resolver, V21);
|
||||
verifier.addPropertyNodesVerifierWithEmptyName()
|
||||
.addNodeWithOrder("X-ANDROID-CUSTOM",
|
||||
Nickname.CONTENT_ITEM_TYPE + ";Nicky;;;;;;;;;;;;;;");
|
||||
|
||||
handler.addContentValuesVerifier()
|
||||
.buildExpected(Nickname.CONTENT_ITEM_TYPE)
|
||||
verifier.addImportVerifier()
|
||||
.addExpected(Nickname.CONTENT_ITEM_TYPE)
|
||||
.put(Nickname.NAME, "Nicky");
|
||||
|
||||
verifyOneComposition(resolver, handler, V21);
|
||||
verifier.verify();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@ package com.android.unit_tests.vcard;
|
||||
import android.content.ContentValues;
|
||||
import android.pim.vcard.VCardConfig;
|
||||
import android.pim.vcard.VCardParser_V21;
|
||||
import android.pim.vcard.VCardParser_V30;
|
||||
import android.pim.vcard.exception.VCardException;
|
||||
import android.provider.ContactsContract.Data;
|
||||
import android.provider.ContactsContract.CommonDataKinds.Email;
|
||||
@@ -33,7 +32,7 @@ import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
|
||||
import android.provider.ContactsContract.CommonDataKinds.Website;
|
||||
|
||||
import com.android.unit_tests.R;
|
||||
import com.android.unit_tests.vcard.PropertyNodesVerifier.TypeSet;
|
||||
import com.android.unit_tests.vcard.PropertyNodesVerifierElem.TypeSet;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
@@ -410,53 +409,52 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
}
|
||||
|
||||
public void testV21SimpleCase1_Parsing() throws IOException, VCardException {
|
||||
VCardParser_V21 parser = new VCardParser_V21();
|
||||
VNodeBuilder builder = new VNodeBuilder();
|
||||
InputStream is = getContext().getResources().openRawResource(R.raw.v21_simple_1);
|
||||
assertEquals(true, parser.parse(is,"ISO-8859-1", builder));
|
||||
is.close();
|
||||
assertEquals(1, builder.vNodeList.size());
|
||||
PropertyNodesVerifier verifier = new PropertyNodesVerifier(this)
|
||||
PropertyNodesVerifier verifier = new PropertyNodesVerifier(this);
|
||||
verifier.addPropertyNodesVerifierElem()
|
||||
.addNodeWithOrder("N", "Ando;Roid;", Arrays.asList("Ando", "Roid", ""));
|
||||
verifier.verify(builder.vNodeList.get(0));
|
||||
verifier.verify(R.raw.v21_simple_1, V21);
|
||||
}
|
||||
|
||||
public void testV21SimpleCase1_Type_Generic() throws IOException, VCardException {
|
||||
ContentValuesVerifier verifier = new ContentValuesVerifier();
|
||||
verifier.buildExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "Ando")
|
||||
.put(StructuredName.GIVEN_NAME, "Roid")
|
||||
.put(StructuredName.DISPLAY_NAME, "Roid Ando");
|
||||
ImportVerifier verifier = new ImportVerifier();
|
||||
verifier.addImportVerifierElem()
|
||||
.addExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "Ando")
|
||||
.put(StructuredName.GIVEN_NAME, "Roid")
|
||||
.put(StructuredName.DISPLAY_NAME, "Roid Ando");
|
||||
verifier.verify(R.raw.v21_simple_1, VCardConfig.VCARD_TYPE_V21_GENERIC_UTF8);
|
||||
}
|
||||
|
||||
public void testV21SimpleCase1_Type_Japanese() throws IOException, VCardException {
|
||||
ContentValuesVerifier verifier = new ContentValuesVerifier();
|
||||
verifier.buildExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "Ando")
|
||||
.put(StructuredName.GIVEN_NAME, "Roid")
|
||||
// If name-related strings only contains printable Ascii,
|
||||
// the order is remained to be US's:
|
||||
// "Prefix Given Middle Family Suffix"
|
||||
.put(StructuredName.DISPLAY_NAME, "Roid Ando");
|
||||
ImportVerifier verifier = new ImportVerifier();
|
||||
verifier.addImportVerifierElem()
|
||||
.addExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "Ando")
|
||||
.put(StructuredName.GIVEN_NAME, "Roid")
|
||||
// If name-related strings only contains printable Ascii,
|
||||
// the order is remained to be US's:
|
||||
// "Prefix Given Middle Family Suffix"
|
||||
.put(StructuredName.DISPLAY_NAME, "Roid Ando");
|
||||
verifier.verify(R.raw.v21_simple_1, VCardConfig.VCARD_TYPE_V21_JAPANESE_SJIS);
|
||||
}
|
||||
|
||||
public void testV21SimpleCase2() throws IOException, VCardException {
|
||||
ContentValuesVerifier verifier = new ContentValuesVerifier();
|
||||
verifier.buildExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.DISPLAY_NAME, "Ando Roid");
|
||||
ImportVerifier verifier = new ImportVerifier();
|
||||
verifier.addImportVerifierElem()
|
||||
.addExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.DISPLAY_NAME, "Ando Roid");
|
||||
verifier.verify(R.raw.v21_simple_2, VCardConfig.VCARD_TYPE_V21_GENERIC_UTF8);
|
||||
}
|
||||
|
||||
public void testV21SimpleCase3() throws IOException, VCardException {
|
||||
ContentValuesVerifier verifier = new ContentValuesVerifier();
|
||||
verifier.buildExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "Ando")
|
||||
.put(StructuredName.GIVEN_NAME, "Roid")
|
||||
// "FN" field should be prefered since it should contain the original order
|
||||
// intended by the author of the file.
|
||||
.put(StructuredName.DISPLAY_NAME, "Ando Roid");
|
||||
ImportVerifier verifier = new ImportVerifier();
|
||||
verifier.addImportVerifierElem()
|
||||
.addExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "Ando")
|
||||
.put(StructuredName.GIVEN_NAME, "Roid")
|
||||
// "FN" field should be prefered since it should contain the original
|
||||
// order intended by the author of the file.
|
||||
.put(StructuredName.DISPLAY_NAME, "Ando Roid");
|
||||
verifier.verify(R.raw.v21_simple_3, VCardConfig.VCARD_TYPE_V21_GENERIC_UTF8);
|
||||
}
|
||||
|
||||
@@ -464,18 +462,13 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
* Tests ';' is properly handled by VCardParser implementation.
|
||||
*/
|
||||
public void testV21BackslashCase_Parsing() throws IOException, VCardException {
|
||||
VCardParser_V21 parser = new VCardParser_V21();
|
||||
VNodeBuilder builder = new VNodeBuilder();
|
||||
InputStream is = getContext().getResources().openRawResource(R.raw.v21_backslash);
|
||||
assertEquals(true, parser.parse(is,"ISO-8859-1", builder));
|
||||
is.close();
|
||||
assertEquals(1, builder.vNodeList.size());
|
||||
PropertyNodesVerifier verifier = new PropertyNodesVerifier(this)
|
||||
PropertyNodesVerifier verifier = new PropertyNodesVerifier(this);
|
||||
verifier.addPropertyNodesVerifierElem()
|
||||
.addNodeWithOrder("VERSION", "2.1")
|
||||
.addNodeWithOrder("N", ";A;B\\;C\\;;D;:E;\\\\;",
|
||||
Arrays.asList("", "A;B\\", "C\\;", "D", ":E", "\\\\", ""))
|
||||
.addNodeWithOrder("FN", "A;B\\C\\;D:E\\\\");
|
||||
verifier.verify(builder.vNodeList.get(0));
|
||||
verifier.verify(R.raw.v21_backslash, V21);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -483,23 +476,25 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
* inserts name related data.
|
||||
*/
|
||||
public void testV21BackslashCase() throws IOException, VCardException {
|
||||
ContentValuesVerifier verifier = new ContentValuesVerifier();
|
||||
verifier.buildExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
// FAMILY_NAME is empty and removed in this test...
|
||||
.put(StructuredName.GIVEN_NAME, "A;B\\")
|
||||
.put(StructuredName.MIDDLE_NAME, "C\\;")
|
||||
.put(StructuredName.PREFIX, "D")
|
||||
.put(StructuredName.SUFFIX, ":E")
|
||||
.put(StructuredName.DISPLAY_NAME, "A;B\\C\\;D:E\\\\");
|
||||
ImportVerifier verifier = new ImportVerifier();
|
||||
verifier.addImportVerifierElem()
|
||||
.addExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
// FAMILY_NAME is empty and removed in this test...
|
||||
.put(StructuredName.GIVEN_NAME, "A;B\\")
|
||||
.put(StructuredName.MIDDLE_NAME, "C\\;")
|
||||
.put(StructuredName.PREFIX, "D")
|
||||
.put(StructuredName.SUFFIX, ":E")
|
||||
.put(StructuredName.DISPLAY_NAME, "A;B\\C\\;D:E\\\\");
|
||||
verifier.verify(R.raw.v21_backslash, VCardConfig.VCARD_TYPE_V21_GENERIC_UTF8);
|
||||
}
|
||||
|
||||
public void testOrgBeforTitle() throws IOException, VCardException {
|
||||
ContentValuesVerifier verifier = new ContentValuesVerifier();
|
||||
verifier.buildExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
ImportVerifier verifier = new ImportVerifier();
|
||||
ImportVerifierElem elem = verifier.addImportVerifierElem();
|
||||
elem.addExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.DISPLAY_NAME, "Normal Guy");
|
||||
|
||||
verifier.buildExpected(Organization.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Organization.CONTENT_ITEM_TYPE)
|
||||
.put(Organization.COMPANY, "Company")
|
||||
.put(Organization.DEPARTMENT, "Organization Devision Room Sheet No.")
|
||||
.put(Organization.TITLE, "Excellent Janitor")
|
||||
@@ -508,11 +503,12 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
}
|
||||
|
||||
public void testTitleBeforOrg() throws IOException, VCardException {
|
||||
ContentValuesVerifier verifier = new ContentValuesVerifier();
|
||||
verifier.buildExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
ImportVerifier verifier = new ImportVerifier();
|
||||
ImportVerifierElem elem = verifier.addImportVerifierElem();
|
||||
elem.addExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.DISPLAY_NAME, "Nice Guy");
|
||||
|
||||
verifier.buildExpected(Organization.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Organization.CONTENT_ITEM_TYPE)
|
||||
.put(Organization.COMPANY, "Marverous")
|
||||
.put(Organization.DEPARTMENT, "Perfect Great Good Bad Poor")
|
||||
.put(Organization.TITLE, "Cool Title")
|
||||
@@ -525,45 +521,46 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
* The data contain three cases: one "PREF", no "PREF" and multiple "PREF", in each type.
|
||||
*/
|
||||
public void testV21PrefToIsPrimary() throws IOException, VCardException {
|
||||
ContentValuesVerifier verifier = new ContentValuesVerifier();
|
||||
verifier.buildExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
ImportVerifier verifier = new ImportVerifier();
|
||||
ImportVerifierElem elem = verifier.addImportVerifierElem();
|
||||
elem.addExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.DISPLAY_NAME, "Smith");
|
||||
|
||||
verifier.buildExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "1")
|
||||
.put(Phone.TYPE, Phone.TYPE_HOME);
|
||||
|
||||
verifier.buildExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "2")
|
||||
.put(Phone.TYPE, Phone.TYPE_WORK)
|
||||
.put(Phone.IS_PRIMARY, 1);
|
||||
|
||||
verifier.buildExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.NUMBER, "3")
|
||||
.put(Phone.TYPE, Phone.TYPE_ISDN);
|
||||
|
||||
verifier.buildExpected(Email.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Email.CONTENT_ITEM_TYPE)
|
||||
.put(Email.DATA, "test@example.com")
|
||||
.put(Email.TYPE, Email.TYPE_HOME)
|
||||
.put(Email.IS_PRIMARY, 1);
|
||||
|
||||
verifier.buildExpected(Email.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Email.CONTENT_ITEM_TYPE)
|
||||
.put(Email.DATA, "test2@examination.com")
|
||||
.put(Email.TYPE, Email.TYPE_MOBILE)
|
||||
.put(Email.IS_PRIMARY, 1);
|
||||
|
||||
verifier.buildExpected(Organization.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Organization.CONTENT_ITEM_TYPE)
|
||||
.put(Organization.COMPANY, "Company")
|
||||
.put(Organization.TITLE, "Engineer")
|
||||
.put(Organization.TYPE, Organization.TYPE_WORK);
|
||||
|
||||
verifier.buildExpected(Organization.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Organization.CONTENT_ITEM_TYPE)
|
||||
.put(Organization.COMPANY, "Mystery")
|
||||
.put(Organization.TITLE, "Blogger")
|
||||
.put(Organization.TYPE, Organization.TYPE_WORK);
|
||||
|
||||
verifier.buildExpected(Organization.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Organization.CONTENT_ITEM_TYPE)
|
||||
.put(Organization.COMPANY, "Poetry")
|
||||
.put(Organization.TITLE, "Poet")
|
||||
.put(Organization.TYPE, Organization.TYPE_WORK);
|
||||
@@ -574,17 +571,12 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
* Tests all the properties in a complicated vCard are correctly parsed by the VCardParser.
|
||||
*/
|
||||
public void testV21ComplicatedCase_Parsing() throws IOException, VCardException {
|
||||
VCardParser_V21 parser = new VCardParser_V21();
|
||||
VNodeBuilder builder = new VNodeBuilder();
|
||||
InputStream is = getContext().getResources().openRawResource(R.raw.v21_complicated);
|
||||
assertEquals(true, parser.parse(is,"ISO-8859-1", builder));
|
||||
is.close();
|
||||
assertEquals(1, builder.vNodeList.size());
|
||||
ContentValues contentValuesForQP = new ContentValues();
|
||||
contentValuesForQP.put("ENCODING", "QUOTED-PRINTABLE");
|
||||
ContentValues contentValuesForPhoto = new ContentValues();
|
||||
contentValuesForPhoto.put("ENCODING", "BASE64");
|
||||
PropertyNodesVerifier verifier = new PropertyNodesVerifier(this)
|
||||
PropertyNodesVerifier verifier = new PropertyNodesVerifier(this);
|
||||
verifier.addPropertyNodesVerifierElem()
|
||||
.addNodeWithOrder("VERSION", "2.1")
|
||||
.addNodeWithOrder("N", "Gump;Forrest;Hoge;Pos;Tao",
|
||||
Arrays.asList("Gump", "Forrest", "Hoge", "Pos", "Tao"))
|
||||
@@ -631,7 +623,7 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
.addNodeWithOrder("GEO", "35.6563854,139.6994233")
|
||||
.addNodeWithOrder("URL", "http://www.example.com/")
|
||||
.addNodeWithOrder("REV", "20080424T195243Z");
|
||||
verifier.verify(builder.vNodeList.get(0));
|
||||
verifier.verify(R.raw.v21_complicated, V21);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -639,8 +631,9 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
* into ContentResolver.
|
||||
*/
|
||||
public void testV21ComplicatedCase() throws IOException, VCardException {
|
||||
ContentValuesVerifier verifier = new ContentValuesVerifier();
|
||||
verifier.buildExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
ImportVerifier verifier = new ImportVerifier();
|
||||
ImportVerifierElem elem = verifier.addImportVerifierElem();
|
||||
elem.addExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "Gump")
|
||||
.put(StructuredName.GIVEN_NAME, "Forrest")
|
||||
.put(StructuredName.MIDDLE_NAME, "Hoge")
|
||||
@@ -648,36 +641,36 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
.put(StructuredName.SUFFIX, "Tao")
|
||||
.put(StructuredName.DISPLAY_NAME, "Joe Due");
|
||||
|
||||
verifier.buildExpected(Organization.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Organization.CONTENT_ITEM_TYPE)
|
||||
.put(Organization.TYPE, Organization.TYPE_WORK)
|
||||
.put(Organization.COMPANY, "Gump Shrimp Co.")
|
||||
.put(Organization.DEPARTMENT, "Sales Dept.;Manager Fish keeper")
|
||||
.put(Organization.TITLE, "Shrimp Man");
|
||||
|
||||
verifier.buildExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.TYPE, Phone.TYPE_WORK)
|
||||
// Phone number is expected to be formated with NAMP format in default.
|
||||
.put(Phone.NUMBER, "111-555-1212");
|
||||
|
||||
verifier.buildExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.TYPE, Phone.TYPE_HOME)
|
||||
.put(Phone.NUMBER, "404-555-1212");
|
||||
|
||||
verifier.buildExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.TYPE, Phone.TYPE_MOBILE)
|
||||
.put(Phone.NUMBER, "031-111-1111");
|
||||
|
||||
verifier.buildExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.TYPE, Phone.TYPE_CUSTOM)
|
||||
.put(Phone.LABEL, "VIDEO")
|
||||
.put(Phone.NUMBER, "032-222-2222");
|
||||
|
||||
verifier.buildExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.TYPE, Phone.TYPE_CUSTOM)
|
||||
.put(Phone.LABEL, "VOICE")
|
||||
.put(Phone.NUMBER, "033-333-3333");
|
||||
|
||||
verifier.buildExpected(StructuredPostal.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(StructuredPostal.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK)
|
||||
.put(StructuredPostal.COUNTRY, "United States of America")
|
||||
.put(StructuredPostal.POSTCODE, "30314")
|
||||
@@ -687,7 +680,7 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
.put(StructuredPostal.FORMATTED_ADDRESS,
|
||||
"100 Waters Edge Baytown LA 30314 United States of America");
|
||||
|
||||
verifier.buildExpected(StructuredPostal.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(StructuredPostal.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredPostal.TYPE, StructuredPostal.TYPE_HOME)
|
||||
.put(StructuredPostal.COUNTRY, "United States of America")
|
||||
.put(StructuredPostal.POSTCODE, "30314")
|
||||
@@ -697,46 +690,41 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
.put(StructuredPostal.FORMATTED_ADDRESS,
|
||||
"42 Plantation St. Baytown LA 30314 United States of America");
|
||||
|
||||
verifier.buildExpected(Email.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Email.CONTENT_ITEM_TYPE)
|
||||
// "TYPE=INTERNET" -> TYPE_CUSTOM + the label "INTERNET"
|
||||
.put(Email.TYPE, Email.TYPE_CUSTOM)
|
||||
.put(Email.LABEL, "INTERNET")
|
||||
.put(Email.DATA, "forrestgump@walladalla.com")
|
||||
.put(Email.IS_PRIMARY, 1);
|
||||
|
||||
verifier.buildExpected(Email.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Email.CONTENT_ITEM_TYPE)
|
||||
.put(Email.TYPE, Email.TYPE_MOBILE)
|
||||
.put(Email.DATA, "cell@example.com");
|
||||
|
||||
verifier.buildExpected(Note.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Note.CONTENT_ITEM_TYPE)
|
||||
.put(Note.NOTE, "The following note is the example from RFC 2045.");
|
||||
|
||||
verifier.buildExpected(Note.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Note.CONTENT_ITEM_TYPE)
|
||||
.put(Note.NOTE,
|
||||
"Now's the time for all folk to come to the aid of their country.");
|
||||
|
||||
verifier.buildExpected(Photo.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Photo.CONTENT_ITEM_TYPE)
|
||||
// No information about its image format can be inserted.
|
||||
.put(Photo.PHOTO, sPhotoByteArrayForComplicatedCase);
|
||||
|
||||
verifier.buildExpected(Event.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Event.CONTENT_ITEM_TYPE)
|
||||
.put(Event.START_DATE, "19800101")
|
||||
.put(Event.TYPE, Event.TYPE_BIRTHDAY);
|
||||
|
||||
verifier.buildExpected(Website.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Website.CONTENT_ITEM_TYPE)
|
||||
.put(Website.URL, "http://www.example.com/")
|
||||
.put(Website.TYPE, Website.TYPE_HOMEPAGE);
|
||||
verifier.verify(R.raw.v21_complicated, VCardConfig.VCARD_TYPE_V21_GENERIC_UTF8);
|
||||
}
|
||||
|
||||
public void testV30Simple_Parsing() throws IOException, VCardException {
|
||||
VCardParser_V21 parser = new VCardParser_V30();
|
||||
VNodeBuilder builder = new VNodeBuilder();
|
||||
InputStream is = getContext().getResources().openRawResource(R.raw.v30_simple);
|
||||
assertEquals(true, parser.parse(is,"ISO-8859-1", builder));
|
||||
is.close();
|
||||
assertEquals(1, builder.vNodeList.size());
|
||||
PropertyNodesVerifier verifier = new PropertyNodesVerifier(this)
|
||||
PropertyNodesVerifier verifier = new PropertyNodesVerifier(this);
|
||||
verifier.addPropertyNodesVerifierElem()
|
||||
.addNodeWithOrder("VERSION", "3.0")
|
||||
.addNodeWithOrder("FN", "And Roid")
|
||||
.addNodeWithOrder("N", "And;Roid;;;", Arrays.asList("And", "Roid", "", "", ""))
|
||||
@@ -749,24 +737,22 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
.addNodeWithOrder("X-GN", "group0")
|
||||
.addNodeWithOrder("X-REDUCTION", "0")
|
||||
.addNodeWithOrder("REV", "20081031T065854Z");
|
||||
verifier.verify(builder.vNodeList.get(0));
|
||||
verifier.verify(R.raw.v30_simple, V30);
|
||||
}
|
||||
|
||||
public void testV30Simple() throws IOException, VCardException {
|
||||
ContentValuesVerifier verifier = new ContentValuesVerifier();
|
||||
|
||||
verifier.buildExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
ImportVerifier verifier = new ImportVerifier();
|
||||
ImportVerifierElem elem = verifier.addImportVerifierElem();
|
||||
elem.addExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "And")
|
||||
.put(StructuredName.GIVEN_NAME, "Roid")
|
||||
.put(StructuredName.DISPLAY_NAME, "And Roid")
|
||||
.put(StructuredName.PHONETIC_GIVEN_NAME, "android");
|
||||
|
||||
verifier.buildExpected(Organization.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Organization.CONTENT_ITEM_TYPE)
|
||||
.put(Organization.COMPANY, "Open")
|
||||
.put(Organization.DEPARTMENT, "Handset Alliance")
|
||||
.put(Organization.TYPE, Organization.TYPE_WORK);
|
||||
|
||||
verifier.buildExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.TYPE, Phone.TYPE_CUSTOM)
|
||||
.put(Phone.LABEL, "VOICE")
|
||||
.put(Phone.NUMBER, "030-000-0000")
|
||||
@@ -775,18 +761,13 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
}
|
||||
|
||||
public void testV21Japanese1_Parsing() throws IOException, VCardException {
|
||||
VCardParser_V21 parser = new VCardParser_V21();
|
||||
VNodeBuilder builder = new VNodeBuilder();
|
||||
InputStream is = getContext().getResources().openRawResource(R.raw.v21_japanese_1);
|
||||
assertEquals(true, parser.parse(is,"ISO-8859-1", builder));
|
||||
is.close();
|
||||
assertEquals(1, builder.vNodeList.size());
|
||||
ContentValues contentValuesForShiftJis = new ContentValues();
|
||||
contentValuesForShiftJis.put("CHARSET", "SHIFT_JIS");
|
||||
// Though Japanese careers append ";;;;" at the end of the value of "SOUND",
|
||||
// vCard 2.1/3.0 specification does not allow multiple values.
|
||||
// Do not need to handle it as multiple values.
|
||||
PropertyNodesVerifier verifier = new PropertyNodesVerifier(this)
|
||||
ContentValues contentValuesForShiftJis = new ContentValues();
|
||||
contentValuesForShiftJis.put("CHARSET", "SHIFT_JIS");
|
||||
PropertyNodesVerifier verifier = new PropertyNodesVerifier(this);
|
||||
verifier.addPropertyNodesVerifierElem()
|
||||
.addNodeWithOrder("VERSION", "2.1", null, null, null, null, null)
|
||||
.addNodeWithOrder("N", "\u5B89\u85E4\u30ED\u30A4\u30C9;;;;",
|
||||
Arrays.asList("\u5B89\u85E4\u30ED\u30A4\u30C9", "", "", "", ""),
|
||||
@@ -797,13 +778,14 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
new TypeSet("X-IRMC-N"), null)
|
||||
.addNodeWithOrder("TEL", "0300000000", null, null, null,
|
||||
new TypeSet("VOICE", "PREF"), null);
|
||||
verifier.verify(builder.vNodeList.get(0));
|
||||
verifier.verify(R.raw.v21_japanese_1, VCardConfig.VCARD_TYPE_V21_JAPANESE_SJIS);
|
||||
}
|
||||
|
||||
private void testV21Japanese1Common(int resId, int vcardType, boolean japanese)
|
||||
throws IOException, VCardException {
|
||||
ContentValuesVerifier verifier = new ContentValuesVerifier();
|
||||
verifier.buildExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
ImportVerifier verifier = new ImportVerifier();
|
||||
ImportVerifierElem elem = verifier.addImportVerifierElem();
|
||||
elem.addExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "\u5B89\u85E4\u30ED\u30A4\u30C9")
|
||||
.put(StructuredName.DISPLAY_NAME, "\u5B89\u85E4\u30ED\u30A4\u30C9")
|
||||
// While vCard parser does not split "SOUND" property values,
|
||||
@@ -811,7 +793,7 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
.put(StructuredName.PHONETIC_FAMILY_NAME,
|
||||
"\uFF71\uFF9D\uFF84\uFF9E\uFF73\uFF9B\uFF72\uFF84\uFF9E");
|
||||
|
||||
verifier.buildExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
// Phone number formatting is different.
|
||||
.put(Phone.NUMBER, (japanese ? "03-0000-0000" : "030-000-0000"))
|
||||
.put(Phone.TYPE, Phone.TYPE_CUSTOM)
|
||||
@@ -849,18 +831,13 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
}
|
||||
|
||||
public void testV21Japanese2_Parsing() throws IOException, VCardException {
|
||||
VCardParser_V21 parser = new VCardParser_V21();
|
||||
VNodeBuilder builder = new VNodeBuilder();
|
||||
InputStream is = getContext().getResources().openRawResource(R.raw.v21_japanese_2);
|
||||
assertEquals(true, parser.parse(is,"ISO-8859-1", builder));
|
||||
is.close();
|
||||
assertEquals(1, builder.vNodeList.size());
|
||||
ContentValues contentValuesForShiftJis = new ContentValues();
|
||||
contentValuesForShiftJis.put("CHARSET", "SHIFT_JIS");
|
||||
ContentValues contentValuesForQPAndSJ = new ContentValues();
|
||||
contentValuesForQPAndSJ.put("ENCODING", "QUOTED-PRINTABLE");
|
||||
contentValuesForQPAndSJ.put("CHARSET", "SHIFT_JIS");
|
||||
PropertyNodesVerifier verifier = new PropertyNodesVerifier(this)
|
||||
PropertyNodesVerifier verifier = new PropertyNodesVerifier(this);
|
||||
verifier.addPropertyNodesVerifierElem()
|
||||
.addNodeWithOrder("VERSION", "2.1")
|
||||
.addNodeWithOrder("N", "\u5B89\u85E4;\u30ED\u30A4\u30C9\u0031;;;",
|
||||
Arrays.asList("\u5B89\u85E4", "\u30ED\u30A4\u30C9\u0031",
|
||||
@@ -885,12 +862,12 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
null, contentValuesForQPAndSJ, new TypeSet("HOME"), null)
|
||||
.addNodeWithOrder("NOTE", "\u30E1\u30E2", null, null,
|
||||
contentValuesForQPAndSJ, null, null);
|
||||
verifier.verify(builder.vNodeList.get(0));
|
||||
verifier.verify(R.raw.v21_japanese_2, VCardConfig.VCARD_TYPE_V21_JAPANESE_SJIS);
|
||||
}
|
||||
|
||||
public void testV21Japanese2_Type_Generic_Utf8() throws IOException, VCardException {
|
||||
ContentValuesVerifier verifier = new ContentValuesVerifier();
|
||||
verifier.buildExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
ImportVerifierElem verifier = new ImportVerifierElem();
|
||||
verifier.addExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "\u5B89\u85E4")
|
||||
.put(StructuredName.GIVEN_NAME, "\u30ED\u30A4\u30C9\u0031")
|
||||
.put(StructuredName.DISPLAY_NAME,
|
||||
@@ -900,7 +877,7 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
.put(StructuredName.PHONETIC_FAMILY_NAME, "\uFF71\uFF9D\uFF84\uFF9E\uFF73")
|
||||
.put(StructuredName.PHONETIC_GIVEN_NAME, "\uFF9B\uFF72\uFF84\uFF9E\u0031");
|
||||
|
||||
verifier.buildExpected(StructuredPostal.CONTENT_ITEM_TYPE)
|
||||
verifier.addExpected(StructuredPostal.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredPostal.POSTCODE, "150-8512")
|
||||
.put(StructuredPostal.NEIGHBORHOOD,
|
||||
"\u6771\u4EAC\u90FD\u6E0B\u8C37\u533A\u685C" +
|
||||
@@ -913,21 +890,16 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
"\u30EB\u30EA\u30A2\u30F3\u30BF\u30EF\u30FC" +
|
||||
"\u0036\u968E 150-8512")
|
||||
.put(StructuredPostal.TYPE, StructuredPostal.TYPE_HOME);
|
||||
verifier.buildExpected(Note.CONTENT_ITEM_TYPE)
|
||||
verifier.addExpected(Note.CONTENT_ITEM_TYPE)
|
||||
.put(Note.NOTE, "\u30E1\u30E2");
|
||||
verifier.verify(R.raw.v21_japanese_2, VCardConfig.VCARD_TYPE_V21_GENERIC_UTF8);
|
||||
}
|
||||
|
||||
public void testV21MultipleEntryCase() throws IOException, VCardException {
|
||||
VCardParser_V21 parser = new VCardParser_V21();
|
||||
VNodeBuilder builder = new VNodeBuilder();
|
||||
InputStream is = getContext().getResources().openRawResource(R.raw.v21_multiple_entry);
|
||||
assertEquals(true, parser.parse(is,"ISO-8859-1", builder));
|
||||
is.close();
|
||||
assertEquals(3, builder.vNodeList.size());
|
||||
public void testV21MultipleEntryCase_Parse() throws IOException, VCardException {
|
||||
ContentValues contentValuesForShiftJis = new ContentValues();
|
||||
contentValuesForShiftJis.put("CHARSET", "SHIFT_JIS");
|
||||
PropertyNodesVerifier verifier = new PropertyNodesVerifier(this)
|
||||
PropertyNodesVerifier verifier = new PropertyNodesVerifier(this);
|
||||
verifier.addPropertyNodesVerifierElem()
|
||||
.addNodeWithOrder("VERSION", "2.1")
|
||||
.addNodeWithOrder("N", "\u5B89\u85E4\u30ED\u30A4\u30C9\u0033;;;;",
|
||||
Arrays.asList("\u5B89\u85E4\u30ED\u30A4\u30C9\u0033", "", "", "", ""),
|
||||
@@ -940,9 +912,8 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
.addNodeWithOrder("TEL", "10", new TypeSet("X-NEC-HOTEL"))
|
||||
.addNodeWithOrder("TEL", "11", new TypeSet("X-NEC-SCHOOL"))
|
||||
.addNodeWithOrder("TEL", "12", new TypeSet("FAX", "HOME"));
|
||||
verifier.verify(builder.vNodeList.get(0));
|
||||
|
||||
verifier = new PropertyNodesVerifier(this)
|
||||
|
||||
verifier.addPropertyNodesVerifierElem()
|
||||
.addNodeWithOrder("VERSION", "2.1")
|
||||
.addNodeWithOrder("N", "\u5B89\u85E4\u30ED\u30A4\u30C9\u0034;;;;",
|
||||
Arrays.asList("\u5B89\u85E4\u30ED\u30A4\u30C9\u0034", "", "", "", ""),
|
||||
@@ -955,8 +926,8 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
.addNodeWithOrder("TEL", "14", new TypeSet("PAGER"))
|
||||
.addNodeWithOrder("TEL", "15", new TypeSet("X-NEC-FAMILY"))
|
||||
.addNodeWithOrder("TEL", "16", new TypeSet("X-NEC-GIRL"));
|
||||
verifier.verify(builder.vNodeList.get(1));
|
||||
verifier = new PropertyNodesVerifier(this)
|
||||
|
||||
verifier.addPropertyNodesVerifierElem()
|
||||
.addNodeWithOrder("VERSION", "2.1")
|
||||
.addNodeWithOrder("N", "\u5B89\u85E4\u30ED\u30A4\u30C9\u0035;;;;",
|
||||
Arrays.asList("\u5B89\u85E4\u30ED\u30A4\u30C9\u0035", "", "", "", ""),
|
||||
@@ -969,6 +940,77 @@ public class VCardImporterTests extends VCardTestsBase {
|
||||
.addNodeWithOrder("TEL", "18", new TypeSet("X-NEC-FRIEND"))
|
||||
.addNodeWithOrder("TEL", "19", new TypeSet("X-NEC-PHS"))
|
||||
.addNodeWithOrder("TEL", "20", new TypeSet("X-NEC-RESTAURANT"));
|
||||
verifier.verify(builder.vNodeList.get(2));
|
||||
verifier.verify(R.raw.v21_multiple_entry, VCardConfig.VCARD_TYPE_V21_JAPANESE_SJIS);
|
||||
}
|
||||
|
||||
public void testV21MultipleEntryCase() throws IOException, VCardException {
|
||||
ImportVerifier verifier = new ImportVerifier();
|
||||
ImportVerifierElem elem = verifier.addImportVerifierElem();
|
||||
elem.addExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "\u5B89\u85E4\u30ED\u30A4\u30C9\u0033")
|
||||
.put(StructuredName.DISPLAY_NAME, "\u5B89\u85E4\u30ED\u30A4\u30C9\u0033")
|
||||
.put(StructuredName.PHONETIC_FAMILY_NAME,
|
||||
"\uFF71\uFF9D\uFF84\uFF9E\uFF73\uFF9B\uFF72\uFF84\uFF9E\u0033");
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.TYPE, Phone.TYPE_CUSTOM)
|
||||
.put(Phone.LABEL, "NEC-SECRET")
|
||||
.put(Phone.NUMBER, "9");
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.TYPE, Phone.TYPE_CUSTOM)
|
||||
.put(Phone.LABEL, "NEC-HOTEL")
|
||||
.put(Phone.NUMBER, "10");
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.TYPE, Phone.TYPE_CUSTOM)
|
||||
.put(Phone.LABEL, "NEC-SCHOOL")
|
||||
.put(Phone.NUMBER, "11");
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.TYPE, Phone.TYPE_FAX_HOME)
|
||||
.put(Phone.NUMBER, "12");
|
||||
|
||||
elem = verifier.addImportVerifierElem();
|
||||
elem.addExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "\u5B89\u85E4\u30ED\u30A4\u30C9\u0034")
|
||||
.put(StructuredName.DISPLAY_NAME, "\u5B89\u85E4\u30ED\u30A4\u30C9\u0034")
|
||||
.put(StructuredName.PHONETIC_FAMILY_NAME,
|
||||
"\uFF71\uFF9D\uFF84\uFF9E\uFF73\uFF9B\uFF72\uFF84\uFF9E\u0034");
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.TYPE, Phone.TYPE_CUSTOM)
|
||||
.put(Phone.LABEL, "MODEM")
|
||||
.put(Phone.NUMBER, "13");
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.TYPE, Phone.TYPE_PAGER)
|
||||
.put(Phone.NUMBER, "14");
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.TYPE, Phone.TYPE_CUSTOM)
|
||||
.put(Phone.LABEL, "NEC-FAMILY")
|
||||
.put(Phone.NUMBER, "15");
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.TYPE, Phone.TYPE_CUSTOM)
|
||||
.put(Phone.LABEL, "NEC-GIRL")
|
||||
.put(Phone.NUMBER, "16");
|
||||
|
||||
elem = verifier.addImportVerifierElem();
|
||||
elem.addExpected(StructuredName.CONTENT_ITEM_TYPE)
|
||||
.put(StructuredName.FAMILY_NAME, "\u5B89\u85E4\u30ED\u30A4\u30C9\u0035")
|
||||
.put(StructuredName.DISPLAY_NAME, "\u5B89\u85E4\u30ED\u30A4\u30C9\u0035")
|
||||
.put(StructuredName.PHONETIC_FAMILY_NAME,
|
||||
"\uFF71\uFF9D\uFF84\uFF9E\uFF73\uFF9B\uFF72\uFF84\uFF9E\u0035");
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.TYPE, Phone.TYPE_CUSTOM)
|
||||
.put(Phone.LABEL, "NEC-BOY")
|
||||
.put(Phone.NUMBER, "17");
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.TYPE, Phone.TYPE_CUSTOM)
|
||||
.put(Phone.LABEL, "NEC-FRIEND")
|
||||
.put(Phone.NUMBER, "18");
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.TYPE, Phone.TYPE_CUSTOM)
|
||||
.put(Phone.LABEL, "NEC-PHS")
|
||||
.put(Phone.NUMBER, "19");
|
||||
elem.addExpected(Phone.CONTENT_ITEM_TYPE)
|
||||
.put(Phone.TYPE, Phone.TYPE_CUSTOM)
|
||||
.put(Phone.LABEL, "NEC-RESTAURANT")
|
||||
.put(Phone.NUMBER, "20");
|
||||
verifier.verify(R.raw.v21_multiple_entry, VCardConfig.VCARD_TYPE_V21_JAPANESE_SJIS);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,11 @@ import android.net.Uri;
|
||||
import android.os.IBinder;
|
||||
import android.os.ParcelFileDescriptor;
|
||||
import android.os.RemoteException;
|
||||
import android.pim.vcard.ContactStruct;
|
||||
import android.pim.vcard.EntryCommitter;
|
||||
import android.pim.vcard.EntryHandler;
|
||||
import android.pim.vcard.VCardBuilder;
|
||||
import android.pim.vcard.VCardBuilderCollection;
|
||||
import android.pim.vcard.VCardComposer;
|
||||
import android.pim.vcard.VCardConfig;
|
||||
import android.pim.vcard.VCardDataBuilder;
|
||||
@@ -62,6 +66,7 @@ import android.test.mock.MockContentResolver;
|
||||
import android.test.mock.MockContext;
|
||||
import android.test.mock.MockCursor;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
@@ -177,24 +182,24 @@ class CustomMockContext extends MockContext {
|
||||
* Please do not add each unit test here.
|
||||
*/
|
||||
/* package */ class VCardTestsBase extends AndroidTestCase {
|
||||
public static final int V21 = 0;
|
||||
public static final int V30 = 1;
|
||||
public static final int V21 = VCardConfig.VCARD_TYPE_V21_GENERIC_UTF8;
|
||||
public static final int V30 = VCardConfig.VCARD_TYPE_V30_GENERIC_UTF8;
|
||||
|
||||
public class ImportVerificationResolver extends MockContentResolver {
|
||||
ImportVerificationProvider mVerificationProvider = new ImportVerificationProvider();
|
||||
public class ImportTestResolver extends MockContentResolver {
|
||||
ImportTestProvider mProvider = new ImportTestProvider();
|
||||
@Override
|
||||
public ContentProviderResult[] applyBatch(String authority,
|
||||
ArrayList<ContentProviderOperation> operations) {
|
||||
equalsString(authority, RawContacts.CONTENT_URI.toString());
|
||||
return mVerificationProvider.applyBatch(operations);
|
||||
return mProvider.applyBatch(operations);
|
||||
}
|
||||
|
||||
public void addExpectedContentValues(ContentValues expectedContentValues) {
|
||||
mVerificationProvider.addExpectedContentValues(expectedContentValues);
|
||||
mProvider.addExpectedContentValues(expectedContentValues);
|
||||
}
|
||||
|
||||
public void verify() {
|
||||
mVerificationProvider.verify();
|
||||
mProvider.verify();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -208,10 +213,10 @@ class CustomMockContext extends MockContext {
|
||||
Relation.CONTENT_ITEM_TYPE, Event.CONTENT_ITEM_TYPE,
|
||||
GroupMembership.CONTENT_ITEM_TYPE));
|
||||
|
||||
public class ImportVerificationProvider extends MockContentProvider {
|
||||
public class ImportTestProvider extends MockContentProvider {
|
||||
final Map<String, Collection<ContentValues>> mMimeTypeToExpectedContentValues;
|
||||
|
||||
public ImportVerificationProvider() {
|
||||
public ImportTestProvider() {
|
||||
mMimeTypeToExpectedContentValues =
|
||||
new HashMap<String, Collection<ContentValues>>();
|
||||
for (String acceptanbleMimeType : sKnownMimeTypeSet) {
|
||||
@@ -303,11 +308,11 @@ class CustomMockContext extends MockContext {
|
||||
}
|
||||
boolean checked = false;
|
||||
for (ContentValues expectedContentValues : contentValuesCollection) {
|
||||
/* for testing
|
||||
/*for testing
|
||||
Log.d("@@@", "expected: "
|
||||
+ convertToEasilyReadableString(expectedContentValues));
|
||||
Log.d("@@@", "actual : "
|
||||
+ convertToEasilyReadableString(actualContentValues)); */
|
||||
+ convertToEasilyReadableString(actualContentValues));*/
|
||||
if (equalsForContentValues(expectedContentValues,
|
||||
actualContentValues)) {
|
||||
assertTrue(contentValuesCollection.remove(expectedContentValues));
|
||||
@@ -346,15 +351,16 @@ class CustomMockContext extends MockContext {
|
||||
}
|
||||
}
|
||||
|
||||
public class ContentValuesVerifier {
|
||||
private final ImportVerificationResolver mResolver;
|
||||
// private final String mCharset;
|
||||
class ImportVerifierElem {
|
||||
private final ImportTestResolver mResolver;
|
||||
private final EntryHandler mHandler;
|
||||
|
||||
public ContentValuesVerifier() {
|
||||
mResolver = new ImportVerificationResolver();
|
||||
public ImportVerifierElem() {
|
||||
mResolver = new ImportTestResolver();
|
||||
mHandler = new EntryCommitter(mResolver);
|
||||
}
|
||||
|
||||
public ContentValuesBuilder buildExpected(String mimeType) {
|
||||
public ContentValuesBuilder addExpected(String mimeType) {
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(Data.MIMETYPE, mimeType);
|
||||
mResolver.addExpectedContentValues(contentValues);
|
||||
@@ -366,8 +372,7 @@ class CustomMockContext extends MockContext {
|
||||
verify(getContext().getResources().openRawResource(resId), vCardType);
|
||||
}
|
||||
|
||||
public void verify(InputStream is, int vCardType)
|
||||
throws IOException, VCardException {
|
||||
public void verify(InputStream is, int vCardType) throws IOException, VCardException {
|
||||
final VCardParser vCardParser;
|
||||
if (VCardConfig.isV30(vCardType)) {
|
||||
vCardParser = new VCardParser_V30(true); // use StrictParsing
|
||||
@@ -375,8 +380,8 @@ class CustomMockContext extends MockContext {
|
||||
vCardParser = new VCardParser_V21();
|
||||
}
|
||||
VCardDataBuilder builder =
|
||||
new VCardDataBuilder(null, null, false, vCardType, null);
|
||||
builder.addEntryHandler(new EntryCommitter(mResolver));
|
||||
new VCardDataBuilder(null, null, false, vCardType, null);
|
||||
builder.addEntryHandler(mHandler);
|
||||
try {
|
||||
vCardParser.parse(is, builder);
|
||||
} finally {
|
||||
@@ -387,8 +392,81 @@ class CustomMockContext extends MockContext {
|
||||
}
|
||||
}
|
||||
}
|
||||
verifyResolver();
|
||||
}
|
||||
|
||||
public void verifyResolver() {
|
||||
mResolver.verify();
|
||||
}
|
||||
|
||||
public void onParsingStart() {
|
||||
mHandler.onParsingStart();
|
||||
}
|
||||
|
||||
public void onEntryCreated(ContactStruct entry) {
|
||||
mHandler.onEntryCreated(entry);
|
||||
}
|
||||
|
||||
public void onParsingEnd() {
|
||||
mHandler.onParsingEnd();
|
||||
}
|
||||
}
|
||||
|
||||
class ImportVerifier implements EntryHandler {
|
||||
private List<ImportVerifierElem> mImportVerifierElemList =
|
||||
new ArrayList<ImportVerifierElem>();
|
||||
private int mIndex;
|
||||
|
||||
public ImportVerifierElem addImportVerifierElem() {
|
||||
ImportVerifierElem importVerifier = new ImportVerifierElem();
|
||||
mImportVerifierElemList.add(importVerifier);
|
||||
return importVerifier;
|
||||
}
|
||||
|
||||
public void verify(int resId, int vCardType) throws IOException, VCardException {
|
||||
verify(getContext().getResources().openRawResource(resId), vCardType);
|
||||
}
|
||||
|
||||
public void verify(InputStream is, int vCardType) throws IOException, VCardException {
|
||||
final VCardParser vCardParser;
|
||||
if (VCardConfig.isV30(vCardType)) {
|
||||
vCardParser = new VCardParser_V30(true); // use StrictParsing
|
||||
} else {
|
||||
vCardParser = new VCardParser_V21();
|
||||
}
|
||||
VCardDataBuilder builder =
|
||||
new VCardDataBuilder(null, null, false, vCardType, null);
|
||||
builder.addEntryHandler(this);
|
||||
try {
|
||||
vCardParser.parse(is, builder);
|
||||
} finally {
|
||||
if (is != null) {
|
||||
try {
|
||||
is.close();
|
||||
} catch (IOException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void onParsingStart() {
|
||||
for (ImportVerifierElem elem : mImportVerifierElemList) {
|
||||
elem.onParsingStart();
|
||||
}
|
||||
}
|
||||
|
||||
public void onEntryCreated(ContactStruct entry) {
|
||||
assertTrue(mIndex < mImportVerifierElemList.size());
|
||||
mImportVerifierElemList.get(mIndex).onEntryCreated(entry);
|
||||
mIndex++;
|
||||
}
|
||||
|
||||
public void onParsingEnd() {
|
||||
for (ImportVerifierElem elem : mImportVerifierElemList) {
|
||||
elem.onParsingEnd();
|
||||
elem.verifyResolver();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class ExportTestResolver extends MockContentResolver {
|
||||
@@ -398,24 +476,23 @@ class CustomMockContext extends MockContext {
|
||||
addProvider(RawContacts.CONTENT_URI.getAuthority(), mProvider);
|
||||
}
|
||||
|
||||
public ContentValuesBuilder buildInput(String mimeType) {
|
||||
return mProvider.buildData(mimeType);
|
||||
public ContactEntry buildContactEntry() {
|
||||
return mProvider.buildInputEntry();
|
||||
}
|
||||
}
|
||||
|
||||
public static class MockEntityIterator implements EntityIterator {
|
||||
Collection<Entity> mEntityCollection;
|
||||
List<Entity> mEntityList;
|
||||
Iterator<Entity> mIterator;
|
||||
|
||||
// TODO: Support multiple vCard entries.
|
||||
public MockEntityIterator(Collection<ContentValues> contentValuesCollection) {
|
||||
mEntityCollection = new ArrayList<Entity>();
|
||||
public MockEntityIterator(List<ContentValues> contentValuesList) {
|
||||
mEntityList = new ArrayList<Entity>();
|
||||
Entity entity = new Entity(new ContentValues());
|
||||
for (ContentValues contentValues : contentValuesCollection) {
|
||||
entity.addSubValue(Data.CONTENT_URI, contentValues);
|
||||
for (ContentValues contentValues : contentValuesList) {
|
||||
entity.addSubValue(Data.CONTENT_URI, contentValues);
|
||||
}
|
||||
mEntityCollection.add(entity);
|
||||
mIterator = mEntityCollection.iterator();
|
||||
mEntityList.add(entity);
|
||||
mIterator = mEntityList.iterator();
|
||||
}
|
||||
|
||||
public boolean hasNext() {
|
||||
@@ -427,15 +504,20 @@ class CustomMockContext extends MockContext {
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
mIterator = mEntityCollection.iterator();
|
||||
mIterator = mEntityList.iterator();
|
||||
}
|
||||
|
||||
public void close() {
|
||||
}
|
||||
}
|
||||
|
||||
public class ExportTestProvider extends MockContentProvider {
|
||||
List<ContentValues> mContentValuesList = new ArrayList<ContentValues>();
|
||||
/**
|
||||
* Represents one contact, which should contain multiple ContentValues like
|
||||
* StructuredName, Email, etc.
|
||||
*/
|
||||
static class ContactEntry {
|
||||
private final List<ContentValues> mContentValuesList = new ArrayList<ContentValues>();
|
||||
|
||||
public ContentValuesBuilder buildData(String mimeType) {
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(Data.MIMETYPE, mimeType);
|
||||
@@ -443,28 +525,50 @@ class CustomMockContext extends MockContext {
|
||||
return new ContentValuesBuilder(contentValues);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityIterator queryEntities(Uri uri, String selection, String[] selectionArgs,
|
||||
String sortOrder) {
|
||||
assert(uri != null);
|
||||
assert(ContentResolver.SCHEME_CONTENT.equals(uri.getScheme()));
|
||||
final String authority = uri.getAuthority();
|
||||
assert(RawContacts.CONTENT_URI.getAuthority().equals(authority));
|
||||
public List<ContentValues> getList() {
|
||||
return mContentValuesList;
|
||||
}
|
||||
}
|
||||
|
||||
return new MockEntityIterator(mContentValuesList);
|
||||
class ExportTestProvider extends MockContentProvider {
|
||||
ArrayList<ContactEntry> mContactEntryList = new ArrayList<ContactEntry>();
|
||||
|
||||
public ContactEntry buildInputEntry() {
|
||||
ContactEntry contactEntry = new ContactEntry();
|
||||
mContactEntryList.add(contactEntry);
|
||||
return contactEntry;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
|
||||
public EntityIterator queryEntities(Uri uri, String selection, String[] selectionArgs,
|
||||
String sortOrder) {
|
||||
assert(VCardComposer.CONTACTS_TEST_CONTENT_URI.equals(uri));
|
||||
// Support multiple rows.
|
||||
assertTrue(uri != null);
|
||||
assertTrue(ContentResolver.SCHEME_CONTENT.equals(uri.getScheme()));
|
||||
final String authority = uri.getAuthority();
|
||||
assertTrue(RawContacts.CONTENT_URI.getAuthority().equals(authority));
|
||||
assertTrue((Data.CONTACT_ID + "=?").equals(selection));
|
||||
assertEquals(1, selectionArgs.length);
|
||||
int id = Integer.parseInt(selectionArgs[0]);
|
||||
assertTrue(id >= 0 && id < mContactEntryList.size());
|
||||
|
||||
return new MockEntityIterator(mContactEntryList.get(id).getList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Cursor query(Uri uri, String[] projection,
|
||||
String selection, String[] selectionArgs, String sortOrder) {
|
||||
assertTrue(VCardComposer.CONTACTS_TEST_CONTENT_URI.equals(uri));
|
||||
// In this test, following arguments are not supported.
|
||||
assertNull(selection);
|
||||
assertNull(selectionArgs);
|
||||
assertNull(sortOrder);
|
||||
|
||||
return new MockCursor() {
|
||||
int mCurrentPosition = -1;
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return 1;
|
||||
return mContactEntryList.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -475,7 +579,7 @@ class CustomMockContext extends MockContext {
|
||||
|
||||
@Override
|
||||
public boolean moveToNext() {
|
||||
if (mCurrentPosition == 0 || mCurrentPosition == -1) {
|
||||
if (mCurrentPosition < mContactEntryList.size()) {
|
||||
mCurrentPosition++;
|
||||
return true;
|
||||
} else {
|
||||
@@ -490,7 +594,7 @@ class CustomMockContext extends MockContext {
|
||||
|
||||
@Override
|
||||
public boolean isAfterLast() {
|
||||
return mCurrentPosition > 0;
|
||||
return mCurrentPosition >= mContactEntryList.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -502,7 +606,9 @@ class CustomMockContext extends MockContext {
|
||||
@Override
|
||||
public int getInt(int columnIndex) {
|
||||
assertEquals(0, columnIndex);
|
||||
return 0;
|
||||
assertTrue(mCurrentPosition >= 0
|
||||
&& mCurrentPosition < mContactEntryList.size());
|
||||
return mCurrentPosition;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -517,130 +623,252 @@ class CustomMockContext extends MockContext {
|
||||
}
|
||||
}
|
||||
|
||||
public class VCardVerificationHandler implements VCardComposer.OneEntryHandler {
|
||||
final private TestCase mTestCase;
|
||||
final private List<PropertyNodesVerifier> mPropertyNodesVerifierList;
|
||||
final private boolean mIsV30;
|
||||
// To allow duplication, use list instead of set.
|
||||
// TODO: support multiple vCard entries.
|
||||
final private List<String> mExpectedLineList;
|
||||
final private List<ContentValuesVerifier> mContentValuesVerifierList;
|
||||
final private int mVCardType;
|
||||
int mCount;
|
||||
class LineVerifierElem {
|
||||
private final List<String> mExpectedLineList = new ArrayList<String>();
|
||||
private final boolean mIsV30;
|
||||
|
||||
public VCardVerificationHandler(final TestCase testCase, final int version) {
|
||||
mTestCase = testCase;
|
||||
mPropertyNodesVerifierList = new ArrayList<PropertyNodesVerifier>();
|
||||
mIsV30 = (version == V30);
|
||||
mExpectedLineList = new ArrayList<String>();
|
||||
mContentValuesVerifierList = new ArrayList<ContentValuesVerifier>();
|
||||
mVCardType = (version == V30 ? VCardConfig.VCARD_TYPE_V30_GENERIC_UTF8
|
||||
: VCardConfig.VCARD_TYPE_V21_GENERIC_UTF8);
|
||||
mCount = 1;
|
||||
public LineVerifierElem(boolean isV30) {
|
||||
mIsV30 = isV30;
|
||||
}
|
||||
|
||||
public PropertyNodesVerifier addPropertyNodesVerifier() {
|
||||
PropertyNodesVerifier verifier = new PropertyNodesVerifier(mTestCase);
|
||||
mPropertyNodesVerifierList.add(verifier);
|
||||
verifier.addNodeWithOrder("VERSION", mIsV30 ? "3.0" : "2.1");
|
||||
return verifier;
|
||||
}
|
||||
|
||||
public PropertyNodesVerifier addPropertyVerifierWithEmptyName() {
|
||||
PropertyNodesVerifier verifier = addPropertyNodesVerifier();
|
||||
if (mIsV30) {
|
||||
verifier.addNodeWithOrder("N", "").addNodeWithOrder("FN", "");
|
||||
public LineVerifierElem addExpected(final String line) {
|
||||
if (!TextUtils.isEmpty(line)) {
|
||||
mExpectedLineList.add(line);
|
||||
}
|
||||
return verifier;
|
||||
}
|
||||
|
||||
public ContentValuesVerifier addContentValuesVerifier() {
|
||||
ContentValuesVerifier verifier = new ContentValuesVerifier();
|
||||
mContentValuesVerifierList.add(verifier);
|
||||
return verifier;
|
||||
}
|
||||
|
||||
public VCardVerificationHandler addExpectedLine(String line) {
|
||||
mExpectedLineList.add(line);
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean onInit(final Context context) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean onEntryCreated(final String vcard) {
|
||||
if (!mExpectedLineList.isEmpty()) {
|
||||
verifyLines(vcard);
|
||||
}
|
||||
verifyNodes(vcard);
|
||||
return true;
|
||||
}
|
||||
|
||||
private void verifyLines(final String vcard) {
|
||||
public void verify(final String vcard) {
|
||||
final String[] lineArray = vcard.split("\\r?\\n");
|
||||
final int length = lineArray.length;
|
||||
final TestCase testCase = VCardTestsBase.this;
|
||||
boolean beginExists = false;
|
||||
boolean endExists = false;
|
||||
boolean versionExists = false;
|
||||
|
||||
for (int i = 0; i < length; i++) {
|
||||
final String line = lineArray[i];
|
||||
// TODO: support multiple vcard entries.
|
||||
if ("BEGIN:VCARD".equals(line) || "END:VCARD".equals(line) ||
|
||||
(mIsV30 ? "VERSION:3.0" : "VERSION:2.1").equals(line)) {
|
||||
if (TextUtils.isEmpty(line)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ("BEGIN:VCARD".equalsIgnoreCase(line)) {
|
||||
if (beginExists) {
|
||||
testCase.fail("Multiple \"BEGIN:VCARD\" line found");
|
||||
} else {
|
||||
beginExists = true;
|
||||
continue;
|
||||
}
|
||||
} else if ("END:VCARD".equalsIgnoreCase(line)) {
|
||||
if (endExists) {
|
||||
testCase.fail("Multiple \"END:VCARD\" line found");
|
||||
} else {
|
||||
endExists = true;
|
||||
continue;
|
||||
}
|
||||
} else if (
|
||||
(mIsV30 ? "VERSION:3.0" : "VERSION:2.1").equalsIgnoreCase(line)) {
|
||||
if (versionExists) {
|
||||
testCase.fail("Multiple VERSION line + found");
|
||||
} else {
|
||||
versionExists = true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (!beginExists) {
|
||||
testCase.fail(
|
||||
"Property other than BEGIN came before BEGIN property: " + line);
|
||||
} else if (endExists) {
|
||||
testCase.fail("Property other than END came after END property: " + line);
|
||||
}
|
||||
|
||||
final int index = mExpectedLineList.indexOf(line);
|
||||
if (index >= 0) {
|
||||
mExpectedLineList.remove(index);
|
||||
} else {
|
||||
mTestCase.fail("Unexpected line: " + line);
|
||||
testCase.fail("Unexpected line: " + line);
|
||||
}
|
||||
}
|
||||
|
||||
if (!mExpectedLineList.isEmpty()) {
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
for (String expectedLine : mExpectedLineList) {
|
||||
buffer.append(expectedLine);
|
||||
buffer.append("\n");
|
||||
}
|
||||
mTestCase.fail("Expected line(s) not found:" + buffer.toString());
|
||||
|
||||
testCase.fail("Expected line(s) not found:" + buffer.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void verifyNodes(final String vcard) {
|
||||
if (mPropertyNodesVerifierList.size() == 0) {
|
||||
mTestCase.fail("Too many vCard entries seems to be inserted(No."
|
||||
+ mCount + " of the entries (No.1 is the first entry))");
|
||||
}
|
||||
PropertyNodesVerifier propertyNodesVerifier =
|
||||
mPropertyNodesVerifierList.get(0);
|
||||
mPropertyNodesVerifierList.remove(0);
|
||||
VCardParser parser = (mIsV30 ? new VCardParser_V30(true) : new VCardParser_V21());
|
||||
VNodeBuilder builder = new VNodeBuilder();
|
||||
InputStream is;
|
||||
try {
|
||||
is = new ByteArrayInputStream(vcard.getBytes("UTF-8"));
|
||||
mTestCase.assertEquals(true, parser.parse(is, null, builder));
|
||||
is.close();
|
||||
mTestCase.assertEquals(1, builder.vNodeList.size());
|
||||
propertyNodesVerifier.verify(builder.vNodeList.get(0));
|
||||
if (!mContentValuesVerifierList.isEmpty()) {
|
||||
ContentValuesVerifier contentValuesVerifier =
|
||||
mContentValuesVerifierList.get(0);
|
||||
is = new ByteArrayInputStream(vcard.getBytes("UTF-8"));
|
||||
contentValuesVerifier.verify(is, mVCardType);
|
||||
is.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
mTestCase.fail("Unexpected IOException: " + e.getMessage());
|
||||
} catch (VCardException e) {
|
||||
mTestCase.fail("Unexpected VCardException: " + e.getMessage());
|
||||
} finally {
|
||||
mCount++;
|
||||
class LineVerifier implements VCardComposer.OneEntryHandler {
|
||||
private final ArrayList<LineVerifierElem> mLineVerifierElemList;
|
||||
private final boolean mIsV30;
|
||||
private int index;
|
||||
|
||||
public LineVerifier(final boolean isV30) {
|
||||
mLineVerifierElemList = new ArrayList<LineVerifierElem>();
|
||||
mIsV30 = isV30;
|
||||
}
|
||||
|
||||
public LineVerifierElem addLineVerifierElem() {
|
||||
LineVerifierElem lineVerifier = new LineVerifierElem(mIsV30);
|
||||
mLineVerifierElemList.add(lineVerifier);
|
||||
return lineVerifier;
|
||||
}
|
||||
|
||||
public void verify(String vcard) {
|
||||
if (index >= mLineVerifierElemList.size()) {
|
||||
VCardTestsBase.this.fail("Insufficient number of LineVerifier (" + index + ")");
|
||||
}
|
||||
|
||||
LineVerifierElem lineVerifier = mLineVerifierElemList.get(index);
|
||||
lineVerifier.verify(vcard);
|
||||
|
||||
index++;
|
||||
}
|
||||
|
||||
public boolean onEntryCreated(String vcard) {
|
||||
verify(vcard);
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean onInit(Context context) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public void onTerminate() {
|
||||
}
|
||||
}
|
||||
|
||||
class VCardVerifier {
|
||||
private class VCardVerifierInternal implements VCardComposer.OneEntryHandler {
|
||||
public boolean onInit(Context context) {
|
||||
return true;
|
||||
}
|
||||
public boolean onEntryCreated(String vcard) {
|
||||
verifyOneVCard(vcard);
|
||||
return true;
|
||||
}
|
||||
public void onTerminate() {
|
||||
}
|
||||
}
|
||||
|
||||
private final VCardVerifierInternal mVCardVerifierInternal;
|
||||
private final ExportTestResolver mResolver;
|
||||
private final int mVCardType;
|
||||
private final boolean mIsV30;
|
||||
|
||||
// To allow duplication, use list instead of set.
|
||||
// When null, we don't need to do the verification.
|
||||
private PropertyNodesVerifier mPropertyNodesVerifier;
|
||||
private LineVerifier mLineVerificationHandler;
|
||||
private ImportVerifier mImportVerifier;
|
||||
|
||||
public VCardVerifier(ExportTestResolver resolver, int vcardType) {
|
||||
mVCardVerifierInternal = new VCardVerifierInternal();
|
||||
mResolver = resolver;
|
||||
mIsV30 = VCardConfig.isV30(vcardType);
|
||||
mVCardType = vcardType;
|
||||
}
|
||||
|
||||
public PropertyNodesVerifierElem addPropertyNodesVerifierElem() {
|
||||
if (mPropertyNodesVerifier == null) {
|
||||
mPropertyNodesVerifier = new PropertyNodesVerifier(VCardTestsBase.this);
|
||||
}
|
||||
PropertyNodesVerifierElem elem =
|
||||
mPropertyNodesVerifier.addPropertyNodesVerifierElem();
|
||||
elem.addNodeWithOrder("VERSION", (mIsV30 ? "3.0" : "2.1"));
|
||||
|
||||
return elem;
|
||||
}
|
||||
|
||||
public PropertyNodesVerifierElem addPropertyNodesVerifierWithEmptyName() {
|
||||
PropertyNodesVerifierElem elem = addPropertyNodesVerifierElem();
|
||||
if (mIsV30) {
|
||||
elem.addNodeWithOrder("N", "").addNodeWithOrder("FN", "");
|
||||
}
|
||||
return elem;
|
||||
}
|
||||
|
||||
public LineVerifierElem addLineVerifier() {
|
||||
if (mLineVerificationHandler == null) {
|
||||
mLineVerificationHandler = new LineVerifier(mIsV30);
|
||||
}
|
||||
return mLineVerificationHandler.addLineVerifierElem();
|
||||
}
|
||||
|
||||
public ImportVerifierElem addImportVerifier() {
|
||||
if (mImportVerifier == null) {
|
||||
mImportVerifier = new ImportVerifier();
|
||||
}
|
||||
|
||||
return mImportVerifier.addImportVerifierElem();
|
||||
}
|
||||
|
||||
private void verifyOneVCard(final String vcard) {
|
||||
final VCardBuilder builder;
|
||||
if (mImportVerifier != null) {
|
||||
final VNodeBuilder vnodeBuilder = mPropertyNodesVerifier;
|
||||
final VCardDataBuilder vcardDataBuilder = new VCardDataBuilder();
|
||||
vcardDataBuilder.addEntryHandler(mImportVerifier);
|
||||
if (mPropertyNodesVerifier != null) {
|
||||
builder = new VCardBuilderCollection(Arrays.asList(
|
||||
vcardDataBuilder, mPropertyNodesVerifier));
|
||||
} else {
|
||||
builder = vnodeBuilder;
|
||||
}
|
||||
} else {
|
||||
if (mPropertyNodesVerifier != null) {
|
||||
builder = mPropertyNodesVerifier;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
final VCardParser parser =
|
||||
(mIsV30 ? new VCardParser_V30(true) : new VCardParser_V21());
|
||||
final TestCase testCase = VCardTestsBase.this;
|
||||
|
||||
InputStream is = null;
|
||||
try {
|
||||
is = new ByteArrayInputStream(vcard.getBytes("UTF-8"));
|
||||
testCase.assertEquals(true, parser.parse(is, null, builder));
|
||||
} catch (IOException e) {
|
||||
testCase.fail("Unexpected IOException: " + e.getMessage());
|
||||
} catch (VCardException e) {
|
||||
testCase.fail("Unexpected VCardException: " + e.getMessage());
|
||||
} finally {
|
||||
if (is != null) {
|
||||
try {
|
||||
is.close();
|
||||
} catch (IOException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void verify() {
|
||||
VCardComposer composer =
|
||||
new VCardComposer(new CustomMockContext(mResolver), mVCardType);
|
||||
composer.addHandler(mLineVerificationHandler);
|
||||
composer.addHandler(mVCardVerifierInternal);
|
||||
if (!composer.init(VCardComposer.CONTACTS_TEST_CONTENT_URI, null, null, null)) {
|
||||
fail("init() failed. Reason: " + composer.getErrorReason());
|
||||
}
|
||||
assertFalse(composer.isAfterLast());
|
||||
try {
|
||||
while (!composer.isAfterLast()) {
|
||||
assertTrue(composer.createOneEntry());
|
||||
}
|
||||
} finally {
|
||||
composer.terminate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility method to print ContentValues whose content is printed with sorted keys.
|
||||
*/
|
||||
@@ -683,6 +911,7 @@ class CustomMockContext extends MockContext {
|
||||
} else if (expected == null || actual == null || expected.size() != actual.size()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (Entry<String, Object> entry : expected.valueSet()) {
|
||||
final String key = entry.getKey();
|
||||
final Object value = entry.getValue();
|
||||
|
||||
Reference in New Issue
Block a user