Home | History | Annotate | Download | only in testutils
      1 /*
      2  * Copyright (C) 2009 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
      5  * use this file except in compliance with the License. You may obtain a copy of
      6  * 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, WITHOUT
     12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     13  * License for the specific language governing permissions and limitations under
     14  * the License.
     15  */
     16 package com.android.vcard.tests.testutils;
     17 
     18 import android.test.AndroidTestCase;
     19 import android.text.TextUtils;
     20 
     21 import com.android.vcard.VCardConfig;
     22 
     23 import junit.framework.TestCase;
     24 
     25 import java.util.ArrayList;
     26 import java.util.List;
     27 
     28 public class LineVerifierElem {
     29     private final List<String> mExpectedLineList = new ArrayList<String>();
     30     private final int mVCardType;
     31 
     32     public LineVerifierElem(AndroidTestCase androidTestCase, int vcardType) {
     33         mVCardType = vcardType;
     34     }
     35 
     36     public LineVerifierElem addExpected(final String line) {
     37         if (!TextUtils.isEmpty(line)) {
     38             mExpectedLineList.add(line);
     39         }
     40         return this;
     41     }
     42 
     43     public void verify(final String vcard) {
     44         final String[] lineArray = vcard.split("\\r?\\n");
     45         final int length = lineArray.length;
     46         boolean beginExists = false;
     47         boolean endExists = false;
     48         boolean versionExists = false;
     49 
     50         for (int i = 0; i < length; i++) {
     51             final String line = lineArray[i];
     52             if (TextUtils.isEmpty(line)) {
     53                 continue;
     54             }
     55 
     56             if ("BEGIN:VCARD".equalsIgnoreCase(line)) {
     57                 if (beginExists) {
     58                     TestCase.fail("Multiple \"BEGIN:VCARD\" line found");
     59                 } else {
     60                     beginExists = true;
     61                     continue;
     62                 }
     63             } else if ("END:VCARD".equalsIgnoreCase(line)) {
     64                 if (endExists) {
     65                     TestCase.fail("Multiple \"END:VCARD\" line found");
     66                 } else {
     67                     endExists = true;
     68                     continue;
     69                 }
     70             } else if ((VCardConfig.isVersion21(mVCardType) ? "VERSION:2.1" :
     71                 (VCardConfig.isVersion30(mVCardType) ? "VERSION:3.0" :
     72                     "VERSION:4.0")).equalsIgnoreCase(line)) {
     73                 if (versionExists) {
     74                     TestCase.fail("Multiple VERSION line + found");
     75                 } else {
     76                     versionExists = true;
     77                     continue;
     78                 }
     79             }
     80 
     81             if (!beginExists) {
     82                 TestCase.fail("Property other than BEGIN came before BEGIN property: " + line);
     83             } else if (endExists) {
     84                 TestCase.fail("Property other than END came after END property: " + line);
     85             }
     86 
     87             final int index = mExpectedLineList.indexOf(line);
     88             if (index >= 0) {
     89                 mExpectedLineList.remove(index);
     90             } else {
     91                 TestCase.fail("Unexpected line: " + line);
     92             }
     93         }
     94 
     95         if (!mExpectedLineList.isEmpty()) {
     96             StringBuffer buffer = new StringBuffer();
     97             for (String expectedLine : mExpectedLineList) {
     98                 buffer.append(expectedLine);
     99                 buffer.append("\n");
    100             }
    101 
    102             TestCase.fail("Expected line(s) not found:" + buffer.toString());
    103         }
    104     }
    105 }
    106