/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jena.sparql.expr ; import org.apache.jena.JenaRuntime ; import org.apache.jena.atlas.junit.BaseTest ; import org.apache.jena.datatypes.xsd.XSDDatatype ; import org.apache.jena.graph.Node ; import org.apache.jena.graph.NodeFactory ; import org.apache.jena.sparql.expr.ExprEvalException ; import org.apache.jena.sparql.expr.ExprTypeException ; import org.apache.jena.sparql.expr.NodeValue ; import org.apache.jena.sparql.expr.nodevalue.NodeFunctions ; import org.apache.jena.sparql.graph.NodeConst ; import org.apache.jena.vocabulary.RDF ; import org.apache.jena.vocabulary.XSD ; import org.junit.Test ; public class TestNodeFunctions extends BaseTest { private static final double accuracyExact = 0.0d ; private static final double accuracyClose = 0.000001d ; @Test public void testSameTerm1() { Node n1 = NodeFactory.createLiteral("xyz") ; Node n2 = NodeFactory.createLiteral("xyz") ; assertTrue(NodeFunctions.sameTerm(n1, n2)) ; } @Test public void testSameTerm2() { Node n1 = NodeFactory.createLiteral("xyz") ; Node n2 = NodeFactory.createLiteral("abc") ; assertFalse(NodeFunctions.sameTerm(n1, n2)) ; } @Test public void testSameTerm3() { Node n1 = NodeFactory.createLiteral("xyz") ; Node n2 = NodeFactory.createURI("xyz") ; assertFalse(NodeFunctions.sameTerm(n1, n2)) ; } @Test public void testSameTerm4() { Node n1 = NodeFactory.createLiteral("xyz") ; Node n2 = NodeFactory.createLiteral("xyz", XSDDatatype.XSDstring) ; if ( JenaRuntime.isRDF11 ) assertTrue(NodeFunctions.sameTerm(n1, n2)) ; else assertFalse(NodeFunctions.sameTerm(n1, n2)) ; } @Test public void testSameTerm5() { Node n1 = NodeFactory.createLiteral("xyz", "en") ; Node n2 = NodeFactory.createLiteral("xyz") ; assertFalse(NodeFunctions.sameTerm(n1, n2)) ; } @Test public void testSameTerm6() { Node n1 = NodeFactory.createLiteral("xyz", "en") ; Node n2 = NodeFactory.createLiteral("xyz", "EN") ; assertTrue(NodeFunctions.sameTerm(n1, n2)) ; } @Test public void testRDFtermEquals1() { Node n1 = NodeFactory.createURI("xyz") ; Node n2 = NodeFactory.createLiteral("xyz") ; assertFalse(NodeFunctions.rdfTermEquals(n1, n2)) ; } @Test(expected=ExprEvalException.class) public void testRDFtermEquals3() { // Unextended - no language tag Node n1 = NodeFactory.createLiteral("xyz") ; Node n2 = NodeFactory.createLiteral("xyz", "en") ; NodeFunctions.rdfTermEquals(n1, n2) ; } @Test public void testRDFtermEquals2() { Node n1 = NodeFactory.createLiteral("xyz", "en") ; Node n2 = NodeFactory.createLiteral("xyz", "EN") ; assertTrue(NodeFunctions.rdfTermEquals(n1, n2)) ; } @Test public void testStr1() { NodeValue nv = NodeValue.makeNodeInteger(56) ; NodeValue s = NodeFunctions.str(nv) ; assertEquals("56", s.getString()) ; } @Test public void testStr2() { NodeValue nv = NodeValue.makeInteger(56) ; NodeValue s = NodeFunctions.str(nv) ; assertEquals("56", s.getString()) ; } @Test public void testStr3() { NodeValue nv = NodeValue.makeNode("abc", "fr", (String)null) ; NodeValue s = NodeFunctions.str(nv) ; assertEquals("abc", s.getString()) ; } @Test(expected=ExprTypeException.class) public void testStr4() { Node n = NodeFactory.createBlankNode() ; String s = NodeFunctions.str(n) ; } @Test public void testDatatype1() { NodeValue nv = NodeValue.makeInteger(5) ; Node n = nv.asNode() ; Node r = NodeFunctions.datatype(n) ; assertEquals(XSD.integer.asNode(), r) ; } @Test public void testDatatype2() { NodeValue nv = NodeValue.makeInteger(5) ; NodeValue r = NodeFunctions.datatype(nv) ; NodeValue e = NodeValue.makeNode(XSD.integer.asNode()) ; assertEquals(e, r) ; } @Test public void testDatatype3() { NodeValue nv = NodeValue.makeString("abc") ; NodeValue r = NodeFunctions.datatype(nv) ; NodeValue e = NodeValue.makeNode(XSD.xstring.asNode()) ; assertEquals(e, r) ; } @Test public void testDatatype4() { NodeValue nv = NodeValue.makeNode("abc", "fr", (String)null) ; // SPARQL 1.0 // try { // NodeValue r = NodeFunctions.datatype(nv) ; // fail("Expect a type exception but call succeeded") ; // } // catch (ExprTypeException ex) {} // SPARQL 1.1 / RDF 1.1 NodeValue r = NodeFunctions.datatype(nv) ; NodeValue e = NodeValue.makeNode(NodeConst.rdfLangString) ; assertEquals(e, r) ; } @Test(expected=ExprTypeException.class) public void testDatatype5() { NodeValue nv = NodeValue.makeNode(NodeFactory.createURI("http://example")) ; NodeValue r = NodeFunctions.datatype(nv) ; } @Test(expected=ExprTypeException.class) public void testDatatype6() { NodeValue nv = NodeValue.makeNode(NodeFactory.createBlankNode()) ; NodeValue r = NodeFunctions.datatype(nv) ; } @Test public void testLang1() { Node n = NodeFactory.createLiteral("abc", "en-gb") ; assertEquals("en-gb", NodeFunctions.lang(n)) ; } @Test public void testLang2() { NodeValue nv = NodeValue.makeNode("abc", "en", (String)null) ; NodeValue r = NodeFunctions.lang(nv) ; NodeValue e = NodeValue.makeString("en") ; assertEquals(e, r) ; } @Test public void testLang3() { NodeValue nv = NodeValue.makeInteger(5) ; NodeValue r = NodeFunctions.lang(nv) ; NodeValue e = NodeValue.makeString("") ; assertEquals(e, r) ; } @Test public void testLang4() { NodeValue nv = NodeValue.makeNode(NodeFactory.createLiteral("simple")) ; NodeValue r = NodeFunctions.lang(nv) ; NodeValue e = NodeValue.makeString("") ; assertEquals(e, r) ; } @Test(expected=ExprTypeException.class) public void testLang5() { NodeValue nv = NodeValue.makeNode(NodeFactory.createURI("http://example/")) ; NodeValue r = NodeFunctions.lang(nv) ; } @Test public void testLangMatches1() { NodeValue nv = NodeValue.makeString("en") ; NodeValue pat = NodeValue.makeString("en") ; NodeValue r = NodeFunctions.langMatches(nv, pat) ; assertEquals(NodeValue.TRUE, r) ; assertFalse(NodeValue.FALSE.equals(r)) ; } @Test public void testLangMatches2() { NodeValue nv = NodeValue.makeString("en") ; NodeValue pat = NodeValue.makeString("fr") ; NodeValue r = NodeFunctions.langMatches(nv, pat) ; assertEquals(NodeValue.FALSE, r) ; assertFalse(NodeValue.TRUE.equals(r)) ; } @Test public void testLangMatches3() { NodeValue nv = NodeValue.makeString("en-gb") ; NodeValue pat = NodeValue.makeString("en-gb") ; NodeValue r = NodeFunctions.langMatches(nv, pat) ; assertEquals(NodeValue.TRUE, r) ; } @Test public void testLangMatches4() { NodeValue nv = NodeValue.makeString("en-gb") ; NodeValue pat = NodeValue.makeString("en") ; NodeValue r = NodeFunctions.langMatches(nv, pat) ; assertEquals(NodeValue.TRUE, r) ; } @Test public void testLangMatches5() { NodeValue nv = NodeValue.makeString("abc") ; NodeValue pat = NodeValue.makeString("*") ; NodeValue r = NodeFunctions.langMatches(nv, pat) ; assertEquals(NodeValue.TRUE, r) ; } @Test public void testLangMatches6() { NodeValue nv = NodeValue.makeString("x-y-z") ; NodeValue pat = NodeValue.makeString("x") ; NodeValue r = NodeFunctions.langMatches(nv, pat) ; assertEquals(NodeValue.TRUE, r) ; } @Test public void testLangMatches7() { NodeValue nv = NodeValue.makeString("x") ; NodeValue pat = NodeValue.makeString("x-y-z") ; NodeValue r = NodeFunctions.langMatches(nv, pat) ; assertEquals(NodeValue.FALSE, r) ; } @Test public void testLangMatches8() { // The language tag of a plain literal is "" // A language tag is not allowed to be the empty string (by RFC 3066) NodeValue nv = NodeValue.makeString("") ; NodeValue pat = NodeValue.makeString("*") ; NodeValue r = NodeFunctions.langMatches(nv, pat) ; assertEquals(NodeValue.FALSE, r) ; } @Test public void testLangMatches9() { // The language-match of "" is not a legal by RFC 4647 but useful for language tags of "" NodeValue nv = NodeValue.makeString("") ; NodeValue pat = NodeValue.makeString("") ; NodeValue r = NodeFunctions.langMatches(nv, pat) ; assertEquals(NodeValue.TRUE, r) ; } @Test public void testLangMatches10() { // The language-match of "" is not a legal by RFC 4647 but useful for language tags of "" NodeValue nv = NodeValue.makeString("en") ; NodeValue pat = NodeValue.makeString("") ; NodeValue r = NodeFunctions.langMatches(nv, pat) ; assertEquals(NodeValue.FALSE, r) ; } @Test public void testIsIRI_1() { NodeValue nv = NodeValue.makeNode(NodeFactory.createURI("http://example/")) ; NodeValue r = NodeFunctions.isIRI(nv) ; assertEquals(NodeValue.TRUE, r) ; } @Test public void testIsIRI_2() { NodeValue nv = NodeValue.makeNode(NodeFactory.createLiteral("http://example/")) ; NodeValue r = NodeFunctions.isIRI(nv) ; assertEquals(NodeValue.FALSE, r) ; } @Test public void testIsBlank1() { NodeValue nv = NodeValue.makeNode(NodeFactory.createBlankNode()) ; NodeValue r = NodeFunctions.isBlank(nv) ; assertEquals(NodeValue.TRUE, r) ; } @Test public void testIsBlank2() { NodeValue nv = NodeValue.makeNode(NodeFactory.createLiteral("xyz")) ; NodeValue r = NodeFunctions.isBlank(nv) ; assertEquals(NodeValue.FALSE, r) ; } @Test public void testIsBlank3() { NodeValue nv = NodeValue.makeNode(NodeFactory.createURI("http://example/")) ; NodeValue r = NodeFunctions.isBlank(nv) ; assertEquals(NodeValue.FALSE, r) ; } @Test public void testIsLiteral1() { NodeValue nv = NodeValue.makeNode(NodeFactory.createLiteral("xyz")) ; NodeValue r = NodeFunctions.isLiteral(nv) ; assertEquals(NodeValue.TRUE, r) ; } @Test public void testIsLiteral2() { NodeValue nv = NodeValue.makeNode(NodeFactory.createURI("http://example/")) ; NodeValue r = NodeFunctions.isLiteral(nv) ; assertEquals(NodeValue.FALSE, r) ; } @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()); } }