package org.openrdf.repository.object;
import junit.framework.Test;
import org.openrdf.query.TupleQuery;
import org.openrdf.query.TupleQueryResult;
import org.openrdf.repository.object.base.ObjectRepositoryTestCase;
import org.openrdf.repository.object.concepts.Person;
public class ObjectQueryTest extends ObjectRepositoryTestCase {
private static final String PREFIX = "PREFIX foaf: <urn:foaf:>\n";
public static Test suite() throws Exception {
return ObjectRepositoryTestCase.suite(ObjectQueryTest.class);
}
private static final String QUERY_PERSON_SMITH = PREFIX
+ "SELECT ?person WHERE { ?person foaf:family_name \"Smith\" }";
private static final String QUERY_PERSON_NAME_SMITH = PREFIX
+ "SELECT ?person ?name WHERE { ?person foaf:family_name \"Smith\" ; foaf:name ?name }";
private static final String QUERY_PERSON_NAME_GENDER_SMITH = PREFIX
+ "SELECT ?person ?name ?gender WHERE { ?person foaf:family_name \"Smith\" ; foaf:name ?name OPTIONAL { ?person foaf:gender ?gender } }";
private static final String QUERY_NAME_SMITH = PREFIX
+ "SELECT ?name WHERE { ?person foaf:family_name \"Smith\" ; foaf:name ?name }";
private static final String QUERY_FRIENDS_SMITH = PREFIX
+ "SELECT ?friend WHERE { ?person foaf:family_name \"Smith\" OPTIONAL { ?person foaf:knows ?friend } }";
public void testBeanQuery() throws Exception {
ObjectQuery query = con.prepareObjectQuery(QUERY_PERSON_SMITH);
int count = 0;
for (Object bean : query.evaluate().asList()) {
Person person = (Person) bean;
count++;
assertTrue(person.getFoafNames().contains("Bob")
|| person.getFoafNames().contains("John"));
}
assertEquals(2, count);
}
public void testOptionalBeanQuery() throws Exception {
ObjectQuery query = con.prepareObjectQuery(QUERY_FRIENDS_SMITH);
assertTrue(query.evaluate().asList().isEmpty());
}
public void testTupleQuery() throws Exception {
ObjectQuery query = con.prepareObjectQuery(QUERY_PERSON_NAME_SMITH);
int count = 0;
for (Object row : query.evaluate().asList()) {
Person person = (Person) ((Object[]) row)[0];
String name = (String) ((Object[]) row)[1];
count++;
assertTrue(person.getFoafNames().contains("Bob")
|| person.getFoafNames().contains("John"));
assertTrue(name.equals("Bob") || name.equals("John"));
}
assertEquals(2, count);
}
public void testTupleOptionalQuery() throws Exception {
ObjectQuery query = con.prepareObjectQuery(QUERY_PERSON_NAME_GENDER_SMITH);
int count = 0;
for (Object row : query.evaluate().asList()) {
Person person = (Person) ((Object[]) row)[0];
String name = (String) ((Object[]) row)[1];
String gender = (String) ((Object[]) row)[2];
count++;
assertTrue(person.getFoafNames().contains("Bob")
|| person.getFoafNames().contains("John"));
assertTrue(name.equals("Bob") || name.equals("John"));
assertNull(gender);
}
assertEquals(2, count);
}
public void testLiteralQuery() throws Exception {
ObjectQuery query = con.prepareObjectQuery(QUERY_NAME_SMITH);
int count = 0;
for (Object result : query.evaluate().asList()) {
String name = (String) result;
count++;
assertTrue(name.equals("Bob") || name.equals("John"));
}
assertEquals(2, count);
}
public void testResourceQuery() throws Exception {
ObjectQuery query = con.prepareObjectQuery(QUERY_PERSON_SMITH);
int count = 0;
for (Object bean : query.evaluate().asList()) {
Person person = (Person) bean;
count++;
assertTrue(person.getFoafNames().contains("Bob")
|| person.getFoafNames().contains("John"));
}
assertEquals(2, count);
}
public void testTupleQueryBinding() throws Exception {
Person jamie = con.addDesignation(con.getObjectFactory().createObject(),
Person.class);
jamie.getFoafNames().add("Jamie");
jamie.getFoafFamily_names().add("Leigh");
String q = PREFIX + "Select ?name where { ?person foaf:name ?name }";
TupleQuery query = con.prepareTupleQuery(q);
query.setBinding("person", ((RDFObject)jamie).getResource());
TupleQueryResult result = query.evaluate();
assertTrue(result.hasNext());
assertEquals("Jamie", result.next().getValue("name").stringValue());
result.close();
}
@Override
protected void setUp() throws Exception {
super.setUp();
Person bob = con.addDesignation(con.getObjectFactory().createObject(),
Person.class);
bob.getFoafNames().add("Bob");
bob.getFoafFamily_names().add("Smith");
Person john = con.addDesignation(con.getObjectFactory().createObject(),
Person.class);
john.getFoafNames().add("John");
john.getFoafFamily_names().add("Smith");
}
}