adding some unit tests to JenaIngestUtils

This commit is contained in:
brianjlowe 2014-06-27 16:44:14 -04:00
parent 1baf710499
commit d65cc2b106
16 changed files with 328 additions and 4 deletions

View file

@ -0,0 +1,127 @@
package edu.cornell.mannlib.vitro.webapp.utils.ingest;
import java.io.StringWriter;
import junit.framework.Assert;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.rdf.model.StmtIterator;
import edu.cornell.mannlib.vitro.webapp.dao.jena.RDFServiceGraph;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.jena.model.RDFServiceModel;
import edu.cornell.mannlib.vitro.webapp.utils.jena.JenaIngestUtils;
public class JenaIngestUtilsTest {
private final Log log = LogFactory.getLog(JenaIngestUtilsTest.class);
protected JenaIngestUtils utils = new JenaIngestUtils();
protected Model makeModel() {
Model base = ModelFactory.createDefaultModel();
RDFService rdfService = new RDFServiceModel(base);
return RDFServiceGraph.createRDFServiceModel(
new RDFServiceGraph(rdfService));
}
@Test
public void testSmush() {
Model model = makeModel();
model.read(JenaIngestUtilsTest.class.getResourceAsStream(
"smush.start.n3"), null, "N3");
JenaIngestUtils utils = new JenaIngestUtils();
Model actualResult = utils.smushResources(
model, model.getProperty("http://example.com/ns/duckCode"));
boolean matchesPossibleResult = false;
for(int i = 1; i < 7; i++) {
Model possibleResult = ModelFactory.createDefaultModel();
possibleResult.read(JenaIngestUtilsTest.class.getResourceAsStream(
"smush.end." + i + ".n3"), null, "N3");
if(actualResult.isIsomorphicWith(possibleResult)) {
matchesPossibleResult = true;
break;
}
}
if (!matchesPossibleResult) {
StringWriter s = new StringWriter();
actualResult.write(s, "N3");
Assert.fail("Smushed model does not match one of the possible results:\n" +
s.toString());
}
}
@Test
public void testRenameBNodes() {
Model initialState = ModelFactory.createDefaultModel();
initialState.read(JenaIngestUtilsTest.class.getResourceAsStream(
"renameBlank.n3"), null, "N3");
Model renamedState = utils.renameBNodes(
initialState, "http://example.org/node/n");
Assert.assertEquals("Post-rename model is not the same size as the " +
"initial model", initialState.size(), renamedState.size());
StmtIterator sit = renamedState.listStatements();
boolean lingeringBNodes = false;
while(sit.hasNext()) {
Statement stmt = sit.nextStatement();
if(stmt.getSubject().isAnon() || stmt.getObject().isAnon()) {
lingeringBNodes = true;
}
}
if(lingeringBNodes) {
StringWriter s = new StringWriter();
renamedState.write(s, "N3");
Assert.fail("Renamed model still contains blank nodes \n" +
s.toString());
}
}
@Test
public void testGenerateTBox() {
Model abox = ModelFactory.createDefaultModel();
abox.read(JenaIngestUtilsTest.class.getResourceAsStream(
"abox.n3"), null, "N3");
Model tbox = ModelFactory.createDefaultModel();
tbox.read(JenaIngestUtilsTest.class.getResourceAsStream(
"tbox.n3"), null, "N3");
Model generatedTBox = utils.generateTBox(abox);
//log.warn(tbox.toString());
Assert.assertTrue("Generated TBox does not match expected result",
tbox.isIsomorphicWith(generatedTBox));
}
@Test
public void testDoMerge() {
OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, makeModel());
OntModel tbox = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, makeModel());
model.read(JenaIngestUtilsTest.class.getResourceAsStream(
"merge.n3"), null, "N3");
tbox.read(JenaIngestUtilsTest.class.getResourceAsStream("tbox.n3"), null, "N3");
Model expectedMergeMultipleLabels = model.read(
JenaIngestUtilsTest.class.getResourceAsStream(
"mergeResultMultipleLabels.n3"), null, "N3");
utils.doMerge("http://example.com/ns/n1", "http://example.com/ns/n1", model, tbox, false);
Assert.assertTrue("Merged model with multiple labels does not match " +
"expected result", expectedMergeMultipleLabels.isIsomorphicWith(model));
model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, makeModel());
model.read(JenaIngestUtilsTest.class.getResourceAsStream(
"merge.n3"), null, "N3");
Model expectedMergeSingleLabel = model.read(
JenaIngestUtilsTest.class.getResourceAsStream(
"mergeResultSingleLabel.n3"), null, "N3");
utils.doMerge("http://example.com/ns/n1", "http://example.com/ns/n1", model, tbox, true);
Assert.assertTrue("Merged model with multiple labels does not match " +
"expected result", expectedMergeSingleLabel.isIsomorphicWith(model));
}
}

