package com.delcyon.capo.xml.cdom; import java.io.File; import javax.xml.parsers.DocumentBuilderFactory; import org.junit.After; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.w3c.dom.Document; import org.w3c.dom.Node; import com.delcyon.capo.xml.XMLDiff; import com.delcyon.capo.xml.XPath; public class CDocumentTest { @BeforeClass public static void setUpBeforeClass() throws Exception { } @AfterClass public static void tearDownAfterClass() throws Exception { } @Before public void setUp() throws Exception { System.clearProperty("javax.xml.parsers.DocumentBuilderFactory"); } @After public void tearDown() throws Exception { System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "com.delcyon.capo.xml.cdom.CDocumentBuilderFactory"); } @Test public void testBuilderDifferences() throws Exception { String file = "test-data/cdom_test_data/parse1.xml"; DocumentBuilderFactory systemDocumentBuilderFactory = DocumentBuilderFactory.newInstance(); systemDocumentBuilderFactory.setNamespaceAware(true); Document systemDocument = systemDocumentBuilderFactory.newDocumentBuilder().parse(new File(file)); Assert.assertFalse(systemDocument instanceof CDocument); CDocumentBuilderFactory cDocumentBuilderFactory = new CDocumentBuilderFactory(); cDocumentBuilderFactory.setNamespaceAware(true); CDocument cDocument = (CDocument) cDocumentBuilderFactory.newDocumentBuilder().parse(new File(file)); Assert.assertTrue(cDocument instanceof CDocument); XPath.dumpNode(cDocument, System.err); XMLDiff xmlDiff = new XMLDiff(); //xmlDiff.setAllowNamespaceMismatches(true); Document diffDocument = xmlDiff.getDifferences(systemDocument, cDocument); if(XMLDiff.EQUALITY.equals(diffDocument.getDocumentElement().getAttribute(XMLDiff.XDIFF_PREFIX+":"+XMLDiff.XDIFF_ELEMENT_ATTRIBUTE_NAME)) == false) { XPath.dumpNode(diffDocument.getDocumentElement(), System.err); } Assert.assertEquals(XMLDiff.EQUALITY, diffDocument.getDocumentElement().getAttribute(XMLDiff.XDIFF_PREFIX+":"+XMLDiff.XDIFF_ELEMENT_ATTRIBUTE_NAME)); } @Test public void testBuilderDifferences2() throws Exception { String file = "test-data/cdom_test_data/parse2.xml"; DocumentBuilderFactory systemDocumentBuilderFactory = DocumentBuilderFactory.newInstance(); systemDocumentBuilderFactory.setNamespaceAware(true); Document systemDocument = systemDocumentBuilderFactory.newDocumentBuilder().parse(new File(file)); Assert.assertFalse(systemDocument instanceof CDocument); CDocumentBuilderFactory cDocumentBuilderFactory = new CDocumentBuilderFactory(); cDocumentBuilderFactory.setNamespaceAware(true); CDocument cDocument = (CDocument) cDocumentBuilderFactory.newDocumentBuilder().parse(new File(file)); Assert.assertTrue(cDocument instanceof CDocument); Node sNode = XPath.selectSingleNode(systemDocument, "//stdout"); String spath = XPath.getXPath(sNode); sNode = XPath.selectSingleNode(systemDocument, spath); sNode.getNodeValue(); Node cNode = XPath.selectSingleNode(cDocument, "//stdout"); String cpath = XPath.getXPath(cNode); cNode = XPath.selectSingleNode(cDocument, cpath); cNode.getNodeValue(); XMLDiff xmlDiff = new XMLDiff(); //xmlDiff.setAllowNamespaceMismatches(true); Document diffDocument = xmlDiff.getDifferences(systemDocument, cDocument); if(XMLDiff.EQUALITY.equals(diffDocument.getDocumentElement().getAttribute(XMLDiff.XDIFF_PREFIX+":"+XMLDiff.XDIFF_ELEMENT_ATTRIBUTE_NAME)) == false) { XPath.dumpNode(diffDocument.getDocumentElement(), System.err); } Assert.assertEquals(XMLDiff.EQUALITY, diffDocument.getDocumentElement().getAttribute(XMLDiff.XDIFF_PREFIX+":"+XMLDiff.XDIFF_ELEMENT_ATTRIBUTE_NAME)); } @Test public void simpleTest() throws Exception { CDocumentBuilderFactory cDocumentBuilderFactory = new CDocumentBuilderFactory(); cDocumentBuilderFactory.setNamespaceAware(true); CDocument cDocument = (CDocument) cDocumentBuilderFactory.newDocumentBuilder().parse(new File("test-data/cdom_test_data/simple.xml")); Assert.assertTrue(cDocument instanceof CDocument); } }