/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jena.reasoner.test;
import java.io.IOException ;
import junit.framework.TestCase ;
import junit.framework.TestSuite ;
import org.apache.jena.rdf.model.Model ;
import org.apache.jena.rdf.model.ModelFactory ;
import org.apache.jena.rdf.model.Resource ;
import org.apache.jena.reasoner.ReasonerFactory ;
import org.apache.jena.reasoner.rulesys.RDFSRuleReasonerFactory ;
import org.apache.jena.shared.impl.JenaParameters ;
import org.apache.jena.vocabulary.OWLResults ;
import org.apache.jena.vocabulary.RDFS ;
import org.apache.jena.vocabulary.ReasonerVocabulary ;
import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
/**
* Test the default RDFS reasoner against the current set of working group tests
*/
public class TestCurrentRDFWG extends ReasonerTestBase {
/** Location of the test file directory */
public static final String TEST_DIR = "testing/wg20031010/";
// public static final String TEST_DIR = "testing/wg/";
/** The base URI for the results file */
public static String BASE_RESULTS_URI = "http://jena.sourceforge.net/data/rdf-results.rdf";
/** The model describing the results of the run */
Model testResults;
/** The resource which acts as a description for the Jena2 instance being tested */
Resource jena2;
protected static Logger logger = LoggerFactory.getLogger(TestCurrentRDFWG.class);
/**
* Boilerplate for junit
*/
public TestCurrentRDFWG( String name ) {
super( name );
}
/**
* Initialize the result model.
*/
public void initResults() {
testResults = ModelFactory.createDefaultModel();
jena2 = testResults.createResource(BASE_RESULTS_URI + "#jena2");
jena2.addProperty(RDFS.comment,
testResults.createLiteral(
"<a xmlns=\"http://www.w3.org/1999/xhtml\" href=\"http://jena.sourceforce.net/\">Jena2</a> includes a rule-based inference engine for RDF processing, " +
"supporting both forward and backward chaining rules. Its OWL rule set is designed to provide sound " +
"but not complete instance resasoning for that fragment of OWL/Full limited to the OWL/lite vocabulary. In" +
"particular it does not support unionOf/complementOf.",
true)
);
jena2.addProperty(RDFS.label, "Jena2");
testResults.setNsPrefix("results", OWLResults.NS);
}
/**
* Boilerplate for junit.
* This is its own test suite
*/
public static TestSuite suite() {
TestSuite suite = new TestSuite();
try {
Resource config = newResource()
.addProperty(ReasonerVocabulary.PROPsetRDFSLevel, "full");
constructRDFWGtests(suite, RDFSRuleReasonerFactory.theInstance(), config);
} catch (IOException e) {
// failed to even built the test harness
logger.error("Failed to construct RDF WG test harness", e);
}
return suite;
}
/**
* Build the working group tests for the given reasoner.
*/
private static void constructRDFWGtests(TestSuite suite, ReasonerFactory rf, Resource config) throws IOException {
JenaParameters.enableWhitespaceCheckingOfTypedLiterals = true;
WGReasonerTester tester = new WGReasonerTester("Manifest.rdf", TEST_DIR);
for ( String test : tester.listTests() )
{
suite.addTest( new TestReasonerWG( tester, test, rf, config ) );
}
}
/**
* Inner class defining a test framework for invoking a single
* RDFCore working group test.
*/
static class TestReasonerWG extends TestCase {
/** The tester which already has the test manifest loaded */
WGReasonerTester tester;
/** The name of the specific test to run */
String test;
/** The factory for the reasoner type under test */
ReasonerFactory reasonerFactory;
/** An optional configuration model */
Resource config;
/** Constructor */
TestReasonerWG(WGReasonerTester tester, String test,
ReasonerFactory reasonerFactory, Resource config) {
super(test);
this.tester = tester;
this.test = test;
this.reasonerFactory = reasonerFactory;
this.config = config;
}
/**
* The test runner
*/
@Override
public void runTest() throws IOException {
boolean success = tester.runTest(test, reasonerFactory, this, config);
// Resource resultType = null;
// if (test.hasProperty(RDF.type, OWLTest.NegativeEntailmentTest)
// || test.hasProperty(RDF.type, OWLTest.ConsistencyTest)) {
// resultType = success ? OWLResults.PassingRun : OWLResults.FailingRun;
// } else {
// resultType = success ? OWLResults.PassingRun : OWLResults.IncompleteRun;
// }
// // log to the rdf result format
// Resource result = testResults.createResource()
// .addProperty(RDF.type, OWLResults.TestRun)
// .addProperty(RDF.type, resultType)
// .addProperty(OWLResults.test, test)
// .addProperty(OWLResults.system, jena2);
}
}
}