View file

@ -0,0 +1,12 @@
@prefix ns: <http://example.com/ns/> .
ns:n1 a ns:Duck .
ns:n1 ns:duckCode "1" .
ns:n1 ns:d "cheese"@en-US .
ns:n1 ns:o ns:f .
ns:n2 a ns:Duck .
ns:n2 ns:upcCode "2" .
ns:n2 ns:p ns:q .
ns:n3 a ns:Duck .
ns:n3 ns:productCode "3"^^<http://example.org/datatype> .
ns:n3 ns:q ns:z .

View file

@ -0,0 +1,17 @@
@prefix ns: <http://example.com/ns/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
ns:n1 a ns:Duck .
ns:n1 ns:duckCode "1" .
ns:n1 rdfs:label "duck" .
ns:n1 rdfs:label "duck"@en-US .
ns:n1 ns:d "cheese"@en-US .
ns:n1 ns:o ns:f .
ns:n2 a ns:Duck .
ns:n2 rdfs:label "goose" .
ns:n2 ns:upcCode "2" .
ns:n2 ns:p ns:q .
ns:n3 a ns:Duck .
ns:n3 ns:productCode "3"^^<http://example.org/datatype> .
ns:n3 ns:q ns:z .
ns:n4 ns:q ns:n2 .

View file

@ -0,0 +1,16 @@
@prefix ns: <http://example.com/ns/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
ns:n1 a ns:Duck .
ns:n1 ns:duckCode "1" .
ns:n1 rdfs:label "duck" .
ns:n1 rdfs:label "duck"@en-US .
ns:n1 ns:d "cheese"@en-US .
ns:n1 ns:o ns:f .
ns:n1 rdfs:label "goose" .
ns:n1 ns:upcCode "2" .
ns:n1 ns:p ns:q .
ns:n3 a ns:Duck .
ns:n3 ns:productCode "3"^^<http://example.org/datatype> .
ns:n3 ns:q ns:z .
ns:n4 ns:q ns:n1 .

View file

@ -0,0 +1,15 @@
@prefix ns: <http://example.com/ns/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
ns:n1 a ns:Duck .
ns:n1 ns:duckCode "1" .
ns:n1 rdfs:label "duck" .
ns:n1 rdfs:label "duck"@en-US .
ns:n1 ns:d "cheese"@en-US .
ns:n1 ns:o ns:f .
ns:n1 ns:upcCode "2" .
ns:n1 ns:p ns:q .
ns:n3 a ns:Duck .
ns:n3 ns:productCode "3"^^<http://example.org/datatype> .
ns:n3 ns:q ns:z .
ns:n4 ns:q ns:n1 .

View file

@ -0,0 +1,13 @@
@prefix ns: <http://example.com/ns/> .
[] a ns:Duck ;
ns:duckCode "1" ;
ns:d [
a ns:Duck ;
ns:duckCode "2" ;
ns:d [
a ns:Duck ;
ns:duckCode "3" ;
ns:d "cake" ;
] ;
] .

View file

@ -0,0 +1,14 @@
@prefix ns: <http://example.com/ns/> .
ns:n1 a ns:Duck .
ns:n1 ns:duckCode "1" .
ns:n1 ns:d "cheese" .
ns:n2 a ns:Duck .
ns:n2 ns:duckCode "2" .
ns:n2 ns:d "strudel" .
ns:n2 ns:d "pancake" .
ns:n3 a ns:Duck .
ns:n3 ns:duckCode "3" .
ns:n3 ns:d "cake" .
ns:n3 ns:d "bacon" .
ns:n3 ns:d "corn" .

View file

