blob: 7110792366159e10158a3b97958c848914339789 [file] [log] [blame]
/*
* Copyright (c) 2001-2003 World Wide Web Consortium,
* (Massachusetts Institute of Technology, Institut National de
* Recherche en Informatique et en Automatique, Keio University). All
* Rights Reserved. This program is distributed under the W3C's Software
* Intellectual Property License. This program is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE.
* See W3C License http://www.w3.org/Consortium/Legal/ for more details.
*/
package org.w3c.domts;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import junit.framework.TestCase;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class JUnitTestCaseAdapter extends TestCase implements DOMTestFramework {
private DOMTestCase test;
private static DOMTestDocumentBuilderFactory defaultFactory = null;
public JUnitTestCaseAdapter(DOMTestCase test) {
super(test.getTargetURI());
test.setFramework(this);
this.test = test;
}
//BEGIN android-added
public JUnitTestCaseAdapter() {
}
private String errorMessage = null;
private boolean failed = false;
@Override
public void setName(String name) {
super.setName(name);
if (test == null) {
try {
URI uri = new URI(name);
String path = uri.getPath();
path = path.replaceAll("/", ".");
Class<?> clazz = null;
int pos = path.indexOf('.');
while (pos != -1) {
try {
clazz = Class.forName("org.w3c.domts." + path);
break;
} catch (ClassNotFoundException e) {
// do nothing
}
path = path.substring(pos + 1);
}
if (clazz == null) {
errorMessage = "class not found for test: " + name;
failed = true;
return;
}
if (defaultFactory == null) {
defaultFactory = new JAXPDOMTestDocumentBuilderFactory(null,
JAXPDOMTestDocumentBuilderFactory.getConfiguration1());
}
Constructor<?> constructor = clazz.getConstructor(new Class<?>[] {
DOMTestDocumentBuilderFactory.class
});
test = (DOMTestCase)constructor.newInstance(new Object[] {
defaultFactory
});
test.setFramework(this);
} catch (URISyntaxException e) {
failed = true;
errorMessage = e.getMessage();
if (errorMessage == null) {
errorMessage = "" + e.toString();
}
} catch (IllegalAccessException e) {
failed = true;
errorMessage = e.getMessage();
if (errorMessage == null) {
errorMessage = "" + e.toString();
}
} catch (InstantiationException e) {
failed = true;
errorMessage = e.getMessage();
if (errorMessage == null) {
errorMessage = "" + e.toString();
}
} catch (DOMTestIncompatibleException e) {
failed = true;
errorMessage = e.getMessage();
if (errorMessage == null) {
errorMessage = "" + e.toString();
}
} catch (SecurityException e) {
failed = true;
errorMessage = e.getMessage();
if (errorMessage == null) {
errorMessage = "" + e.toString();
}
} catch (NoSuchMethodException e) {
failed = true;
errorMessage = e.getMessage();
if (errorMessage == null) {
errorMessage = "" + e.toString();
}
} catch (IllegalArgumentException e) {
failed = true;
errorMessage = e.getMessage();
if (errorMessage == null) {
errorMessage = "" + e.toString();
}
} catch (InvocationTargetException e) {
failed = true;
Throwable t = e.getCause();
if (t != null) {
errorMessage = t.getMessage();
if (errorMessage == null) {
errorMessage = "" + t.toString();
}
} else {
errorMessage = e.getMessage();
if (errorMessage == null) {
errorMessage = "" + e.toString();
}
}
}
}
}
//END android-added
protected void runTest() throws Throwable {
//BEGIN android-added
if (failed) {
if (errorMessage != null) {
fail(errorMessage);
} else {
fail("init failed");
}
}
//END android-added
test.runTest();
int mutationCount = test.getMutationCount();
if (mutationCount != 0) {
fail("Document loaded with willBeModified='false' was modified in course of test.");
}
}
public boolean hasFeature(DocumentBuilder docBuilder,
String feature,
String version) {
return docBuilder.getDOMImplementation().hasFeature(feature,version);
}
public void wait(int millisecond) {
}
public void fail(DOMTestCase test, String assertID) {
fail(assertID);
}
public void assertTrue(DOMTestCase test, String assertID, boolean actual) {
assertTrue(assertID,actual);
}
public void assertFalse(DOMTestCase test, String assertID, boolean actual) {
if(actual) {
assertEquals(assertID,String.valueOf(false), String.valueOf(actual));
}
}
public void assertNull(DOMTestCase test, String assertID, Object actual) {
assertNull(assertID,actual);
}
public void assertNotNull(DOMTestCase test, String assertID, Object actual) {
assertNotNull(assertID,actual);
}
public void assertSame(DOMTestCase test, String assertID, Object expected, Object actual) {
boolean same = (expected == actual);
//
// if the not the same but both are not null
// might still really be the same
//
if(!same) {
if(expected == null || actual == null ||
!(expected instanceof Node) || !(actual instanceof Node)) {
assertEquals(assertID,expected,actual);
}
else {
//
// could do something with isSame
//
assertEquals(assertID,expected,actual);
}
}
}
public void assertInstanceOf(DOMTestCase test, String assertID, Object obj, Class cls) {
assertTrue(assertID,cls.isInstance(obj));
}
public void assertSize(DOMTestCase test, String assertID, int expectedSize, NodeList collection) {
assertEquals(assertID,expectedSize, collection.getLength());
}
public void assertSize(DOMTestCase test, String assertID, int expectedSize, NamedNodeMap collection) {
assertEquals(assertID, expectedSize, collection.getLength());
}
public void assertSize(DOMTestCase test, String assertID, int expectedSize, Collection collection) {
assertEquals(assertID, expectedSize, collection.size());
}
public void assertEqualsIgnoreCase(DOMTestCase test, String assertID, String expected, String actual) {
if (!expected.equalsIgnoreCase(actual)) {
assertEquals(assertID,expected, actual);
}
}
public void assertEqualsIgnoreCase(DOMTestCase test, String assertID, Collection expected, Collection actual) {
int size = expected.size();
assertNotNull(assertID,expected);
assertNotNull(assertID,actual);
assertEquals(assertID,size, actual.size());
boolean equals = (expected != null && actual != null && size == actual.size());
if(equals) {
List expectedArray = new ArrayList(expected);
String expectedString;
String actualString;
Iterator actualIter = actual.iterator();
Iterator expectedIter;
while(actualIter.hasNext() && equals) {
actualString = (String) actualIter.next();
expectedIter = expectedArray.iterator();
equals = false;
while(expectedIter.hasNext() && !equals) {
expectedString = (String) expectedIter.next();
if(actualString.equalsIgnoreCase(expectedString)) {
equals = true;
expectedArray.remove(expectedString);
}
}
}
}
assertTrue(assertID,equals);
}
public void assertEqualsIgnoreCase(DOMTestCase test, String assertID, List expected, List actual) {
int size = expected.size();
assertNotNull(assertID,expected);
assertNotNull(assertID,actual);
assertEquals(assertID,size, actual.size());
boolean equals = (expected != null && actual != null && size == actual.size());
if(equals) {
String expectedString;
String actualString;
for(int i = 0; i < size; i++) {
expectedString = (String) expected.get(i);
actualString = (String) actual.get(i);
if(!expectedString.equalsIgnoreCase(actualString)) {
assertEquals(assertID,expectedString,actualString);
break;
}
}
}
}
public void assertEquals(DOMTestCase test, String assertID, String expected, String actual) {
assertEquals(assertID,expected,actual);
}
public void assertEquals(DOMTestCase test, String assertID, int expected, int actual) {
assertEquals(assertID,expected,actual);
}
public void assertEquals(DOMTestCase test, String assertID, boolean expected, boolean actual) {
assertEquals(assertID,expected,actual);
}
public void assertEquals(DOMTestCase test, String assertID, double expected, double actual) {
assertEquals(assertID, expected, actual, 0.0);
}
public void assertEquals(DOMTestCase test, String assertID, Collection expected, Collection actual) {
int size = expected.size();
assertNotNull(assertID,expected);
assertNotNull(assertID,actual);
assertEquals(assertID,size, actual.size());
boolean equals = (expected != null && actual != null && size == actual.size());
if(equals) {
List expectedArray = new ArrayList(expected);
Object expectedObj;
Object actualObj;
Iterator actualIter = actual.iterator();
Iterator expectedIter;
while(actualIter.hasNext() && equals) {
actualObj = actualIter.next();
expectedIter = expectedArray.iterator();
equals = false;
while(expectedIter.hasNext() && !equals) {
expectedObj = expectedIter.next();
if(expectedObj == actualObj || expectedObj.equals(actualObj)) {
equals = true;
expectedArray.remove(expectedObj);
}
}
}
}
assertTrue(assertID,equals);
}
public void assertNotEqualsIgnoreCase(DOMTestCase test, String assertID, String expected, String actual) {
if(expected.equalsIgnoreCase(actual)) {
assertTrue(assertID, !expected.equalsIgnoreCase(actual));
}
}
public void assertNotEquals(DOMTestCase test, String assertID, String expected, String actual) {
assertTrue(assertID, !expected.equals(actual));
}
public void assertNotEquals(DOMTestCase test, String assertID, int expected, int actual) {
assertTrue(assertID,expected !=actual);
}
public void assertNotEquals(DOMTestCase test, String assertID, boolean expected, boolean actual) {
assertTrue(assertID,expected !=actual);
}
public void assertNotEquals(DOMTestCase test, String assertID, double expected, double actual) {
if(expected == actual) {
assertTrue(assertID,expected != actual);
}
}
public boolean same(Object expected, Object actual) {
boolean equals = (expected == actual);
if(!equals && expected != null && expected instanceof Node &&
actual != null && actual instanceof Node) {
//
// can use Node.isSame eventually
}
return equals;
}
public boolean equalsIgnoreCase(String expected, String actual) {
return expected.equalsIgnoreCase(actual);
}
public boolean equalsIgnoreCase(Collection expected, Collection actual) {
int size = expected.size();
boolean equals = (expected != null && actual != null && size == actual.size());
if(equals) {
List expectedArray = new ArrayList(expected);
String expectedString;
String actualString;
Iterator actualIter = actual.iterator();
Iterator expectedIter;
while(actualIter.hasNext() && equals) {
actualString = (String) actualIter.next();
expectedIter = expectedArray.iterator();
equals = false;
while(expectedIter.hasNext() && !equals) {
expectedString = (String) expectedIter.next();
if(actualString.equalsIgnoreCase(expectedString)) {
equals = true;
expectedArray.remove(expectedString);
}
}
}
}
return equals;
}
public boolean equalsIgnoreCase(List expected, List actual) {
int size = expected.size();
boolean equals = (expected != null && actual != null && size == actual.size());
if(equals) {
String expectedString;
String actualString;
for(int i = 0; i < size; i++) {
expectedString = (String) expected.get(i);
actualString = (String) actual.get(i);
if(!expectedString.equalsIgnoreCase(actualString)) {
equals = false;
break;
}
}
}
return equals;
}
public boolean equals(String expected, String actual) {
return expected.equals(actual);
}
public boolean equals(int expected, int actual) {
return expected == actual;
}
public boolean equals(boolean expected, boolean actual) {
return expected == actual;
}
public boolean equals(double expected, double actual) {
return expected == actual;
}
public boolean equals(Collection expected, Collection actual) {
int size = expected.size();
boolean equals = (expected != null && actual != null && size == actual.size());
if(equals) {
List expectedArray = new ArrayList(expected);
Object expectedObj;
Object actualObj;
Iterator actualIter = actual.iterator();
Iterator expectedIter;
while(actualIter.hasNext() && equals) {
actualObj = actualIter.next();
expectedIter = expectedArray.iterator();
equals = false;
while(expectedIter.hasNext() && !equals) {
expectedObj = expectedIter.next();
if(expectedObj != actualObj && expectedObj.equals(actualObj)) {
equals = true;
expectedArray.remove(expectedObj);
}
}
}
}
return equals;
}
public boolean equals(List expected, List actual) {
int size = expected.size();
boolean equals = (expected != null && actual != null && size == actual.size());
if(equals) {
Object expectedObj;
Object actualObj;
for(int i = 0; i < size; i++) {
expectedObj = expected.get(i);
actualObj = actual.get(i);
if(!expectedObj.equals(actualObj)) {
equals = false;
break;
}
}
}
return equals;
}
public int size(Collection collection) {
return collection.size();
}
public int size(NamedNodeMap collection) {
return collection.getLength();
}
public int size(NodeList collection) {
return collection.getLength();
}
}