package org.weso.wesearch.domain;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import org.weso.utils.QueryBuilderException;
import org.weso.utils.WesearchException;
import org.weso.wesearch.domain.impl.SPARQLQuery;
import org.weso.wesearch.domain.impl.filters.Filter;
import org.weso.wesearch.domain.impl.filters.Filters;
import org.weso.wesearch.domain.impl.filters.Operator;
import org.weso.wesearch.domain.impl.filters.SPARQLFilter;
import org.weso.wesearch.domain.impl.filters.SPARQLFilters;
public class TestSPARQLQuery {
@SuppressWarnings("unchecked")
@Test
public void testAddClause() throws IOException,
NoSuchFieldException, SecurityException,
IllegalArgumentException, IllegalAccessException {
SPARQLQuery query = new SPARQLQuery();
Field field = SPARQLQuery.class.getDeclaredField("clauses");
field.setAccessible(true);
assertNotNull(field.get(query));
assertTrue(((List<String>)field.get(query)).size() == 0);
query.addClause("This is a test clause");
assertTrue(((List<String>)field.get(query)).size() == 1);
}
@SuppressWarnings("unchecked")
@Test
public void testAddClauseNull() throws IOException,
NoSuchFieldException, SecurityException,
IllegalArgumentException, IllegalAccessException {
SPARQLQuery query = new SPARQLQuery();
Field field = SPARQLQuery.class.getDeclaredField("clauses");
field.setAccessible(true);
assertNotNull(field.get(query));
assertTrue(((List<String>)field.get(query)).size() == 0);
query.addClause(null);
assertTrue(((List<String>)field.get(query)).size() == 0);
}
@SuppressWarnings("unchecked")
@Test
public void testAddFilters() throws IOException,
NoSuchFieldException, SecurityException,
IllegalArgumentException, IllegalAccessException,
QueryBuilderException {
SPARQLQuery query = new SPARQLQuery();
Field field = SPARQLQuery.class.getDeclaredField("filters");
field.setAccessible(true);
Map<String, Filter> filters = (Map<String, Filter>)field.get(query);
assertNull(filters.get("var"));
query.addFilters("var", new SPARQLFilters(
new SPARQLFilter("This is a test filter")));
assertNotNull(filters.get("var"));
}
@Test(expected=QueryBuilderException.class)
public void testtAddFiltersVarNameNull() throws IOException,
QueryBuilderException {
SPARQLQuery query = new SPARQLQuery();
query.addFilters(null, new SPARQLFilters(
new SPARQLFilter("This is a test filter")));
}
@Test(expected=QueryBuilderException.class)
public void testAddFiltersFiltersNull() throws IOException,
QueryBuilderException {
SPARQLQuery query = new SPARQLQuery();
query.addFilters("var", null);
}
@Test(expected=QueryBuilderException.class)
public void testAddFilterVarNameNull() throws IOException,
QueryBuilderException {
SPARQLQuery query = new SPARQLQuery();
query.addFilter(null, new SPARQLFilter("This is a test filter"));
}
@SuppressWarnings("unchecked")
@Test
public void testAddFilterFilterNull() throws IOException,
QueryBuilderException, NoSuchFieldException, SecurityException,
IllegalArgumentException, IllegalAccessException {
SPARQLQuery query = new SPARQLQuery();
Field field = SPARQLQuery.class.getDeclaredField("filters");
field.setAccessible(true);
Map<String, Filter> filters = (Map<String, Filter>)field.get(query);
assertFalse(filters.containsKey("var"));
query.addFilter("var", null);
assertTrue(filters.containsKey("var"));
assertNull(filters.get("var"));
}
@SuppressWarnings("unchecked")
@Test
public void testAddFilter() throws IOException,
NoSuchFieldException, SecurityException,
IllegalArgumentException, IllegalAccessException,
QueryBuilderException {
SPARQLQuery query = new SPARQLQuery();
Field field = SPARQLQuery.class.getDeclaredField("filters");
field.setAccessible(true);
Map<String, Filter> filters = (Map<String, Filter>)field.get(query);
assertNull(filters.get("var"));
query.addFilter("var", new SPARQLFilter("This is a test filter"));
SPARQLFilters filter = (SPARQLFilters)filters.get("var");
assertNotNull(filter);
Field operator = SPARQLFilters.class.getDeclaredField("op");
operator.setAccessible(true);
Field filtersField = SPARQLFilters.class.getDeclaredField("filters");
filtersField.setAccessible(true);
assertNull(operator.get(filter));
assertNull(filtersField.get(filter));
query.addFilter("var", new SPARQLFilter("This is other test filter"));
filters = (Map<String, Filter>)field.get(query);
filter = (SPARQLFilters)filters.get("var");
assertNotNull(operator.get(filter));
assertNotNull(filtersField.get(filter));
assertEquals(Operator.AND, (Operator)operator.get(filter));
}
@Test
public void testGetNextVarName() throws IOException, WesearchException {
SPARQLQuery query = new SPARQLQuery();
String expected = "a";
String result = query.getNextVarName();
assertEquals(expected, result);
expected = "b";
result = query.getNextVarName();
assertEquals(expected, result);
}
@Test(expected=WesearchException.class)
public void testGetNextVarNameException()
throws NoSuchFieldException, SecurityException, IOException,
IllegalArgumentException, IllegalAccessException,
WesearchException {
SPARQLQuery query = new SPARQLQuery();
Field nextVar = SPARQLQuery.class.getDeclaredField("nextVar");
nextVar.setAccessible(true);
nextVar.setInt(query, -5);
query.getNextVarName();
}
@Test(expected=RuntimeException.class)
public void testGetAuxiliarVarNameException() throws IOException {
SPARQLQuery query = new SPARQLQuery();
query.obtainAuxiliarVarName();
}
@Test
public void testGetAuxiliarVarName() throws IOException,
QueryBuilderException {
SPARQLQuery query = new SPARQLQuery();
String expected = "var";
query.addFilter("var", null);
String result = query.obtainAuxiliarVarName();
assertEquals(expected, result);
}
@Test
public void testIsPropertyForResult() throws IOException,
QueryBuilderException {
SPARQLQuery query = new SPARQLQuery();
boolean expected = true;
boolean result = query.isPropertyForResult();
assertEquals(expected, result);
query.addFilter("var", null);
expected = false;
result = query.isPropertyForResult();
assertEquals(expected, result);
}
@Test
public void testIsPropertyForResultWithTrueResult() throws IOException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
SPARQLQuery query = new SPARQLQuery();
boolean expected = true;
Map<String, Filters> filters = new HashMap<String, Filters>();
filters.put("test", new SPARQLFilters());
Field field = SPARQLQuery.class.getDeclaredField("filters");
field.setAccessible(true);
field.set(query, filters);
assertEquals(expected, query.isPropertyForResult());
}
@Test(expected=RuntimeException.class)
public void testObtainAuxiliarVarName() throws IOException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
SPARQLQuery query = new SPARQLQuery();
Map<String, Filters> filters = new HashMap<String, Filters>();
filters.put("test", new SPARQLFilters());
Field field = SPARQLQuery.class.getDeclaredField("filters");
field.setAccessible(true);
field.set(query, filters);
query.obtainAuxiliarVarName();
}
@Test
public void testGetVariables() throws IOException {
assertNotNull(SPARQLQuery.getVariables());
assertEquals(26, SPARQLQuery.getVariables().size());
}
@Test
public void testSetVariables() {
List<String> variables = SPARQLQuery.getVariables();
SPARQLQuery.setVariables(null);
assertNull(SPARQLQuery.getVariables());
List<String> list = new LinkedList<String>();
SPARQLQuery.setVariables(list);
assertNotNull(SPARQLQuery.getVariables());
list.add("aaa");
assertEquals(1, SPARQLQuery.getVariables().size());
SPARQLQuery.setVariables(variables);
}
@Test
public void testGetAndSetFilters() throws IOException {
SPARQLQuery query = new SPARQLQuery();
assertNotNull(query.getFilters());
assertTrue(query.getFilters().isEmpty());
query.setFilters(null);
assertNull(query.getFilters());
Map<String, Filters> filters = new HashMap<String, Filters>();
query.setFilters(filters);
assertNotNull(query.getFilters());
assertTrue(query.getFilters().isEmpty());
filters.put("test", null);
assertFalse(query.getFilters().isEmpty());
}
@Test
public void testGetAndSetClauses() throws IOException {
SPARQLQuery query = new SPARQLQuery();
assertTrue(query.getClauses().isEmpty());
query.setClauses(null);
assertNull(query.getClauses());
List<String> clauses = new LinkedList<String>();
query.setClauses(clauses);
assertTrue(query.getClauses().isEmpty());
clauses.add("test");
assertFalse(query.getClauses().isEmpty());
}
@Test
public void testGetAndSetNextVar() throws IOException {
SPARQLQuery query = new SPARQLQuery();
assertEquals(-1, query.getNextVar());
query.setNextVar(20);
assertEquals(20, query.getNextVar());
}
@Test
public void testGetAndSetQuery() throws IOException {
SPARQLQuery query = new SPARQLQuery();
assertNotNull(query.getQuery());
assertEquals("SELECT DISTINCT ?res WHERE { }", query.getQuery());
query.setQuery("is a test query");
assertEquals("SELECT DISTINCT ?res WHERE { }", query.getQuery());
query.setQuery(null);
assertNotNull(query.getQuery());
}
}