package com.fasterxml.jackson.dataformat.xml.stream; import java.io.*; import javax.xml.stream.*; import com.fasterxml.jackson.dataformat.xml.XmlTestBase; import com.fasterxml.jackson.dataformat.xml.deser.XmlTokenStream; public class XmlTokenStreamTest extends XmlTestBase { public void testSimple() throws Exception { String XML = "<root><leaf id='123'>abc</leaf></root>"; XMLStreamReader sr = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(XML)); // must point to START_ELEMENT, so: sr.nextTag(); XmlTokenStream tokens = new XmlTokenStream(sr, XML); assertEquals(XmlTokenStream.XML_START_ELEMENT, tokens.getCurrentToken()); assertEquals("root", tokens.getLocalName()); assertEquals(XmlTokenStream.XML_START_ELEMENT, tokens.next()); assertEquals("leaf", tokens.getLocalName()); assertEquals(XmlTokenStream.XML_ATTRIBUTE_NAME, tokens.next()); assertEquals("id", tokens.getLocalName()); assertEquals(XmlTokenStream.XML_ATTRIBUTE_VALUE, tokens.next()); assertEquals("123", tokens.getText()); assertEquals(XmlTokenStream.XML_TEXT, tokens.next()); assertEquals("abc", tokens.getText()); assertEquals(XmlTokenStream.XML_END_ELEMENT, tokens.next()); assertEquals(XmlTokenStream.XML_END_ELEMENT, tokens.next()); assertEquals(XmlTokenStream.XML_END, tokens.next()); } public void testRootAttributes() throws Exception { String XML = "<root id='x' />"; XMLStreamReader sr = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(XML)); // must point to START_ELEMENT, so: sr.nextTag(); XmlTokenStream tokens = new XmlTokenStream(sr, XML); assertEquals(XmlTokenStream.XML_START_ELEMENT, tokens.getCurrentToken()); assertEquals("root", tokens.getLocalName()); assertEquals(XmlTokenStream.XML_ATTRIBUTE_NAME, tokens.next()); assertEquals("id", tokens.getLocalName()); assertEquals(XmlTokenStream.XML_ATTRIBUTE_VALUE, tokens.next()); assertEquals("x", tokens.getText()); assertEquals(XmlTokenStream.XML_END_ELEMENT, tokens.next()); assertEquals(XmlTokenStream.XML_END, tokens.next()); } public void testEmptyTags() throws Exception { String XML = "<root><leaf /></root>"; XMLStreamReader sr = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(XML)); // must point to START_ELEMENT, so: sr.nextTag(); XmlTokenStream tokens = new XmlTokenStream(sr, XML); assertEquals(XmlTokenStream.XML_START_ELEMENT, tokens.getCurrentToken()); assertEquals("root", tokens.getLocalName()); assertEquals(XmlTokenStream.XML_START_ELEMENT, tokens.next()); assertEquals("leaf", tokens.getLocalName()); assertEquals(XmlTokenStream.XML_END_ELEMENT, tokens.next()); assertEquals(XmlTokenStream.XML_END_ELEMENT, tokens.next()); assertEquals(XmlTokenStream.XML_END, tokens.next()); } public void testNested() throws Exception { String XML = "<root><a><b><c>abc</c></b></a></root>"; XMLStreamReader sr = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(XML)); sr.nextTag(); XmlTokenStream tokens = new XmlTokenStream(sr, XML); assertEquals(XmlTokenStream.XML_START_ELEMENT, tokens.getCurrentToken()); assertEquals("root", tokens.getLocalName()); assertEquals(XmlTokenStream.XML_START_ELEMENT, tokens.next()); assertEquals("a", tokens.getLocalName()); assertEquals(XmlTokenStream.XML_START_ELEMENT, tokens.next()); assertEquals("b", tokens.getLocalName()); assertEquals(XmlTokenStream.XML_START_ELEMENT, tokens.next()); assertEquals("c", tokens.getLocalName()); assertEquals(XmlTokenStream.XML_TEXT, tokens.next()); assertEquals("abc", tokens.getText()); assertEquals(XmlTokenStream.XML_END_ELEMENT, tokens.next()); assertEquals(XmlTokenStream.XML_END_ELEMENT, tokens.next()); assertEquals(XmlTokenStream.XML_END_ELEMENT, tokens.next()); assertEquals(XmlTokenStream.XML_END_ELEMENT, tokens.next()); assertEquals(XmlTokenStream.XML_END, tokens.next()); } }