15757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson/* 25757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson * Copyright (C) 2011 The Android Open Source Project 35757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson * 45757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson * Licensed under the Apache License, Version 2.0 (the "License"); 55757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson * you may not use this file except in compliance with the License. 65757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson * You may obtain a copy of the License at 75757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson * 85757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 95757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson * 105757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson * Unless required by applicable law or agreed to in writing, software 115757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 125757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson * See the License for the specific language governing permissions and 145757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson * limitations under the License. 155757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson */ 165757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson 175757d1d948906c432110f70d8281b18b4ce6824cJesse Wilsonpackage libcore.xml; 185757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson 195757d1d948906c432110f70d8281b18b4ce6824cJesse Wilsonimport java.io.StringWriter; 205757d1d948906c432110f70d8281b18b4ce6824cJesse Wilsonimport javax.xml.parsers.DocumentBuilder; 215757d1d948906c432110f70d8281b18b4ce6824cJesse Wilsonimport javax.xml.parsers.DocumentBuilderFactory; 225757d1d948906c432110f70d8281b18b4ce6824cJesse Wilsonimport javax.xml.transform.Transformer; 235757d1d948906c432110f70d8281b18b4ce6824cJesse Wilsonimport javax.xml.transform.TransformerFactory; 245757d1d948906c432110f70d8281b18b4ce6824cJesse Wilsonimport javax.xml.transform.dom.DOMSource; 255757d1d948906c432110f70d8281b18b4ce6824cJesse Wilsonimport javax.xml.transform.stream.StreamResult; 265757d1d948906c432110f70d8281b18b4ce6824cJesse Wilsonimport junit.framework.TestCase; 275757d1d948906c432110f70d8281b18b4ce6824cJesse Wilsonimport org.w3c.dom.Attr; 285757d1d948906c432110f70d8281b18b4ce6824cJesse Wilsonimport org.w3c.dom.Document; 295757d1d948906c432110f70d8281b18b4ce6824cJesse Wilsonimport org.w3c.dom.Element; 305757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson 315757d1d948906c432110f70d8281b18b4ce6824cJesse Wilsonpublic final class DomSerializationTest extends TestCase { 325757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson private DocumentBuilder documentBuilder; 335757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson private Transformer transformer; 345757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson 355757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson @Override protected void setUp() throws Exception { 365757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 375757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson documentBuilder = builderFactory.newDocumentBuilder(); 385757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson transformer = TransformerFactory.newInstance().newTransformer(); 395757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson } 405757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson 415757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson public void testWriteDocument() throws Exception { 425757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson Document document = documentBuilder.newDocument(); 435757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson Element foo = document.createElement("foo"); 445757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson Attr quux = document.createAttribute("quux"); 455757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson quux.setValue("abc"); 465757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson foo.setAttributeNode(quux); 475757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson foo.appendChild(document.createElement("bar")); 485757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson foo.appendChild(document.createElement("baz")); 495757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson document.appendChild(foo); 505757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson assertXmlEquals("<foo quux=\"abc\"><bar/><baz/></foo>", document); 515757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson } 525757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson 535757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson public void testWriteSpecialCharactersInText() throws Exception { 545757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson Document document = documentBuilder.newDocument(); 555757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson Element foo = document.createElement("foo"); 565757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson foo.appendChild(document.createTextNode("5'8\", 5 < 6 & 7 > 3!")); 575757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson document.appendChild(foo); 585757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson assertXmlEquals("<foo>5'8\", 5 < 6 & 7 > 3!</foo>", document); 595757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson } 605757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson 615757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson private String toXml(Document document) throws Exception { 625757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson StringWriter stringWriter = new StringWriter(); 635757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson transformer.transform(new DOMSource(document), new StreamResult(stringWriter)); 645757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson return stringWriter.toString(); 655757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson } 665757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson 675757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson private void assertXmlEquals(String expectedXml, Document document) throws Exception { 685757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson String actual = toXml(document); 695757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson String declarationA = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; 705757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson String declarationB = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>"; 715757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson assertTrue(actual, actual.equals(declarationA + expectedXml) 725757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson || actual.equals(declarationB + expectedXml)); 735757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson } 745757d1d948906c432110f70d8281b18b4ce6824cJesse Wilson} 75