/* * Geotoolkit - An Open Source Java GIS Toolkit * http://www.geotoolkit.org * * (C) 2010, Open Source Geospatial Foundation (OSGeo) * (C) 2010, Geomatys * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotoolkit.temporal.util; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.SortedSet; import java.util.TimeZone; import java.util.TreeSet; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; /** * * @author legal */ public class PeriodUtilitiesTest extends org.geotoolkit.test.TestBase { public PeriodUtilitiesTest() { } @BeforeClass public static void setUpClass() throws Exception { } @AfterClass public static void tearDownClass() throws Exception { } @Before public void setUp() { } @After public void tearDown() { } /** * Test of getDatesRespresentation method, of class PeriodUtilities. */ @Test public void getDatesRespresentation() throws ParseException { DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); df.setTimeZone(TimeZone.getTimeZone("GMT+0")); PeriodUtilities instance = new PeriodUtilities(df); SortedSet<Date> dates; /** * Test 1: isolated Date */ dates = new TreeSet<>(); dates.add(df.parse("2003-01-07T00:00:00Z")); String expResult = "2003-01-07T00:00:00Z"; String result = instance.getDatesRespresentation(dates); assertEquals(expResult, result); /** * Test 2: isolated Date */ dates = new TreeSet<>(); dates.add(df.parse("2003-01-07T00:00:00Z")); dates.add(df.parse("2003-01-21T00:00:00Z")); expResult = "2003-01-07T00:00:00Z,2003-01-21T00:00:00Z"; result = instance.getDatesRespresentation(dates); assertEquals(expResult, result); /** * Test 3: three isolated date */ dates = new TreeSet<>(); dates.add(df.parse("2007-06-06T14:00:00Z")); dates.add(df.parse("2007-06-13T14:00:00Z")); dates.add(df.parse("2007-06-20T14:00:00Z")); expResult = "2007-06-06T14:00:00Z/2007-06-20T14:00:00Z/P1W"; result = instance.getDatesRespresentation(dates); assertEquals(expResult, result); /** * Test 4: one period */ dates = new TreeSet<>(); dates.add(df.parse("2004-01-28T00:00:00Z")); dates.add(df.parse("2004-02-04T00:00:00Z")); dates.add(df.parse("2004-02-11T00:00:00Z")); dates.add(df.parse("2004-02-18T00:00:00Z")); dates.add(df.parse("2004-02-25T00:00:00Z")); dates.add(df.parse("2004-03-03T00:00:00Z")); dates.add(df.parse("2004-03-10T00:00:00Z")); dates.add(df.parse("2004-03-17T00:00:00Z")); expResult = "2004-01-28T00:00:00Z/2004-03-17T00:00:00Z/P1W"; result = instance.getDatesRespresentation(dates); assertEquals(expResult, result); /** * Test 5: two period not joined */ dates = new TreeSet<>(); //first period dates.add(df.parse("2004-01-28T00:00:00Z")); dates.add(df.parse("2004-02-04T00:00:00Z")); dates.add(df.parse("2004-02-11T00:00:00Z")); dates.add(df.parse("2004-02-18T00:00:00Z")); dates.add(df.parse("2004-02-25T00:00:00Z")); dates.add(df.parse("2004-03-03T00:00:00Z")); dates.add(df.parse("2004-03-10T00:00:00Z")); dates.add(df.parse("2004-03-17T00:00:00Z")); //second period dates.add(df.parse("2005-11-09T00:00:00Z")); dates.add(df.parse("2005-11-16T00:00:00Z")); dates.add(df.parse("2005-11-23T00:00:00Z")); dates.add(df.parse("2005-11-30T00:00:00Z")); expResult = "2004-01-28T00:00:00Z/2004-03-17T00:00:00Z/P1W,2005-11-09T00:00:00Z/2005-11-30T00:00:00Z/P1W"; result = instance.getDatesRespresentation(dates); assertEquals(expResult, result); /** * Test 6: two period joined */ dates = new TreeSet<>(); //first period dates.add(df.parse("2004-01-28T00:00:00Z")); dates.add(df.parse("2004-02-04T00:00:00Z")); dates.add(df.parse("2004-02-11T00:00:00Z")); dates.add(df.parse("2004-02-18T00:00:00Z")); //second period dates.add(df.parse("2004-02-25T00:00:00Z")); dates.add(df.parse("2004-03-04T00:00:00Z")); dates.add(df.parse("2004-03-12T00:00:00Z")); dates.add(df.parse("2004-03-20T00:00:00Z")); expResult = "2004-01-28T00:00:00Z/2004-02-25T00:00:00Z/P1W,2004-02-25T00:00:00Z/2004-03-20T00:00:00Z/P1W1D"; result = instance.getDatesRespresentation(dates); System.out.println("expected =" + expResult + '\n' + "result =" + result); assertEquals(expResult, result); /** * Test 7: isolated dates + period1 + isolated dates + period2 + isolated dates */ dates = new TreeSet<>(); //isolated date dates.add(df.parse("2003-01-07T00:00:00Z")); //isolated date dates.add(df.parse("2004-01-07T00:00:00Z")); //first period dates.add(df.parse("2004-01-28T00:00:00Z")); dates.add(df.parse("2004-02-04T00:00:00Z")); dates.add(df.parse("2004-02-11T00:00:00Z")); dates.add(df.parse("2004-02-18T00:00:00Z")); dates.add(df.parse("2004-02-25T00:00:00Z")); dates.add(df.parse("2004-03-03T00:00:00Z")); dates.add(df.parse("2004-03-10T00:00:00Z")); dates.add(df.parse("2004-03-17T00:00:00Z")); //isolated date dates.add(df.parse("2005-03-02T00:00:00Z")); //isolated date dates.add(df.parse("2005-07-20T00:00:00Z")); //second period dates.add(df.parse("2005-11-09T00:00:00Z")); dates.add(df.parse("2005-11-16T00:00:00Z")); dates.add(df.parse("2005-11-23T00:00:00Z")); dates.add(df.parse("2005-11-30T00:00:00Z")); //isolated date dates.add(df.parse("2009-10-31T00:00:00Z")); //isolated date dates.add(df.parse("2010-10-31T00:00:00Z")); //isolated date dates.add(df.parse("2011-10-31T00:00:00Z")); expResult = "2003-01-07T00:00:00Z,2004-01-07T00:00:00Z,2004-01-28T00:00:00Z/2004-03-17T00:00:00Z/P1W,2005-03-02T00:00:00Z,2005-07-20T00:00:00Z,2005-11-09T00:00:00Z/2005-11-30T00:00:00Z/P1W,2009-10-31T00:00:00Z/2011-10-31T00:00:00Z/P12M"; result = instance.getDatesRespresentation(dates); assertEquals(expResult, result); } /** * Test of getPeriodDescription method, of class PeriodUtilities. */ @Test public void getPeriodDescription() throws ParseException { DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); df.setTimeZone(TimeZone.getTimeZone("GMT+0")); df2.setTimeZone(TimeZone.getTimeZone("GMT+0")); PeriodUtilities instance = new PeriodUtilities(df); SortedSet<Date> dates; /** * Test 1: one hour period */ dates = new TreeSet<>(); dates.add(df.parse("2004-01-28T00:00:00Z")); dates.add(df.parse("2004-01-28T01:00:00Z")); dates.add(df.parse("2004-01-28T02:00:00Z")); dates.add(df.parse("2004-01-28T03:00:00Z")); dates.add(df.parse("2004-01-28T04:00:00Z")); dates.add(df.parse("2004-01-28T05:00:00Z")); dates.add(df.parse("2004-01-28T06:00:00Z")); dates.add(df.parse("2004-01-28T07:00:00Z")); long gap =3600000L; String expResult = "2004-01-28T00:00:00Z/2004-01-28T07:00:00Z/PT1H"; String result = instance.getPeriodDescription(dates, gap); assertEquals(expResult, result); /** * Test 2: one week period */ dates = new TreeSet<>(); dates.add(df.parse("2004-01-28T00:00:00Z")); dates.add(df.parse("2004-02-04T00:00:00Z")); dates.add(df.parse("2004-02-11T00:00:00Z")); dates.add(df.parse("2004-02-18T00:00:00Z")); dates.add(df.parse("2004-02-25T00:00:00Z")); dates.add(df.parse("2004-03-03T00:00:00Z")); dates.add(df.parse("2004-03-10T00:00:00Z")); dates.add(df.parse("2004-03-17T00:00:00Z")); gap = 604800000L; expResult = "2004-01-28T00:00:00Z/2004-03-17T00:00:00Z/P1W"; result = instance.getPeriodDescription(dates, gap); assertEquals(expResult, result); /** * Test 3: one week and one day period */ dates = new TreeSet<>(); dates.add(df.parse("2004-02-25T00:00:00Z")); dates.add(df.parse("2004-03-04T00:00:00Z")); dates.add(df.parse("2004-03-12T00:00:00Z")); dates.add(df.parse("2004-03-20T00:00:00Z")); expResult = "2004-02-25T00:00:00Z/2004-03-20T00:00:00Z/P1W1D"; result = instance.getDatesRespresentation(dates); assertEquals(expResult, result); /** * Test 4: one week and one day period one second */ dates = new TreeSet<>(); dates.add(df.parse("2004-02-25T00:00:01Z")); dates.add(df.parse("2004-03-04T00:00:02Z")); dates.add(df.parse("2004-03-12T00:00:03Z")); dates.add(df.parse("2004-03-20T00:00:04Z")); expResult = "2004-02-25T00:00:01Z/2004-03-20T00:00:04Z/P1W1DT1S"; result = instance.getDatesRespresentation(dates); assertEquals(expResult, result); /** * Test 5: one week and one day period one second 250 millisecond */ instance = new PeriodUtilities(df2); dates = new TreeSet<>(); dates.add(df2.parse("2004-02-25T00:00:01.250Z")); dates.add(df2.parse("2004-03-04T00:00:02.500Z")); dates.add(df2.parse("2004-03-12T00:00:03.750Z")); dates.add(df2.parse("2004-03-20T00:00:05.000Z")); expResult = "2004-02-25T00:00:01.250Z/2004-03-20T00:00:05.000Z/P1W1DT1.250S"; result = instance.getDatesRespresentation(dates); assertEquals(expResult, result); } /** * Test of getDatesFromPeriodDescription method, of class PeriodUtilities. */ @Test public void getDatesFromPeriodDescription() throws Exception { DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); df.setTimeZone(TimeZone.getTimeZone("GMT+0")); df2.setTimeZone(TimeZone.getTimeZone("GMT+0")); PeriodUtilities instance = new PeriodUtilities(df); SortedSet<Date> expResult; /** * Test 1: isolated Date */ expResult = new TreeSet<>(); expResult.add(df.parse("2003-01-07T00:00:00Z")); String periods = "2003-01-07T00:00:00Z"; SortedSet<Date> result = instance.getDatesFromPeriodDescription(periods); assertEquals(expResult, result); /** * Test 2: one period */ expResult = new TreeSet<>(); expResult.add(df.parse("2004-01-28T00:00:00Z")); expResult.add(df.parse("2004-02-04T00:00:00Z")); expResult.add(df.parse("2004-02-11T00:00:00Z")); expResult.add(df.parse("2004-02-18T00:00:00Z")); expResult.add(df.parse("2004-02-25T00:00:00Z")); expResult.add(df.parse("2004-03-03T00:00:00Z")); expResult.add(df.parse("2004-03-10T00:00:00Z")); expResult.add(df.parse("2004-03-17T00:00:00Z")); periods = "2004-01-28T00:00:00Z/2004-03-17T00:00:00Z/P1W"; result = instance.getDatesFromPeriodDescription(periods); assertEquals(expResult, result); /** * Test 3: two period not joined */ expResult = new TreeSet<>(); //first period expResult.add(df.parse("2004-01-28T00:00:00Z")); expResult.add(df.parse("2004-02-04T00:00:00Z")); expResult.add(df.parse("2004-02-11T00:00:00Z")); expResult.add(df.parse("2004-02-18T00:00:00Z")); expResult.add(df.parse("2004-02-25T00:00:00Z")); expResult.add(df.parse("2004-03-03T00:00:00Z")); expResult.add(df.parse("2004-03-10T00:00:00Z")); expResult.add(df.parse("2004-03-17T00:00:00Z")); //second period expResult.add(df.parse("2005-11-09T00:00:00Z")); expResult.add(df.parse("2005-11-16T00:00:00Z")); expResult.add(df.parse("2005-11-23T00:00:00Z")); expResult.add(df.parse("2005-11-30T00:00:00Z")); periods = "2004-01-28T00:00:00Z/2004-03-17T00:00:00Z/P1W,2005-11-09T00:00:00Z/2005-11-30T00:00:00Z/P1W"; result = instance.getDatesFromPeriodDescription(periods); assertEquals(expResult, result); /** * Test 3: two period joined */ expResult = new TreeSet<>(); //first period expResult.add(df.parse("2004-01-28T00:00:00Z")); expResult.add(df.parse("2004-02-04T00:00:00Z")); expResult.add(df.parse("2004-02-11T00:00:00Z")); expResult.add(df.parse("2004-02-18T00:00:00Z")); //second period expResult.add(df.parse("2004-02-25T00:00:00Z")); expResult.add(df.parse("2004-03-04T00:00:00Z")); expResult.add(df.parse("2004-03-12T00:00:00Z")); expResult.add(df.parse("2004-03-20T00:00:00Z")); periods = "2004-01-28T00:00:00Z/2004-02-25T00:00:00Z/P1W,2004-02-25T00:00:00Z/2004-03-20T00:00:00Z/P1W1D"; result = instance.getDatesFromPeriodDescription(periods); System.out.println("expected =" + expResult + '\n' + "result =" + result); assertEquals(expResult, result); /** * Test 5: isolated dates + period1 + isolated dates + period2 + isolated dates */ expResult = new TreeSet<>(); //isolated date expResult.add(df.parse("2003-01-07T00:00:00Z")); //isolated date expResult.add(df.parse("2004-01-07T00:00:00Z")); //first period expResult.add(df.parse("2004-01-28T00:00:00Z")); expResult.add(df.parse("2004-02-04T00:00:00Z")); expResult.add(df.parse("2004-02-11T00:00:00Z")); expResult.add(df.parse("2004-02-18T00:00:00Z")); expResult.add(df.parse("2004-02-25T00:00:00Z")); expResult.add(df.parse("2004-03-03T00:00:00Z")); expResult.add(df.parse("2004-03-10T00:00:00Z")); expResult.add(df.parse("2004-03-17T00:00:00Z")); //isolated date expResult.add(df.parse("2005-03-02T00:00:00Z")); //isolated date expResult.add(df.parse("2005-07-20T00:00:00Z")); //second period expResult.add(df.parse("2005-11-09T00:00:00Z")); expResult.add(df.parse("2005-11-16T00:00:00Z")); expResult.add(df.parse("2005-11-23T00:00:00Z")); expResult.add(df.parse("2005-11-30T00:00:00Z")); //isolated date expResult.add(df.parse("2009-10-31T00:00:00Z")); //isolated date expResult.add(df.parse("2010-10-31T00:00:00Z")); //isolated date expResult.add(df.parse("2011-10-31T00:00:00Z")); periods = "2003-01-07T00:00:00Z,2004-01-07T00:00:00Z,2004-01-28T00:00:00Z/2004-03-17T00:00:00Z/P1W,2005-03-02T00:00:00Z,2005-07-20T00:00:00Z,2005-11-09T00:00:00Z/2005-11-30T00:00:00Z/P1W,2009-10-31T00:00:00Z,2010-10-31T00:00:00Z,2011-10-31T00:00:00Z"; result = instance.getDatesFromPeriodDescription(periods); assertEquals(expResult, result); /** * Test 4: one week and one day period one second */ periods = "2004-02-25T00:00:01Z/2004-03-20T00:00:04Z/P1W1DT1S"; expResult = new TreeSet<>(); expResult.add(df.parse("2004-02-25T00:00:01Z")); expResult.add(df.parse("2004-03-04T00:00:02Z")); expResult.add(df.parse("2004-03-12T00:00:03Z")); expResult.add(df.parse("2004-03-20T00:00:04Z")); result = instance.getDatesFromPeriodDescription(periods); assertEquals(expResult, result); /** * Test 5: one week and one day period one second 250 millisecond */ instance = new PeriodUtilities(df2); periods = "2004-02-25T00:00:01.250Z/2004-03-20T00:00:05.000Z/P1W1DT1.250S"; expResult = new TreeSet<>(); expResult.add(df2.parse("2004-02-25T00:00:01.250Z")); expResult.add(df2.parse("2004-03-04T00:00:02.500Z")); expResult.add(df2.parse("2004-03-12T00:00:03.750Z")); expResult.add(df2.parse("2004-03-20T00:00:05.000Z")); result = instance.getDatesFromPeriodDescription(periods); assertEquals(expResult, result); } /** * Test of getTimeFromPeriodDescription method, of class PeriodUtilities. */ @Test public void getTimeFromPeriodDescription() { DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); df.setTimeZone(TimeZone.getTimeZone("GMT+0")); PeriodUtilities instance = new PeriodUtilities(df); /** * test 1 : period of one week and one day */ String periodDescription = "P1W1D"; long expResult = 604800000L + 86400000L; long result = instance.getTimeFromPeriodDescription(periodDescription); assertEquals(expResult, result); } }