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