156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa/*
256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * Copyright (C) 2011 The Android Open Source Project
356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa *
456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * Licensed under the Apache License, Version 2.0 (the "License");
556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * you may not use this file except in compliance with the License.
656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * You may obtain a copy of the License at
756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa *
856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa *      http://www.apache.org/licenses/LICENSE-2.0
956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa *
1056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * Unless required by applicable law or agreed to in writing, software
1156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * distributed under the License is distributed on an "AS IS" BASIS,
1256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * See the License for the specific language governing permissions and
1456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * limitations under the License.
1556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa */
1656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawapackage com.android.vcard.tests;
1756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa
1856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport com.android.vcard.VCardInterpreter;
1956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport com.android.vcard.VCardParser;
2056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport com.android.vcard.VCardParser_V21;
2156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport com.android.vcard.VCardProperty;
2256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport com.android.vcard.exception.VCardException;
2356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa
2456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport android.test.AndroidTestCase;
2556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa
2656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport java.io.IOException;
2756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport java.io.InputStream;
2856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport java.util.ArrayList;
2956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport java.util.Arrays;
3056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawaimport java.util.List;
3156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa
3256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa/**
3356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * Tests for basic {@link VCardParser} capability (e.g. if it calls callbacks
3456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa * in {@link VCardInterpreter}}.
3556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa */
3656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawapublic class VCardParserTests extends AndroidTestCase {
3756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa    private enum Order {
3856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        START,
3956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        END,
4056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        START_ENTRY,
4156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        END_ENTRY,
4256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        PROPERTY_CREATED,
4356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa    }
4456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa
4556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa    private class MockVCardInterpreter implements VCardInterpreter {
4656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        private final List<Order> mHistory = new ArrayList<Order>();
4756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        private final List<Order> mExpectedOrder = new ArrayList<Order>();
4856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa
4956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        public MockVCardInterpreter addExpectedOrder(Order order) {
5056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            mExpectedOrder.add(order);
5156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            return this;
5256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        }
5356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa
5456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        private void inspectOrder(Order order) {
5556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            mHistory.add(order);
5656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            final Order top = mExpectedOrder.get(0);
5756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            assertEquals(top, order);
5856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            mExpectedOrder.remove(0);
5956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        }
6056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa
6156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        public void verify() {
6256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            assertTrue(String.format("Remaining: " + Arrays.toString(mExpectedOrder.toArray())),
6356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    mExpectedOrder.isEmpty());
6456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        }
6556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa
6656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        @Override
6756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        public void onVCardStarted() {
6856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            inspectOrder(Order.START);
6956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        }
7056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa
7156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        @Override
7256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        public void onVCardEnded() {
7356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            inspectOrder(Order.END);
7456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        }
7556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa
7656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        @Override
7756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        public void onEntryStarted() {
7856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            inspectOrder(Order.START_ENTRY);
7956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        }
8056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa
8156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        @Override
8256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        public void onEntryEnded() {
8356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            inspectOrder(Order.END_ENTRY);
8456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        }
8556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa
8656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        @Override
8756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        public void onPropertyCreated(VCardProperty property) {
8856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            inspectOrder(Order.PROPERTY_CREATED);
8956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        }
9056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa    }
9156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa
9256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa    public void testSimple() throws IOException, VCardException {
9356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        InputStream inputStream = getContext().getResources().openRawResource(R.raw.v21_simple_1);
9456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        try {
9556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            VCardParser parser = new VCardParser_V21();
9656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            MockVCardInterpreter interpreter = new MockVCardInterpreter();
9756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            interpreter.addExpectedOrder(Order.START)
9856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.START_ENTRY)
9956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)
10056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.END_ENTRY)
10156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.END);
10256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            parser.addInterpreter(interpreter);
10356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            parser.parse(inputStream);
10456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            interpreter.verify();
10556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        } finally {
10656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            inputStream.close();
10756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        }
10856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa    }
10956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa
11056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa    public void testNest() throws IOException, VCardException {
11156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        InputStream inputStream = getContext().getResources().openRawResource(R.raw.v21_nest);
11256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        try {
11356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            VCardParser parser = new VCardParser_V21();
11456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            MockVCardInterpreter interpreter = new MockVCardInterpreter();
11556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            interpreter.addExpectedOrder(Order.START)
11656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.START_ENTRY)
11756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For VERSION
11856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For N
11956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.START_ENTRY)  // First nested vCard begins
12056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For VERSION
12156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For N
12256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.END_ENTRY)  // First nested vCard ends
12356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.START_ENTRY)  // Second nested vCard begins
12456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For VERSION
12556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For N
12656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.END_ENTRY)  // Second nested vCard ends
12756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For TEL
12856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.END_ENTRY)
12956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.END);
13056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            parser.addInterpreter(interpreter);
13156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            parser.parse(inputStream);
13256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            interpreter.verify();
13356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        } finally {
13456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            inputStream.close();
13556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        }
13656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa    }
13756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa
13856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa    /**
13956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa     * Tests if {@link VCardParser#parse(InputStream)} parses the whole vCard file and
14056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa     * {@link VCardParser#parseOne(InputStream)} parses just first entry of a vCard file
14156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa     * with multiple vCard entries.
14256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa     */
14356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa    public void testParseOne() throws IOException, VCardException {
14456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        InputStream inputStream =
14556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                getContext().getResources().openRawResource(R.raw.v21_multiple_entry);
14656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        try {
14756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            VCardParser parser = new VCardParser_V21();
14856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            MockVCardInterpreter interpreter = new MockVCardInterpreter();
14956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            interpreter.addExpectedOrder(Order.START)
15056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.START_ENTRY)
15156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For VERSION
15256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For N
15356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For SOUND
15456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For TEL
15556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For TEL
15656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For TEL
15756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For TEL
15856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.END_ENTRY)
15956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.START_ENTRY)
16056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For VERSION
16156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For N
16256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For SOUND
16356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For TEL
16456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For TEL
16556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For TEL
16656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For TEL
16756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.END_ENTRY)
16856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.START_ENTRY)
16956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For VERSION
17056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For N
17156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For SOUND
17256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For TEL
17356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For TEL
17456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For TEL
17556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For TEL
17656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.END_ENTRY)
17756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.END);
17856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            parser.addInterpreter(interpreter);
17956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            // Use parse() to check we
18056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            parser.parse(inputStream);
18156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            interpreter.verify();
18256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        } finally {
18356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            inputStream.close();
18456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        }
18556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa
18656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        inputStream = getContext().getResources().openRawResource(R.raw.v21_multiple_entry);
18756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        try {
18856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            VCardParser parser = new VCardParser_V21();
18956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            MockVCardInterpreter interpreter = new MockVCardInterpreter();
19056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            interpreter.addExpectedOrder(Order.START)
19156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.START_ENTRY)
19256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For VERSION
19356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For N
19456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For SOUND
19556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For TEL
19656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For TEL
19756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For TEL
19856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.PROPERTY_CREATED)  // For TEL
19956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.END_ENTRY)
20056650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa                    .addExpectedOrder(Order.END);
20156650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            parser.addInterpreter(interpreter);
20256650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            parser.parseOne(inputStream);
20356650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            interpreter.verify();
20456650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        } finally {
20556650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa            inputStream.close();
20656650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa        }
20756650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa
20856650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa    }
20956650608f09fc75f260c03e00456ef3d1e60c929Daisuke Miyakawa}