package stream; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.StringReader; import javax.xml.stream.XMLStreamException; import org.codehaus.stax2.XMLInputFactory2; import org.codehaus.stax2.XMLStreamReader2; public class TestSurrogates extends base.BaseTestCase { private final int HIGH_CODEPOINT = 0x1031c; private final String SURROGATE = new StringBuilder().appendCodePoint(HIGH_CODEPOINT).toString(); private final String VALUE = "a/"+SURROGATE+"/b"; private final String DOC = "<value>"+VALUE+"</value>"; // for [#27] public void testSurrogateSkipping() throws Exception { _testSurrogate(true, false); _testSurrogate(true, true); } public void testSurrogateParsing() throws Exception { _testSurrogate(false, false); _testSurrogate(false, true); } private void _testSurrogate(boolean skip, boolean useBytes) throws Exception { XMLStreamReader2 sr = createReader(DOC, useBytes); assertTokenType(START_DOCUMENT, sr.getEventType()); assertTokenType(START_ELEMENT, sr.next()); assertEquals("value", sr.getLocalName()); assertTokenType(CHARACTERS, sr.next()); if (!skip) { assertEquals(VALUE, sr.getText()); } assertTokenType(END_ELEMENT, sr.next()); assertEquals("value", sr.getLocalName()); assertTokenType(END_DOCUMENT, sr.next()); sr.close(); } /* /********************************************************************** /* Helper methods /********************************************************************** */ private final XMLInputFactory2 F2 = getNewInputFactory(); XMLStreamReader2 createReader(String content, boolean useBytes) throws IOException, XMLStreamException { if (useBytes) { byte[] data = content.getBytes("UTF-8"); return (XMLStreamReader2) F2.createXMLStreamReader(new ByteArrayInputStream(data)); } return (XMLStreamReader2) F2.createXMLStreamReader(new StringReader(content)); } }