JENA-839 : Make code more robust against unusual setups. Add some tests of corner cases.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/8be58c89 Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/8be58c89 Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/8be58c89 Branch: refs/heads/master Commit: 8be58c89910cfbef95531bd6b14ab47a04efe065 Parents: 8642efd Author: Andy Seaborne <[email protected]> Authored: Mon Jan 19 14:33:43 2015 +0000 Committer: Andy Seaborne <[email protected]> Committed: Mon Jan 19 14:33:43 2015 +0000 ---------------------------------------------------------------------- .../sparql/expr/nodevalue/NodeFunctions.java | 14 ++++-------- .../hpl/jena/sparql/expr/TestNodeFunctions.java | 24 +++++++++++++++++++- 2 files changed, 27 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jena/blob/8be58c89/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeFunctions.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeFunctions.java b/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeFunctions.java index 7928261..70e05a3 100644 --- a/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeFunctions.java +++ b/jena-arq/src/main/java/com/hp/hpl/jena/sparql/expr/nodevalue/NodeFunctions.java @@ -21,17 +21,14 @@ package com.hp.hpl.jena.sparql.expr.nodevalue ; import java.util.Iterator ; import java.util.UUID ; -import com.hp.hpl.jena.datatypes.RDFDatatype ; -import com.hp.hpl.jena.datatypes.xsd.XSDDatatype ; -import com.hp.hpl.jena.datatypes.xsd.impl.XSDBaseStringType; -import com.hp.hpl.jena.graph.Node ; -import com.hp.hpl.jena.graph.NodeFactory ; - import org.apache.jena.atlas.logging.Log ; import org.apache.jena.iri.IRI ; import org.apache.jena.iri.IRIFactory ; import org.apache.jena.iri.Violation ; +import com.hp.hpl.jena.datatypes.xsd.XSDDatatype ; +import com.hp.hpl.jena.graph.Node ; +import com.hp.hpl.jena.graph.NodeFactory ; import com.hp.hpl.jena.sparql.expr.ExprEvalException ; import com.hp.hpl.jena.sparql.expr.ExprTypeException ; import com.hp.hpl.jena.sparql.expr.NodeValue ; @@ -64,10 +61,7 @@ public class NodeFunctions { // No language tag : either no datatype or a datatype of xsd:string // Includes the case of rdf:langString and no language ==> Illegal as a compatible string. - RDFDatatype dt = n.getLiteralDatatype() ; - if ( dt == null ) - return n ; - if (dt instanceof XSDBaseStringType) + if ( nv.isString() ) return n ; throw new ExprEvalException(label + ": Not a string literal: " + nv) ; } http://git-wip-us.apache.org/repos/asf/jena/blob/8be58c89/jena-arq/src/test/java/com/hp/hpl/jena/sparql/expr/TestNodeFunctions.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/test/java/com/hp/hpl/jena/sparql/expr/TestNodeFunctions.java b/jena-arq/src/test/java/com/hp/hpl/jena/sparql/expr/TestNodeFunctions.java index 671f303..025d832 100644 --- a/jena-arq/src/test/java/com/hp/hpl/jena/sparql/expr/TestNodeFunctions.java +++ b/jena-arq/src/test/java/com/hp/hpl/jena/sparql/expr/TestNodeFunctions.java @@ -27,6 +27,7 @@ import com.hp.hpl.jena.graph.Node ; import com.hp.hpl.jena.graph.NodeFactory ; import com.hp.hpl.jena.sparql.expr.nodevalue.NodeFunctions ; import com.hp.hpl.jena.sparql.graph.NodeConst ; +import com.hp.hpl.jena.vocabulary.RDF ; import com.hp.hpl.jena.vocabulary.XSD ; public class TestNodeFunctions extends BaseTest { @@ -317,9 +318,30 @@ public class TestNodeFunctions extends BaseTest { assertEquals(NodeValue.FALSE, r) ; } - @Test public void testCheckAndGetStringLiteral() { + @Test public void testCheckAndGetStringLiteral1() { + NodeValue nv = NodeValue.makeNode("abc", XSDDatatype.XSDstring) ; + Node n = NodeFunctions.checkAndGetStringLiteral("Test", nv); + assertEquals( "abc", n.getLiteralLexicalForm()); + } + + @Test public void testCheckAndGetStringLiteral2() { NodeValue nv = NodeValue.makeNode("abc", XSDDatatype.XSDnormalizedString) ; Node n = NodeFunctions.checkAndGetStringLiteral("Test", nv); assertEquals( "abc", n.getLiteralLexicalForm()); } + + @Test public void testCheckAndGetStringLiteral3() { + NodeValue nv = NodeValue.makeString("abc") ; + Node n = NodeFunctions.checkAndGetStringLiteral("Test", nv); + assertEquals( "abc", n.getLiteralLexicalForm()); + } + + @Test(expected=ExprEvalException.class) + public void testCheckAndGetStringLiteral4() { + // The form "abc"^^rdf:langString (no lang tag) is not derived from xsd:string. + NodeValue nv = NodeValue.makeNode("abc", RDF.dtLangString) ; + Node n = NodeFunctions.checkAndGetStringLiteral("Test", nv); + assertEquals( "abc", n.getLiteralLexicalForm()); + } + }
