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");
54199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * you may not use this file except in compliance with the License.
64199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * You may obtain a copy of 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,
124199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * See the License for the specific language governing permissions and
144199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa * limitations under the License.
154199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa */
16677ef21613a9d35053ec098444832ce4125a847eDaisuke Miyakawapackage com.android.vcard.tests.testutils;
174199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
184199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport android.test.AndroidTestCase;
194199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
204199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport com.android.vcard.VCardParser;
21be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawaimport com.android.vcard.VCardUtils;
224199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport com.android.vcard.exception.VCardException;
234199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
244199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport java.io.IOException;
254199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport java.io.InputStream;
264199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport java.util.ArrayList;
274199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawaimport java.util.List;
284199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
294199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawapublic class PropertyNodesVerifier extends VNodeBuilder {
304199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private final List<PropertyNodesVerifierElem> mPropertyNodesVerifierElemList;
314199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private final AndroidTestCase mAndroidTestCase;
324199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    private int mIndex;
334199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
344199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public PropertyNodesVerifier(AndroidTestCase testCase) {
354199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        super();
364199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mPropertyNodesVerifierElemList = new ArrayList<PropertyNodesVerifierElem>();
374199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mAndroidTestCase = testCase;
384199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
394199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
404199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    public PropertyNodesVerifierElem addPropertyNodesVerifierElem() {
414199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        PropertyNodesVerifierElem elem = new PropertyNodesVerifierElem(mAndroidTestCase);
424199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mPropertyNodesVerifierElemList.add(elem);
434199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        return elem;
444199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
454199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
46a76f41e328f31c2e9e9006160d8f65fe651eeb6aDaisuke Miyakawa    public void verify(int resId, int vcardType) throws IOException, VCardException {
47be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        verify(mAndroidTestCase.getContext().getResources().openRawResource(resId), vcardType);
484199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
494199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
50be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    public void verify(int resId, int vcardType, final VCardParser parser)
514199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            throws IOException, VCardException {
524199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        verify(mAndroidTestCase.getContext().getResources().openRawResource(resId),
53be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa                vcardType, parser);
544199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
554199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
56be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    public void verify(InputStream is, int vcardType) throws IOException, VCardException {
57be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        final VCardParser parser = VCardUtils.getAppropriateParser(vcardType);
58be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa        verify(is, vcardType, parser);
594199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
604199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
61be378d5b188f51cf717e5309e3c39180e85833a8Daisuke Miyakawa    public void verify(InputStream is, int vcardType, final VCardParser parser)
624199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            throws IOException, VCardException {
631de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa        parser.addInterpreter(this);
644199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        try {
651de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa            parser.parse(is);
664199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        } finally {
674199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            if (is != null) {
684199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                try {
694199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                    is.close();
704199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                } catch (IOException e) {
714199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa                }
724199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa            }
734199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        }
744199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
754199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa
764199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    @Override
771de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa    public void onEntryStarted() {
781de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa        super.onEntryStarted();
7948dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa        AndroidTestCase.assertTrue(mIndex < mPropertyNodesVerifierElemList.size());
8048dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa    }
8148dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa
8248dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa    @Override
831de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa    public void onEntryEnded() {
8448dd8e86a81d2ab40eb762975c8211c225002bf0Daisuke Miyakawa        mPropertyNodesVerifierElemList.get(mIndex).verify(getCurrentVNode());
851de396f6df89363169d3a2e61a61fa98d12c1ef8Daisuke Miyakawa        super.onEntryEnded();
864199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa        mIndex++;
874199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa    }
884199c54c527330ac01699b176e7bca186a3aa3a4Daisuke Miyakawa}
89