1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License.
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License.
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
171c92541d38ed4d0b6e958f478cd7b129f140cd44Jesse Wilsonpackage libcore.xml;
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
19f979bbd1277c77ca945ad981e7864fb4e9f6ae05Jesse Wilsonimport javax.xml.parsers.DocumentBuilder;
20f979bbd1277c77ca945ad981e7864fb4e9f6ae05Jesse Wilsonimport javax.xml.parsers.DocumentBuilderFactory;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.Comment;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.Document;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.Element;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.Node;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.NodeList;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.ProcessingInstruction;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.w3c.dom.Text;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class SimpleBuilderTest extends TestCase {
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private DocumentBuilder builder;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void setUp() throws Exception {
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        factory.setValidating(false);
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        factory.setNamespaceAware(true);
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        builder = factory.newDocumentBuilder();
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void tearDown() throws Exception {
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        builder = null;
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private String getTextContent(Node node) {
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String result = (node instanceof Text ? ((Text) node).getData() : "");
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Node child = node.getFirstChild();
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (child != null) {
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            result = result + getTextContent(child);
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            child = child.getNextSibling();
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return result;
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGoodFile1() throws Exception {
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Document document = builder.parse(getClass().getResourceAsStream(
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "/SimpleBuilderTest.xml"));
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Element root = document.getDocumentElement();
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(root);
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("http://www.foo.bar", root.getNamespaceURI());
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("t", root.getPrefix());
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("stuff", root.getLocalName());
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        NodeList list = root.getElementsByTagName("nestedStuff");
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(list);
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(list.getLength(), 4);
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Element one = (Element) list.item(0);
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Element two = (Element) list.item(1);
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Element three = (Element) list.item(2);
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Element four = (Element) list.item(3);
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("This space intentionally left blank.",
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                getTextContent(one));
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Nothing to see here - please get along!",
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                getTextContent(two));
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Rent this space!", getTextContent(three));
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("", getTextContent(four));
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("eins", one.getAttribute("one"));
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("zwei", two.getAttribute("two"));
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("drei", three.getAttribute("three"));
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("vier", four.getAttribute("t:four"));
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("vier", four.getAttributeNS("http://www.foo.bar", "four"));
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        list = document.getChildNodes();
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(list);
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String proinst = "";
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String comment = "";
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < list.getLength(); i++) {
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Node node = list.item(i);
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (node instanceof ProcessingInstruction) {
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                proinst = proinst + node.getNodeValue();
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } else if (node instanceof Comment) {
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                comment = comment + node.getNodeValue();
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("The quick brown fox jumps over the lazy dog.", proinst);
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals(" Fragile!  Handle me with care! ", comment);
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
109f979bbd1277c77ca945ad981e7864fb4e9f6ae05Jesse Wilson
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGoodFile2() throws Exception {
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Document document = builder.parse(getClass().getResourceAsStream(
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "/staffNS.xml"));
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Element root = document.getDocumentElement();
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(root);
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
118