package async;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.events.XMLEvent;
import com.fasterxml.aalto.*;
import com.fasterxml.aalto.stax.InputFactoryImpl;
import java.nio.ByteBuffer;
/**
* Set of tests to ensure that it is possible to use Stax {@link XMLEventReader} with
* async parser.
*/
public class TestAsyncViaEventReader extends AsyncTestBase
{
public void testSimple_byteArray() throws Exception
{
final AsyncXMLInputFactory f = new InputFactoryImpl();
AsyncXMLStreamReader<AsyncByteArrayFeeder> sr = null;
try {
sr = f.createAsyncFor("<root>a</r".getBytes("UTF-8"));
assertTokenType(START_DOCUMENT, sr.next());
XMLEventReader er = null;
try {
er = f.createXMLEventReader(sr);
XMLEvent evt = er.nextEvent();
assertTokenType(START_DOCUMENT, evt.getEventType());
evt = er.nextEvent();
assertTokenType(START_ELEMENT, evt.getEventType());
assertEquals("root", sr.getLocalName());
evt = er.nextEvent();
assertTokenType(CHARACTERS, evt.getEventType());
assertEquals("a", sr.getText());
// then need more input
evt = er.nextEvent();
assertTokenType(AsyncXMLStreamReader.EVENT_INCOMPLETE, evt.getEventType());
byte[] b = "oot>".getBytes("UTF-8");
sr.getInputFeeder().feedInput(b, 0, b.length);
evt = er.nextEvent();
assertTokenType(END_ELEMENT, evt.getEventType());
assertEquals("root", sr.getLocalName());
evt = er.nextEvent();
assertTokenType(AsyncXMLStreamReader.EVENT_INCOMPLETE, evt.getEventType());
sr.getInputFeeder().endOfInput();
evt = er.nextEvent();
assertTokenType(END_DOCUMENT, evt.getEventType());
assertFalse(er.hasNext());
} finally {
if(er != null) {
er.close();
}
}
} finally {
if(sr != null) {
sr.close();
}
}
}
public void testSimple_byteBuffer() throws Exception
{
final AsyncXMLInputFactory f = new InputFactoryImpl();
AsyncXMLStreamReader<AsyncByteBufferFeeder> sr = null;
try {
sr = f.createAsyncFor(ByteBuffer.wrap("<root>a</r".getBytes("UTF-8")));
assertTokenType(START_DOCUMENT, sr.next());
XMLEventReader er = null;
try {
er = f.createXMLEventReader(sr);
XMLEvent evt = er.nextEvent();
assertTokenType(START_DOCUMENT, evt.getEventType());
evt = er.nextEvent();
assertTokenType(START_ELEMENT, evt.getEventType());
assertEquals("root", sr.getLocalName());
evt = er.nextEvent();
assertTokenType(CHARACTERS, evt.getEventType());
assertEquals("a", sr.getText());
// then need more input
evt = er.nextEvent();
assertTokenType(AsyncXMLStreamReader.EVENT_INCOMPLETE, evt.getEventType());
byte[] b = "oot>".getBytes("UTF-8");
sr.getInputFeeder().feedInput(ByteBuffer.wrap(b));
evt = er.nextEvent();
assertTokenType(END_ELEMENT, evt.getEventType());
assertEquals("root", sr.getLocalName());
evt = er.nextEvent();
assertTokenType(AsyncXMLStreamReader.EVENT_INCOMPLETE, evt.getEventType());
sr.getInputFeeder().endOfInput();
evt = er.nextEvent();
assertTokenType(END_DOCUMENT, evt.getEventType());
assertFalse(er.hasNext());
} finally {
if(er != null) {
er.close();
}
}
} finally {
if(sr != null) {
sr.close();
}
}
}
}