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; import static com.fasterxml.aalto.AsyncXMLStreamReader.EVENT_INCOMPLETE; public class TestXmlDeclaration extends AsyncTestBase { private final int[] CHUNK_SIZES = new int[] { 1, 2, 3, 5, 9, 33 }; public void testNoDeclaration() throws Exception { final AsyncXMLInputFactory f = new InputFactoryImpl(); for (final String XML : new String[] { " <root />", "<root/>" }) { for (final int chunkSize : CHUNK_SIZES) { //test for byte array AsyncXMLStreamReader<AsyncByteArrayFeeder> sr_array = null; try { sr_array = f.createAsyncForByteArray(); final AsyncReaderWrapperForByteArray reader_array = new AsyncReaderWrapperForByteArray(sr_array, chunkSize, XML); _testNoDeclaration(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, XML); _testNoDeclaration(sr_buffer, reader_buffer); } finally { if(sr_buffer != null) { sr_buffer.close(); } } } } } private void _testNoDeclaration(final AsyncXMLStreamReader<?> sr, final AsyncReaderWrapper reader) throws Exception { assertEquals(EVENT_INCOMPLETE, reader.currentToken()); assertTokenType(START_DOCUMENT, reader.nextToken()); // no info, however; except for encoding auto-detection assertNull(sr.getCharacterEncodingScheme()); assertEquals("UTF-8", sr.getEncoding()); assertNull(sr.getVersion()); assertFalse(sr.standaloneSet()); assertTokenType(START_ELEMENT, reader.nextToken()); assertEquals("root", sr.getLocalName()); } public void testVersionOnlyDeclaration() throws Exception { final String XML = "<?xml version='1.0' ?><root />"; final AsyncXMLInputFactory f = new InputFactoryImpl(); for (final int chunkSize : CHUNK_SIZES) { //test for byte array AsyncXMLStreamReader<AsyncByteArrayFeeder> sr_array = null; try { sr_array = f.createAsyncForByteArray(); final AsyncReaderWrapperForByteArray reader_array = new AsyncReaderWrapperForByteArray(sr_array, chunkSize, XML); _testVersionOnlyDeclaration(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, XML); _testVersionOnlyDeclaration(sr_buffer, reader_buffer); } finally { if(sr_buffer != null) { sr_buffer.close(); } } } } private void _testVersionOnlyDeclaration(final AsyncXMLStreamReader<?> sr, final AsyncReaderWrapper reader) throws Exception { assertEquals(EVENT_INCOMPLETE, reader.currentToken()); assertTokenType(START_DOCUMENT, reader.nextToken()); assertNull(sr.getCharacterEncodingScheme()); assertEquals("UTF-8", sr.getEncoding()); assertEquals("1.0", sr.getVersion()); assertFalse(sr.standaloneSet()); assertTokenType(START_ELEMENT, reader.nextToken()); assertEquals("root", sr.getLocalName()); } public void testEncodingDeclaration() throws Exception { final String XML = "<?xml version= \"1.0\" encoding='UTF-8' ?><root/>"; final AsyncXMLInputFactory f = new InputFactoryImpl(); for (final int chunkSize : CHUNK_SIZES) { //test for byte array AsyncXMLStreamReader<AsyncByteArrayFeeder> sr_array = null; try { sr_array = f.createAsyncForByteArray(); final AsyncReaderWrapperForByteArray reader_array = new AsyncReaderWrapperForByteArray(sr_array, chunkSize, XML); _testEncodingDeclaration(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, XML); _testEncodingDeclaration(sr_buffer, reader_buffer); } finally { if(sr_buffer != null) { sr_buffer.close(); } } } } private void _testEncodingDeclaration(final AsyncXMLStreamReader<?> sr, final AsyncReaderWrapper reader) throws Exception { assertEquals(EVENT_INCOMPLETE, reader.currentToken()); assertTokenType(START_DOCUMENT, reader.nextToken()); assertEquals("UTF-8", sr.getEncoding()); assertEquals("UTF-8", sr.getCharacterEncodingScheme()); assertEquals("1.0", sr.getVersion()); assertFalse(sr.standaloneSet()); assertTokenType(START_ELEMENT, reader.nextToken()); assertEquals("root", sr.getLocalName()); } public void testStandAloneDeclaration() throws Exception { final String XML = "<?xml version ='1.0' encoding=\"UTF-8\" standalone='yes' ?> <root />"; final AsyncXMLInputFactory f = new InputFactoryImpl(); for (final int chunkSize : CHUNK_SIZES) { //test for byte array AsyncXMLStreamReader<AsyncByteArrayFeeder> sr_array = null; try { sr_array = f.createAsyncForByteArray(); final AsyncReaderWrapperForByteArray reader_array = new AsyncReaderWrapperForByteArray(sr_array, chunkSize, XML); _testStandAloneDeclaration(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, XML); _testStandAloneDeclaration(sr_buffer, reader_buffer); } finally { if(sr_buffer != null) { sr_buffer.close(); } } } } private void _testStandAloneDeclaration(final AsyncXMLStreamReader<?> sr, final AsyncReaderWrapper reader) throws Exception { assertEquals(EVENT_INCOMPLETE, reader.currentToken()); assertTokenType(START_DOCUMENT, reader.nextToken()); assertEquals("UTF-8", sr.getEncoding()); assertEquals("UTF-8", sr.getCharacterEncodingScheme()); assertEquals("1.0", sr.getVersion()); assertTrue(sr.standaloneSet()); assertTrue(sr.isStandalone()); assertTokenType(START_ELEMENT, reader.nextToken()); assertEquals("root", sr.getLocalName()); } public void testStandAloneDeclaration2() throws Exception { final String XML = "<?xml version=\"1.0\" standalone='yes'?>\n<root/>"; final AsyncXMLInputFactory f = new InputFactoryImpl(); for (final int chunkSize : CHUNK_SIZES) { //test for byte array AsyncXMLStreamReader<AsyncByteArrayFeeder> sr_array = null; try { sr_array = f.createAsyncForByteArray(); final AsyncReaderWrapperForByteArray reader_array = new AsyncReaderWrapperForByteArray(sr_array, chunkSize, XML); _testStandAloneDeclaration2(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, XML); _testStandAloneDeclaration2(sr_buffer, reader_buffer); } finally { if(sr_buffer != null) { sr_buffer.close(); } } } } private void _testStandAloneDeclaration2(final AsyncXMLStreamReader<?> sr, final AsyncReaderWrapper reader) throws Exception { assertEquals(EVENT_INCOMPLETE, reader.currentToken()); assertTokenType(START_DOCUMENT, reader.nextToken()); assertEquals("UTF-8", sr.getEncoding()); assertNull(sr.getCharacterEncodingScheme()); assertEquals("1.0", sr.getVersion()); assertTrue(sr.standaloneSet()); assertTrue(sr.isStandalone()); assertTokenType(START_ELEMENT, reader.nextToken()); assertEquals("root", sr.getLocalName()); } }