author | joehw |
Tue, 04 Nov 2014 09:14:01 -0800 | |
changeset 27343 | 7e74da04ba73 |
permissions | -rw-r--r-- |
27343
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
1 |
package parse; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
2 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
3 |
import java.io.IOException; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
4 |
import java.io.StringReader; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
5 |
import java.nio.charset.Charset; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
6 |
import java.util.ArrayList; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
7 |
import java.util.List; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
8 |
import static org.testng.Assert.assertEquals; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
9 |
import org.testng.annotations.Test; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
10 |
import org.xml.sax.Attributes; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
11 |
import org.xml.sax.InputSource; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
12 |
import org.xml.sax.SAXException; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
13 |
import org.xml.sax.XMLReader; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
14 |
import org.xml.sax.ext.DefaultHandler2; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
15 |
import org.xml.sax.helpers.XMLReaderFactory; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
16 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
17 |
/** |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
18 |
* JDK-6770436: Entity callback order differs between Java1.5 and Java1.6 |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
19 |
* https://bugs.openjdk.java.net/browse/JDK-6770436 |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
20 |
* |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
21 |
*/ |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
22 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
23 |
public class EntityCharacterEventOrder { |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
24 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
25 |
protected final static String xmlEncoding = "ISO-8859-15"; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
26 |
protected static Charset xmlEncodingCharset = null; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
27 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
28 |
String _xml; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
29 |
static { |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
30 |
xmlEncodingCharset = Charset.forName(xmlEncoding); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
31 |
} |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
32 |
/** |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
33 |
public static void main(String[] args) { |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
34 |
TestRunner.run(JDK6770436Test.class); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
35 |
} |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
36 |
*/ |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
37 |
@Test |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
38 |
public void entityCallbackOrderJava() throws SAXException, IOException { |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
39 |
final String input = "<element> & some more text</element>"; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
40 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
41 |
final MockContentHandler handler = new MockContentHandler(); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
42 |
final XMLReader xmlReader = XMLReaderFactory.createXMLReader(); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
43 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
44 |
xmlReader.setContentHandler(handler); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
45 |
xmlReader.setProperty("http://xml.org/sax/properties/lexical-handler", handler); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
46 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
47 |
xmlReader.parse(new InputSource(new StringReader(input))); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
48 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
49 |
final List<String> events = handler.getEvents(); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
50 |
printEvents(events); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
51 |
assertCallbackOrder(events); //regression from JDK5 |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
52 |
} |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
53 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
54 |
private void assertCallbackOrder(final List<String> events) { |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
55 |
assertEquals("startDocument", events.get(0)); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
56 |
assertEquals("startElement 'element'", events.get(1)); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
57 |
assertEquals("characters ' '", events.get(2)); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
58 |
assertEquals("startEntity 'amp'", events.get(3)); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
59 |
assertEquals("characters '&'", events.get(4)); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
60 |
assertEquals("endEntity 'amp'", events.get(5)); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
61 |
assertEquals("characters ' some more text'", events.get(6)); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
62 |
assertEquals("endElement 'element'", events.get(7)); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
63 |
assertEquals("endDocument", events.get(8)); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
64 |
} |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
65 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
66 |
private void printEvents(final List<String> events) { |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
67 |
events.stream().forEach((e) -> { |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
68 |
System.out.println(e); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
69 |
}); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
70 |
} |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
71 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
72 |
private class MockContentHandler extends DefaultHandler2 { |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
73 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
74 |
private List<String> events; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
75 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
76 |
public List<String> getEvents() { |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
77 |
return events; |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
78 |
} |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
79 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
80 |
@Override |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
81 |
public void startDocument() throws SAXException { |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
82 |
events = new ArrayList<String>(); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
83 |
events.add("startDocument"); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
84 |
} |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
85 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
86 |
@Override |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
87 |
public void characters(char[] ch, int start, int length) throws SAXException { |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
88 |
events.add("characters '" + new String(ch, start, length) + "'"); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
89 |
} |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
90 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
91 |
@Override |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
92 |
public void startElement(String uri, String localName, String name, Attributes atts) throws SAXException { |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
93 |
events.add("startElement '" + name + "'"); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
94 |
} |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
95 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
96 |
@Override |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
97 |
public void endElement(String uri, String localName, String name) throws SAXException { |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
98 |
events.add("endElement '" + name + "'"); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
99 |
} |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
100 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
101 |
@Override |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
102 |
public void endDocument() throws SAXException { |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
103 |
events.add("endDocument"); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
104 |
} |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
105 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
106 |
@Override |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
107 |
public void startEntity(String name) throws SAXException { |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
108 |
events.add("startEntity '" + name + "'"); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
109 |
} |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
110 |
|
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
111 |
@Override |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
112 |
public void endEntity(String name) throws SAXException { |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
113 |
events.add("endEntity '" + name + "'"); |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
114 |
} |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
115 |
} |
7e74da04ba73
6770436: Entity callback order differs between Java1.5 and Java1.6
joehw
parents:
diff
changeset
|
116 |
} |