/* * 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.tdb.store; 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.NodeValue ; import org.apache.jena.sparql.util.NodeFactoryExtra ; import org.apache.jena.tdb.store.NodeId ; import org.junit.Test ; public class TestNodeId extends BaseTest { // @BeforeClass public static void beforeClass() { // // If running just this test suite, then this happenes before SystemTDB initialization. // System.getProperties().setProperty("tdb:store.enableInlineLiterals", "true") ; // } @Test public void nodeId_01() { NodeId nodeId = NodeId.create(37) ; assertEquals(37L, nodeId.getId()) ; } @Test public void nodeId_02() { NodeId nodeId = NodeId.create(-1L) ; assertEquals(-1L, nodeId.getId()) ; } // Inlines @Test public void nodeId_int_01() { test("1", NodeFactoryExtra.parseNode("1")) ; } @Test public void nodeId_int_02() { test("2", NodeFactoryExtra.parseNode("2")) ; } @Test public void nodeId_int_03() { test("'3'^^xsd:int", NodeFactoryExtra.parseNode("3")) ; } @Test public void nodeId_int_04() { test("'3'", (Node)null) ; } @Test public void nodeId_int_05() { test("-1", NodeFactoryExtra.parseNode("-1")) ; } @Test public void nodeId_int_06() { test("-180", NodeFactoryExtra.parseNode("-180")) ; } @Test public void nodeId_int_07() { test("01", NodeFactoryExtra.parseNode("1")) ; } @Test public void nodeId_int_08() { test("+01", NodeFactoryExtra.parseNode("1")) ; } @Test public void nodeId_int_09() // More than Long.MAX_VALUE { test("92233720368547758070", (Node)null) ; } // On the edge. static long X = 1L<<55 ; // Just too large static long Y = -((1L<<55) +1) ; // Just too small @Test public void nodeId_int_10() { test("\""+Long.toString(X)+"\"^^xsd:integer", (Node)null) ; } @Test public void nodeId_int_11() { Node n = NodeValue.makeInteger(X-1).asNode() ; test("\""+Long.toString(X-1)+"\"^^xsd:integer", n) ; } @Test public void nodeId_int_12() { test("\""+Long.toString(Y)+"\"^^xsd:integer", (Node)null) ; } @Test public void nodeId_int_13() { Node n = NodeValue.makeInteger(Y+1).asNode() ; test("\""+Long.toString(Y+1)+"\"^^xsd:integer", n) ; } @Test public void nodeId_int_20() { test("'300'^^xsd:byte", (Node)null) ; } @Test public void nodeId_decimal_1() { test("3.14", NodeFactoryExtra.parseNode("3.14")) ; } @Test public void nodeId_decimal_2() { test("123456789.123456789", (Node)null) ; } // Just this once, directly create the Node. @Test public void nodeId_decimal_3() { test("12.89", NodeFactory.createLiteral("12.89", XSDDatatype.XSDdecimal)) ; } @Test public void nodeId_decimal_4() { test("-1.0", NodeFactoryExtra.parseNode("-1.0")) ; } // This number has > 47 bits of value : 2412.80478192688 @Test public void nodeId_decimal_5() { test("2412.80478192688", (Node)null) ; } // This number has > 47 bits of value : -2412.80478192688 @Test public void nodeId_decimal_6() { test("-2412.80478192688", (Node)null) ; } @Test public void nodeId_decimal_7() { test("'0.00000001'^^xsd:decimal", NodeFactory.createLiteral("0.00000001", XSDDatatype.XSDdecimal)) ; } @Test public void nodeId_decimal_8() { test("0.00000001", NodeFactory.createLiteral("0.00000001", XSDDatatype.XSDdecimal)) ; } @Test public void nodeId_dateTime_01() { test("'2008-04-28T15:36:15+01:00'^^xsd:dateTime") ; } @Test public void nodeId_dateTime_02() { test("'2008-04-28T15:36:15Z'^^xsd:dateTime") ; } @Test public void nodeId_dateTime_03() { test("'2008-04-28T15:36:15+00:00'^^xsd:dateTime") ; } @Test public void nodeId_dateTime_04() { test("'2008-04-28T15:36:15-05:00'^^xsd:dateTime") ; } // No timezone. @Test public void nodeId_dateTime_05() { test("'2008-04-28T15:36:15'^^xsd:dateTime") ; } // Note the trailing zero - system does not preserve perfect lexical forms. @Test public void nodeId_dateTime_06() { test("'2008-04-28T15:36:05.450'^^xsd:dateTime", "'2008-04-28T15:36:05.45'^^xsd:dateTime") ; } // Java bug: T24:00:00 not accepted by DatatypeFactory.newXMLGregorianCalendar(lex) // @Test public void nodeId_dateTime_07() // { test("'2008-04-28T24:00:00'^^xsd:dateTime", NodeFactory.parseNode("'2008-04-29T00:00:00'^^xsd:dateTime")) ; } // Out of range. @Test public void nodeId_dateTime_08() { test("'8008-04-28T15:36:05.45'^^xsd:dateTime", (Node)null) ; } @Test public void nodeId_dateTime_09() { test("'2008-04-28T15:36:05.001'^^xsd:dateTime") ; } @Test public void nodeId_dateTime_10() { test("'2008-04-28T15:36:05.01'^^xsd:dateTime") ; } @Test public void nodeId_dateTime_11() { test("'2008-04-28T15:36:05.1'^^xsd:dateTime") ; } // Canonicalization test - fractional seconds. @Test public void nodeId_dateTime_12() { test("'2008-04-28T15:36:05.010'^^xsd:dateTime", "'2008-04-28T15:36:05.01'^^xsd:dateTime") ; } @Test public void nodeId_dateTime_13() { test("'2008-04-28T15:36:05.100'^^xsd:dateTime", "'2008-04-28T15:36:05.1'^^xsd:dateTime") ; } @Test public void nodeId_dateTime_14() { test("'2012-07-29T20:39:11.100+01:15'^^xsd:dateTime", "'2012-07-29T20:39:11.1+01:15'^^xsd:dateTime") ; } @Test public void nodeId_dateTime_15() { test("'2012-07-29T20:39:11.100-01:15'^^xsd:dateTime", "'2012-07-29T20:39:11.1-01:15'^^xsd:dateTime") ; } @Test public void nodeId_dateTime_16() { test("'2012-07-29T20:39:11.100+01:30'^^xsd:dateTime", "'2012-07-29T20:39:11.1+01:30'^^xsd:dateTime") ; } @Test public void nodeId_dateTime_17() { test("'2012-07-29T20:39:11.100-01:45'^^xsd:dateTime", "'2012-07-29T20:39:11.1-01:45'^^xsd:dateTime") ; } @Test public void nodeId_dateTime_18() { test("'2012-07-29T20:39:11.100Z'^^xsd:dateTime", "'2012-07-29T20:39:11.1Z'^^xsd:dateTime") ; } @Test public void nodeId_date_1() { test("'2008-04-28Z'^^xsd:date", NodeFactoryExtra.parseNode("'2008-04-28Z'^^xsd:date")) ; } @Test public void nodeId_date_2() { test("'2008-04-28+00:00'^^xsd:date", NodeFactoryExtra.parseNode("'2008-04-28+00:00'^^xsd:date")) ; } @Test public void nodeId_date_3() { test("'2008-04-28-05:00'^^xsd:date", NodeFactoryExtra.parseNode("'2008-04-28-05:00'^^xsd:date")) ; } @Test public void nodeId_date_4() { test("'2008-04-28+02:00'^^xsd:date", NodeFactoryExtra.parseNode("'2008-04-28+02:00'^^xsd:date")) ; } @Test public void nodeId_date_5() { test("'8008-04-28'^^xsd:date", (Node)null) ; } @Test public void nodeId_date_6() { test("'2012-07-29+06:15'^^xsd:date", "'2012-07-29+06:15'^^xsd:date") ; } @Test public void nodeId_date_7() { test("'2012-07-29-06:30'^^xsd:date", "'2012-07-29-06:30'^^xsd:date") ; } @Test public void nodeId_boolean_1() { test("'true'^^xsd:boolean", NodeFactoryExtra.parseNode("'true'^^xsd:boolean")) ; } @Test public void nodeId_boolean_2() { test("'false'^^xsd:boolean", NodeFactoryExtra.parseNode("'false'^^xsd:boolean")) ; } @Test public void nodeId_boolean_3() { test("'1'^^xsd:boolean", NodeFactoryExtra.parseNode("'true'^^xsd:boolean")) ; } @Test public void nodeId_boolean_4() { test("'0'^^xsd:boolean", NodeFactoryExtra.parseNode("'false'^^xsd:boolean")) ; } private void test(String x) { test(x, x) ; } private void test(String x, String expected) { test(x, NodeFactoryExtra.parseNode(expected)) ; } private void test(String x, Node correct) { Node n = NodeFactoryExtra.parseNode(x) ; NodeId nodeId = NodeId.inline(n) ; boolean b = NodeId.hasInlineDatatype(n) ; if ( nodeId != null ) assertTrue("Converted NodeId but datatype test was false", b) ; if ( correct == null ) { assertNull("Expected no encoding: got: "+nodeId, nodeId) ; return ; } assertNotNull("Expected inlining: "+n, nodeId) ; Node n2 = NodeId.extract(nodeId) ; assertNotNull("Expected recovery", n2) ; String s = "("+correct.getLiteralLexicalForm()+","+n2.getLiteralLexicalForm()+")" ; assertTrue("Not same value: "+s, correct.sameValueAs(n2)) ; // Term equality. assertEquals("Not same term", correct, n2) ; } }