package org.tigris.juxy;
import junit.framework.TestCase;
import org.tigris.juxy.util.DOMUtil;
import org.tigris.juxy.xpath.JavaxXPathExpr;
import org.tigris.juxy.xpath.JaxenXPathExpr;
import org.tigris.juxy.xpath.XPathExpressionException;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import javax.xml.xpath.XPathFactoryConfigurationException;
/**
*/
public class UTestResultDocumentProxy extends TestCase {
public void testTwoTextNodesInTheFragment() {
Document doc = DOMUtil.newDocument();
DocumentFragment fragment = doc.createDocumentFragment();
fragment.appendChild(doc.createTextNode("text 1"));
fragment.appendChild(doc.createTextNode("text 2"));
Document proxiedDoc = (Document) ResultDocumentProxy.newInstance(doc, fragment);
assertEquals("text 1", proxiedDoc.getChildNodes().item(0).getNodeValue());
assertEquals("text 2", proxiedDoc.getChildNodes().item(1).getNodeValue());
}
public void testElementAndTextNode() {
Document doc = DOMUtil.newDocument();
DocumentFragment fragment = doc.createDocumentFragment();
fragment.appendChild(doc.createElement("elem"));
fragment.appendChild(doc.createTextNode("text 2"));
Document proxiedDoc = (Document) ResultDocumentProxy.newInstance(doc, fragment);
assertEquals("elem", proxiedDoc.getChildNodes().item(0).getNodeName());
assertEquals(Node.ELEMENT_NODE, proxiedDoc.getChildNodes().item(0).getNodeType());
assertEquals("text 2", proxiedDoc.getChildNodes().item(1).getNodeValue());
}
public void testTwoRootElements() {
Document doc = DOMUtil.newDocument();
DocumentFragment fragment = doc.createDocumentFragment();
fragment.appendChild(doc.createElement("elem1"));
fragment.appendChild(doc.createElement("elem2"));
Document proxiedDoc = (Document) ResultDocumentProxy.newInstance(doc, fragment);
assertEquals("elem1", proxiedDoc.getChildNodes().item(0).getNodeName());
assertEquals("elem2", proxiedDoc.getChildNodes().item(1).getNodeName());
}
public void testJaxenXPathOverProxiedDocument() throws XPathExpressionException {
Document doc = DOMUtil.newDocument();
DocumentFragment fragment = doc.createDocumentFragment();
fragment.appendChild(doc.createElement("elem1"));
fragment.appendChild(doc.createElement("elem2"));
Document proxiedDoc = (Document) ResultDocumentProxy.newInstance(doc, fragment);
assertEquals(Node.DOCUMENT_NODE, new JaxenXPathExpr("/").toNode(proxiedDoc).getNodeType());
JaxenXPathExpr x = new JaxenXPathExpr("/*");
Element elem1 = (Element) x.toNodeList(proxiedDoc).get(0);
Element elem2 = (Element) x.toNodeList(proxiedDoc).get(1);
assertEquals("elem1", elem1.getNodeName());
assertEquals("elem2", elem2.getNodeName());
x = new JaxenXPathExpr("/*[1]");
assertEquals("elem1", x.toNode(proxiedDoc).getNodeName());
x = new JaxenXPathExpr("/*[last()]");
assertEquals("elem2", x.toNode(proxiedDoc).getNodeName());
x = new JaxenXPathExpr("/*[1]/following-sibling::*");
assertEquals("elem2", x.toNode(proxiedDoc).getNodeName());
x = new JaxenXPathExpr("/*[last()]/preceding-sibling::*");
assertEquals("elem1", x.toNode(proxiedDoc).getNodeName());
}
public void testJavaxXPathOverProxiedDocument() throws XPathExpressionException, XPathFactoryConfigurationException {
Document doc = DOMUtil.newDocument();
DocumentFragment fragment = doc.createDocumentFragment();
fragment.appendChild(doc.createElement("elem1"));
fragment.appendChild(doc.createElement("elem2"));
Document proxiedDoc = (Document) ResultDocumentProxy.newInstance(doc, fragment);
assertEquals(Node.DOCUMENT_NODE, new JavaxXPathExpr("/").toNode(proxiedDoc).getNodeType());
JavaxXPathExpr x = new JavaxXPathExpr("/*");
Element elem1 = (Element) x.toNodeList(proxiedDoc).get(0);
Element elem2 = (Element) x.toNodeList(proxiedDoc).get(1);
assertEquals("elem1", elem1.getNodeName());
assertEquals("elem2", elem2.getNodeName());
x = new JavaxXPathExpr("/*[1]");
assertEquals("elem1", x.toNode(proxiedDoc).getNodeName());
x = new JavaxXPathExpr("/*[last()]");
assertEquals("elem2", x.toNode(proxiedDoc).getNodeName());
x = new JavaxXPathExpr("/*[1]/following-sibling::*");
assertEquals("elem2", x.toNode(proxiedDoc).getNodeName());
x = new JavaxXPathExpr("/*[last()]/preceding-sibling::*");
assertEquals("elem1", x.toNode(proxiedDoc).getNodeName());
}
}