package com.googlecode.mycontainer.commons.util;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import org.junit.Test;
public class XMLQueryTest {
@Test
public void testClone() {
XMLQuery q = new XMLQuery();
q = q.append("<r><a><inner>1</inner><inner>2</inner></a><b v=\"v1\"/><c v=\"v2\">i</c></r>");
assertEquals("<r><a><inner>1</inner><inner>2</inner></a><b v=\"v1\"/><c v=\"v2\">i</c></r>", q.toXML());
XMLQuery q1 = q.clone();
XMLQuery q2 = q.clone();
assertEquals("<r><a><inner>1</inner><inner>2</inner></a><b v=\"v1\"/><c v=\"v2\">i</c></r>", q1.toXML());
assertEquals("<r><a><inner>1</inner><inner>2</inner></a><b v=\"v1\"/><c v=\"v2\">i</c></r>", q2.toXML());
assertFalse(q1.equals(q2));
assertEquals(2, q1.find("//inner").size());
}
@Test
public void testFind() {
XMLQuery q = new XMLQuery(
"<r><a><inner>1</inner><inner>2</inner></a><b v=\"v1\"/><c v=\"v2\">i</c><d><inner>3</inner></d></r>");
assertEquals(
"<r><a><inner>1</inner><inner>2</inner></a><b v=\"v1\"/><c v=\"v2\">i</c><d><inner>3</inner></d></r>",
q.clone().find("//r").toXML());
assertEquals(
"<r><a><inner>1</inner><inner>2</inner></a><b v=\"v1\"/><c v=\"v2\">i</c><d><inner>3</inner></d></r>",
q.clone().find("./r").toXML());
assertEquals(
"<r><a><inner>1</inner><inner>2</inner></a><b v=\"v1\"/><c v=\"v2\">i</c><d><inner>3</inner></d></r>",
q.clone().find("r").toXML());
assertEquals(
"<r><a><inner>1</inner><inner>2</inner></a><b v=\"v1\"/><c v=\"v2\">i</c><d><inner>3</inner></d></r>",
q.clone().find("/r").toXML());
assertEquals("<a><inner>1</inner><inner>2</inner></a>", q.clone().find("//a").toXML());
assertEquals("<inner>1</inner><inner>2</inner><inner>3</inner>", q.clone().find("//inner").toXML());
assertEquals("<inner>2</inner>", q.clone().find("//inner[2]").toXML());
assertEquals("<inner>1</inner><inner>2</inner>", q.clone().find("//a/inner").toXML());
assertEquals("<inner>1</inner><inner>2</inner>", q.clone().find("//a").find("./inner").toXML());
assertEquals("<inner>1</inner><inner>2</inner>", q.clone().find("//a").find(".//inner").toXML());
assertEquals("<inner>1</inner><inner>2</inner><inner>3</inner>", q.clone().find("//r").find(".//inner").toXML());
assertEquals("<b v=\"v1\"/><c v=\"v2\">i</c>", q.clone().find("//*[@v]").toXML());
assertEquals("[v=\"v1\", v=\"v2\"]", q.clone().find("//*/@v").toString());
assertEquals("", q.clone().find("//*/@v").find("./a").toXML());
assertEquals("<b v=\"v1\"/>", q.clone().find("//b").find(".").toXML());
assertEquals("[v=\"v1\"]", q.clone().find("//b").find("./@*").toString());
assertEquals("[v=\"v1\"]", q.clone().find("//b").find("@*").toString());
}
@Test
public void testContent() {
XMLQuery q = new XMLQuery("<r><a><inner x=\"v1\" y=\"v2\">1</inner></a></r>");
assertEquals("v1", q.clone().find("//@x").text());
assertEquals("v2", q.clone().find("//@y").text());
assertEquals("1", q.clone().find("//inner/text()").text());
}
@Test
public void testFindMixed() {
XMLQuery q = new XMLQuery("<r><a>mixed<b>start<c>middle</c>end</b></a></r>");
assertNull(q.clone().find("//c").text());
assertEquals("middle", q.clone().find("//c//text()").text());
assertNull(q.clone().find("//b").text());
assertEquals("start end", q.clone().find("//b/node()").text());
assertEquals("start middle end", q.clone().find("//b//node()").text());
assertNull(q.clone().find("//a").text());
assertEquals("mixed", q.clone().find("//a/node()").text());
assertEquals("mixed", q.clone().find("//a/text()").text());
assertEquals("mixed start middle end", q.clone().find("//a//node()").text());
assertEquals("mixed start middle end", q.clone().find("//a//text()").text());
}
}