package org.xenei.jdbc4sparql.sparql.parser.jsqlparser.functions; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.sql.SQLException; import net.sf.jsqlparser.expression.Function; import org.junit.Before; import org.junit.Test; import org.xenei.jdbc4sparql.J4SDriver; import org.xenei.jdbc4sparql.iface.Column; import org.xenei.jdbc4sparql.iface.ColumnDef; import org.xenei.jdbc4sparql.iface.name.CatalogName; import org.xenei.jdbc4sparql.iface.name.ColumnName; import org.xenei.jdbc4sparql.impl.rdf.RdfCatalog; import org.xenei.jdbc4sparql.sparql.SparqlQueryBuilder; import org.xenei.jdbc4sparql.sparql.items.QueryColumnInfo; import org.xenei.jdbc4sparql.sparql.parser.jsqlparser.SparqlExprVisitor; import org.xenei.jdbc4sparql.sparql.parser.jsqlparser.SparqlExprVisitor.AliasInfo; import org.xenei.jdbc4sparql.sparql.parser.jsqlparser.proxies.ExprInfo; import com.hp.hpl.jena.sparql.expr.Expr; import com.hp.hpl.jena.sparql.expr.nodevalue.NodeValueString; public class SystemFunctionHandlerTests { private SystemFunctionHandler handler; private final SparqlQueryBuilder builder; private Function func; private final CatalogName catName; private final RdfCatalog catalog; private final ColumnDef colDef; private AliasInfo alias; public SystemFunctionHandlerTests() { final QueryColumnInfo colInfo = mock(QueryColumnInfo.class); catName = new CatalogName("catalogName"); builder = mock(SparqlQueryBuilder.class); catalog = mock(RdfCatalog.class); final Column column = mock(Column.class); colDef = mock(ColumnDef.class); when(builder.getCatalog()).thenReturn(catalog); when(catalog.getName()).thenReturn(catName); when(builder.getColumn((ColumnName) any())).thenReturn(colInfo); when(colInfo.getColumn()).thenReturn(column); when(column.getColumnDef()).thenReturn(colDef); } @Before public void setup() { func = new Function(); handler = new SystemFunctionHandler(builder); final SparqlExprVisitor visitor = new SparqlExprVisitor(builder, false, false); alias = visitor.new AliasInfo("Alias", false); } @Test public void testCatalogFunction() throws SQLException { func.setName("catalog"); ExprInfo exprInfo = (ExprInfo) handler.handle(func, alias); assertEquals(alias.getAlias(), exprInfo.getName().getShortName()); Expr expr = exprInfo.getExpr(); assertTrue(expr instanceof NodeValueString); assertEquals("catalogName", ((NodeValueString) expr).asString()); func.setName("CATALOG"); exprInfo = (ExprInfo) handler.handle(func, alias); assertEquals(alias.getAlias(), exprInfo.getName().getShortName()); expr = exprInfo.getExpr(); assertTrue(expr instanceof NodeValueString); assertEquals("catalogName", ((NodeValueString) expr).asString()); func.setName("CaTaLoG"); exprInfo = (ExprInfo) handler.handle(func, alias); assertEquals(alias.getAlias(), exprInfo.getName().getShortName()); expr = exprInfo.getExpr(); assertTrue(expr instanceof NodeValueString); assertEquals("catalogName", ((NodeValueString) expr).asString()); } @Test public void testVersionFunction() throws SQLException { func.setName("version"); ExprInfo exprInfo = (ExprInfo) handler.handle(func, alias); assertEquals(alias.getAlias(), exprInfo.getName().getShortName()); Expr expr = exprInfo.getExpr(); assertTrue(expr instanceof NodeValueString); assertEquals(J4SDriver.getVersion(), ((NodeValueString) expr).asString()); func.setName("VERSION"); exprInfo = (ExprInfo) handler.handle(func, alias); assertEquals(alias.getAlias(), exprInfo.getName().getShortName()); expr = exprInfo.getExpr(); assertTrue(expr instanceof NodeValueString); assertEquals(J4SDriver.getVersion(), ((NodeValueString) expr).asString()); func.setName("VerSion"); exprInfo = (ExprInfo) handler.handle(func, alias); assertEquals(alias.getAlias(), exprInfo.getName().getShortName()); expr = exprInfo.getExpr(); assertTrue(expr instanceof NodeValueString); assertEquals(J4SDriver.getVersion(), ((NodeValueString) expr).asString()); } }