/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2007.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.query.resultio;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import junit.framework.TestCase;
import org.openrdf.query.QueryLanguage;
import org.openrdf.query.TupleQueryResult;
import org.openrdf.repository.Repository;
import org.openrdf.repository.RepositoryConnection;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.sail.SailRepository;
import org.openrdf.rio.RDFFormat;
import org.openrdf.rio.RDFParseException;
import org.openrdf.rio.UnsupportedRDFormatException;
import org.openrdf.sail.memory.MemoryStore;
public class TupleQueryResultTest extends TestCase {
private Repository rep;
private RepositoryConnection con;
private String emptyResultQuery;
private String singleResultQuery;
private String multipleResultQuery;
public TupleQueryResultTest(String name)
throws RepositoryException, IOException, UnsupportedRDFormatException, RDFParseException
{
super(name);
rep = new SailRepository(new MemoryStore());
rep.initialize();
con = rep.getConnection();
buildQueries();
addData();
}
/*
* build some simple SeRQL queries to use for testing the result set object.
*/
private void buildQueries() {
StringBuilder query = new StringBuilder();
query.append("SELECT * ");
query.append("FROM {X} P {Y} ");
query.append("WHERE X != X ");
emptyResultQuery = query.toString();
query = new StringBuilder();
query.append("SELECT DISTINCT P ");
query.append("FROM {} dc:publisher {P} ");
query.append("USING NAMESPACE ");
query.append(" dc = <http://purl.org/dc/elements/1.1/>");
singleResultQuery = query.toString();
query = new StringBuilder();
query.append("SELECT DISTINCT P, D ");
query.append("FROM {} dc:publisher {P}; ");
query.append(" dc:date {D} ");
query.append("USING NAMESPACE ");
query.append(" dc = <http://purl.org/dc/elements/1.1/>");
multipleResultQuery = query.toString();
}
private void addData()
throws IOException, UnsupportedRDFormatException, RDFParseException, RepositoryException
{
InputStream defaultGraph = TupleQueryResultTest.class.getResourceAsStream("/testcases/default-graph-1.ttl");
try {
con.add(defaultGraph, "", RDFFormat.TURTLE);
}
finally {
defaultGraph.close();
}
}
public void testGetBindingNames()
throws Exception
{
TupleQueryResult result = con.prepareTupleQuery(QueryLanguage.SERQL, multipleResultQuery).evaluate();
try {
List<String> headers = result.getBindingNames();
if (!headers.get(0).equals("P")) {
fail("first header element should be 'P' but is '" + headers.get(0) + "'");
}
if (!headers.get(1).equals("D")) {
fail("second header element should be 'D' but is '" + headers.get(1) + "'");
}
}
finally {
result.close();
}
}
/*
* deprecated
public void testIsDistinct()
throws Exception
{
TupleQueryResult result = con.prepareTupleQuery(QueryLanguage.SERQL, emptyResultQuery).evaluate();
try {
if (result.isDistinct()) {
fail("query result should not be distinct.");
}
}
finally {
result.close();
}
result = con.prepareTupleQuery(QueryLanguage.SERQL, singleResultQuery).evaluate();
try {
if (!result.isDistinct()) {
fail("query result should be distinct.");
}
}
finally {
result.close();
}
}
*/
public void testIterator()
throws Exception
{
TupleQueryResult result = con.prepareTupleQuery(QueryLanguage.SERQL, multipleResultQuery).evaluate();
try {
int count = 0;
while(result.hasNext()) {
result.next();
count++;
}
if (count <= 1) {
fail("query should have multiple results.");
}
}
finally {
result.close();
}
}
public void testIsEmpty()
throws Exception
{
TupleQueryResult result = con.prepareTupleQuery(QueryLanguage.SERQL, emptyResultQuery).evaluate();
try {
if (result.hasNext()) {
fail("Query result should be empty");
}
}
finally {
result.close();
}
}
}