package async; import com.fasterxml.aalto.AsyncByteArrayFeeder; import com.fasterxml.aalto.AsyncByteBufferFeeder; import com.fasterxml.aalto.AsyncXMLInputFactory; import com.fasterxml.aalto.AsyncXMLStreamReader; import com.fasterxml.aalto.stax.InputFactoryImpl; public class TestPIParsing extends AsyncTestBase { public void testProcInstrParse() throws Exception { for (int spaces = 0; spaces < 3; ++spaces) { String SPC = spaces(spaces); _testPI(SPC, 1); _testPI(SPC, 2); _testPI(SPC, 3); _testPI(SPC, 5); _testPI(SPC, 11); _testPI(SPC, 999); } } public void testProcInstrSkip() throws Exception { for (int spaces = 0; spaces < 3; ++spaces) { String SPC = spaces(spaces); _testPISkip(SPC, 1); _testPISkip(SPC, 2); _testPISkip(SPC, 3); _testPISkip(SPC, 5); _testPISkip(SPC, 11); _testPISkip(SPC, 999); } } /* /********************************************************************** /* Helper methods /********************************************************************** */ private final static String XML = "<?p i ?><root><?pi \nwith\r\ndata??><?x \nfoo> "+UNICODE_SEGMENT+" bar? ?></root><?proc \r?>"; private void _testPI(final String spaces, final int chunkSize) throws Exception { final AsyncXMLInputFactory f = new InputFactoryImpl(); //test for byte array AsyncXMLStreamReader<AsyncByteArrayFeeder> sr_array = null; try { sr_array = f.createAsyncForByteArray(); final AsyncReaderWrapperForByteArray reader_array = new AsyncReaderWrapperForByteArray(sr_array, chunkSize, spaces + XML); _testPI(sr_array, reader_array); } finally { if (sr_array != null) { sr_array.close(); } } //test for byte buffer AsyncXMLStreamReader<AsyncByteBufferFeeder> sr_buffer = null; try { sr_buffer = f.createAsyncForByteBuffer(); final AsyncReaderWrapperForByteBuffer reader_buffer = new AsyncReaderWrapperForByteBuffer(sr_buffer, chunkSize, spaces + XML); _testPI(sr_buffer, reader_buffer); } finally { if (sr_buffer != null) { sr_buffer.close(); } } } private void _testPI(final AsyncXMLStreamReader<?> sr, final AsyncReaderWrapper reader) throws Exception { int t = verifyStart(reader); assertTokenType(PROCESSING_INSTRUCTION, t); assertEquals("p", sr.getPITarget()); assertEquals("i ", sr.getPIData()); assertTokenType(START_ELEMENT, reader.nextToken()); assertEquals("root", sr.getLocalName()); assertTokenType(PROCESSING_INSTRUCTION, reader.nextToken()); assertEquals("pi", sr.getPITarget()); assertEquals("with\ndata?", sr.getPIData()); assertTokenType(PROCESSING_INSTRUCTION, reader.nextToken()); assertEquals("x", sr.getPITarget()); assertEquals("foo> "+UNICODE_SEGMENT+" bar? ", sr.getPIData()); assertTokenType(END_ELEMENT, reader.nextToken()); assertEquals("root", sr.getLocalName()); assertTokenType(PROCESSING_INSTRUCTION, reader.nextToken()); assertEquals("proc", sr.getPITarget()); assertEquals("", sr.getPIData()); assertTokenType(END_DOCUMENT, reader.nextToken()); } private void _testPISkip(final String spaces, final int chunkSize) throws Exception { final AsyncXMLInputFactory f = new InputFactoryImpl(); //test for byte array AsyncXMLStreamReader<AsyncByteArrayFeeder> sr_array = null; try { sr_array = f.createAsyncForByteArray(); final AsyncReaderWrapperForByteArray reader_array = new AsyncReaderWrapperForByteArray(sr_array, chunkSize, spaces + XML); _testPISkip(sr_array, reader_array); } finally { if (sr_array != null) { sr_array.close(); } } //test for byte buffer AsyncXMLStreamReader<AsyncByteBufferFeeder> sr_buffer = null; try { sr_buffer = f.createAsyncForByteBuffer(); final AsyncReaderWrapperForByteBuffer reader_buffer = new AsyncReaderWrapperForByteBuffer(sr_buffer, chunkSize, spaces + XML); _testPISkip(sr_buffer, reader_buffer); } finally { if (sr_buffer != null) { sr_buffer.close(); } } } private void _testPISkip(final AsyncXMLStreamReader<?> sr, final AsyncReaderWrapper reader) throws Exception { int t = verifyStart(reader); assertTokenType(PROCESSING_INSTRUCTION, t); assertTokenType(START_ELEMENT, reader.nextToken()); assertTokenType(PROCESSING_INSTRUCTION, reader.nextToken()); assertTokenType(PROCESSING_INSTRUCTION, reader.nextToken()); assertTokenType(END_ELEMENT, reader.nextToken()); assertTokenType(PROCESSING_INSTRUCTION, reader.nextToken()); assertTokenType(END_DOCUMENT, reader.nextToken()); assertFalse(sr.hasNext()); } }