156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa/* 256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * Copyright (C) 2011 The Android Open Source Project 356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * 456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * Licensed under the Apache License, Version 2.0 (the "License"); 556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * you may not use this file except in compliance with the License. 656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * You may obtain a copy of the License at 756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * 856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * http://www.apache.org/licenses/LICENSE-2.0 956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * 1056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * Unless required by applicable law or agreed to in writing, software 1156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * distributed under the License is distributed on an "AS IS" BASIS, 1256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * See the License for the specific language governing permissions and 1456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * limitations under the License. 1556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa */ 1656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawapackage com.android.vcard.tests; 1756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa 1856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport com.android.vcard.VCardInterpreter; 1956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport com.android.vcard.VCardParser; 2056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport com.android.vcard.VCardParser_V21; 21210ebaab315e389ffc66278e28ecd6230e412b5fJay Shraunerimport com.android.vcard.VCardParser_V30; 2256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport com.android.vcard.VCardProperty; 2356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport com.android.vcard.exception.VCardException; 2456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa 2556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport android.test.AndroidTestCase; 2656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa 2756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport java.io.IOException; 2856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport java.io.InputStream; 2956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport java.util.ArrayList; 3056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport java.util.Arrays; 3156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport java.util.List; 3256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa 3356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa/** 3456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * Tests for basic {@link VCardParser} capability (e.g. if it calls callbacks 3556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * in {@link VCardInterpreter}}. 3656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa */ 3756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawapublic class VCardParserTests extends AndroidTestCase { 3856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa private enum Order { 3956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa START, 4056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa END, 4156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa START_ENTRY, 4256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa END_ENTRY, 4356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa PROPERTY_CREATED, 4456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } 4556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa 4656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa private class MockVCardInterpreter implements VCardInterpreter { 4756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa private final List<Order> mHistory = new ArrayList<Order>(); 4856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa private final List<Order> mExpectedOrder = new ArrayList<Order>(); 4956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa 5056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa public MockVCardInterpreter addExpectedOrder(Order order) { 5156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa mExpectedOrder.add(order); 5256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa return this; 5356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } 5456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa 5556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa private void inspectOrder(Order order) { 5656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa mHistory.add(order); 5756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa final Order top = mExpectedOrder.get(0); 5856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa assertEquals(top, order); 5956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa mExpectedOrder.remove(0); 6056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } 6156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa 6256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa public void verify() { 6356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa assertTrue(String.format("Remaining: " + Arrays.toString(mExpectedOrder.toArray())), 6456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa mExpectedOrder.isEmpty()); 6556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } 6656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa 6756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa @Override 6856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa public void onVCardStarted() { 6956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa inspectOrder(Order.START); 7056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } 7156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa 7256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa @Override 7356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa public void onVCardEnded() { 7456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa inspectOrder(Order.END); 7556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } 7656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa 7756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa @Override 7856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa public void onEntryStarted() { 7956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa inspectOrder(Order.START_ENTRY); 8056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } 8156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa 8256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa @Override 8356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa public void onEntryEnded() { 8456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa inspectOrder(Order.END_ENTRY); 8556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } 8656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa 8756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa @Override 8856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa public void onPropertyCreated(VCardProperty property) { 8956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa inspectOrder(Order.PROPERTY_CREATED); 9056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } 9156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } 9256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa 9356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa public void testSimple() throws IOException, VCardException { 9456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa InputStream inputStream = getContext().getResources().openRawResource(R.raw.v21_simple_1); 9556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa try { 9656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa VCardParser parser = new VCardParser_V21(); 9756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa MockVCardInterpreter interpreter = new MockVCardInterpreter(); 9856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa interpreter.addExpectedOrder(Order.START) 9956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.START_ENTRY) 10056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) 10156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.END_ENTRY) 10256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.END); 10356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa parser.addInterpreter(interpreter); 10456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa parser.parse(inputStream); 10556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa interpreter.verify(); 10656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } finally { 10756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa inputStream.close(); 10856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } 10956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } 11056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa 11156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa public void testNest() throws IOException, VCardException { 11256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa InputStream inputStream = getContext().getResources().openRawResource(R.raw.v21_nest); 11356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa try { 11456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa VCardParser parser = new VCardParser_V21(); 11556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa MockVCardInterpreter interpreter = new MockVCardInterpreter(); 11656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa interpreter.addExpectedOrder(Order.START) 11756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.START_ENTRY) 11856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For VERSION 11956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For N 12056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.START_ENTRY) // First nested vCard begins 12156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For VERSION 12256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For N 12356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.END_ENTRY) // First nested vCard ends 12456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.START_ENTRY) // Second nested vCard begins 12556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For VERSION 12656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For N 12756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.END_ENTRY) // Second nested vCard ends 12856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 12956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.END_ENTRY) 13056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.END); 13156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa parser.addInterpreter(interpreter); 13256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa parser.parse(inputStream); 13356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa interpreter.verify(); 13456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } finally { 13556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa inputStream.close(); 13656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } 13756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } 13856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa 13956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa /** 140210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner * Test vCard containing v3.0 line continuations and with non-standard 141210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner * line terminators \r\r\n coming from iOS 6.1.3. Tests to make sure the 142210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner * parser correctly skips the extra line terminators and still 143210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner * successfully concatenates the multi-line block. 144210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner */ 145210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner public void testIosMultiline() throws IOException, VCardException { 146210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner InputStream inputStream = getContext().getResources().openRawResource(R.raw.v30_ios_613_multiline); 147210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner try { 148210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner VCardParser parser = new VCardParser_V30(); 149210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner MockVCardInterpreter interpreter = new MockVCardInterpreter(); 150210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner interpreter.addExpectedOrder(Order.START) 151210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner .addExpectedOrder(Order.START_ENTRY) 152210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner .addExpectedOrder(Order.PROPERTY_CREATED) // For VERSION 153210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner .addExpectedOrder(Order.PROPERTY_CREATED) // For N 154210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner .addExpectedOrder(Order.PROPERTY_CREATED) // For FN 155210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner .addExpectedOrder(Order.PROPERTY_CREATED) // For ORG 156210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner .addExpectedOrder(Order.PROPERTY_CREATED) // For item1 157210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 158210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner .addExpectedOrder(Order.PROPERTY_CREATED) // For item2 159210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner .addExpectedOrder(Order.PROPERTY_CREATED) // For item3 160210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner .addExpectedOrder(Order.PROPERTY_CREATED) // For PHOTO 161210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner .addExpectedOrder(Order.END_ENTRY) 162210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner .addExpectedOrder(Order.END); 163210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner parser.addInterpreter(interpreter); 164210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner parser.parse(inputStream); 165210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner interpreter.verify(); 166210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner } finally { 167210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner inputStream.close(); 168210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner } 169210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner } 170210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner 171210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner /** 17256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * Tests if {@link VCardParser#parse(InputStream)} parses the whole vCard file and 17356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * {@link VCardParser#parseOne(InputStream)} parses just first entry of a vCard file 17456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * with multiple vCard entries. 17556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa */ 17656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa public void testParseOne() throws IOException, VCardException { 17756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa InputStream inputStream = 17856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa getContext().getResources().openRawResource(R.raw.v21_multiple_entry); 17956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa try { 18056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa VCardParser parser = new VCardParser_V21(); 18156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa MockVCardInterpreter interpreter = new MockVCardInterpreter(); 18256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa interpreter.addExpectedOrder(Order.START) 18356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.START_ENTRY) 18456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For VERSION 18556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For N 18656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For SOUND 18756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 18856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 18956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 19056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 19156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.END_ENTRY) 19256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.START_ENTRY) 19356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For VERSION 19456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For N 19556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For SOUND 19656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 19756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 19856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 19956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 20056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.END_ENTRY) 20156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.START_ENTRY) 20256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For VERSION 20356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For N 20456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For SOUND 20556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 20656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 20756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 20856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 20956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.END_ENTRY) 21056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.END); 21156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa parser.addInterpreter(interpreter); 21256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa // Use parse() to check we 21356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa parser.parse(inputStream); 21456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa interpreter.verify(); 21556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } finally { 21656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa inputStream.close(); 21756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } 21856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa 21956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa inputStream = getContext().getResources().openRawResource(R.raw.v21_multiple_entry); 22056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa try { 22156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa VCardParser parser = new VCardParser_V21(); 22256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa MockVCardInterpreter interpreter = new MockVCardInterpreter(); 22356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa interpreter.addExpectedOrder(Order.START) 22456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.START_ENTRY) 22556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For VERSION 22656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For N 22756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For SOUND 22856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 22956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 23056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 23156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 23256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.END_ENTRY) 23356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa .addExpectedOrder(Order.END); 23456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa parser.addInterpreter(interpreter); 23556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa parser.parseOne(inputStream); 23656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa interpreter.verify(); 23756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } finally { 23856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa inputStream.close(); 23956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } 24056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa 24156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa } 242210ebaab315e389ffc66278e28ecd6230e412b5fJay Shrauner} 243