| /* |
| * Copyright (C) 2009 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| package com.android.unit_tests.vcard; |
| |
| import android.pim.vcard.VCardConfig; |
| import android.text.TextUtils; |
| |
| import junit.framework.TestCase; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| class LineVerifierElem { |
| private final TestCase mTestCase; |
| private final List<String> mExpectedLineList = new ArrayList<String>(); |
| private final boolean mIsV30; |
| |
| public LineVerifierElem(TestCase testCase, int vcardType) { |
| mTestCase = testCase; |
| mIsV30 = VCardConfig.isV30(vcardType); |
| } |
| |
| public LineVerifierElem addExpected(final String line) { |
| if (!TextUtils.isEmpty(line)) { |
| mExpectedLineList.add(line); |
| } |
| return this; |
| } |
| |
| public void verify(final String vcard) { |
| final String[] lineArray = vcard.split("\\r?\\n"); |
| final int length = lineArray.length; |
| boolean beginExists = false; |
| boolean endExists = false; |
| boolean versionExists = false; |
| |
| for (int i = 0; i < length; i++) { |
| final String line = lineArray[i]; |
| if (TextUtils.isEmpty(line)) { |
| continue; |
| } |
| |
| if ("BEGIN:VCARD".equalsIgnoreCase(line)) { |
| if (beginExists) { |
| mTestCase.fail("Multiple \"BEGIN:VCARD\" line found"); |
| } else { |
| beginExists = true; |
| continue; |
| } |
| } else if ("END:VCARD".equalsIgnoreCase(line)) { |
| if (endExists) { |
| mTestCase.fail("Multiple \"END:VCARD\" line found"); |
| } else { |
| endExists = true; |
| continue; |
| } |
| } else if ((mIsV30 ? "VERSION:3.0" : "VERSION:2.1").equalsIgnoreCase(line)) { |
| if (versionExists) { |
| mTestCase.fail("Multiple VERSION line + found"); |
| } else { |
| versionExists = true; |
| continue; |
| } |
| } |
| |
| if (!beginExists) { |
| mTestCase.fail("Property other than BEGIN came before BEGIN property: " |
| + line); |
| } else if (endExists) { |
| mTestCase.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); |
| } |
| } |
| |
| 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()); |
| } |
| } |
| } |