📄 wgtestsuite.java
字号:
private Map parts = new HashMap();
private void addTest(Resource key, TestCase test) {
String keyName =
key.hasProperty(status)
? key.getRequiredProperty(status).getString()
: "no status";
TestSuite sub = (TestSuite) parts.get(keyName);
if (sub == null) {
if ( keyName.equals("OBSOLETED"))
return;
if ( keyName.equals("OBSOLETE"))
return;
if ( keyName.equals("NOT_APPROVED"))
return;
sub = new TestSuite();
sub.setName(keyName);
parts.put(keyName, sub);
addTest(sub);
}
sub.addTest(test);
}
final static String errorLevelName[] =
new String[] { "warning", "error", "fatal error" };
interface Act {
void act(Resource r) ;
}
private WGReasonerTester wgReasoner;
class ReasoningTest extends Test {
ReasoningTest(Resource r) {
super(r);
}
protected void runTest() throws IOException {
int rslt = WGReasonerTester.FAIL;
try {
JenaParameters.enableWhitespaceCheckingOfTypedLiterals = true;
Resource config = ModelFactory.createDefaultModel().createResource()
.addProperty(ReasonerVocabulary.PROPsetRDFSLevel, "full");
rslt = wgReasoner.runTestDetailedResponse(testID.getURI(),
RDFSRuleReasonerFactory.theInstance(),this,config);
} finally {
logResult(testID,rslt);
}
// assertTrue(rslt>=0);
}
/* (non-Javadoc)
* @see com.hp.hpl.jena.rdf.arp.test.WGTestSuite.Test#createMe()
*/
String createMe() {
throw new UnsupportedOperationException();
}
/* (non-Javadoc)
* @see com.hp.hpl.jena.rdf.arp.test.WGTestSuite.Test#reallyRunTest()
*/
void reallyRunTest() {
throw new BrokenException("");
}
}
abstract class Test extends TestCase implements RDFErrorHandler {
Resource testID;
String createURI() {
return "\"" + testID.getURI() + "\"";
}
abstract String createMe();
Test(Resource r) {
super(
WGTestSuite
.this
.testDir
.relativize(IRIFactory.iriImplementation().create(r.getURI()),
IRI.CHILD)
.toString());
testID = r;
}
String create(Property p) {
Resource file = testID.getRequiredProperty(p).getResource();
Resource t = file.getRequiredProperty(RDF.type).getResource();
if (ntriple.equals(t)) {
return "\"" + file.getURI() + "\",false";
} else if (rdfxml.equals(t)) {
return "\"" + file.getURI() + "\",true";
} else {
return "Unrecognized file type: " + t;
}
}
Model read(Property p) throws IOException {
Resource file = testID.getRequiredProperty(p).getResource();
Resource t = file.getRequiredProperty(RDF.type).getResource();
final String uri = file.getURI();
if (ntriple.equals(t)) {
return loadNT(factory.open(uri),uri);
} else if (rdfxml.equals(t)) {
return loadRDF(
new InFactoryX(){
public InputStream open() throws IOException {
return factory.open(uri);
}
}
, this, uri);
} else {
fail("Unrecognized file type: " + t);
}
return null;
}
protected void runTest() throws IOException {
int rslt = WGReasonerTester.FAIL;
try {
reallyRunTest();
rslt = WGReasonerTester.PASS;
}
finally {
logResult(testID,rslt);
}
}
abstract void reallyRunTest();
public void warning(Exception e) {
error(0, e);
}
public void error(Exception e) {
error(1, e);
}
public void fatalError(Exception e) {
error(2, e);
}
private void error(int level, Exception e) {
// println(e.getMessage());
if (e instanceof ParseException) {
int eCode = ((ParseException) e).getErrorNumber();
if (eCode == ERR_SYNTAX_ERROR) {
String msg = e.getMessage();
if (msg.indexOf("Unusual") != -1
|| msg.indexOf("Internal") != -1) {
System.err.println(testID.getURI());
System.err.println(msg);
fail(msg);
}
if (checkMessages) {
System.err.println(testID.getURI());
System.err.println(msg);
}
}
onError(level, eCode);
}
/*else if (e instanceof SAXParseException) {
onError(level, ARPErrorNumbers.WARN_BAD_XML);
} */
else if (e instanceof SAXException) {
fail("Not expecting a SAXException: " + e.getMessage());
} else {
fail("Not expecting an Exception: " + e.getMessage());
}
}
private void println(String m) {
System.err.println(m);
}
void onError(int level, int num) {
String msg =
"Parser reports unexpected "
+ errorLevelName[level]
+ ": "
+ ParseException.errorCodeName(num);
println(msg);
fail(msg);
}
}
class PositiveTest extends NegativeTest {
String createMe() {
return createURI() + "," + create(input) + "," + create(output);
}
PositiveTest(Resource nm) {
super(nm);
expectedLevel = -1;
}
protected void reallyRunTest() {
try {
Model m2 = read(output);
super.reallyRunTest();
if (!m1.equals(m2)) {
save(output);
assertTrue(m1.isIsomorphicWith( m2 ) );
}
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
fail(e.getMessage());
}
}
void initExpected() {
expected = new HashSet();
}
}
class WarningTest extends PositiveTest {
String createMe() {
return createURI()
+ ","
+ create(input)
+ ","
+ create(output)
+ ","
+ createExpected();
}
WarningTest(Resource nm) {
super(nm);
expectedLevel = 0;
}
void initExpected() {
initExpectedFromModel();
}
}
class NegativeTest extends Test {
Model m1;
Set expected;
int expectedLevel = 1;
private Set found = new HashSet();
private int errorCnt[] = new int[] { 0, 0, 0 };
String createExpected() {
String rslt = "new int[]{";
if ( expected == null)
return "null";
Iterator it = expected.iterator();
while (it.hasNext())
rslt += it.next() + ", ";
return rslt + "}";
}
String createMe() {
return createURI() + "," + create(input) + "," + createExpected();
}
NegativeTest(Resource nm) {
super(nm);
initExpected();
}
void save(Property p) {
if (factory.savable()) {
String uri = testID.getRequiredProperty(p).getResource().getURI();
int suffix = uri.lastIndexOf('.');
String saveUri = uri.substring(0, suffix) + ".ntx";
// System.out.println("Saving to " + saveUri);
try {
OutputStream w = factory.openOutput(saveUri);
m1.write(w, "N-TRIPLE");
w.close();
} catch (IOException e) {
throw new JenaException( e );
}
}
}
void initExpectedFromModel() {
StmtIterator si = testID.listProperties(errorCodes);
if (si.hasNext()) {
expected = new HashSet();
while (si.hasNext()) {
String uri = si.nextStatement().getResource().getURI();
String fieldName = uri.substring(uri.lastIndexOf('#') + 1);
expected.add(new Integer(ParseException.errorCode(fieldName)));
}
}
}
void initExpected() {
initExpectedFromModel();
}
protected void reallyRunTest() {
try {
m1 = read(input);
if (expectedLevel == 1
&& expected == null
&& errorCnt[2] == 0
&& errorCnt[1] == 0)
save(input);
} catch (JenaException re) {
if (re.getCause() instanceof SAXException) {
// ignore.
} else {
fail(re.getMessage());
}
} catch (IOException ioe) {
fail(ioe.getMessage());
}
if (expected != null && !expected.equals(found)) {
Set dup = new HashSet();
dup.addAll(found);
dup.removeAll(expected);
expected.removeAll(found);
Iterator it = expected.iterator();
while (it.hasNext()) {
int eCode = ((Integer) it.next()).intValue();
String msg =
"Expected error "
+ ParseException.errorCodeName(eCode)
+ ", was not detected.";
if (errorCnt[2] == 0)
fail(msg);
else if (
eCode == ERR_SYNTAX_ERROR
&& getName().startsWith("rdf-nnn/67_")
&& "1234".indexOf(
getName().charAt("rdf-nnn/67_".length()))
!= -1) {
// ignore
// System.err.println("Last message probably reflects a benign race condition on ARP teardown after fatal error that can be ignored.");
// System.err.println("It is known to happen with tests rdf-nnn/67_[1234] and ERR_SYNTAX_ERROR.");
} else {
System.err.println("Test: " + getName());
System.err.println(msg);
}
}
it = dup.iterator();
while (it.hasNext())
fail(
"Detected error "
+ ParseException.errorCodeName(
((Integer) it.next()).intValue())
+ ", was not expected.");
}
for (int j = 2; j >= 0; j--)
if (j == expectedLevel) {
if (errorCnt[j] == 0 && (j != 1 || errorCnt[2] == 0))
fail(
"No "
+ errorLevelName[expectedLevel]
+ " in input file of class "
+ getClass().getName());
} else if (expected == null) {
if (errorCnt[j] != 0)
fail(
"Inappropriate "
+ errorLevelName[j]
+ " in input file of class "
+ getClass().getName());
}
}
void onError(int level, int id) {
Integer err = new Integer(id);
found.add(err);
errorCnt[level]++;
if (expected != null) {
if (!expected.contains(err))
super.onError(level, id);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -