1/* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16package com.android.vcard.tests; 17 18import com.android.vcard.VCardInterpreter; 19import com.android.vcard.VCardParser; 20import com.android.vcard.VCardParser_V21; 21import com.android.vcard.VCardProperty; 22import com.android.vcard.exception.VCardException; 23 24import android.test.AndroidTestCase; 25 26import java.io.IOException; 27import java.io.InputStream; 28import java.util.ArrayList; 29import java.util.Arrays; 30import java.util.List; 31 32/** 33 * Tests for basic {@link VCardParser} capability (e.g. if it calls callbacks 34 * in {@link VCardInterpreter}}. 35 */ 36public class VCardParserTests extends AndroidTestCase { 37 private enum Order { 38 START, 39 END, 40 START_ENTRY, 41 END_ENTRY, 42 PROPERTY_CREATED, 43 } 44 45 private class MockVCardInterpreter implements VCardInterpreter { 46 private final List<Order> mHistory = new ArrayList<Order>(); 47 private final List<Order> mExpectedOrder = new ArrayList<Order>(); 48 49 public MockVCardInterpreter addExpectedOrder(Order order) { 50 mExpectedOrder.add(order); 51 return this; 52 } 53 54 private void inspectOrder(Order order) { 55 mHistory.add(order); 56 final Order top = mExpectedOrder.get(0); 57 assertEquals(top, order); 58 mExpectedOrder.remove(0); 59 } 60 61 public void verify() { 62 assertTrue(String.format("Remaining: " + Arrays.toString(mExpectedOrder.toArray())), 63 mExpectedOrder.isEmpty()); 64 } 65 66 @Override 67 public void onVCardStarted() { 68 inspectOrder(Order.START); 69 } 70 71 @Override 72 public void onVCardEnded() { 73 inspectOrder(Order.END); 74 } 75 76 @Override 77 public void onEntryStarted() { 78 inspectOrder(Order.START_ENTRY); 79 } 80 81 @Override 82 public void onEntryEnded() { 83 inspectOrder(Order.END_ENTRY); 84 } 85 86 @Override 87 public void onPropertyCreated(VCardProperty property) { 88 inspectOrder(Order.PROPERTY_CREATED); 89 } 90 } 91 92 public void testSimple() throws IOException, VCardException { 93 InputStream inputStream = getContext().getResources().openRawResource(R.raw.v21_simple_1); 94 try { 95 VCardParser parser = new VCardParser_V21(); 96 MockVCardInterpreter interpreter = new MockVCardInterpreter(); 97 interpreter.addExpectedOrder(Order.START) 98 .addExpectedOrder(Order.START_ENTRY) 99 .addExpectedOrder(Order.PROPERTY_CREATED) 100 .addExpectedOrder(Order.END_ENTRY) 101 .addExpectedOrder(Order.END); 102 parser.addInterpreter(interpreter); 103 parser.parse(inputStream); 104 interpreter.verify(); 105 } finally { 106 inputStream.close(); 107 } 108 } 109 110 public void testNest() throws IOException, VCardException { 111 InputStream inputStream = getContext().getResources().openRawResource(R.raw.v21_nest); 112 try { 113 VCardParser parser = new VCardParser_V21(); 114 MockVCardInterpreter interpreter = new MockVCardInterpreter(); 115 interpreter.addExpectedOrder(Order.START) 116 .addExpectedOrder(Order.START_ENTRY) 117 .addExpectedOrder(Order.PROPERTY_CREATED) // For VERSION 118 .addExpectedOrder(Order.PROPERTY_CREATED) // For N 119 .addExpectedOrder(Order.START_ENTRY) // First nested vCard begins 120 .addExpectedOrder(Order.PROPERTY_CREATED) // For VERSION 121 .addExpectedOrder(Order.PROPERTY_CREATED) // For N 122 .addExpectedOrder(Order.END_ENTRY) // First nested vCard ends 123 .addExpectedOrder(Order.START_ENTRY) // Second nested vCard begins 124 .addExpectedOrder(Order.PROPERTY_CREATED) // For VERSION 125 .addExpectedOrder(Order.PROPERTY_CREATED) // For N 126 .addExpectedOrder(Order.END_ENTRY) // Second nested vCard ends 127 .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 128 .addExpectedOrder(Order.END_ENTRY) 129 .addExpectedOrder(Order.END); 130 parser.addInterpreter(interpreter); 131 parser.parse(inputStream); 132 interpreter.verify(); 133 } finally { 134 inputStream.close(); 135 } 136 } 137 138 /** 139 * Tests if {@link VCardParser#parse(InputStream)} parses the whole vCard file and 140 * {@link VCardParser#parseOne(InputStream)} parses just first entry of a vCard file 141 * with multiple vCard entries. 142 */ 143 public void testParseOne() throws IOException, VCardException { 144 InputStream inputStream = 145 getContext().getResources().openRawResource(R.raw.v21_multiple_entry); 146 try { 147 VCardParser parser = new VCardParser_V21(); 148 MockVCardInterpreter interpreter = new MockVCardInterpreter(); 149 interpreter.addExpectedOrder(Order.START) 150 .addExpectedOrder(Order.START_ENTRY) 151 .addExpectedOrder(Order.PROPERTY_CREATED) // For VERSION 152 .addExpectedOrder(Order.PROPERTY_CREATED) // For N 153 .addExpectedOrder(Order.PROPERTY_CREATED) // For SOUND 154 .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 155 .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 156 .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 157 .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 158 .addExpectedOrder(Order.END_ENTRY) 159 .addExpectedOrder(Order.START_ENTRY) 160 .addExpectedOrder(Order.PROPERTY_CREATED) // For VERSION 161 .addExpectedOrder(Order.PROPERTY_CREATED) // For N 162 .addExpectedOrder(Order.PROPERTY_CREATED) // For SOUND 163 .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 164 .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 165 .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 166 .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 167 .addExpectedOrder(Order.END_ENTRY) 168 .addExpectedOrder(Order.START_ENTRY) 169 .addExpectedOrder(Order.PROPERTY_CREATED) // For VERSION 170 .addExpectedOrder(Order.PROPERTY_CREATED) // For N 171 .addExpectedOrder(Order.PROPERTY_CREATED) // For SOUND 172 .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 173 .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 174 .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 175 .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 176 .addExpectedOrder(Order.END_ENTRY) 177 .addExpectedOrder(Order.END); 178 parser.addInterpreter(interpreter); 179 // Use parse() to check we 180 parser.parse(inputStream); 181 interpreter.verify(); 182 } finally { 183 inputStream.close(); 184 } 185 186 inputStream = getContext().getResources().openRawResource(R.raw.v21_multiple_entry); 187 try { 188 VCardParser parser = new VCardParser_V21(); 189 MockVCardInterpreter interpreter = new MockVCardInterpreter(); 190 interpreter.addExpectedOrder(Order.START) 191 .addExpectedOrder(Order.START_ENTRY) 192 .addExpectedOrder(Order.PROPERTY_CREATED) // For VERSION 193 .addExpectedOrder(Order.PROPERTY_CREATED) // For N 194 .addExpectedOrder(Order.PROPERTY_CREATED) // For SOUND 195 .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 196 .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 197 .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 198 .addExpectedOrder(Order.PROPERTY_CREATED) // For TEL 199 .addExpectedOrder(Order.END_ENTRY) 200 .addExpectedOrder(Order.END); 201 parser.addInterpreter(interpreter); 202 parser.parseOne(inputStream); 203 interpreter.verify(); 204 } finally { 205 inputStream.close(); 206 } 207 208 } 209}