package org.tigris.juxy.util;
import junit.framework.TestCase;
import org.tigris.juxy.Runner;
import org.tigris.juxy.RunnerContext;
import org.tigris.juxy.RunnerFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
import javax.xml.transform.TransformerException;
import java.io.File;
/**
* $Id: UTestXMLComparator.java,v 1.6 2007-10-30 09:10:59 pavelsher Exp $
*
* @author Pavel Sher
*/
public class UTestXMLComparator extends TestCase {
public void testAssertPassed() throws SAXException {
XMLComparator.assertEquals("<root/>", DOMUtil.parse("<root/>"));
XMLComparator.assertEquals("<root></root>", DOMUtil.parse("<root/>"));
XMLComparator.assertEquals("<root><child/> </root>", DOMUtil.parse("<root><child/></root>"));
XMLComparator.assertEquals("<root>some text</root>", DOMUtil.parse("<root>some text</root>"));
XMLComparator.assertEquals("<root xmlns='urn:some:ns'/>", DOMUtil.parse("<root xmlns='urn:some:ns'/>"));
XMLComparator.assertEquals("<root><!-- comment --></root>", DOMUtil.parse("<root><!-- comment --></root>"));
XMLComparator.assertEquals("<root><?pi a='b'?></root>", DOMUtil.parse("<root><?pi a='b'?></root>"));
XMLComparator.assertEquals("<root>some text<elem/> text continued</root>", DOMUtil.parse("<root>some text<elem/> text continued</root>"));
XMLComparator.assertEquals("<root attr1='val1' attr2='val2'/>", DOMUtil.parse("<root attr2=\"val2\" attr1=\"val1\"></root>"));
XMLComparator.assertEquals("<root xmlns:ns1='urn:some:ns' ns1:attr1='val1' attr2='val2'/>", DOMUtil.parse("<root xmlns:ns1='urn:some:ns' attr2=\"val2\" ns1:attr1=\"val1\"></root>"));
XMLComparator.assertEquals("<root><![CDATA[text]]></root>", DOMUtil.parse("<root><![CDATA[text]]></root>"));
}
public void testAssertPassed_Doctype() throws SAXException {
XMLComparator.assertEquals("" +
"<!DOCTYPE sect [" +
" <!ELEMENT sect EMPTY>" +
"]>" +
"<sect/>",
DOMUtil.parse("" +
"<!DOCTYPE sect [" +
" <!ELEMENT sect EMPTY>" +
"]>" +
"<sect/>"));
String system = new File("tests/xml/sect.dtd").toURI().toString();
XMLComparator.assertEquals("" +
"<!DOCTYPE sect PUBLIC 'urn1' '" + system + "'>" +
"<sect/>",
DOMUtil.parse("" +
"<!DOCTYPE sect PUBLIC 'urn1' '" + system + "'>" +
"<sect/>"));
XMLComparator.assertEquals("" +
"<!DOCTYPE sect SYSTEM '" + system + "'>" +
"<sect/>",
DOMUtil.parse("" +
"<!DOCTYPE sect SYSTEM '" + system + "'>" +
"<sect/>"));
XMLComparator.assertEquals("" +
"<!DOCTYPE sect [" +
"<!ENTITY ent1 'enttext1'>" +
"]>" +
"<sect>&ent1;</sect>",
DOMUtil.parse("" +
"<!DOCTYPE sect [" +
"<!ENTITY ent1 'enttext1'>" +
"]>" +
"<sect>&ent1;</sect>"));
}
public void testAssertionFailed_ElementsAndAttributes() throws SAXException {
try {
XMLComparator.assertEquals("<root/>", DOMUtil.parse("<root attr='value'/>"));
fail("An exception expected");
} catch (DocumentsAssertionError e) {
System.out.println(e.getMessage());
}
try {
XMLComparator.assertEquals("<root attr='value'/>", DOMUtil.parse("<root attr='value' attr2='val2'/>"));
fail("An exception expected");
} catch (DocumentsAssertionError e) {
System.out.println(e.getMessage());
}
try {
XMLComparator.assertEquals("<root attr1='value1'/>", DOMUtil.parse("<root attr2='value2'/>"));
fail("An exception expected");
} catch (DocumentsAssertionError e) {
System.out.println(e.getMessage());
}
try {
XMLComparator.assertEquals("<root attr='value1'/>", DOMUtil.parse("<root attr='value with \" char'/>"));
fail("An exception expected");
} catch (DocumentsAssertionError e) {
System.out.println(e.getMessage());
}
try {
XMLComparator.assertEquals("<root><child/></root>", DOMUtil.parse("<root><child2/></root>"));
fail("An exception expected");
} catch (DocumentsAssertionError e) {
System.out.println(e.getMessage());
}
try {
XMLComparator.assertEquals("<root><child><subchild/></child></root>", DOMUtil.parse("<root><child/></root>"));
fail("An exception expected");
} catch (DocumentsAssertionError e) {
System.out.println(e.getMessage());
}
try {
XMLComparator.assertEquals("<root><child1/><child2/></root>", DOMUtil.parse("<root><child1/><child3/></root>"));
fail("An exception expected");
} catch (DocumentsAssertionError e) {
System.out.println(e.getMessage());
}
}
public void testNamespacesAssertion() throws SAXException {
try {
XMLComparator.assertEquals("<root/>", DOMUtil.parse("<root xmlns='urn:some:ns'/>"));
fail("An exception expected");
} catch (DocumentsAssertionError e) {
System.out.println(e.getMessage());
}
XMLComparator.assertEquals("<root/>", DOMUtil.parse("<root xmlns=''/>"));
try {
XMLComparator.assertEquals("<root xmlns:ns1='urn:some:ns' ns1:attr1='val1' attr2='val2'/>", DOMUtil.parse("<root xmlns:ns1='urn:some:ns2' attr2=\"val2\" ns1:attr1=\"val1\"></root>"));
fail("An exception expected");
} catch (DocumentsAssertionError e) {
System.out.println(e.getMessage());
}
}
public void testAssertionFailed_Doctype() throws SAXException {
try {
XMLComparator.assertEquals("" +
"<!DOCTYPE sect [" +
" <!ELEMENT sect EMPTY>" +
"]>" +
"<sect/>",
DOMUtil.parse("" +
"<!DOCTYPE sect [" +
" <!ELEMENT sect EMPTY>" +
" <!ENTITY ent \"enttext\">" +
"]>" +
"<sect/>"));
fail("An exception expected");
} catch (DocumentsAssertionError e) {
System.out.println(e.getMessage());
}
String system = new File("tests/xml/sect.dtd").toURI().toString();
try {
XMLComparator.assertEquals("" +
"<!DOCTYPE sect PUBLIC 'urn1' '" + system + "'>" +
"<sect/>",
DOMUtil.parse("" +
"<!DOCTYPE sect PUBLIC 'urn2' '" + system + "'>" +
"<sect/>"));
fail("An exception expected");
} catch (DocumentsAssertionError e) {
System.out.println(e.getMessage());
}
try {
XMLComparator.assertEquals("" +
"<!DOCTYPE sect SYSTEM '" + system + "'>" +
"<sect/>",
DOMUtil.parse("" +
"<!DOCTYPE sect PUBLIC 'urn2' '" + system + "'>" +
"<sect/>"));
fail("An exception expected");
} catch (DocumentsAssertionError e) {
System.out.println(e.getMessage());
}
try {
XMLComparator.assertEquals("" +
"<!DOCTYPE sect [" +
"<!ENTITY ent1 'enttext1'>" +
"<!ENTITY ent2 'enttext2'>" +
"]>" +
"<sect>&ent1;</sect>",
DOMUtil.parse("" +
"<!DOCTYPE sect [" +
"<!ENTITY ent1 'enttext1'>" +
"<!ENTITY ent2 'enttext2'>" +
"]>" +
"<sect>&ent2;</sect>"));
fail("An exception expected");
} catch (DocumentsAssertionError e) {
System.out.println(e.getMessage());
}
}
public void testAssertFailed_Other() throws SAXException {
try {
XMLComparator.assertEquals("<root/>", DOMUtil.parse("<root>text with < char</root>"));
fail("An exception expected");
} catch (DocumentsAssertionError e) {
System.out.println(e.getMessage());
}
try {
XMLComparator.assertEquals("<root><!-- comment --></root>", DOMUtil.parse("<root><!-- different comment --></root>"));
fail("An exception expected");
} catch (DocumentsAssertionError e) {
System.out.println(e.getMessage());
}
try {
XMLComparator.assertEquals("<root><!-- comment --></root>", DOMUtil.parse("<root><child/></root>"));
fail("An exception expected");
} catch (DocumentsAssertionError e) {
System.out.println(e.getMessage());
}
try {
XMLComparator.assertEquals("<root><?pi a='b'?></root>", DOMUtil.parse("<root><?pi a='c'?></root>"));
fail("An exception expected");
} catch (DocumentsAssertionError e) {
System.out.println(e.getMessage());
}
try {
XMLComparator.assertEquals("<root><![CDATA[text]]></root>", DOMUtil.parse("<root><![CDATA[text2]]></root>"));
fail("An exception expected");
} catch (DocumentsAssertionError e) {
System.out.println(e.getMessage());
}
}
public void testPassed_DocumentPartsCompared() throws SAXException {
Document actual = DOMUtil.parse("<parent><child1/><child2/></parent>");
XMLComparator.assertEquals("<child1/>", actual.getDocumentElement().getFirstChild());
XMLComparator.assertEquals("<child2/>", actual.getDocumentElement().getLastChild());
}
public void testStripEmptyTextNodes() throws SAXException, TransformerException {
String input = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" +
"<XMLMsg>\n" +
" <Body_Msg>\n" +
" <Bodys>\n" +
" <Body>\n" +
" </Body>\n" +
" </Bodys>\n" +
" </Body_Msg>\n" +
"</XMLMsg>";
String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Test/>";
Runner runner = RunnerFactory.newRunner();
RunnerContext context = runner.newRunnerContext("tests/xml/indent.xsl");
context.setDocument(input);
Node actual = runner.applyTemplates(context);
XMLComparator.assertEquals(expected, actual);
}
}