package org.simpleframework.xml.stream; import junit.framework.TestCase; import java.io.StringReader; import org.simpleframework.xml.stream.InputNode; import org.simpleframework.xml.stream.NodeBuilder; import org.simpleframework.xml.stream.NodeMap; public class NodeReaderTest extends TestCase { private static final String SMALL_SOURCE = "<?xml version=\"1.0\"?>\n"+ "<override id='12' flag='true'>\n"+ " <text>entry text</text> \n\r"+ " <name>some name</name> \n"+ " <third>added to schema</third>\n"+ "</override>"; private static final String LARGE_SOURCE = "<?xml version='1.0'?>\n" + "<root version='2.1' id='234'>\n" + " <list type='sorted'>\n" + " <entry name='1'>\n" + " <value>value 1</value>\n" + " </entry>\n" + " <entry name='2'>\n" + " <value>value 2</value>\n" + " </entry>\n" + " <entry name='3'>\n" + " <value>value 3</value>\n" + " </entry>\n" + " </list>\n" + " <object name='name'>\n" + " <integer>123</integer>\n" + " <object name='key'>\n" + " <integer>12345</integer>\n" + " </object>\n" + " </object>\n" + "</root>"; public static final String EMPTY_SOURCE = "<root>\r\n" + " <empty/>\r\n" + " <notEmpty name='foo'/>\r\n" + " <empty></empty>\r\n" + "</root>"; public void testEmptySource() throws Exception { InputNode event = NodeBuilder.read(new StringReader(EMPTY_SOURCE)); assertTrue(event.isRoot()); assertFalse(event.isEmpty()); assertEquals("root", event.getName()); InputNode child = event.getNext(); assertTrue(child.isEmpty()); assertEquals("empty", child.getName()); child = event.getNext(); assertFalse(child.isEmpty()); assertEquals("notEmpty", child.getName()); assertEquals("foo", child.getAttribute("name").getValue()); child = event.getNext(); assertTrue(child.isEmpty()); assertEquals("empty", child.getName()); } public void testSmallSource() throws Exception { InputNode event = NodeBuilder.read(new StringReader(SMALL_SOURCE)); assertTrue(event.isRoot()); assertEquals("override", event.getName()); assertEquals("12", event.getAttribute("id").getValue()); assertEquals("true", event.getAttribute("flag").getValue()); NodeMap list = event.getAttributes(); assertEquals("12", list.get("id").getValue()); assertEquals("true", list.get("flag").getValue()); InputNode text = event.getNext(); assertFalse(text.isRoot()); assertTrue(event.isRoot()); assertEquals("text", text.getName()); assertEquals("entry text", text.getValue()); assertEquals(null, text.getNext()); InputNode name = event.getNext(); assertFalse(name.isRoot()); assertEquals("name", name.getName()); assertEquals("some name", name.getValue()); assertEquals(null, name.getNext()); assertEquals(null, text.getNext()); InputNode third = event.getNext(); assertTrue(event.isRoot()); assertFalse(third.isRoot()); assertEquals("third", third.getName()); assertEquals("text", text.getName()); assertEquals(null, text.getNext()); assertEquals("added to schema", third.getValue()); assertEquals(null, event.getNext()); } public void testLargeSource() throws Exception { InputNode event = NodeBuilder.read(new StringReader(LARGE_SOURCE)); assertTrue(event.isRoot()); assertEquals("root", event.getName()); assertEquals("2.1", event.getAttribute("version").getValue()); assertEquals("234", event.getAttribute("id").getValue()); NodeMap attrList = event.getAttributes(); assertEquals("2.1", attrList.get("version").getValue()); assertEquals("234", attrList.get("id").getValue()); InputNode list = event.getNext(); assertFalse(list.isRoot()); assertEquals("list", list.getName()); assertEquals("sorted", list.getAttribute("type").getValue()); InputNode entry = list.getNext(); InputNode value = list.getNext(); // same as entry.getNext() assertEquals("entry", entry.getName()); assertEquals("1", entry.getAttribute("name").getValue()); assertEquals("value", value.getName()); assertEquals("value 1", value.getValue()); assertEquals(null, value.getAttribute("name")); assertEquals(null, entry.getNext()); assertEquals(null, value.getNext()); entry = list.getNext(); value = entry.getNext(); // same as list.getNext() assertEquals("entry", entry.getName()); assertEquals("2", entry.getAttribute("name").getValue()); assertEquals("value", value.getName()); assertEquals("value 2", value.getValue()); assertEquals(null, value.getAttribute("name")); assertEquals(null, entry.getNext()); entry = list.getNext(); value = entry.getNext(); // same as list.getNext() assertEquals("entry", entry.getName()); assertEquals("3", entry.getAttribute("name").getValue()); assertEquals("value", value.getName()); assertEquals("value 3", value.getValue()); assertEquals(null, value.getAttribute("name")); assertEquals(null, entry.getNext()); assertEquals(null, list.getNext()); InputNode object = event.getNext(); InputNode integer = event.getNext(); // same as object.getNext() assertEquals("object", object.getName()); assertEquals("name", object.getAttribute("name").getValue()); assertEquals("integer", integer.getName()); assertEquals("123", integer.getValue()); object = object.getNext(); // same as event.getNext() integer = object.getNext(); assertEquals("object", object.getName()); assertEquals("key", object.getAttribute("name").getValue()); assertEquals("integer", integer.getName()); assertEquals("12345", integer.getValue()); } public void testSkip() throws Exception { InputNode event = NodeBuilder.read(new StringReader(LARGE_SOURCE)); assertTrue(event.isRoot()); assertEquals("root", event.getName()); assertEquals("2.1", event.getAttribute("version").getValue()); assertEquals("234", event.getAttribute("id").getValue()); NodeMap attrList = event.getAttributes(); assertEquals("2.1", attrList.get("version").getValue()); assertEquals("234", attrList.get("id").getValue()); InputNode list = event.getNext(); assertFalse(list.isRoot()); assertEquals("list", list.getName()); assertEquals("sorted", list.getAttribute("type").getValue()); InputNode entry = list.getNext(); InputNode value = list.getNext(); // same as entry.getNext() assertEquals("entry", entry.getName()); assertEquals("1", entry.getAttribute("name").getValue()); assertEquals("value", value.getName()); assertEquals("value 1", value.getValue()); assertEquals(null, value.getAttribute("name")); assertEquals(null, entry.getNext()); assertEquals(null, value.getNext()); entry = list.getNext(); entry.skip(); assertEquals(entry.getNext(), null); entry = list.getNext(); value = entry.getNext(); // same as list.getNext() assertEquals("entry", entry.getName()); assertEquals("3", entry.getAttribute("name").getValue()); assertEquals("value", value.getName()); assertEquals("value 3", value.getValue()); assertEquals(null, value.getAttribute("name")); assertEquals(null, entry.getNext()); assertEquals(null, list.getNext()); InputNode object = event.getNext(); InputNode integer = event.getNext(); // same as object.getNext() assertEquals("object", object.getName()); assertEquals("name", object.getAttribute("name").getValue()); assertEquals("integer", integer.getName()); assertEquals("123", integer.getValue()); object = object.getNext(); // same as event.getNext() integer = object.getNext(); assertEquals("object", object.getName()); assertEquals("key", object.getAttribute("name").getValue()); assertEquals("integer", integer.getName()); assertEquals("12345", integer.getValue()); } }