package org.weso.wesearch.domain;
import static org.junit.Assert.assertEquals;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.weso.utils.OntoModelException;
import org.weso.utils.QueryBuilderException;
import org.weso.wesearch.domain.impl.JenaPropertyImpl;
import org.weso.wesearch.domain.impl.MatterImpl;
import org.weso.wesearch.domain.impl.ValueSelectorImpl;
import org.weso.wesearch.domain.impl.filters.Filters;
import org.weso.wesearch.domain.impl.filters.SPARQLFilters;
import org.weso.wesearch.domain.impl.values.DateValue;
import org.weso.wesearch.domain.impl.values.NumericValue;
import org.weso.wesearch.domain.impl.values.StringValue;
import org.weso.wesearch.model.OntoModelWrapper;
import org.weso.wesearch.model.impl.FileOntologyLoader;
import org.weso.wesearch.model.impl.JenaOntoModelWrapper;
import com.hp.hpl.jena.vocabulary.RDF;
import com.ibm.icu.util.GregorianCalendar;
public class TestSPARQLQueryBuilder {
private OntoModelWrapper model = null;
private Matter matter = null;
@Before
public void initialize() {
String[] files = {"src/test/resources/ontoTest2.owl"};
model = new JenaOntoModelWrapper(new FileOntologyLoader(files));
matter = new MatterImpl("Person",
"http://xmlns.com/foaf/0.1/Person",
"A person.");
}
@Test
public void testGetTypeCluase() throws QueryBuilderException {
String expected = "?sol <" + RDF.type + "> " +
"?class";
String result = SPARQLQueryBuilder.getTypeClause("sol", "class");
assertEquals(expected, result);
}
@Test(expected=QueryBuilderException.class)
public void testGetTypeClauseMatterNull() throws QueryBuilderException {
SPARQLQueryBuilder.getTypeClause("sol", null);
}
@Test(expected=QueryBuilderException.class)
public void testGetTypeClauseNameNull() throws QueryBuilderException {
SPARQLQueryBuilder.getTypeClause(null, "class");
}
@Test(expected=QueryBuilderException.class)
public void testGetTypeClauseBothParamsNull() throws QueryBuilderException {
SPARQLQueryBuilder.getTypeClause(null, null);
}
@Test
public void testGetPropertyClause() throws QueryBuilderException {
String expected = "?p <http://purl.weso.org/test#Property> ?t";
Property p = new JenaPropertyImpl("http://purl.weso.org/test#Property",
"Property test", "This is a test property");
String result = SPARQLQueryBuilder.getPropertyClause("p", p, "t");
assertEquals(expected, result);
}
@Test(expected=QueryBuilderException.class)
public void testGetPropertyClauseNameNull() throws QueryBuilderException {
Property p = new JenaPropertyImpl("http://purl.weso.org/test#Property",
"Property test", "This is a test property");
SPARQLQueryBuilder.getPropertyClause(null, p, "t");
}
@Test(expected=QueryBuilderException.class)
public void testGetPropertyClausePropertyNull()
throws QueryBuilderException {
SPARQLQueryBuilder.getPropertyClause("p", null, "t");
}
@Test(expected=QueryBuilderException.class)
public void testGetPropertyClauseObjNameNull()
throws QueryBuilderException {
Property p = new JenaPropertyImpl("http://purl.weso.org/test#Property",
"Property test", "This is a test property");
SPARQLQueryBuilder.getPropertyClause("p", p, null);
}
@Test(expected=QueryBuilderException.class)
public void testGetPropertyClauseAllParamsNull()
throws QueryBuilderException {
SPARQLQueryBuilder.getPropertyClause(null, null, null);
}
@Test
public void testGetFilterTextValueSelector()
throws QueryBuilderException {
String expected = "regex(?x, \"test\", \"i\")";
ValueSelector selector = new ValueSelectorImpl(ValueSelector.TEXT);
selector.setValue(new StringValue("test"));
String result = SPARQLQueryBuilder.getFilter("x", selector).getClause();
assertEquals(expected, result);
}
@Test
public void testGetFilterClauseNumericValueSelector()
throws QueryBuilderException {
String expected = "xsd:decimal(?x) = xsd:decimal('5.36')";
ValueSelector selector = new ValueSelectorImpl(ValueSelector.NUMERIC);
selector.setValue(new NumericValue(5.36));
String result = SPARQLQueryBuilder.getFilter("x", selector).getClause();
assertEquals(expected, result);
}
@Test
public void testGetFilterClauseDateValueSelector()
throws QueryBuilderException {
Date now = new GregorianCalendar().getTime();
String expected = "xsd:date(?x) = xsd:date('" + now + "')";
ValueSelector selector = new ValueSelectorImpl(ValueSelector.DATE);
selector.setValue(new DateValue(now));
String result = SPARQLQueryBuilder.getFilter("x", selector).getClause();
assertEquals(expected, result);
}
@Test
public void testGetFilterClauseUndefinedValueSelector()
throws QueryBuilderException {
String expected = "regex(?x, \"test\", \"i\")";
ValueSelector selector = new ValueSelectorImpl(ValueSelector.UNDEFINED);
selector.setValue(new StringValue("test"));
String result = SPARQLQueryBuilder.getFilter("x", selector).getClause();
assertEquals(expected, result);
}
@Test(expected=QueryBuilderException.class)
public void testGetFilterClauseNameNull()
throws QueryBuilderException {
ValueSelector selector = new ValueSelectorImpl(ValueSelector.UNDEFINED);
selector.setValue(new StringValue("test"));
SPARQLQueryBuilder.getFilter(null, selector);
}
@Test(expected=QueryBuilderException.class)
public void testGetFilterClauseValueSelectorNull()
throws QueryBuilderException {
SPARQLQueryBuilder.getFilter("x", null);
}
@Test(expected=QueryBuilderException.class)
public void testGetFilterClauseValueNull()
throws QueryBuilderException {
ValueSelector selector = new ValueSelectorImpl(ValueSelector.UNDEFINED);
selector.setValue(null);
SPARQLQueryBuilder.getFilter("x", selector);
}
@Test(expected=QueryBuilderException.class)
public void testGetFilterClauseValueSelectorObject()
throws QueryBuilderException {
ValueSelector selector = new ValueSelectorImpl(ValueSelector.OBJECT);
selector.setValue(new StringValue("test"));
SPARQLQueryBuilder.getFilter("a", selector);
}
@Test
public void testGetClassFilter()
throws OntoModelException, QueryBuilderException {
String expected = "?class = <http://xmlns.com/foaf/0.1/Person> || " +
"?class = <http://www.w3.org/2002/07/owl#Nothing> ";
Filters filters = SPARQLQueryBuilder.getClassFilter("class", matter,
model);
String result = filters.toString();
assertEquals(expected, result);
}
@Test(expected=QueryBuilderException.class)
public void testGetClassFilterVarNameNull() throws QueryBuilderException,
OntoModelException {
SPARQLQueryBuilder.getClassFilter(null, matter, model);
}
@Test(expected=QueryBuilderException.class)
public void testGetClassFilterMatterNull()
throws QueryBuilderException, OntoModelException {
SPARQLQueryBuilder.getClassFilter("subject", null, model);
}
@Test(expected=QueryBuilderException.class)
public void testGetClassFilterModelNull()
throws QueryBuilderException, OntoModelException {
SPARQLQueryBuilder.getClassFilter("subject", matter, null);
}
@Test
public void testConcatAllClassFilter() throws NoSuchMethodException,
SecurityException, IllegalAccessException, IllegalArgumentException,
InvocationTargetException {
String aux = null;
List<String> classes = new LinkedList<String>();
classes.add(aux);
SPARQLFilters filters = new SPARQLFilters();
Method method = SPARQLQueryBuilder.class.getDeclaredMethod(
"concatAllClassFilter", String.class, List.class,
SPARQLFilters.class);
method.setAccessible(true);
method.invoke(SPARQLQueryBuilder.class, "a", classes, filters);
assertEquals(filters.getOp(), null);
}
}