/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (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.object;
import java.text.ParseException;
import java.util.Calendar;
import java.lang.annotation.Annotation;
import java.util.Date;
import java.util.TimeZone;
import org.junit.Test;
import static org.junit.Assert.*;
import static java.util.Calendar.*;
/**
*
* @author Johann Sorel (Geomatys)
* @module
*/
public class TemporalUtilitiesTest extends org.geotoolkit.test.TestBase implements Test {
@Override
public Class<? extends Throwable> expected() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public long timeout() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Class<? extends Annotation> annotationType() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Test
public void dateErrorParsingTest() {
try {
TemporalUtilities.parseDate("fsdfsdfs");
fail("Parsing should have raise a parse exception.");
} catch (ParseException ex) {
// ok
}
try {
TemporalUtilities.parseDate(null);
fail("Parsing should have raise a null pointer exception.");
} catch (NullPointerException ex) {
// ok
} catch (ParseException ex) {
fail("Parsing should have raise a null pointer exception.");
}
}
@Test
public void dateParsingTest() throws ParseException {
String str;
final Calendar date = Calendar.getInstance();
int year = 1995;
int month = 10; // starts at 0
int day = 23;
int hour = 16;
int min = 41;
int sec = 36;
int mil = 512;
str = "11/1995";
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getDefault());
assertEquals(year, date.get(YEAR));
assertEquals(month, date.get(MONTH));
assertEquals(1, date.get(DAY_OF_MONTH));
assertEquals(0, date.get(HOUR_OF_DAY));
assertEquals(0, date.get(MINUTE));
assertEquals(0, date.get(SECOND));
assertEquals(0, date.get(MILLISECOND));
str = "23/11/1995";
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getDefault());
assertEquals(year, date.get(YEAR));
assertEquals(month, date.get(MONTH));
assertEquals(day, date.get(DAY_OF_MONTH));
assertEquals(0, date.get(HOUR_OF_DAY));
assertEquals(0, date.get(MINUTE));
assertEquals(0, date.get(SECOND));
assertEquals(0, date.get(MILLISECOND));
str = "23 novembre 1995";
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getDefault());
assertEquals(year, date.get(YEAR));
assertEquals(month, date.get(MONTH));
assertEquals(day, date.get(DAY_OF_MONTH));
assertEquals(0, date.get(HOUR_OF_DAY));
assertEquals(0, date.get(MINUTE));
assertEquals(0, date.get(SECOND));
assertEquals(0, date.get(MILLISECOND));
str = "1995-11-23 16:41:36";
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getDefault());
assertEquals(year, date.get(YEAR));
assertEquals(month, date.get(MONTH));
assertEquals(day, date.get(DAY_OF_MONTH));
assertEquals(hour, date.get(HOUR_OF_DAY));
assertEquals(min, date.get(MINUTE));
assertEquals(sec, date.get(SECOND));
assertEquals(0, date.get(MILLISECOND));
str = "Novembre 1995";
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getDefault());
assertEquals(year, date.get(YEAR));
assertEquals(month, date.get(MONTH));
assertEquals(1, date.get(DAY_OF_MONTH));
assertEquals(0, date.get(HOUR_OF_DAY));
assertEquals(0, date.get(MINUTE));
assertEquals(0, date.get(SECOND));
assertEquals(0, date.get(MILLISECOND));
str = "11-1995";
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getDefault());
assertEquals(year, date.get(YEAR));
assertEquals(month, date.get(MONTH));
assertEquals(1, date.get(DAY_OF_MONTH));
assertEquals(0, date.get(HOUR_OF_DAY));
assertEquals(0, date.get(MINUTE));
assertEquals(0, date.get(SECOND));
assertEquals(0, date.get(MILLISECOND));
str = "1995-11-23T16:41:36";
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getDefault());
assertEquals(year, date.get(YEAR));
assertEquals(month, date.get(MONTH));
assertEquals(day, date.get(DAY_OF_MONTH));
assertEquals(hour, date.get(HOUR_OF_DAY));
assertEquals(min, date.get(MINUTE));
assertEquals(sec, date.get(SECOND));
assertEquals(0, date.get(MILLISECOND));
str = "1995-11-23Z";
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getTimeZone("GMT+0"));
assertEquals(year, date.get(YEAR));
assertEquals(month, date.get(MONTH));
assertEquals(day, date.get(DAY_OF_MONTH));
assertEquals(0, date.get(HOUR_OF_DAY));
assertEquals(0, date.get(MINUTE));
assertEquals(0, date.get(SECOND));
assertEquals(0, date.get(MILLISECOND));
str = "1995";
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getDefault());
assertEquals(year, date.get(YEAR));
assertEquals(0, date.get(MONTH));
assertEquals(1, date.get(DAY_OF_MONTH));
assertEquals(0, date.get(HOUR_OF_DAY));
assertEquals(0, date.get(MINUTE));
assertEquals(0, date.get(SECOND));
assertEquals(0, date.get(MILLISECOND));
str = "1995-11";
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getDefault());
assertEquals(year, date.get(YEAR));
assertEquals(month, date.get(MONTH));
assertEquals(1, date.get(DAY_OF_MONTH));
assertEquals(0, date.get(HOUR_OF_DAY));
assertEquals(0, date.get(MINUTE));
assertEquals(0, date.get(SECOND));
assertEquals(0, date.get(MILLISECOND));
str = "1995:11:23 16:41:36";
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getDefault());
assertEquals(year, date.get(YEAR));
assertEquals(month, date.get(MONTH));
assertEquals(day, date.get(DAY_OF_MONTH));
assertEquals(hour, date.get(HOUR_OF_DAY));
assertEquals(min, date.get(MINUTE));
assertEquals(sec, date.get(SECOND));
assertEquals(0, date.get(MILLISECOND));
// ISO 8601
// dates--------------------------------------------------------
str = "1995-11-23T16:41:36";
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getDefault());
assertEquals(year, date.get(YEAR));
assertEquals(month, date.get(MONTH));
assertEquals(day, date.get(DAY_OF_MONTH));
assertEquals(hour, date.get(HOUR_OF_DAY));
assertEquals(min, date.get(MINUTE));
assertEquals(sec, date.get(SECOND));
assertEquals(0, date.get(MILLISECOND));
str = "1995-11-23T16:41:36.512";
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getDefault());
assertEquals(year, date.get(YEAR));
assertEquals(month, date.get(MONTH));
assertEquals(day, date.get(DAY_OF_MONTH));
assertEquals(hour, date.get(HOUR_OF_DAY));
assertEquals(min, date.get(MINUTE));
assertEquals(sec, date.get(SECOND));
assertEquals(mil, date.get(MILLISECOND));
str = "1995-11-23T16:41:36Z";
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getTimeZone("GMT+0"));
assertEquals(year, date.get(YEAR));
assertEquals(month, date.get(MONTH));
assertEquals(day, date.get(DAY_OF_MONTH));
assertEquals(hour, date.get(HOUR_OF_DAY));
assertEquals(min, date.get(MINUTE));
assertEquals(sec, date.get(SECOND));
assertEquals(0, date.get(MILLISECOND));
str = "1995-11-23T16:41:36.512Z";
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getTimeZone("GMT+0"));
assertEquals(year, date.get(YEAR));
assertEquals(month, date.get(MONTH));
assertEquals(day, date.get(DAY_OF_MONTH));
assertEquals(hour, date.get(HOUR_OF_DAY));
assertEquals(min, date.get(MINUTE));
assertEquals(sec, date.get(SECOND));
assertEquals(512, date.get(MILLISECOND));
str = "1995-11-23"; //no Z, we are in local time zone
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getDefault());
assertEquals(year, date.get(YEAR));
assertEquals(month, date.get(MONTH));
assertEquals(day, date.get(DAY_OF_MONTH));
assertEquals(0, date.get(HOUR_OF_DAY));
assertEquals(0, date.get(MINUTE));
assertEquals(0, date.get(SECOND));
assertEquals(0, date.get(MILLISECOND));
str = "1995-11-23T16:41:36+04";
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getTimeZone("GMT+0"));
assertEquals(year, date.get(YEAR));
assertEquals(month, date.get(MONTH));
assertEquals(day, date.get(DAY_OF_MONTH));
assertEquals(hour - 4, date.get(HOUR_OF_DAY));
assertEquals(min, date.get(MINUTE));
assertEquals(sec, date.get(SECOND));
assertEquals(0, date.get(MILLISECOND));
str = "1995-11-23T16:41:36+04:00";
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getTimeZone("GMT+0"));
assertEquals(year, date.get(YEAR));
assertEquals(month, date.get(MONTH));
assertEquals(day, date.get(DAY_OF_MONTH));
assertEquals(hour - 4, date.get(HOUR_OF_DAY));
assertEquals(min, date.get(MINUTE));
assertEquals(sec, date.get(SECOND));
assertEquals(0, date.get(MILLISECOND));
str = "1995-11-23T16:41:36-04";
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getTimeZone("GMT+0"));
assertEquals(year, date.get(YEAR));
assertEquals(month, date.get(MONTH));
assertEquals(day, date.get(DAY_OF_MONTH));
assertEquals(hour + 4, date.get(HOUR_OF_DAY));
assertEquals(min, date.get(MINUTE));
assertEquals(sec, date.get(SECOND));
assertEquals(0, date.get(MILLISECOND));
str = "1995-11-23T16:41:36-04:00";
date.setTime(TemporalUtilities.parseDate(str));
date.setTimeZone(TimeZone.getTimeZone("GMT+0"));
assertEquals(year, date.get(YEAR));
assertEquals(month, date.get(MONTH));
assertEquals(day, date.get(DAY_OF_MONTH));
assertEquals(hour + 4, date.get(HOUR_OF_DAY));
assertEquals(min, date.get(MINUTE));
assertEquals(sec, date.get(SECOND));
assertEquals(0, date.get(MILLISECOND));
}
@Test
public void durationFormatingTest() {
assertEquals("0ms", TemporalUtilities.durationToString(0));
assertEquals("15ms", TemporalUtilities.durationToString(15));
assertEquals("1s 25ms", TemporalUtilities.durationToString(1025));
assertEquals("1min 35ms", TemporalUtilities.durationToString(60035));
}
@Test
public void iso8601Test() {
final Date date = new Date();
String str = TemporalUtilities.toISO8601(date);
assertNotNull(str);
assertFalse(str.isEmpty());
// should not raise an error
str = TemporalUtilities.toISO8601(null);
assertNotNull(str);
assertTrue(str.isEmpty());
}
@Test
public void toIso8601XWithTimeZoneTest() {
final Date date = new Date();
String str = TemporalUtilities.toISO8601(date,
TimeZone.getTimeZone("GMT-8"));
assertNotNull(str);
assertFalse(str.isEmpty());
assertTrue(str.endsWith("-0800"));
str = TemporalUtilities.toISO8601(date, TimeZone.getTimeZone("GMT+1"));
assertNotNull(str);
assertFalse(str.isEmpty());
assertTrue(str.endsWith("+0100"));
// if timezone is null set +0000 to date format
str = TemporalUtilities.toISO8601(date, null);
assertNotNull(str);
assertFalse(str.isEmpty());
assertTrue(str.endsWith("+0000"));
// should not raise an error
str = TemporalUtilities.toISO8601(null, TimeZone.getTimeZone("GMT-8"));
assertNotNull(str);
assertTrue(str.isEmpty());
}
}