1/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of 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,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.layoutlib.bridge;
18
19import org.kxml2.io.KXmlParser;
20import org.w3c.dom.Node;
21import org.xmlpull.v1.XmlPullParser;
22
23import java.io.InputStream;
24
25import junit.framework.TestCase;
26
27public class BridgeXmlBlockParserTest extends TestCase {
28
29    @Override
30    protected void setUp() throws Exception {
31        super.setUp();
32    }
33
34    @Override
35    protected void tearDown() throws Exception {
36        super.tearDown();
37    }
38
39    public void testXmlBlockParser() throws Exception {
40        XmlPullParser parser = new KXmlParser();
41        parser = new BridgeXmlBlockParser(parser, null, false /* platformResourceFlag */);
42
43        InputStream input = this.getClass().getClassLoader().getResourceAsStream(
44            "com/android/layoutlib/testdata/layout1.xml");
45        parser.setInput(input, null /*encoding*/);
46
47        assertEquals(XmlPullParser.START_DOCUMENT, parser.next());
48
49        assertEquals(XmlPullParser.START_TAG, parser.next());
50        assertEquals("LinearLayout", parser.getName());
51
52        assertEquals(XmlPullParser.TEXT, parser.next());
53
54        assertEquals(XmlPullParser.START_TAG, parser.next());
55        assertEquals("Button", parser.getName());
56        assertEquals(XmlPullParser.TEXT, parser.next());
57        assertEquals(XmlPullParser.END_TAG, parser.next());
58
59        assertEquals(XmlPullParser.TEXT, parser.next());
60
61        assertEquals(XmlPullParser.START_TAG, parser.next());
62        assertEquals("View", parser.getName());
63        assertEquals(XmlPullParser.END_TAG, parser.next());
64
65        assertEquals(XmlPullParser.TEXT, parser.next());
66
67        assertEquals(XmlPullParser.START_TAG, parser.next());
68        assertEquals("TextView", parser.getName());
69        assertEquals(XmlPullParser.END_TAG, parser.next());
70
71        assertEquals(XmlPullParser.TEXT, parser.next());
72
73        assertEquals(XmlPullParser.END_TAG, parser.next());
74        assertEquals(XmlPullParser.END_DOCUMENT, parser.next());
75    }
76
77    //------------
78
79    /**
80     * Quick'n'dirty debug helper that dumps an XML structure to stdout.
81     */
82    @SuppressWarnings("unused")
83    private void dump(Node node, String prefix) {
84        Node n;
85
86        String[] types = {
87                "unknown",
88                "ELEMENT_NODE",
89                "ATTRIBUTE_NODE",
90                "TEXT_NODE",
91                "CDATA_SECTION_NODE",
92                "ENTITY_REFERENCE_NODE",
93                "ENTITY_NODE",
94                "PROCESSING_INSTRUCTION_NODE",
95                "COMMENT_NODE",
96                "DOCUMENT_NODE",
97                "DOCUMENT_TYPE_NODE",
98                "DOCUMENT_FRAGMENT_NODE",
99                "NOTATION_NODE"
100        };
101
102        String s = String.format("%s<%s> %s %s",
103                prefix,
104                types[node.getNodeType()],
105                node.getNodeName(),
106                node.getNodeValue() == null ? "" : node.getNodeValue().trim());
107
108        System.out.println(s);
109
110        n = node.getFirstChild();
111        if (n != null) {
112            dump(n, prefix + "- ");
113        }
114
115        n = node.getNextSibling();
116        if (n != null) {
117            dump(n, prefix);
118        }
119
120    }
121
122}
123