/* * 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.rulesys.test; import junit.framework.TestCase; import junit.framework.TestSuite; import java.io.IOException; import org.apache.jena.rdf.model.ResourceFactory ; import org.apache.jena.reasoner.* ; import org.apache.jena.reasoner.rulesys.* ; import org.apache.jena.reasoner.rulesys.test.OWLWGTester ; /** * Version of the OWL unit tests used during development of the mini ruleset. */ public class OWLUnitTest extends TestCase { // -------------- statics defining the whole test suite --------------------- /** The set of reasoner(factories) to test */ public static ReasonerFactory[] reasonerFactories = { OWLFBRuleReasonerFactory.theInstance(), OWLMicroReasonerFactory.theInstance(), OWLMiniReasonerFactory.theInstance() }; /** The names of the reasoner(factories) to report in the test suite */ public static final String[] reasonerNames = { "full", "Micro", "Mini" }; /** bit flag to indicate the test should be passed by the default reasoner */ public static final int FB = 1; /** bit flag to indicate the test should be passed by the mini reasoner */ public static final int MINI = 2; /** bit flag to indicate the test should be passed by the micro reasoner */ public static final int MICRO = 4; // Flags from OWLConsistencyTest, copied here for brevity public static final int INCONSISTENT = OWLConsistencyTest.INCONSISTENT; public static final int WARNINGS = OWLConsistencyTest.WARNINGS; public static final int CLEAN = OWLConsistencyTest.CLEAN; /** The set of test cases to be used */ public static TestDef[] testDefs = { // /* // subClass new TestDef("localtests/ManifestSubclass001.rdf", FB | MICRO | MINI), // equivalentClass new TestDef("equivalentClass/Manifest001.rdf", FB | MICRO | MINI), new TestDef("equivalentClass/Manifest002.rdf", FB | MICRO | MINI), new TestDef("equivalentClass/Manifest003.rdf", FB | MICRO | MINI), new TestDef("equivalentClass/Manifest004.rdf", FB | MINI), // Requires prototypes new TestDef("equivalentClass/Manifest005.rdf", FB | MICRO | MINI), new TestDef("localtests/ManifestRestriction001.rdf", FB | MICRO | MINI), // intersectionOf new TestDef("intersectionOf/Manifest001.rdf", FB | MICRO | MINI), new TestDef("localtests/Manifest001.rdf", FB | MICRO | MINI), new TestDef("localtests/Manifest002.rdf", FB | MICRO | MINI), // unionOf new TestDef("unionOf/Manifest001.rdf", FB | MICRO | MINI ), // This could be supported but isn't at the moment // new TestDef("unionOf/Manifest002.rdf", FB | MICRO | MINI), // Property axioms new TestDef("SymmetricProperty/Manifest001.rdf", FB | MICRO | MINI), new TestDef("SymmetricProperty/Manifest001.rdf", FB | MICRO | MINI), new TestDef("inverseOf/Manifest001.rdf", FB | MICRO | MINI), new TestDef("TransitiveProperty/Manifest001.rdf", FB | MICRO | MINI), new TestDef("localtests/Manifest005.rdf", FB | MICRO | MINI), // Equality related new TestDef("FunctionalProperty/Manifest001.rdf", FB | MINI), new TestDef("FunctionalProperty/Manifest002.rdf", FB | MINI), new TestDef("FunctionalProperty/Manifest003.rdf", FB | MICRO | MINI), new TestDef("InverseFunctionalProperty/Manifest001.rdf", FB | MINI), new TestDef("InverseFunctionalProperty/Manifest002.rdf", FB | MINI), new TestDef("InverseFunctionalProperty/Manifest003.rdf", FB | MICRO | MINI), new TestDef("I5.1/Manifest001.rdf", FB | MINI), new TestDef("rdf-charmod-uris/Manifest.rdf", FB | MICRO | MINI), new TestDef("I4.6/Manifest003.rdf", FB | MICRO | MINI), new TestDef("I5.5/Manifest001.rdf", FB | MICRO | MINI), new TestDef("I5.5/Manifest002.rdf", FB | MICRO | MINI), new TestDef("I5.5/Manifest003.rdf", FB | MICRO | MINI), new TestDef("I5.5/Manifest004.rdf", FB | MICRO | MINI), new TestDef("inverseOf/Manifest001.rdf", FB | MICRO | MINI), new TestDef("TransitiveProperty/Manifest001.rdf", FB | MICRO | MINI), new TestDef("equivalentProperty/Manifest001.rdf", FB | MICRO | MINI), new TestDef("equivalentProperty/Manifest002.rdf", FB | MICRO | MINI), new TestDef("equivalentProperty/Manifest003.rdf", FB | MICRO | MINI), new TestDef("I5.24/Manifest001.rdf", FB | MICRO | MINI), new TestDef("I5.24/Manifest002-mod.rdf", FB | MICRO | MINI), new TestDef("equivalentProperty/Manifest006.rdf", FB | MICRO | MINI), // owl:Nothing new TestDef("I5.2/Manifest002.rdf", FB | MINI), // Disjointness tests new TestDef("differentFrom/Manifest001.rdf", FB | MICRO | MINI), new TestDef("disjointWith/Manifest001.rdf", FB | MICRO | MINI), new TestDef("disjointWith/Manifest002.rdf", FB | MICRO | MINI), new TestDef("AllDifferent/Manifest001.rdf", FB | MICRO | MINI), // Restriction tests new TestDef("allValuesFrom/Manifest001.rdf", FB | MINI), // Want to move this into MICRO new TestDef("allValuesFrom/Manifest002.rdf", FB | MICRO | MINI), new TestDef("someValuesFrom/Manifest002.rdf", FB | MICRO | MINI), new TestDef("maxCardinality/Manifest001.rdf", FB | MICRO | MINI), new TestDef("maxCardinality/Manifest002.rdf", FB | MICRO | MINI), new TestDef("FunctionalProperty/Manifest005-mod.rdf", FB | MICRO | MINI), new TestDef("I5.24/Manifest004-mod.rdf", FB | MINI), new TestDef("cardinality/Manifest001-mod.rdf", FB | MINI), new TestDef("cardinality/Manifest002-mod.rdf", FB | MINI), new TestDef("cardinality/Manifest003-mod.rdf", FB | MINI), new TestDef("cardinality/Manifest004-mod.rdf", FB | MINI), new TestDef("I5.24/Manifest003-mod.rdf", FB | MICRO | MINI), new TestDef("cardinality/Manifest005-mod.rdf", FB | MINI), new TestDef("cardinality/Manifest006-mod.rdf", FB | MINI), new TestDef("localtests/ManifestHv1.rdf", FB | MINI | MICRO), new TestDef("localtests/ManifestHv2.rdf", FB | MINI | MICRO), // Needs bNode creation rule new TestDef("someValuesFrom/Manifest001.rdf", FB ), // New local tests new TestDef("localtests/Manifest003.rdf", FB | MICRO | MINI), new TestDef("localtests/Manifest004.rdf", FB | MINI), // Requires equality new TestDef("localtests/Manifest006.rdf", FB ), // a oneOF case // Inheritance of domain/range by subProperties, inverseof new TestDef("localtests/Manifest007.rdf", FB | MICRO | MINI), new TestDef("localtests/Manifest008.rdf", FB | MICRO | MINI), // Consistency tests // clean case new TestDef(new OWLConsistencyTest("tbox.owl", "consistentData.rdf", CLEAN, null), FB | MICRO | MINI), // Instance of disjoint classes new TestDef(new OWLConsistencyTest("tbox.owl", "inconsistent1.rdf", INCONSISTENT, ResourceFactory.createResource("http://jena.hpl.hp.com/testing/reasoners/owl#ia")), FB | MICRO | MINI), // Type violation new TestDef(new OWLConsistencyTest("tbox.owl", "inconsistent2.rdf", INCONSISTENT, null), FB | MICRO | MINI), // Count violation new TestDef(new OWLConsistencyTest("tbox.owl", "inconsistent3.rdf", INCONSISTENT, null), FB | MINI), // Distinct values for functional property new TestDef(new OWLConsistencyTest("tbox.owl", "inconsistent4.rdf", INCONSISTENT, null), FB | MINI), // Distinct literal values for functional property new TestDef(new OWLConsistencyTest("tbox.owl", "inconsistent6.rdf", INCONSISTENT, null), FB | MINI), // Type clash - allValuesFrom rdfs:Literal new TestDef(new OWLConsistencyTest("tbox.owl", "inconsistent5.rdf", INCONSISTENT, null), FB | MICRO | MINI), // Intersection of disjoint classes new TestDef(new OWLConsistencyTest("tbox.owl", "emptyClass1.rdf", WARNINGS, null), FB | MICRO | MINI), // Equivalent to Nothing new TestDef(new OWLConsistencyTest("tbox.owl", "emptyClass2.rdf", WARNINGS, null), FB | MICRO | MINI), // disjoint with Thing new TestDef(new OWLConsistencyTest("tbox.owl", "emptyClass3.rdf", WARNINGS, null), FB | MICRO | MINI), }; // -------------- instance variables for a single test ---------------------- /** The name of the manifest file to test */ protected String manifest; /** The reasoner factory under test */ protected ReasonerFactory reasonerFactory; /** * Boilerplate for junit */ public OWLUnitTest( String manifest, String rName, ReasonerFactory rf) { super( rName + ":" + manifest ); this.manifest = manifest; this.reasonerFactory = rf; } /** * Boilerplate for junit. * This is its own test suite */ public static TestSuite suite() { TestSuite suite = new TestSuite(); for (int i = 0; i < reasonerFactories.length; i++) { String rName = reasonerNames[i]; ReasonerFactory rf = reasonerFactories[i]; for ( TestDef test : testDefs ) { if ( test.applicableTo( rf ) ) { if ( test.spec instanceof String ) { suite.addTest( new OWLUnitTest( (String) test.spec, rName, rf ) ); } else if ( test.spec instanceof OWLConsistencyTest ) { OWLConsistencyTest oct = (OWLConsistencyTest) test.spec; suite.addTest( new OWLConsistencyTest( oct, rName, rf ) ); } } } } return suite; } /** * The test runner */ @Override protected void runTest() throws IOException { // System.out.println(" - " + manifest + " using " + reasonerFactory.getURI()); OWLWGTester tester = new OWLWGTester(reasonerFactory, this, null); tester.runTests(manifest, false, false); } /** * Inner class - use to represent a single test case and which reasoners * it is relevant to. */ static class TestDef { /** Test spec, could be a the relative URI for a manifest, or a consistecy test object */ public Object spec; /** Bitmap of the reasoners this test is relevant to */ public int validFor; /** Constructor */ public TestDef(Object spec, int validFor) { this.spec = spec; this.validFor = validFor; } /** Return the bitflag corresponding to the given reasoner factory */ public int flagFor(ReasonerFactory rf) { if (rf.equals(OWLFBRuleReasonerFactory.theInstance())) { return FB; } else if (rf.equals(OWLMiniReasonerFactory.theInstance())) { return MINI; } else if (rf.equals(OWLMicroReasonerFactory.theInstance())) { return MICRO; } else { throw new ReasonerException("Unrecognized OWL reasoner config in unit test"); } } /** Return true if the test is relevant to this reasoner factory */ public boolean applicableTo(ReasonerFactory rf) { return (validFor & flagFor(rf)) != 0; } } }