package com.github.anno4j.querying.tests;
import com.github.anno4j.model.Annotation;
import com.github.anno4j.model.Body;
import com.github.anno4j.querying.QuerySetup;
import org.apache.marmotta.ldpath.parser.ParseException;
import org.junit.Test;
import org.openrdf.annotations.Iri;
import org.openrdf.query.MalformedQueryException;
import org.openrdf.query.QueryEvaluationException;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.config.RepositoryConfigException;
import java.util.List;
import static org.junit.Assert.assertEquals;
/**
* Containing all tests with recursive path expressions.
*/
public class RecursivePathTest extends QuerySetup {
@Test
/**
* Test method for OneOrMorePath
*
* @see <a href="http://www.w3.org/TR/sparql11-query/#pp-language">http://www.w3.org/TR/sparql11-query/#pp-language</a>
*/
public void oneOrMoreTest() throws RepositoryException, QueryEvaluationException, MalformedQueryException, ParseException, RepositoryConfigException, IllegalAccessException, InstantiationException {
List<Annotation> annotations = queryService
.addCriteria("(oa:hasTarget)+")
.execute();
assertEquals(0, annotations.size());
super.setupUpQueryTest();
annotations = queryService
.addCriteria("(oa:hasBody)+")
.addCriteria("oa:hasBody/ex:recursiveBodyValue", "Another Testing Value")
.execute();
assertEquals(1, annotations.size());
assertEquals("Another Testing Value", ((RecursiveBody) annotations.get(0).getBodies().iterator().next()).getValue());
}
@Test
/**
* Test method for ZeroOrMorePath.
*
* @see <a href="http://www.w3.org/TR/sparql11-query/#pp-language">http://www.w3.org/TR/sparql11-query/#pp-language</a>
*/
public void zeroOrMoreTest() throws RepositoryException, QueryEvaluationException, MalformedQueryException, ParseException, RepositoryConfigException, IllegalAccessException, InstantiationException {
List<Annotation> annotations = queryService.addCriteria("(oa:hasBody/ex:recursiveBodyValue)*", "Some Testing Value").execute();
assertEquals(1, annotations.size());
assertEquals("Some Testing Value", ((RecursiveBody) annotations.get(0).getBodies().iterator().next()).getValue());
super.setupUpQueryTest();
annotations = queryService.addCriteria("(oa:hasTarget)*").execute();
assertEquals(2, annotations.size());
}
@Override
public void persistTestData() throws RepositoryException, InstantiationException, IllegalAccessException {
// Persisting some data
Annotation annotation = anno4j.createObject(Annotation.class);
annotation.setGenerated("2015-01-28T12:00:00Z");
RecursiveBody recursiveBody = anno4j.createObject(RecursiveBody.class);
recursiveBody.setValue("Some Testing Value");
annotation.addBody(recursiveBody);
Annotation annotation1 = anno4j.createObject(Annotation.class);
annotation1.setCreated("2015-01-28T12:00:00Z");
RecursiveBody recursiveBody2 = anno4j.createObject(RecursiveBody.class);
recursiveBody2.setValue("Another Testing Value");
annotation1.addBody(recursiveBody2);
}
@Iri("http://www.example.com/schema#recursiveBody")
public static interface RecursiveBody extends Body {
@Iri("http://www.example.com/schema#recursiveBodyValue")
String getValue();
@Iri("http://www.example.com/schema#recursiveBodyValue")
void setValue(String value);
}
}