Path: blob/master/test/jdk/javax/xml/jaxp/testng/parse/EntityCharacterEventOrder.java
41154 views
package parse;12import java.io.IOException;3import java.io.StringReader;4import java.nio.charset.Charset;5import java.util.ArrayList;6import java.util.List;7import static org.testng.Assert.assertEquals;8import org.testng.annotations.Test;9import org.xml.sax.Attributes;10import org.xml.sax.InputSource;11import org.xml.sax.SAXException;12import org.xml.sax.XMLReader;13import org.xml.sax.ext.DefaultHandler2;14import org.xml.sax.helpers.XMLReaderFactory;1516/**17* JDK-6770436: Entity callback order differs between Java1.5 and Java1.618* https://bugs.openjdk.java.net/browse/JDK-677043619*20*/2122public class EntityCharacterEventOrder {2324protected final static String xmlEncoding = "ISO-8859-15";25protected static Charset xmlEncodingCharset = null;2627String _xml;28static {29xmlEncodingCharset = Charset.forName(xmlEncoding);30}31/**32public static void main(String[] args) {33TestRunner.run(JDK6770436Test.class);34}35*/36@Test37public void entityCallbackOrderJava() throws SAXException, IOException {38final String input = "<element> & some more text</element>";3940final MockContentHandler handler = new MockContentHandler();41final XMLReader xmlReader = XMLReaderFactory.createXMLReader();4243xmlReader.setContentHandler(handler);44xmlReader.setProperty("http://xml.org/sax/properties/lexical-handler", handler);4546xmlReader.parse(new InputSource(new StringReader(input)));4748final List<String> events = handler.getEvents();49printEvents(events);50assertCallbackOrder(events); //regression from JDK551}5253private void assertCallbackOrder(final List<String> events) {54assertEquals("startDocument", events.get(0));55assertEquals("startElement 'element'", events.get(1));56assertEquals("characters ' '", events.get(2));57assertEquals("startEntity 'amp'", events.get(3));58assertEquals("characters '&'", events.get(4));59assertEquals("endEntity 'amp'", events.get(5));60assertEquals("characters ' some more text'", events.get(6));61assertEquals("endElement 'element'", events.get(7));62assertEquals("endDocument", events.get(8));63}6465private void printEvents(final List<String> events) {66events.stream().forEach((e) -> {67System.out.println(e);68});69}7071private class MockContentHandler extends DefaultHandler2 {7273private List<String> events;7475public List<String> getEvents() {76return events;77}7879@Override80public void startDocument() throws SAXException {81events = new ArrayList<String>();82events.add("startDocument");83}8485@Override86public void characters(char[] ch, int start, int length) throws SAXException {87events.add("characters '" + new String(ch, start, length) + "'");88}8990@Override91public void startElement(String uri, String localName, String name, Attributes atts) throws SAXException {92events.add("startElement '" + name + "'");93}9495@Override96public void endElement(String uri, String localName, String name) throws SAXException {97events.add("endElement '" + name + "'");98}99100@Override101public void endDocument() throws SAXException {102events.add("endDocument");103}104105@Override106public void startEntity(String name) throws SAXException {107events.add("startEntity '" + name + "'");108}109110@Override111public void endEntity(String name) throws SAXException {112events.add("endEntity '" + name + "'");113}114}115}116117118