/*
* Copyright (c) 2012-2015 iWave Software LLC
* All Rights Reserved
*/
package com.iwave.ext.xml;
import static org.junit.Assert.*;
import org.apache.log4j.Logger;
import org.junit.Test;
public class XmlStringBuilderTest {
private static Logger log = Logger.getLogger(XmlStringBuilderTest.class);
@Test
public void testSingleNode() {
XmlStringBuilder sb = new XmlStringBuilder();
sb.start("node");
sb.end();
assertEquals("<node/>", sb.toString());
}
@Test
public void testSingleNodeAttributes() {
XmlStringBuilder sb = new XmlStringBuilder();
sb.start("node");
sb.attr("a", "A");
sb.attr("b", "B");
sb.end();
assertEquals("<node a=\"A\" b=\"B\"/>", sb.toString());
}
@Test
public void testSingleNodeContent() {
XmlStringBuilder sb = new XmlStringBuilder();
sb.start("node");
sb.text("TEXT");
sb.end();
assertEquals("<node>TEXT</node>", sb.toString());
}
@Test
public void testSingleNodeAttributesAndContent() {
XmlStringBuilder sb = new XmlStringBuilder();
sb.start("node");
sb.attr("a", "A");
sb.text("TEXT");
sb.end();
assertEquals("<node a=\"A\">TEXT</node>", sb.toString());
}
@Test
public void testMultipleNodes() {
XmlStringBuilder sb = new XmlStringBuilder();
sb.start("a");
sb.start("b").text("B1").end();
sb.start("b").text("B2").end();
sb.end();
assertEquals("<a><b>B1</b><b>B2</b></a>", sb.toString());
}
@Test
public void testInvalidAttrs() {
XmlStringBuilder sb = new XmlStringBuilder();
try {
sb.attr("a", "A");
fail("Attributes should not be allowed before a start element");
} catch (IllegalStateException e) {
log.error(e.getMessage(), e);
}
sb.start("node");
sb.text("text");
try {
sb.attr("a", "A");
fail("Attributes should not be allowed after outputting text");
} catch (IllegalStateException e) {
log.error(e.getMessage(), e);
}
sb.end();
try {
sb.attr("a", "A");
fail("Attributes should not be allowed after closing an element");
} catch (IllegalStateException e) {
log.error(e.getMessage(), e);
}
}
@Test
public void testInvalidState() {
XmlStringBuilder sb = new XmlStringBuilder();
try {
sb.end();
fail("Should not be able to end an element when none was started");
} catch (IllegalStateException e) {
log.error(e.getMessage(), e);
}
sb.start("node");
sb.end();
try {
sb.end();
fail("Should not be able to end an element when none remain");
} catch (IllegalStateException e) {
log.error(e.getMessage(), e);
}
}
@Test
public void testXmlEntities() {
XmlStringBuilder sb = new XmlStringBuilder();
sb.start("node");
sb.attr("amp", "\"'<&>");
sb.text("\"'<&>");
sb.end();
assertEquals("<node amp=\""'<&>\">\"'<&></node>", sb.toString());
}
@Test
public void testElementText() {
XmlStringBuilder sb = new XmlStringBuilder();
sb.element("node", "text");
assertEquals("<node>text</node>", sb.toString());
}
@Test
public void testElementValue() {
XmlStringBuilder sb = new XmlStringBuilder();
sb.start("root");
sb.element("int", 5);
sb.element("long", ((long) Integer.MAX_VALUE) + 1);
sb.element("boolean", true);
sb.element("double", 1.5);
sb.element("float", 0.5);
sb.end();
assertEquals("<root><int>5</int><long>2147483648</long><boolean>true</boolean>"
+ "<double>1.5</double><float>0.5</float></root>", sb.toString());
}
}