/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2013-2014, Open Source Geospatial Foundation (OSGeo)
*
* 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.geotools.coverage.io.netcdf;
import static org.junit.Assert.assertEquals;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import org.geotools.imageio.netcdf.utilities.NetCDFTimeUtilities;
import org.junit.Test;
/**
* Test UnidataTimeUtilities
*
* @source $URL$
*/
public final class NetCDFTimeUtilitiesTest {
@Test
public void testAddTimeUnit() {
final Calendar cal = new GregorianCalendar();
cal.setTimeZone(NetCDFTimeUtilities.UTC_TIMEZONE);
cal.setTimeInMillis(0);
// year
Calendar yearCal = (Calendar) cal.clone();
NetCDFTimeUtilities.addTimeUnit(yearCal, Calendar.YEAR, 1);
assertEquals(31536000000l, yearCal.getTimeInMillis());
// month
Calendar monthCal = (Calendar) cal.clone();
NetCDFTimeUtilities.addTimeUnit(monthCal, Calendar.MONTH, 2);
assertEquals(5097600000l, monthCal.getTimeInMillis());
// date
Calendar dateCal = (Calendar) cal.clone();
NetCDFTimeUtilities.addTimeUnit(dateCal, Calendar.DATE, 5);
assertEquals(432000000l, dateCal.getTimeInMillis());
// hour
Calendar hourCal = (Calendar) cal.clone();
NetCDFTimeUtilities.addTimeUnit(hourCal, Calendar.HOUR, 907);
assertEquals(3265200000l, hourCal.getTimeInMillis());
// minute
Calendar minuteCal = (Calendar) cal.clone();
NetCDFTimeUtilities.addTimeUnit(minuteCal, Calendar.MINUTE, 112358);
assertEquals(6741480000l, minuteCal.getTimeInMillis());
// second
Calendar secondCal = (Calendar) cal.clone();
NetCDFTimeUtilities.addTimeUnit(secondCal, Calendar.SECOND, 3333333333l);
assertEquals(3333333333000l, secondCal.getTimeInMillis());
// millisecond
Calendar msCal = (Calendar) cal.clone();
NetCDFTimeUtilities.addTimeUnit(msCal, Calendar.MILLISECOND, 99999999999999l);
assertEquals(99999999999999l, msCal.getTimeInMillis());
}
@Test
public void testJulianCalendarUtilities() {
// Parsing 10/10/2010
Calendar calendar = NetCDFTimeUtilities.fromJulian(2455480);
calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
assertEquals(1286668800000l, calendar.getTimeInMillis());
}
@Test
public void testTimeUnits() {
assertEquals(Calendar.HOUR, NetCDFTimeUtilities.getTimeUnits("days", 1.5d));
assertEquals(36, NetCDFTimeUtilities.getTimeSubUnitsValue("days", 1.5d));
assertEquals(Calendar.SECOND, NetCDFTimeUtilities.getTimeUnits("day", 1.42d));
assertEquals(122688, NetCDFTimeUtilities.getTimeSubUnitsValue("d", 1.42d));
assertEquals(Calendar.MINUTE, NetCDFTimeUtilities.getTimeUnits("hours", 1.5d));
assertEquals(Calendar.SECOND, NetCDFTimeUtilities.getTimeUnits("hour", 1.52d));
assertEquals(Calendar.MILLISECOND, NetCDFTimeUtilities.getTimeUnits("hrs", 1.522d));
assertEquals(5479200, NetCDFTimeUtilities.getTimeSubUnitsValue("hr", 1.522d));
assertEquals(Calendar.SECOND, NetCDFTimeUtilities.getTimeUnits("minutes", 2.5d));
assertEquals(150, NetCDFTimeUtilities.getTimeSubUnitsValue("minute", 2.5d));
assertEquals(90, NetCDFTimeUtilities.getTimeSubUnitsValue("mins", 1.5d));
assertEquals(72, NetCDFTimeUtilities.getTimeSubUnitsValue("min", 1.2d));
assertEquals(Calendar.MILLISECOND, NetCDFTimeUtilities.getTimeUnits("seconds", 1.5d));
assertEquals(1600, NetCDFTimeUtilities.getTimeSubUnitsValue("second", 1.6d));
assertEquals(1450, NetCDFTimeUtilities.getTimeSubUnitsValue("sec", 1.45d));
assertEquals(1200, NetCDFTimeUtilities.getTimeSubUnitsValue("secs", 1.2d));
}
}