package wstream; import java.io.*; import javax.xml.stream.XMLStreamReader; import org.codehaus.stax2.XMLInputFactory2; import org.codehaus.stax2.XMLOutputFactory2; import org.codehaus.stax2.XMLStreamWriter2; import base.BaseTestCase; public class TestLongerContent extends BaseTestCase { final static String TEXT_UTF8_2BYTES = "\u00C0"+"c\u00C7ent! "; final XMLOutputFactory2 OUTPUT_FACTORY = getNewOutputFactory(); final XMLInputFactory2 INPUT_FACTORY = getNewInputFactory(); // To test [#26] public void testLongerWithMultiByteBytes() throws Exception { _testLongerWithMultiByte(true, false); } public void testLongerWithMultiByteBytesCData() throws Exception { _testLongerWithMultiByte(true, true); } public void testLongerWithMultiByteChars() throws Exception { _testLongerWithMultiByte(false, false); } public void testLongerWithMultiByteCharsCData() throws Exception { _testLongerWithMultiByte(false, true); } public void _testLongerWithMultiByte(boolean byteBased, boolean useCData) throws Exception { final int COUNT = 199999; ByteArrayOutputStream bytes; StringWriter strw; XMLStreamWriter2 sw; if (byteBased) { bytes = new ByteArrayOutputStream(COUNT * 4); strw = null; sw = (XMLStreamWriter2) OUTPUT_FACTORY.createXMLStreamWriter(bytes, "UTF-8"); } else { bytes = null; strw = new StringWriter(COUNT * 4); sw = (XMLStreamWriter2) OUTPUT_FACTORY.createXMLStreamWriter(strw); } sw.writeStartDocument(); sw.writeStartElement("root"); for (int i = 0; i < COUNT; ++i) { sw.writeStartElement("a"); if (useCData) { sw.writeCData(TEXT_UTF8_2BYTES+(i % 1111)); } else { sw.writeCharacters(TEXT_UTF8_2BYTES+(i % 1111)); } sw.writeRaw("\n"); sw.writeEndElement(); } sw.writeEndElement(); sw.writeEndDocument(); XMLStreamReader sr = byteBased ? INPUT_FACTORY.createXMLStreamReader(new ByteArrayInputStream(bytes.toByteArray()), "UTF-8") : INPUT_FACTORY.createXMLStreamReader(new StringReader(strw.toString())); assertTokenType(START_DOCUMENT, sr.getEventType()); assertTokenType(START_ELEMENT, sr.next()); assertEquals("root", sr.getLocalName()); for (int i = 0; i < COUNT; ++i) { assertTokenType(START_ELEMENT, sr.next()); assertEquals("a", sr.getLocalName()); String EXP = TEXT_UTF8_2BYTES+(i % 1111)+"\n"; String ACT = sr.getElementText(); if (!EXP.equals(ACT)) { assertEquals("Strings differ at "+sr.getLocation(), EXP, ACT); } assertTokenType(END_ELEMENT, sr.getEventType()); assertEquals("a", sr.getLocalName()); } assertTokenType(END_ELEMENT, sr.next()); assertEquals("root", sr.getLocalName()); sr.close(); } }