/* * 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.graph.test; import java.io.StringReader; import java.io.StringWriter; import java.util.Calendar; import java.util.GregorianCalendar ; import junit.framework.TestCase; import junit.framework.TestSuite; import org.apache.jena.datatypes.xsd.AbstractDateTime ; import org.apache.jena.datatypes.xsd.XSDDatatype ; import org.apache.jena.datatypes.xsd.XSDDateTime ; import org.apache.jena.rdf.model.* ; import org.junit.Assert ; /** * Tests behaviour of the AbstractDateTime support, specifically for * comparison operations. This complements the main tests in * TestTypedLiterals. */ public class TestDateTime extends TestCase { /** * Boilerplate for junit */ public TestDateTime( String name ) { super( name ); } /** * This is its own test suite */ public static TestSuite suite() { return new TestSuite( TestDateTime.class ); } static final XSDDateTime time0 = makeDateTime( "2009-08-13T17:54:40.348Z" ); static final XSDDateTime time1 = makeDateTime( "2009-08-13T18:54:39Z" ); static final XSDDateTime time2 = makeDateTime( "2009-08-13T18:54:40Z" ); static final XSDDateTime time3 = makeDateTime( "2009-08-13T18:54:40.348Z" ); static final XSDDateTime time4 = makeDateTime( "2009-08-13T18:54:40.505Z" ); static final XSDDateTime time5 = makeDateTime( "2009-08-13T18:54:40.77Z" ); static final XSDDateTime time6 = makeDateTime( "2009-08-13T18:54:40.88Z" ); static final XSDDateTime time7 = makeDateTime( "2009-08-13T18:54:40.989Z" ); static final XSDDateTime time8 = makeDateTime( "2009-08-13T19:54:40.989Z" ); static final XSDDateTime time9 = makeDateTime( "2009-08-13T18:54:40.077Z" ); static final XSDDateTime time10 = makeDateTime( "2009-08-13T18:54:40.770Z" ); static XSDDateTime makeDateTime(String time) { return (XSDDateTime) XSDDatatype.XSDdateTime.parse(time); } public void testXSDOrder() { assertEquals( time0.compare(time1), AbstractDateTime.LESS_THAN); assertEquals( time1.compare(time2), AbstractDateTime.LESS_THAN); assertEquals( time2.compare(time3), AbstractDateTime.LESS_THAN); assertEquals( time3.compare(time4), AbstractDateTime.LESS_THAN); assertEquals( time4.compare(time5), AbstractDateTime.LESS_THAN); assertEquals( time5.compare(time6), AbstractDateTime.LESS_THAN); assertEquals( time6.compare(time7), AbstractDateTime.LESS_THAN); assertEquals( time7.compare(time8), AbstractDateTime.LESS_THAN); assertEquals( time9.compare(time5), AbstractDateTime.LESS_THAN); assertEquals( time9.compare(time3), AbstractDateTime.LESS_THAN); assertEquals( time9.compare(time2), AbstractDateTime.GREATER_THAN); assertEquals( time5.compare(time10), AbstractDateTime.EQUAL); } public void testJavaOrder() { assertEquals( time0.compareTo(time1), AbstractDateTime.LESS_THAN); assertEquals( time1.compareTo(time2), AbstractDateTime.LESS_THAN); assertEquals( time2.compareTo(time3), AbstractDateTime.LESS_THAN); assertEquals( time3.compareTo(time4), AbstractDateTime.LESS_THAN); assertEquals( time4.compareTo(time5), AbstractDateTime.LESS_THAN); assertEquals( time5.compareTo(time6), AbstractDateTime.LESS_THAN); assertEquals( time6.compareTo(time7), AbstractDateTime.LESS_THAN); assertEquals( time7.compareTo(time8), AbstractDateTime.LESS_THAN); } public void testRoundTripping1() { Model m = ModelFactory.createDefaultModel(); Property startTime = m.createProperty("http://jena.hpl.hp.com/test#startTime"); Calendar cal = Calendar.getInstance(); cal.set(Calendar.MILLISECOND, 0); Literal xsdlit0 = m.createTypedLiteral(cal); Resource event = m.createResource(); event.addProperty(startTime, xsdlit0); StringWriter sw = new StringWriter(); m.write(sw); StringReader reader = new StringReader(sw.toString()); Model m1 = ModelFactory.createDefaultModel(); m1.read(reader, null); assertTrue( m.isIsomorphicWith(m1) ); Literal xsdlit1 = m1.listStatements().next().getObject().as(Literal.class); assertEquals(xsdlit0, xsdlit1); } // Test that the string and calendar versions are the same. public void testRoundTripping2() { //String lex = "2013-04-16T15:40:07.3Z" ; testCalendarRT(1366126807300L); } public void testRoundTripping3() { //String lex = "2013-04-16T15:40:07.31Z" ; testCalendarRT(1366126807310L); } public void testRoundTripping4() { //String lex = "2013-04-16T15:40:07.301Z" ; testCalendarRT(1366126807301L); } private static void testCalendarRT(long value) { Calendar cal=GregorianCalendar.getInstance(); cal.setTimeInMillis(value); Literal lit1 = ResourceFactory.createTypedLiteral(cal) ; Literal lit2 = ResourceFactory.createTypedLiteral(lit1.getLexicalForm(), lit1.getDatatype()) ; Assert.assertEquals("equals: ", lit1, lit2) ; Assert.assertEquals("hash code: ", lit1.hashCode(), lit2.hashCode()); } }