You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2017/08/19 17:00:42 UTC
[4/5] jena git commit: JENA-1372: Improve error handling.
JENA-1372: Improve error handling.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/6b2b54fa
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/6b2b54fa
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/6b2b54fa
Branch: refs/heads/master
Commit: 6b2b54fa3199f239e42852592e17cce98b0d8557
Parents: 5a81057
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Aug 18 16:52:16 2017 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Aug 18 16:52:16 2017 +0100
----------------------------------------------------------------------
.../jena/sparql/function/library/FN_Apply.java | 17 ++++++------
.../function/library/TestFnFunctions.java | 29 +++++++++++++++++---
2 files changed, 34 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/6b2b54fa/jena-arq/src/main/java/org/apache/jena/sparql/function/library/FN_Apply.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/function/library/FN_Apply.java b/jena-arq/src/main/java/org/apache/jena/sparql/function/library/FN_Apply.java
index 4f766fa..6539416 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/function/library/FN_Apply.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/function/library/FN_Apply.java
@@ -24,13 +24,13 @@ import org.apache.jena.atlas.lib.Cache ;
import org.apache.jena.atlas.lib.CacheFactory ;
import org.apache.jena.graph.Node ;
import org.apache.jena.sparql.expr.ExprEvalException ;
+import org.apache.jena.sparql.expr.ExprException ;
import org.apache.jena.sparql.expr.ExprList ;
import org.apache.jena.sparql.expr.NodeValue ;
import org.apache.jena.sparql.function.Function ;
import org.apache.jena.sparql.function.FunctionBase ;
import org.apache.jena.sparql.function.FunctionFactory ;
import org.apache.jena.sparql.function.FunctionRegistry ;
-import org.apache.jena.sparql.sse.builders.ExprBuildException ;
import org.apache.jena.sparql.util.Context ;
/** XPath and XQuery Functions and Operators 3.1
@@ -44,28 +44,30 @@ public class FN_Apply extends FunctionBase {
@Override
public void checkBuild(String uri, ExprList args) {
if ( args.isEmpty() )
- throw new ExprBuildException("fn:apply: no function to call (minimum number of args is one)");
+ throw new ExprException("fn:apply: no function to call (minimum number of args is one)");
}
@Override
public NodeValue exec(List<NodeValue> args) {
if ( args.isEmpty() )
- throw new ExprBuildException("fn:apply: no function to call (minimum number of args is one)");
+ throw new ExprException("fn:apply: no function to call (minimum number of args is one)");
NodeValue functionId = args.get(0);
List<NodeValue> argExprs = args.subList(1,args.size()) ;
ExprList exprs = new ExprList();
- argExprs.forEach((a)->exprs.add(a));
+ argExprs.forEach(exprs::add);
Node fnNode = functionId.asNode();
if ( fnNode.isBlank() )
- throw new ExprBuildException("fn:apply: function id is a blank node (must be a URI)");
+ throw new ExprEvalException("fn:apply: function id is a blank node (must be a URI)");
if ( fnNode.isLiteral() )
- throw new ExprBuildException("fn:apply: function id is a literal (must be a URI)");
+ throw new ExprEvalException("fn:apply: function id is a literal (must be a URI)");
if ( fnNode.isVariable() )
// Should not happen ... but ...
- throw new ExprBuildException("fn:apply: function id is an unbound variable (must be a URI)");
+ throw new ExprEvalException("fn:apply: function id is an unbound variable (must be a URI)");
if ( fnNode.isURI() ) {
String functionIRI = fnNode.getURI();
Function function = cache1.getOrFill(functionIRI, ()->buildFunction(functionIRI));
+ if ( function == null )
+ throw new ExprEvalException("fn:apply: Unknown function: <"+functionId+">");
if ( function instanceof FunctionBase ) {
// Fast track.
return ((FunctionBase)function).exec(argExprs);
@@ -92,5 +94,4 @@ public class FN_Apply extends FunctionBase {
registry = FunctionRegistry.get() ;
return registry ;
}
-
}
http://git-wip-us.apache.org/repos/asf/jena/blob/6b2b54fa/jena-arq/src/test/java/org/apache/jena/sparql/function/library/TestFnFunctions.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/function/library/TestFnFunctions.java b/jena-arq/src/test/java/org/apache/jena/sparql/function/library/TestFnFunctions.java
index 493f501..933f11c 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/function/library/TestFnFunctions.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/function/library/TestFnFunctions.java
@@ -21,8 +21,8 @@ package org.apache.jena.sparql.function.library;
import static org.apache.jena.sparql.function.library.LibTest.test;
import org.apache.jena.sparql.expr.ExprEvalException ;
+import org.apache.jena.sparql.expr.ExprException ;
import org.apache.jena.sparql.expr.VariableNotBoundException ;
-import org.apache.jena.sparql.sse.builders.ExprBuildException ;
import org.apache.jena.system.JenaSystem ;
import org.junit.Test ;
@@ -34,20 +34,20 @@ public class TestFnFunctions {
test("fn:apply(math:sqrt, 9)", "3.0e0");
}
- // Under arity
+ // Under-arity
@Test(expected=ExprEvalException.class)
public void apply_2() {
test("fn:apply(math:sqrt)", "3.0e0");
}
- // Over arity
+ // Over-arity
@Test(expected=ExprEvalException.class)
public void apply_3() {
test("fn:apply(math:sqrt, 9, 10)", "3.0e0");
}
// Not a URI.
- @Test(expected=ExprBuildException.class)
+ @Test(expected=ExprEvalException.class)
public void apply_4() {
test("fn:apply('bicycle', 9, 10)", "3.0e0");
}
@@ -57,8 +57,29 @@ public class TestFnFunctions {
test("fn:apply(?var)", "3.0e0");
}
+ @Test(expected=ExprEvalException.class)
+ public void apply_6() {
+ test("fn:apply(<x:unregistered>)", "false");
+ }
+
+ @Test(expected=ExprException.class)
+ public void apply_7() {
+ test("fn:apply()", "false");
+ }
+
@Test
public void collationKey_1() {
test("fn:collation-key('foo', 'en') = 'Zm9vQGVu'^^xsd:base64Binary");
}
+
+ @Test(expected=ExprEvalException.class)
+ public void collationKey_2() {
+ test("fn:collation-key('foo', 22) = 'Zm9vQGVu'^^xsd:base64Binary");
+ }
+
+ @Test(expected=ExprEvalException.class)
+ public void collationKey_3() {
+ test("fn:collation-key(<x:bar>, 'en') = 'Zm9vQGVu'^^xsd:base64Binary");
+ }
+
}