/* * 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 /////////////// package org.apache.jena.ontology.impl; // Imports /////////////// import java.util.*; import junit.framework.*; import org.apache.jena.ontology.* ; import org.apache.jena.rdf.model.* ; import org.apache.jena.reasoner.test.TestUtil ; /** * <p> * Generic test case for ontology unit testing * </p> */ public abstract class OntTestBase extends TestSuite { // Constants ////////////////////////////////// public static final String BASE = "http://jena.hpl.hp.com/testing/ontology"; public static final String NS = BASE + "#"; // Static variables ////////////////////////////////// // Instance variables ////////////////////////////////// // Constructors ////////////////////////////////// public OntTestBase( String name ) { super( name ); TestCase[] tc = getTests(); for ( TestCase aTc : tc ) { addTest( aTc ); } } // External signature methods ////////////////////////////////// // Internal implementation methods ////////////////////////////////// /** Return the array of tests for the suite */ protected OntTestCase[] getTests() { return null; } //============================================================================== // Inner class definitions //============================================================================== protected abstract class OntTestCase extends TestCase { protected boolean m_inOWL; protected boolean m_inOWLLite; protected boolean m_inRDFS; protected String m_langElement; protected boolean m_owlLang = true; protected boolean m_owlLiteLang = false; protected boolean m_rdfsLang = false; public OntTestCase( String langElement , boolean inOWL , boolean inOWLLite , boolean inRDFS ) { super( "Ontology API test " + langElement ); m_langElement = langElement; m_inOWL = inOWL; m_inOWLLite = inOWLLite; m_inRDFS = inRDFS; } @Override public void runTest() throws Exception { // we don't want inferencing for these unit tests runTest( getOntModel( OntModelSpec.OWL_MEM ), m_inOWL ); m_owlLiteLang = true; runTest( getOntModel( OntModelSpec.OWL_LITE_MEM ), m_inOWLLite ); // now RDFS m_rdfsLang = true; runTest( getOntModel( OntModelSpec.RDFS_MEM ), m_inRDFS); } /** Test execution worker */ protected void runTest( OntModel m, boolean inModel ) throws Exception { boolean profileEx = false; try { ontTest( m ); } catch (ProfileException e) { profileEx = true; } assertEquals( "language element " + m_langElement + " was " + (inModel ? "" : "not") + " expected in model " + m.getProfile().getLabel(), inModel, !profileEx ); } /** Does the work in the test sub-class */ protected abstract void ontTest( OntModel m ) throws Exception; /** Test that an iterator delivers the expected values */ protected void iteratorTest( Iterator<?> i, Object[] expected ) { TestUtil.assertIteratorValues( this, i, expected ); } @Override public void setUp() { // ensure the ont doc manager is in a consistent state OntDocumentManager.getInstance().reset( true ); } protected boolean owlFull() { return m_owlLang && !m_owlLiteLang; } /** Answer true if an iterator contains a given value */ protected boolean iteratorContains( Iterator<?> i, Object target ) { boolean found = false; while (i.hasNext()) { found = i.next().equals( target ) || found; } return found; } /** Create the model, and call the model add axioms hook before returning */ protected OntModel getOntModel( OntModelSpec spec ) { OntModel m = ModelFactory.createOntologyModel( spec ); addAxioms( m ); return m; } /** Add setup axioms to a new empty OntModel */ protected void addAxioms( OntModel m ) { // default is no-op } } }