package com.buglabs.common.tests.junit;
import java.io.IOException;
import java.util.List;
import junit.framework.TestCase;
import com.buglabs.util.xml.XmlNode;
import com.buglabs.util.xml.XmlParser;
import com.buglabs.util.xml.XpathQuery;
/**
* Test the xml parser.
* @author kgilmer
*
*/
public class XMLParseTests extends TestCase {
private String xml;
private String xml2;
private String xml3;
protected void setUp() throws Exception {
super.setUp();
xml = "<Package>" + "<programType>sal</programType>" + "<packageVersion>1</packageVersion>" + "<program>" + "<instructions>"
+ "<Get>" + "<url>http://localhost:8082/service/location</url>" + "</Get>" + "<Get>"
+ "<url>http://localhost:8082/service/system/username</url>" + "</Get>" + "<Post>"
+ "<url>http://ticker:8090/com.buglabs.net.servlet-1.0.38/cache/bug123/myapp/</url>" + "</Post>" + "<Debug/>"
+ "</instructions>" + "</program>" + "<modified>Thu Sep 14 19:39:39 EDT 2006</modified>" + "<name>testpkg2</name>"
+ "<author>Ken</author>" + "<active>true</active>" + "<created>Thu Sep 14 19:39:39 EDT 2006</created>" + "</Package>";
xml2 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><metadata xmlns=\"http://musicbrainz.org/ns/mmd-1.0#\" xmlns:ext=\"http://musicbrainz.org/ns/ext-1.0#\"><release-list><release id=\"6d931ac2-e389-4e99-8a01-1da65162c372\" type=\"Album Official\" ext:score=\"100\"><title>Wasp Star (Apple Venus, Volume II)</title><text-representation language=\"ENG\" script=\"Latn\"/><artist id=\"97c86b2c-2765-46a2-aef8-76a7e24c430f\"><name>XTC</name></artist><release-event-list><event date=\"2000-05-22\"/></release-event-list><disc-list count=\"2\"/><track-list count=\"12\"/></release><release id=\"ea9190fe-d7d9-4b82-a200-5e9874b61090\" type=\"Album Official\" ext:score=\"46\"><title>Apple Venus, Volume 1</title><text-representation language=\"ENG\" script=\"Latn\"/><asin>B00000I4JT</asin><artist id=\"97c86b2c-2765-46a2-aef8-76a7e24c430f\"><name>XTC</name></artist><release-event-list><event date=\"1999-02-22\"/></release-event-list><disc-list count=\"2\"/><track-list count=\"11\"/></release><release id=\"5c62721d-cf70-4c53-b929-15db1fa1f658\" type=\"Album Official\" ext:score=\"40\"><title>Homespun: The Apple Venus Volume One Home Demos</title><text-representation language=\"ENG\" script=\"Latn\"/><artist id=\"97c86b2c-2765-46a2-aef8-76a7e24c430f\"><name>XTC</name></artist><track-list count=\"11\"/></release><release id=\"e324cbc4-4206-43d9-999f-1be2212709fc\" type=\"Album Official\" ext:score=\"17\"><title>Go 2</title><text-representation language=\"ENG\" script=\"Latn\"/><asin>B00005ATHK</asin><artist id=\"97c86b2c-2765-46a2-aef8-76a7e24c430f\"><name>XTC</name></artist><release-event-list><event date=\"1978\"/></release-event-list><disc-list count=\"1\"/><track-list count=\"13\"/></release><release id=\"8d587543-b7ef-463c-b8b3-6e5273d31c91\" type=\"Album Official\" ext:score=\"17\"><title>Go 2</title><text-representation language=\"ENG\" script=\"Latn\"/><artist id=\"97c86b2c-2765-46a2-aef8-76a7e24c430f\"><name>XTC</name></artist><track-list count=\"13\"/></release><release id=\"5f39d0c8-74a7-4a76-91f3-0a9135730c4d\" type=\"Compilation Official\" ext:score=\"16\"><title>Coat of Many Cupboards (disc 2)</title><text-representation language=\"ENG\" script=\"Latn\"/><asin>B00005V94X</asin><artist id=\"97c86b2c-2765-46a2-aef8-76a7e24c430f\"><name>XTC</name></artist><track-list count=\"15\"/></release><release id=\"121ad31d-4612-4b01-acc4-82f7e5391341\" type=\"Compilation Official\" ext:score=\"16\"><title>Fossil Fuel: The XTC Singles 1977-92 (disc 2)</title><text-representation language=\"ENG\" script=\"Latn\"/><artist id=\"97c86b2c-2765-46a2-aef8-76a7e24c430f\"><name>XTC</name></artist><disc-list count=\"1\"/><track-list count=\"15\"/></release><release id=\"d0a288c2-a664-400d-85c3-2dab321966ff\" type=\"Live Official\" ext:score=\"16\"><title>Transistor Blast: The Best of the BBC Sessions (disc 2)</title><text-representation language=\"ENG\" script=\"Latn\"/><artist id=\"97c86b2c-2765-46a2-aef8-76a7e24c430f\"><name>XTC</name></artist><disc-list count=\"1\"/><track-list count=\"13\"/></release><release id=\"103e170a-2707-4f12-bd18-a92dd6ed1da4\" type=\"Live Bootleg\" ext:score=\"16\"><title>1980-01-16: The Rhythm: Hurrah's, New York City, NY, USA (disc 2)</title><text-representation language=\"ENG\" script=\"Latn\"/><artist id=\"97c86b2c-2765-46a2-aef8-76a7e24c430f\"><name>XTC</name></artist><track-list count=\"8\"/></release><release id=\"7ffde6dd-522c-462b-a14b-391c4a8f3fb5\" type=\"Album Official\" ext:score=\"12\"><title>WASP</title><text-representation language=\"ENG\" script=\"Latn\"/><artist id=\"171cbc8f-8ab3-4aec-9916-f0bdbe26bb79\"><name>W.A.S.P.</name></artist><release-event-list><event date=\"2003\"/></release-event-list><disc-list count=\"1\"/><track-list count=\"13\"/></release></release-list></metadata>";
xml3 = "<cars>" +
"<car name=\"mini\" color=\"yellow\"><wheel count=\"4\" code=\"ds2\"/><seat count=\"2\" type=\"bench\"/></car>" +
"<car name=\"land cruiser\" color=\"red\"><wheel count=\"4\" code=\"dn1\"/><seat count=\"4\" type=\"bucket\"/></car>" +
"<plane name=\"Boing 747\" color=\"silver\"><wheel count=\"5\" code=\"tt4\"/>" + "</plane>" +
"</cars>";
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void testSimpleXPath() {
try {
XmlNode root = XmlParser.parse(xml3);
Object o = XpathQuery.evaluate("/cars/car", root, XpathQuery.NODE_LIST);
assertTrue(o instanceof List);
List elems = (List) o;
assertTrue(elems.size() == 2);
assertTrue(elems.get(0) instanceof XmlNode);
XmlNode c1 = (XmlNode) elems.get(0);
assertTrue(c1.getName().equals("car"));
} catch (IOException e) {
fail(e.toString());
}
}
public void testAnynodeXPath() {
try {
XmlNode root = XmlParser.parse(xml3);
Object o = XpathQuery.evaluate("//wheel", root, XpathQuery.NODE_LIST);
assertTrue(o instanceof List);
List elems = (List) o;
assertTrue(elems.size() == 3);
assertTrue(elems.get(0) instanceof XmlNode);
XmlNode c1 = (XmlNode) elems.get(0);
assertTrue(c1.getName().equals("wheel"));
} catch (IOException e) {
fail(e.toString());
}
}
public void testAttrValueXPath() {
try {
XmlNode root = XmlParser.parse(xml3);
Object o = XpathQuery.evaluate("//wheel[@code='dn1']", root, XpathQuery.NODE_LIST);
assertTrue(o instanceof List);
List elems = (List) o;
assertTrue(elems.size() == 1);
assertTrue(elems.get(0) instanceof XmlNode);
XmlNode c1 = (XmlNode) elems.get(0);
assertTrue(c1.getName().equals("wheel"));
assertTrue(c1.getAttribute("code").equalsIgnoreCase("dn1"));
System.out.println(root.toString());
} catch (IOException e) {
fail(e.toString());
}
}
public void testAttrValueXPath2() {
try {
XmlNode root = XmlParser.parse(xml3);
Object o = XpathQuery.evaluate("//plane/wheel[@code='dn1']", root, XpathQuery.NODE_LIST);
assertTrue(o instanceof List);
List elems = (List) o;
assertTrue(elems.size() == 1);
assertTrue(elems.get(0) instanceof XmlNode);
XmlNode c1 = (XmlNode) elems.get(0);
assertTrue(c1.getName().equals("plane"));
assertTrue(c1.getAttribute("color").equalsIgnoreCase("silver"));
System.out.println(root.toString());
} catch (IOException e) {
fail(e.toString());
}
}
public void testSimpleXPath2() {
try {
XmlNode root = XmlParser.parse(xml3);
Object o = XpathQuery.evaluate("/cars/car", root, XpathQuery.NODE);
assertTrue(o instanceof XmlNode);
XmlNode c1 = (XmlNode) o;
assertTrue(c1.getName().equals("car"));
} catch (IOException e) {
fail(e.toString());
}
}
public void testParseString() {
XmlNode e = null;
try {
e = XmlParser.parse(xml);
} catch (IOException e1) {
fail(e1.getMessage());
}
assertEquals(e.childExists("programType"), true);
assertEquals(e.getFirstElement("programType").getValue().equals("sal"), true);
XmlNode e2 = null;
try {
e2 = XmlParser.parse(xml2);
} catch (IOException e1) {
fail(e1.getMessage());
}
assertTrue(e2.childExists("release-list"));
assertTrue(e2.getFirstElement("release-list/release/title") != null);
System.out.println(e2.toString());
}
public void testNamespaceXml() {
String namespaceXml="<obr:repository name='Untitled' obr:time='20051210072623.031' xmlns:obr=\"http://www.osgi.org/xmlns/scr/v1.0.0\"></obr:repository>";
String nonNamespaceXml="<repository name='Untitled' time='20051210072623.031' xmlns:obr='http://www.osgi.org/xmlns/scr/v1.0.0'></repository>";
XmlNode e1 = null;
try {
e1 = XmlParser.parse(namespaceXml, true);
} catch (IOException e) {
fail(e.getMessage());
}
XmlNode e2 = null;
try {
e2 = XmlParser.parse(nonNamespaceXml);
} catch (IOException e) {
fail(e.getMessage());
}
assertTrue(e1.getName().equals(e2.getName()));
assertTrue(e1.getAttributes().size() == e2.getAttributes().size());
}
public void testPrintXML() {
XmlNode e = null;
try {
e = XmlParser.parse(xml);
} catch (IOException e1) {
fail(e1.getMessage());
}
System.out.println(e.toString());
}
}