adding some unit tests to JenaIngestUtils
This commit is contained in:
parent
1baf710499
commit
d65cc2b106
16 changed files with 328 additions and 4 deletions
|
@ -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));
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -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 .
|
|
@ -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 .
|
|
@ -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 .
|
|
@ -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 .
|
|
@ -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" ;
|
||||
] ;
|
||||
] .
|
|
@ -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" .
|
|
@ -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" .
|
|
@ -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" .
|
|
@ -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" .
|
|
@ -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" .
|
|
@ -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" .
|
|
@ -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" .
|
|
@ -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 .
|
Loading…
Add table
Add a link
Reference in a new issue