package net.varkhan.base.conversion.formats;
import junit.framework.TestCase;
import java.io.StringReader;
import java.util.LinkedHashMap;
import java.util.Map;
public class XmlTest extends TestCase {
public void testWriteElmt() throws Exception {
StringBuilder buf = new StringBuilder();
Xml.writeElmt(buf,"foo",null,asMap("a","b","c","","d",null));
assertEquals("empty attr","<foo a=\"b\" c/>",buf.toString());
buf.setLength(0);
Xml.writeElmt(buf,"foo",null,asMap());
assertEquals("empty bare","<foo/>",buf.toString());
buf.setLength(0);
Xml.writeElmt(buf,"foo","bar",asMap("a","b","c","","d",null));
assertEquals("value attr","<foo a=\"b\" c>bar</foo>",buf.toString());
buf.setLength(0);
Xml.writeElmt(buf,"foo","bar",asMap());
assertEquals("value bare","<foo>bar</foo>",buf.toString());
}
public void testWriteElmtA() throws Exception {
StringBuilder buf = new StringBuilder();
Xml.writeElmt(buf,"foo",null,new Object[]{"a","b","c","","d",null});
assertEquals("empty attr","<foo a=\"b\" c/>",buf.toString());
buf.setLength(0);
Xml.writeElmt(buf,"foo",null);
assertEquals("empty bare","<foo/>",buf.toString());
buf.setLength(0);
Xml.writeElmt(buf,"foo","bar",new Object[]{"a","b","c","","d",null});
assertEquals("value attr","<foo a=\"b\" c>bar</foo>",buf.toString());
buf.setLength(0);
Xml.writeElmt(buf,"foo","bar");
assertEquals("value bare","<foo>bar</foo>",buf.toString());
buf.setLength(0);
Xml.writeElmt(buf,"foo","bar",new Object[]{"a","b\"x\'y&z<w>","c","","d",null});
assertEquals("value attr","<foo a=\"b"x'y&z<w>\" c>bar</foo>",buf.toString());
}
public void testWriteElmtOpen() throws Exception {
StringBuilder buf = new StringBuilder();
Xml.writeElmtOpen(buf,"foo",asMap("a","b","c","","d",null));
assertEquals("attr","<foo a=\"b\" c>",buf.toString());
buf.setLength(0);
Xml.writeElmtOpen(buf,"foo",asMap());
assertEquals("bare","<foo>",buf.toString());
}
public void testWriteElmtOpenA() throws Exception {
StringBuilder buf = new StringBuilder();
Xml.writeElmtOpen(buf,"foo",new Object[]{"a","b","c","","d",null});
assertEquals("attr","<foo a=\"b\" c>",buf.toString());
buf.setLength(0);
Xml.writeElmtOpen(buf,"foo");
assertEquals("bare","<foo>",buf.toString());
}
public void testWriteElmtClose() throws Exception {
StringBuilder buf = new StringBuilder();
Xml.writeElmtClose(buf,"foo");
assertEquals("bare","</foo>",buf.toString());
}
public void testWriteAttr() throws Exception {
StringBuilder buf = new StringBuilder();
Xml.writeAttr(buf,asMap("a","b","c","","d",null));
assertEquals("attr"," a=\"b\" c",buf.toString());
}
public void testWriteAttrA() throws Exception {
StringBuilder buf = new StringBuilder();
Xml.writeAttr(buf,new Object[]{"a","b","c","","d",null});
assertEquals("attr"," a=\"b\" c",buf.toString());
}
public void testWriteComm() throws Exception {
StringBuilder buf = new StringBuilder();
Xml.writeComm(buf,"bar");
assertEquals("comm","<!--bar-->",buf.toString());
buf.setLength(0);
Xml.writeComm(buf,"bar--baz");
assertEquals("comm","<!--bar- -baz-->",buf.toString());
}
public void testWriteCommA() throws Exception {
StringBuilder buf = new StringBuilder();
Xml.writeComm(buf,new String[]{"bar","baz"});
assertEquals("comm","<!--bar\nbaz\n-->",buf.toString());
}
public void testWriteText() throws Exception {
StringBuilder buf = new StringBuilder();
Xml.writeText(buf,"<&bar>");
assertEquals("text","<&bar>",buf.toString());
}
public void testWriteTextA() throws Exception {
StringBuilder buf = new StringBuilder();
Xml.writeText(buf,new String[]{"bar","baz","ba\"<>"});
assertEquals("text","bar\nbaz\nba"<>\n",buf.toString());
}
public void testReadElemInline() throws Exception {
StringReader r = new StringReader(" \n<foo a=\"b\" c=\""\"/>\t\n");
Xml.Parser p = new Xml.Parser(r);
Xml.Event e = p.readEvent();
assertEquals("inline",Xml.Event.Phase.Inline,e.phase());
assertEquals("elem",Xml.Node.Type.ELEM,e.type());
assertEquals("<foo>","foo",e.name());
assertEquals("a=\"b\"","b",e.attr().get("a"));
assertEquals("c=\"\\\"\"","\"",e.attr().get("c"));
}
public void testReadElemOpenClose() throws Exception {
StringReader r = new StringReader(" \n<foo a=\"b\">\t\nbar"x<y > </foo>");
Xml.Parser p = new Xml.Parser(r);
Xml.Event e = p.readEvent();
assertEquals("open",Xml.Event.Phase.Open,e.phase());
assertEquals("elem",Xml.Node.Type.ELEM,e.type());
assertEquals("<foo>","foo",e.name());
e = p.readEvent();
assertEquals("inline",Xml.Event.Phase.Inline,e.phase());
assertEquals("text",Xml.Node.Type.TEXT,e.type());
assertEquals("\"bar\\\"x<y> \"","bar\"x<y > ",e.text());
e = p.readEvent();
assertEquals("close",Xml.Event.Phase.Close,e.phase());
assertEquals("elem",Xml.Node.Type.ELEM,e.type());
assertEquals("<foo>","foo",e.name());
}
public void testReadElemOpenCloseInner() throws Exception {
StringReader r = new StringReader(" \n<foo a=\"b\">\t\n<bar c=\"d\"/>baz<bat e=\"f\">bal</bat></foo>");
Xml.Parser p = new Xml.Parser(r);
Xml.Event e = p.readEvent();
assertEquals("open",Xml.Event.Phase.Open,e.phase());
assertEquals("elem",Xml.Node.Type.ELEM,e.type());
assertEquals("<foo>","foo",e.name());
e = p.readEvent();
assertEquals("inline",Xml.Event.Phase.Inline,e.phase());
assertEquals("elem",Xml.Node.Type.ELEM,e.type());
assertEquals("<bar>","bar",e.name());
e = p.readEvent();
assertEquals("inline",Xml.Event.Phase.Inline,e.phase());
assertEquals("text",Xml.Node.Type.TEXT,e.type());
assertEquals("\"baz\"","baz",e.text());
e = p.readEvent();
assertEquals("open",Xml.Event.Phase.Open,e.phase());
assertEquals("elem",Xml.Node.Type.ELEM,e.type());
assertEquals("<bat>","bat",e.name());
e = p.readEvent();
assertEquals("inline",Xml.Event.Phase.Inline,e.phase());
assertEquals("text",Xml.Node.Type.TEXT,e.type());
assertEquals("\"bal\"","bal",e.text());
e = p.readEvent();
assertEquals("close",Xml.Event.Phase.Close,e.phase());
assertEquals("elem",Xml.Node.Type.ELEM,e.type());
assertEquals("<bat>","bat",e.name());
e = p.readEvent();
assertEquals("close",Xml.Event.Phase.Close,e.phase());
assertEquals("elem",Xml.Node.Type.ELEM,e.type());
assertEquals("<foo>","foo",e.name());
}
private static Map<CharSequence,Object> asMap(Object... kv) {
Map<CharSequence,Object> m = new LinkedHashMap<CharSequence,Object>();
for(int i=0; i+1<kv.length; i+=2) m.put((CharSequence) kv[i], kv[i+1]);
return m;
}
}