/**
* 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.sparql.core;
import static org.apache.jena.atlas.iterator.Iter.toList ;
import static org.junit.Assert.assertNotNull ;
import java.util.Arrays ;
import java.util.Collection ;
import java.util.List ;
import org.apache.jena.atlas.iterator.Iter ;
import org.apache.jena.atlas.junit.BaseTest ;
import org.apache.jena.graph.Node ;
import org.apache.jena.sparql.core.DatasetGraph ;
import org.apache.jena.sparql.core.Quad ;
import org.apache.jena.sparql.sse.SSE ;
import org.junit.Test ;
/** Tests to cover cases of "find" patterns on a dataset graph
* and graoph from datasets.
* @see AbstractDatasetGraphTests
* @see AbstractDatasetGraphFind
* @see AbstractTestGraphOverDataset
*/
public abstract class AbstractDatasetGraphFindPatterns {
// XXX Same for "graph", then Default graph, named graph.
// Add/merge with AbstractDatasetGraphTests
// Not for union graph here.
static Quad q = SSE.parseQuad("(:g :s :p :o)") ;
static Quad q_g = SSE.parseQuad("(:gx :s :p :o)") ;
static Quad q_s = SSE.parseQuad("(:g :sx :p :o)") ;
static Quad q_p = SSE.parseQuad("(:g :s :px :o)") ;
static Quad q_o = SSE.parseQuad("(:g :s :p :ox)") ;
static Quad q_gs = SSE.parseQuad("(:gx :sx :p :o)") ;
static Quad q_gp = SSE.parseQuad("(:gx :s :px :o)") ;
static Quad q_go = SSE.parseQuad("(:gx :s :p :ox)") ;
static Quad q_sp = SSE.parseQuad("(:g :sx :px :o)") ;
static Quad q_so = SSE.parseQuad("(:g :sx :p :ox)") ;
static Quad q_po = SSE.parseQuad("(:g :s :px :ox)") ;
static Quad q_gsp = SSE.parseQuad("(:gx :sx :px :o)") ;
static Quad q_gpo = SSE.parseQuad("(:gx :s :px :ox)") ;
static Quad q_gso = SSE.parseQuad("(:gx :sx :p :ox)") ;
static Quad q_spo = SSE.parseQuad("(:g :sx :px :ox)") ;
static Quad q_gspo = SSE.parseQuad("(:gx :sx :px :ox)") ;
static List<Quad> dataPattern = Arrays.asList(q, q_g, q_s, q_p, q_o, q_gs, q_gp, q_go, q_sp, q_so, q_po, q_gsp, q_gpo, q_gso, q_spo, q_gspo) ;
// Helper.
static void add(DatasetGraph data, Collection<Quad> quads) {
for ( Quad q : quads ) data.add(q);
}
/**
* Create the dataset to test loaded with the supplied data - this dataset need not be mutable.
* Either supply {@link #create()} or override this method.
*/
protected DatasetGraph create(Collection<Quad> data) {
DatasetGraph dsg = create() ;
add(dsg, data) ;
return dsg ;
}
/** Easy route - create empty, mutable dataset.
* If providing {@link #create(Collection)}, return null for this.
*/
protected abstract DatasetGraph create() ;
private Node node(String str) { return SSE.parseNode(str) ; }
@Test public void find_quad_00() {
DatasetGraph dsg = create(dataPattern) ;
List<Quad> quads1 = Iter.toList(dsg.find()) ;
assertNotNull("find()", quads1);
List<Quad> quads2 = toList(dsg.find(null, null, null, null)) ;
assertNotNull("find(null,null,null,null)", quads2);
BaseTest.assertEqualsUnordered("find()", quads1, quads2);
}
@Test public void find_pattern_gspo() {
DatasetGraph dsg = create(dataPattern) ;
List<Quad> quads1 = toList(dsg.find(node(":g"), node(":s"), node(":p"), node(":o"))) ;
assertNotNull("find(g,s,p,o)", quads1);
List<Quad> quads2 = Arrays.asList(q) ;
BaseTest.assertEqualsUnordered("find(gspo)", quads1, quads2);
}
@Test public void find_pattern_g() {
DatasetGraph dsg = create(dataPattern) ;
List<Quad> quads1 = Iter.toList(dsg.find(node(":gx"), null, null, null)) ;
List<Quad> quads2 = Arrays.asList(q_g, q_gs, q_gp, q_go, q_gsp, q_gso, q_gpo, q_gspo) ;
BaseTest.assertEqualsUnordered("find(g)", quads1, quads2);
}
@Test public void find_pattern_s() {
DatasetGraph dsg = create(dataPattern) ;
List<Quad> quads1 = Iter.toList(dsg.find(null, node(":sx"), null, null)) ;
List<Quad> quads2 = Arrays.asList(q_s, q_gs, q_sp, q_so, q_gsp, q_gso, q_spo, q_gspo) ;
BaseTest.assertEqualsUnordered("find(s)", quads1, quads2);
}
@Test public void find_pattern_p() {
DatasetGraph dsg = create(dataPattern) ;
List<Quad> quads1 = Iter.toList(dsg.find(null, null, node(":px"), null)) ;
List<Quad> quads2 = Arrays.asList(q_p, q_gp, q_sp, q_po, q_gsp, q_gpo, q_spo, q_gspo) ;
BaseTest.assertEqualsUnordered("find(p)", quads1, quads2);
}
@Test public void find_pattern_o() {
DatasetGraph dsg = create(dataPattern) ;
List<Quad> quads1 = Iter.toList(dsg.find(null, null, null, node(":ox"))) ;
List<Quad> quads2 = Arrays.asList(q_o, q_go, q_so, q_po, q_gpo, q_gso, q_spo, q_gspo) ;
BaseTest.assertEqualsUnordered("find(o)", quads1, quads2);
}
@Test public void find_pattern_gs() {
DatasetGraph dsg = create(dataPattern) ;
List<Quad> quads1 = Iter.toList(dsg.find(node(":gx"), node(":sx"), null, null)) ;
List<Quad> quads2 = Arrays.asList(q_gs, q_gsp, q_gso, q_gspo) ;
BaseTest.assertEqualsUnordered("find(gs)", quads1, quads2);
}
@Test public void find_pattern_gp() {
DatasetGraph dsg = create(dataPattern) ;
List<Quad> quads1 = Iter.toList(dsg.find(node(":gx"), null, node(":px"), null)) ;
List<Quad> quads2 = Arrays.asList(q_gp, q_gsp, q_gpo, q_gspo) ;
BaseTest.assertEqualsUnordered("find(gp)", quads1, quads2);
}
@Test public void find_pattern_go() {
DatasetGraph dsg = create(dataPattern) ;
List<Quad> quads1 = Iter.toList(dsg.find(node(":gx"), null, null, node(":ox"))) ;
List<Quad> quads2 = Arrays.asList(q_go, q_gpo, q_gso, q_gspo) ;
BaseTest.assertEqualsUnordered("find(go)", quads1, quads2);
}
@Test public void find_pattern_sp() {
DatasetGraph dsg = create(dataPattern) ;
List<Quad> quads1 = Iter.toList(dsg.find(null, node(":sx"), node(":px"), null)) ;
List<Quad> quads2 = Arrays.asList(q_sp, q_gsp, q_spo, q_gspo) ;
BaseTest.assertEqualsUnordered("find(sp)", quads1, quads2);
}
@Test public void find_pattern_so() {
DatasetGraph dsg = create(dataPattern) ;
List<Quad> quads1 = Iter.toList(dsg.find(null, node(":sx"), null, node(":ox"))) ;
List<Quad> quads2 = Arrays.asList(q_so, q_gso, q_spo, q_gspo) ;
BaseTest.assertEqualsUnordered("find(so)", quads1, quads2);
}
@Test public void find_pattern_po() {
DatasetGraph dsg = create(dataPattern) ;
List<Quad> quads1 = Iter.toList(dsg.find(null, null, node(":px"), node(":ox"))) ;
List<Quad> quads2 = Arrays.asList(q_po, q_gpo, q_spo, q_gspo) ;
BaseTest.assertEqualsUnordered("find(po)", quads1, quads2);
}
@Test public void find_pattern_gsp() {
DatasetGraph dsg = create(dataPattern) ;
List<Quad> quads1 = Iter.toList(dsg.find(node(":gx"), node(":sx"), node(":px"), null)) ;
List<Quad> quads2 = Arrays.asList(q_gsp, q_gspo) ;
BaseTest.assertEqualsUnordered("find(gsp)", quads1, quads2);
}
@Test public void find_pattern_gpo() {
DatasetGraph dsg = create(dataPattern) ;
List<Quad> quads1 = Iter.toList(dsg.find(node(":gx"), null, node(":px"), node(":ox"))) ;
List<Quad> quads2 = Arrays.asList(q_gpo, q_gspo) ;
BaseTest.assertEqualsUnordered("find(gpo)", quads1, quads2);
}
@Test public void find_pattern_gso() {
DatasetGraph dsg = create(dataPattern) ;
List<Quad> quads1 = Iter.toList(dsg.find(node(":gx"), null, node(":px"), node(":ox"))) ;
List<Quad> quads2 = Arrays.asList(q_gpo, q_gspo) ;
BaseTest.assertEqualsUnordered("find(gso)", quads1, quads2);
}
@Test public void find_pattern_spo() {
DatasetGraph dsg = create(dataPattern) ;
List<Quad> quads1 = Iter.toList(dsg.find(null, node(":sx"), node(":px"), node(":ox"))) ;
List<Quad> quads2 = Arrays.asList(q_spo, q_gspo) ;
BaseTest.assertEqualsUnordered("find(spo)", quads1, quads2);
}
}