@ -0,0 +1,14 @@
@prefix ns: <http://example.com/ns/> .
ns:n1 a ns:Duck .
ns:n1 ns:duckCode "1" .
ns:n1 ns:d "cheese" .
ns:n2 a ns:Duck .
ns:n2 ns:duckCode "2" .
ns:n2 ns:d "strudel" .
ns:n2 ns:d "pancake" .
ns:n6 a ns:Duck .
ns:n6 ns:duckCode "3" .
ns:n6 ns:d "cake" .
ns:n6 ns:d "bacon" .
ns:n6 ns:d "corn" .

View file

@ -0,0 +1,14 @@
@prefix ns: <http://example.com/ns/> .
ns:n1 a ns:Duck .
ns:n1 ns:duckCode "1" .
ns:n1 ns:d "cheese" .
ns:n2 a ns:Duck .
ns:n2 ns:duckCode "2" .
ns:n2 ns:d "strudel" .
ns:n2 ns:d "pancake" .
ns:n8 a ns:Duck .
ns:n8 ns:duckCode "3" .
ns:n8 ns:d "cake" .
ns:n8 ns:d "bacon" .
ns:n8 ns:d "corn" .

View file

@ -0,0 +1,14 @@
@prefix ns: <http://example.com/ns/> .
ns:n1 a ns:Duck .
ns:n1 ns:duckCode "1" .
ns:n1 ns:d "cheese" .
ns:n5 a ns:Duck .
ns:n5 ns:duckCode "2" .
ns:n5 ns:d "strudel" .
ns:n5 ns:d "pancake" .
ns:n3 a ns:Duck .
ns:n3 ns:duckCode "3" .
ns:n3 ns:d "cake" .
ns:n3 ns:d "bacon" .
ns:n3 ns:d "corn" .

View file

@ -0,0 +1,14 @@
@prefix ns: <http://example.com/ns/> .
ns:n1 a ns:Duck .
ns:n1 ns:duckCode "1" .
ns:n1 ns:d "cheese" .
ns:n5 a ns:Duck .
ns:n5 ns:duckCode "2" .
ns:n5 ns:d "strudel" .
ns:n5 ns:d "pancake" .
ns:n6 a ns:Duck .
ns:n6 ns:duckCode "3" .
ns:n6 ns:d "cake" .
ns:n6 ns:d "bacon" .
ns:n6 ns:d "corn" .

View file

@ -0,0 +1,14 @@
@prefix ns: <http://example.com/ns/> .
ns:n1 a ns:Duck .
ns:n1 ns:duckCode "1" .
ns:n1 ns:d "cheese" .
ns:n5 a ns:Duck .
ns:n5 ns:duckCode "2" .
ns:n5 ns:d "strudel" .
ns:n5 ns:d "pancake" .
ns:n8 a ns:Duck .
ns:n8 ns:duckCode "3" .
ns:n8 ns:d "cake" .
ns:n8 ns:d "bacon" .
ns:n8 ns:d "corn" .

View file

@ -0,0 +1,20 @@
@prefix ns: <http://example.com/ns/> .
ns:n1 a ns:Duck .
ns:n1 ns:duckCode "1" .
ns:n1 ns:d "cheese" .
ns:n2 a ns:Duck .
ns:n2 ns:duckCode "2" .
ns:n2 ns:d "strudel" .
ns:n3 a ns:Duck .
ns:n3 ns:duckCode "3" .
ns:n3 ns:d "cake" .
ns:n5 a ns:Duck .
ns:n5 ns:duckCode "2" .
ns:n5 ns:d "pancake" .
ns:n6 a ns:Duck .
ns:n6 ns:duckCode "3" .
ns:n6 ns:d "bacon" .
ns:n8 a ns:Duck .
ns:n8 ns:duckCode "3" .
ns:n8 ns:d "corn" .

View file

@ -0,0 +1,11 @@
@prefix ns: <http://example.com/ns/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
ns:Duck a owl:Class .
ns:duckCode a owl:DatatypeProperty .
ns:d a owl:DatatypeProperty .
ns:o a owl:ObjectProperty .
ns:upcCode a owl:DatatypeProperty .
ns:p a owl:ObjectProperty .
ns:productCode a owl:DatatypeProperty .
ns:q a owl:ObjectProperty .