package org.deegree.securityproxy.service.commons.responsefilter.capabilities; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.Iterator; import javax.xml.stream.FactoryConfigurationError; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.events.XMLEvent; import org.junit.After; import org.junit.Before; import org.junit.Test; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz</a> * @author last edited by: $Author: lyn $ * * @version $Revision: $, $Date: $ */ public class BufferingXMLEventReaderTest { private BufferingXMLEventReader bufferingReader; @Before public void createReader() throws FactoryConfigurationError, XMLStreamException { String xml = "<A><B><c>ctext</c></B><D><e>etext</e></D><A>"; InputStream originalCapabilities = new ByteArrayInputStream( xml.getBytes() ); XMLInputFactory inFactory = XMLInputFactory.newInstance(); XMLEventReader reader = inFactory.createXMLEventReader( originalCapabilities ); bufferingReader = new BufferingXMLEventReader( reader ); } @After public void closeReader() throws XMLStreamException { bufferingReader.close(); } @Test public void testPeekNextEventIsStartDocument() throws Exception { XMLEvent peekNextEvent = bufferingReader.peekNextEvent(); assertThat( peekNextEvent.isStartDocument(), is( true ) ); XMLEvent nextEvent = bufferingReader.nextEvent(); assertThat( nextEvent.isStartDocument(), is( true ) ); } @Test public void testPeekNextEventIsStartElement() throws Exception { XMLEvent nextEvent = bufferingReader.nextEvent(); nextEvent = bufferingReader.nextEvent(); assertThat( nextEvent.isStartElement(), is( true ) ); assertThat( nextEvent.asStartElement().getName().getLocalPart(), is( "A" ) ); XMLEvent peekNextEvent = bufferingReader.peekNextEvent(); assertThat( peekNextEvent.isStartElement(), is( true ) ); assertThat( peekNextEvent.asStartElement().getName().getLocalPart(), is( "B" ) ); nextEvent = bufferingReader.nextEvent(); assertThat( nextEvent.isStartElement(), is( true ) ); assertThat( nextEvent.asStartElement().getName().getLocalPart(), is( "B" ) ); } @Test public void testPeekNextEventIsEndElement() throws Exception { XMLEvent nextEvent = bufferingReader.nextEvent(); nextEvent = bufferingReader.nextEvent(); nextEvent = bufferingReader.nextEvent(); nextEvent = bufferingReader.nextEvent(); nextEvent = bufferingReader.nextEvent(); XMLEvent peekNextEvent = bufferingReader.peekNextEvent(); assertThat( peekNextEvent.isEndElement(), is( true ) ); assertThat( peekNextEvent.asEndElement().getName().getLocalPart(), is( "c" ) ); nextEvent = bufferingReader.nextEvent(); assertThat( nextEvent.isEndElement(), is( true ) ); assertThat( nextEvent.asEndElement().getName().getLocalPart(), is( "c" ) ); } @Test public void testPeekNextEventIsText() throws Exception { XMLEvent nextEvent = bufferingReader.nextEvent(); nextEvent = bufferingReader.nextEvent(); nextEvent = bufferingReader.nextEvent(); nextEvent = bufferingReader.nextEvent(); XMLEvent peekNextEvent = bufferingReader.peekNextEvent(); assertThat( peekNextEvent.isCharacters(), is( true ) ); assertThat( peekNextEvent.asCharacters().getData(), is( "ctext" ) ); nextEvent = bufferingReader.nextEvent(); assertThat( nextEvent.isCharacters(), is( true ) ); assertThat( nextEvent.asCharacters().getData(), is( "ctext" ) ); } @Test public void testPeekNextEventMultiplePeekIsText() throws Exception { XMLEvent nextEvent = bufferingReader.nextEvent(); nextEvent = bufferingReader.nextEvent(); XMLEvent peekNextEvent = bufferingReader.peekNextEvent(); peekNextEvent = bufferingReader.peekNextEvent(); peekNextEvent = bufferingReader.peekNextEvent(); assertThat( peekNextEvent.isCharacters(), is( true ) ); assertThat( peekNextEvent.asCharacters().getData(), is( "ctext" ) ); nextEvent = bufferingReader.nextEvent(); nextEvent = bufferingReader.nextEvent(); nextEvent = bufferingReader.nextEvent(); assertThat( nextEvent.isCharacters(), is( true ) ); assertThat( nextEvent.asCharacters().getData(), is( "ctext" ) ); } @Test public void testRetrievePeekIteratorFromStartDocument() throws Exception { Iterator<XMLEvent> peekIterator = bufferingReader.retrievePeekIterator( null ); XMLEvent next = peekIterator.next(); assertThat( next.isStartDocument(), is( true ) ); } @Test public void testRetrievePeekIteratorShouldStartAtNext() throws Exception { bufferingReader.nextEvent(); bufferingReader.nextEvent(); bufferingReader.nextEvent(); Iterator<XMLEvent> peekIterator = bufferingReader.retrievePeekIterator( null ); XMLEvent next = peekIterator.next(); assertThat( next.isStartElement(), is( true ) ); assertThat( next.asStartElement().getName().getLocalPart(), is( "c" ) ); } @Test public void testRetrievePeekIteratorShouldStartAtPeeked() throws Exception { bufferingReader.nextEvent(); bufferingReader.nextEvent(); bufferingReader.nextEvent(); bufferingReader.peekNextEvent(); bufferingReader.peekNextEvent(); Iterator<XMLEvent> peekIterator = bufferingReader.retrievePeekIterator( null ); XMLEvent next = peekIterator.next(); assertThat( next.isStartElement(), is( true ) ); assertThat( next.asStartElement().getName().getLocalPart(), is( "c" ) ); } @Test public void testRetrievePeekIteratorShouldStartAtStartEvent() throws Exception { bufferingReader.nextEvent(); bufferingReader.nextEvent(); bufferingReader.nextEvent(); bufferingReader.peekNextEvent(); XMLEvent startEvent = bufferingReader.peekNextEvent(); bufferingReader.peekNextEvent(); bufferingReader.peekNextEvent(); Iterator<XMLEvent> peekIterator = bufferingReader.retrievePeekIterator( startEvent ); XMLEvent next = peekIterator.next(); assertThat( next.isCharacters(), is( true ) ); assertThat( next.asCharacters().getData(), is( "ctext" ) ); } }