1 /* 2 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 package stream.EntitiesTest; 25 26 import java.io.IOException; 27 import java.io.InputStreamReader; 28 import java.io.LineNumberReader; 29 import java.io.Reader; 30 import java.io.StringReader; 31 import java.net.URL; 32 33 import javax.xml.stream.XMLInputFactory; 34 import javax.xml.stream.XMLStreamReader; 35 import javax.xml.stream.events.XMLEvent; 36 37 import org.testng.Assert; 38 import org.testng.annotations.AfterMethod; 39 import org.testng.annotations.BeforeMethod; 40 import org.testng.annotations.Listeners; 41 import org.testng.annotations.Test; 42 43 /* 44 * @test 45 * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest 46 * @run testng/othervm -DrunSecMngr=true stream.EntitiesTest.EntityTest 47 * @run testng/othervm stream.EntitiesTest.EntityTest 48 * @summary Test StAX parses entity. 49 */ 50 @Listeners({jaxp.library.FilePolicy.class}) 51 public class EntityTest { 52 53 XMLInputFactory factory = null; 54 String output = ""; 55 56 @BeforeMethod 57 public void setUp() { 58 try { 59 factory = XMLInputFactory.newInstance(); 60 } catch (Exception ex) { 61 Assert.fail("Could not create XMLInputFactory"); 62 } 63 } 64 65 @AfterMethod 66 public void tearDown() { 67 factory = null; 68 } 69 70 @Test 71 public void testProperties() { 72 Assert.assertTrue(factory.isPropertySupported("javax.xml.stream.isReplacingEntityReferences")); 73 } 74 75 @Test 76 public void testCharacterReferences() { 77 try { 78 URL fileName = EntityTest.class.getResource("testCharRef.xml"); 79 URL outputFileName = EntityTest.class.getResource("testCharRef.xml.output"); 80 XMLStreamReader xmlr = factory.createXMLStreamReader(new InputStreamReader(fileName.openStream())); 81 int eventType = 0; 82 while (xmlr.hasNext()) { 83 eventType = xmlr.next(); 84 handleEvent(xmlr, eventType); 85 } 86 System.out.println("Output:"); 87 System.out.println(output); 88 Assert.assertTrue(compareOutput(new InputStreamReader(outputFileName.openStream()), new StringReader(output))); 89 } catch (Exception ex) { 90 ex.printStackTrace(); 91 Assert.fail(ex.getMessage()); 92 } 93 } 94 95 private void handleEvent(XMLStreamReader xmlr, int eventType) { 96 switch (eventType) { 97 case XMLEvent.START_ELEMENT: 98 handleStartElement(xmlr); 99 break; 100 case XMLEvent.END_ELEMENT: 101 handleEndElement(xmlr); 102 break; 103 case XMLEvent.CHARACTERS: 104 handleCharacters(xmlr); 105 break; 106 case XMLEvent.COMMENT: 107 handleComment(xmlr); 108 break; 109 case XMLEvent.ENTITY_REFERENCE: 110 break; 111 case XMLEvent.ATTRIBUTE: 112 break; 113 case XMLEvent.DTD: 114 break; 115 case XMLEvent.CDATA: 116 break; 117 default: 118 break; 119 } 120 } 121 122 private void handleStartElement(XMLStreamReader xmlr) { 123 output += "<"; 124 output += xmlr.getLocalName(); 125 if (xmlr.hasText()) 126 output += xmlr.getText(); 127 printAttributes(xmlr); 128 output += ">"; 129 } 130 131 private void handleEndElement(XMLStreamReader xmlr) { 132 output += "</"; 133 output += xmlr.getLocalName(); 134 output += ">"; 135 } 136 137 private void handleComment(XMLStreamReader xmlr) { 138 if (xmlr.hasText()) 139 output += xmlr.getText(); 140 } 141 142 private void handleCharacters(XMLStreamReader xmlr) { 143 if (xmlr.hasText()) 144 output += xmlr.getText(); 145 } 146 147 private void printAttributes(XMLStreamReader xmlr) { 148 if (xmlr.getAttributeCount() > 0) { 149 int count = xmlr.getAttributeCount(); 150 for (int i = 0; i < count; i++) { 151 output += xmlr.getAttributeName(i); 152 output += "="; 153 output += xmlr.getAttributeValue(i); 154 /* 155 * String name = xmlr.getAttributeName(i) ; String value = 156 * xmlr.getAttributeValue(i) ; 157 * System.out.println(name+"="+value); 158 */ 159 } 160 } 161 } 162 163 protected boolean compareOutput(Reader expected, Reader actual) throws IOException { 164 LineNumberReader expectedOutput = new LineNumberReader(expected); 165 LineNumberReader actualOutput = new LineNumberReader(actual); 166 167 while (expectedOutput.ready() && actualOutput.ready()) { 168 String expectedLine = expectedOutput.readLine(); 169 String actualLine = actualOutput.readLine(); 170 if (!expectedLine.equals(actualLine)) { 171 System.out.println("Entityreference expansion failed, line no: " + expectedOutput.getLineNumber()); 172 System.out.println("Expected: " + expectedLine); 173 System.out.println("Actual : " + actualLine); 174 return false; 175 } 176 } 177 expectedOutput.close(); 178 actualOutput.close(); 179 return true; 180 } 181 }