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