14199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa/*
24199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * Copyright (C) 2009 The Android Open Source Project
34199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa *
44199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * Licensed under the Apache License, Version 2.0 (the "License"); you may not
54199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * use this file except in compliance with the License. You may obtain a copy of
64199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * the License at
74199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa *
84199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * http://www.apache.org/licenses/LICENSE-2.0
94199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa *
104199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * Unless required by applicable law or agreed to in writing, software
114199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * License for the specific language governing permissions and limitations under
144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * the License.
154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa */
16677ef21613a9d35053ec098444832ce4125a847eDaisuke Miyakawapackage com.android.vcard.tests.testutils;
174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
185f363a8136349b242d243c3c0c14e6d5a065d23fDaisuke Miyakawaimport android.test.AndroidTestCase;
194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.text.TextUtils;
204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
214199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport com.android.vcard.VCardConfig;
224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport junit.framework.TestCase;
244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport java.util.ArrayList;
264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport java.util.List;
274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawapublic class LineVerifierElem {
294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private final List<String> mExpectedLineList = new ArrayList<String>();
30be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    private final int mVCardType;
314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
325f363a8136349b242d243c3c0c14e6d5a065d23fDaisuke Miyakawa    public LineVerifierElem(AndroidTestCase androidTestCase, int vcardType) {
33be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        mVCardType = vcardType;
344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public LineVerifierElem addExpected(final String line) {
374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        if (!TextUtils.isEmpty(line)) {
384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            mExpectedLineList.add(line);
394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        }
404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        return this;
414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public void verify(final String vcard) {
444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        final String[] lineArray = vcard.split("\\r?\\n");
454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        final int length = lineArray.length;
464199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        boolean beginExists = false;
474199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        boolean endExists = false;
484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        boolean versionExists = false;
494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
504199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        for (int i = 0; i < length; i++) {
514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            final String line = lineArray[i];
524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            if (TextUtils.isEmpty(line)) {
534199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                continue;
544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            }
554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
564199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            if ("BEGIN:VCARD".equalsIgnoreCase(line)) {
574199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                if (beginExists) {
58be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa                    TestCase.fail("Multiple \"BEGIN:VCARD\" line found");
594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                } else {
604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                    beginExists = true;
614199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                    continue;
624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                }
634199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            } else if ("END:VCARD".equalsIgnoreCase(line)) {
644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                if (endExists) {
65be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa                    TestCase.fail("Multiple \"END:VCARD\" line found");
664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                } else {
674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                    endExists = true;
684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                    continue;
694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                }
70be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa            } else if ((VCardConfig.isVersion21(mVCardType) ? "VERSION:2.1" :
71be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa                (VCardConfig.isVersion30(mVCardType) ? "VERSION:3.0" :
72be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa                    "VERSION:4.0")).equalsIgnoreCase(line)) {
734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                if (versionExists) {
74be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa                    TestCase.fail("Multiple VERSION line + found");
754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                } else {
764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                    versionExists = true;
774199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                    continue;
784199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                }
794199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            }
804199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
814199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            if (!beginExists) {
82be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa                TestCase.fail("Property other than BEGIN came before BEGIN property: " + line);
834199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            } else if (endExists) {
84be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa                TestCase.fail("Property other than END came after END property: " + line);
854199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            }
864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            final int index = mExpectedLineList.indexOf(line);
884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            if (index >= 0) {
894199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                mExpectedLineList.remove(index);
904199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            } else {
91be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa                TestCase.fail("Unexpected line: " + line);
924199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            }
934199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        }
944199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
954199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        if (!mExpectedLineList.isEmpty()) {
964199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            StringBuffer buffer = new StringBuffer();
974199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            for (String expectedLine : mExpectedLineList) {
984199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                buffer.append(expectedLine);
994199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                buffer.append("\n");
1004199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            }
1014199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
102be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa            TestCase.fail("Expected line(s) not found:" + buffer.toString());
1034199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        }
1044199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
1054199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa}
106