/** * 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.datatypes; import static org.junit.Assert.assertEquals ; import static org.junit.Assert.assertFalse ; import static org.junit.Assert.assertNotNull ; import static org.junit.Assert.assertTrue ; import java.math.BigDecimal ; import org.apache.jena.datatypes.xsd.XSDDatatype ; import org.apache.jena.graph.Node ; import org.apache.jena.graph.NodeFactory ; import org.apache.jena.rdf.model.Resource ; import org.apache.jena.vocabulary.XSD ; import org.junit.Test ; public class TestDatatypes { public XSDDatatype xsdDateTime = XSDDatatype.XSDdateTime ; public XSDDatatype xsdDateTimeStamp = XSDDatatype.XSDdateTimeStamp ; public XSDDatatype xsdDuration = XSDDatatype.XSDduration ; public XSDDatatype xsdYearMonthDuration = XSDDatatype.XSDyearMonthDuration ; public XSDDatatype xsdDayTimeDuration = XSDDatatype.XSDdayTimeDuration ; @Test public void registration_01() { checkRegistration1("dateTime", XSD.dateTime); } @Test public void registration_02() { checkRegistration1("dateTimeStamp", XSD.dateTimeStamp); } @Test public void registration_03() { checkRegistration1("duration", XSD.duration); } @Test public void registration_04() { checkRegistration1("yearMonthDuration", XSD.yearMonthDuration); } @Test public void registration_05() { checkRegistration1("dayTimeDuration", XSD.dayTimeDuration); } // xsd:dateTimeStamp @Test public void dateTimeStamp_01() { valid(xsdDateTime, "2015-02-23T15:21:18Z") ; valid(xsdDateTimeStamp, "2015-02-23T15:21:18Z") ; } @Test public void dateTimeStamp_02() { valid(xsdDateTime, "2015-02-23T15:21:18") ; invalid(xsdDateTimeStamp, "2015-02-23T15:21:18") ; } @Test public void dateTimeStamp_03() { invalid(xsdDateTime, "2015-02-23Z") ; invalid(xsdDateTimeStamp, "2015-02-23Z") ; } @Test public void dateTimeStamp_04() { valid(xsdDateTime, "2015-02-23T15:21:18.665Z") ; valid(xsdDateTimeStamp, "2015-02-23T15:21:18.665Z") ; } @Test public void dateTimeStamp_05() { valid(xsdDateTime, "2015-02-23T15:21:18.665+00:00") ; valid(xsdDateTimeStamp, "2015-02-23T15:21:18.665+00:00") ; } @Test public void dateTimeStamp_06() { invalid(xsdDateTime, "2015-02-23T15:21:18.665+15:00") ; invalid(xsdDateTimeStamp, "2015-02-23T15:21:18.665+15:00") ; } // xsd:yearMonthDuration @Test public void yearMonthDuration_01() { valid(xsdDuration, "P1Y") ; valid(xsdYearMonthDuration, "P1Y") ; } @Test public void yearMonthDuration_02() { valid(xsdDuration, "-P1M") ; valid(xsdYearMonthDuration, "-P1M") ; } @Test public void yearMonthDuration_03() { valid(xsdYearMonthDuration, "P9Y10M") ; valid(xsdYearMonthDuration, "P9Y10M") ; } @Test public void yearMonthDuration_04() { valid(xsdDuration, "P1Y1D") ; invalid(xsdYearMonthDuration, "P1Y1D") ; } @Test public void yearMonthDuration_05() { valid(xsdDuration, "P1YT1M") ; invalid(xsdYearMonthDuration, "P1YT1M") ; } @Test public void yearMonthDuration_06() { valid(xsdDuration, "P1D") ; invalid(xsdYearMonthDuration, "P1D") ; } // xsd:dayTimeDuration @Test public void dayTimeDuration_01() { valid(xsdDuration, "PT0S") ; valid(xsdDayTimeDuration, "PT0S") ; } @Test public void dayTimeDuration_02() { invalid(xsdDuration, "PT") ; invalid(xsdDayTimeDuration, "PT") ; } @Test public void dayTimeDuration_03() { valid(xsdDuration, "P1D") ; valid(xsdDayTimeDuration, "P1D") ; } @Test public void dayTimeDuration_04() { valid(xsdDuration, "PT1M") ; valid(xsdDayTimeDuration, "PT1M") ; } @Test public void dayTimeDuration_05() { valid(xsdDuration, "PT1S") ; valid(xsdDayTimeDuration, "PT1S") ; } @Test public void dayTimeDuration_06() { valid(xsdDuration, "PT1M") ; invalid(xsdDayTimeDuration, "P1M") ; } @Test public void dayTimeDuration_07() { invalid(xsdDuration, "P1DT") ; invalid(xsdDayTimeDuration, "P1DT") ; } @Test public void valueToLex_bigdecimal_01() { testValueToLex(new BigDecimal("0.004"), XSDDatatype.XSDdecimal) ; } @Test public void valueToLex_bigdecimal_02() { testValueToLex(new BigDecimal("1E21"), XSDDatatype.XSDdecimal) ; } @Test public void valueToLex_double_01() { testValueToLex(new Double("1E21"), XSDDatatype.XSDdouble) ; } @Test public void valueToLex_double_02() { testValueToLex(Double.POSITIVE_INFINITY, XSDDatatype.XSDdouble) ; } @Test public void valueToLex_double_03() { testValueToLex(Double.NEGATIVE_INFINITY, XSDDatatype.XSDdouble) ; } @Test public void valueToLex_float_01() { testValueToLex(new Float("1E21"), XSDDatatype.XSDfloat) ; } @Test public void valueToLex_float_02() { testValueToLex(Float.POSITIVE_INFINITY, XSDDatatype.XSDfloat) ; } @Test public void valueToLex_float_03() { testValueToLex(Float.NEGATIVE_INFINITY, XSDDatatype.XSDfloat) ; } private void testValueToLex(Object value, XSDDatatype datatype) { Node node = NodeFactory.createLiteralByValue(value, datatype) ; assertTrue("Not valid lexical form "+value+" -> "+node, datatype.isValid(node.getLiteralLexicalForm())) ; } private void valid(XSDDatatype xsddatatype, String string) { assertTrue("Expected valid: "+string, xsddatatype.isValid(string)) ; } private void invalid(XSDDatatype xsddatatype, String string) { assertFalse("Expected invalid: "+string, xsddatatype.isValid(string)) ; } private void checkRegistration1(String localName, Resource r) { XSDDatatype _xsd = (XSDDatatype)NodeFactory.getType(XSD.getURI() + localName) ; assertNotNull(_xsd) ; assertEquals(r.getURI(), _xsd.getURI()) ; } }