package org.esa.beam.smos;
import com.bc.ceres.binio.CompoundData;
import org.junit.Test;
import java.io.IOException;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class DateTimeUtilsTest {
@Test
public void testCfiDateToUtc() {
Date date = DateTimeUtils.cfiDateToUtc(0, 0, 0);
assertEquals("Sat Jan 01 01:00:00 CET 2000", date.toString());
date = DateTimeUtils.cfiDateToUtc(1, 0, 0);
assertEquals("Sun Jan 02 01:00:00 CET 2000", date.toString());
date = DateTimeUtils.cfiDateToUtc(1, 10, 0);
long timeWithoutMillis = date.getTime();
assertEquals("Sun Jan 02 01:00:10 CET 2000", date.toString());
date = DateTimeUtils.cfiDateToUtc(1, 10, 100000); // last argument is microsecond, date can only handle millis ...
assertEquals("Sun Jan 02 01:00:10 CET 2000", date.toString());
assertEquals(timeWithoutMillis + 100, date.getTime());
}
@Test
public void testCfiDateToUtc_formCompound() throws IOException {
final CompoundData compoundData = mock(CompoundData.class);
when(compoundData.getInt("Days")).thenReturn(187);
when(compoundData.getUInt("Seconds")).thenReturn(78765L);
when(compoundData.getUInt("Microseconds")).thenReturn(1007L);
Date date = DateTimeUtils.cfiDateToUtc(compoundData);
assertEquals("Thu Jul 06 23:52:45 CEST 2000", date.toString());
when(compoundData.getInt("Days")).thenReturn(0);
when(compoundData.getUInt("Seconds")).thenReturn(0L);
when(compoundData.getUInt("Microseconds")).thenReturn(0L);
date = DateTimeUtils.cfiDateToUtc(compoundData);
assertEquals("Sat Jan 01 01:00:00 CET 2000", date.toString());
}
@Test
public void testMjdFloatDateToUtc() {
Date date = DateTimeUtils.mjdFloatDateToUtc(0.0f);
assertEquals("Sat Jan 01 01:00:00 CET 2000", date.toString());
date = DateTimeUtils.mjdFloatDateToUtc(1.0f);
assertEquals("Sun Jan 02 01:00:00 CET 2000", date.toString());
date = DateTimeUtils.mjdFloatDateToUtc(1.0f + 10.f / 86400);
long timeWithoutMillis = date.getTime();
assertEquals("Sun Jan 02 01:00:10 CET 2000", date.toString());
date = DateTimeUtils.mjdFloatDateToUtc(1.0f + 10.1f / 86400);
assertEquals("Sun Jan 02 01:00:10 CET 2000", date.toString());
assertEquals(timeWithoutMillis + 103, date.getTime());
}
@Test
public void testToVariableHeaderFormat() {
Date date = DateTimeUtils.cfiDateToUtc(0, 0, 0);
String variableHeaderFormat = DateTimeUtils.toVariableHeaderFormat(date);
assertEquals("UTC=2000-01-01T00:00:00.000000", variableHeaderFormat);
date = DateTimeUtils.cfiDateToUtc(1, 0, 0);
variableHeaderFormat = DateTimeUtils.toVariableHeaderFormat(date);
assertEquals("UTC=2000-01-02T00:00:00.000000", variableHeaderFormat);
date = DateTimeUtils.cfiDateToUtc(0, 1, 0);
variableHeaderFormat = DateTimeUtils.toVariableHeaderFormat(date);
assertEquals("UTC=2000-01-01T00:00:01.000000", variableHeaderFormat);
date = DateTimeUtils.cfiDateToUtc(0, 0, 1000);
variableHeaderFormat = DateTimeUtils.toVariableHeaderFormat(date);
assertEquals("UTC=2000-01-01T00:00:00.000001", variableHeaderFormat);
}
@Test
public void testToFixedHeaderFormat() {
Date date = DateTimeUtils.cfiDateToUtc(0, 0, 0);
String variableHeaderFormat = DateTimeUtils.toFixedHeaderFormat(date);
assertEquals("UTC=2000-01-01T00:00:00", variableHeaderFormat);
date = DateTimeUtils.cfiDateToUtc(1, 0, 0);
variableHeaderFormat = DateTimeUtils.toFixedHeaderFormat(date);
assertEquals("UTC=2000-01-02T00:00:00", variableHeaderFormat);
date = DateTimeUtils.cfiDateToUtc(0, 1, 0);
variableHeaderFormat = DateTimeUtils.toFixedHeaderFormat(date);
assertEquals("UTC=2000-01-01T00:00:01", variableHeaderFormat);
date = DateTimeUtils.cfiDateToUtc(0, 0, 1000);
variableHeaderFormat = DateTimeUtils.toFixedHeaderFormat(date);
assertEquals("UTC=2000-01-01T00:00:00", variableHeaderFormat);
}
@Test
public void testFromFixedHeaderFormat() throws ParseException {
Date date = DateTimeUtils.fromFixedHeaderFormat("UTC=2000-01-01T00:00:00");
assertEquals(946684800000L, date.getTime());
date = DateTimeUtils.fromFixedHeaderFormat("UTC=2000-01-01T00:00:01");
assertEquals(946684801000L, date.getTime());
}
@Test
public void testToFileNameFormat() {
Date date = DateTimeUtils.cfiDateToUtc(0, 0, 0);
String variableHeaderFormat = DateTimeUtils.toFileNameFormat(date);
assertEquals("20000101T000000", variableHeaderFormat);
date = DateTimeUtils.cfiDateToUtc(1, 0, 0);
variableHeaderFormat = DateTimeUtils.toFileNameFormat(date);
assertEquals("20000102T000000", variableHeaderFormat);
date = DateTimeUtils.cfiDateToUtc(0, 1, 0);
variableHeaderFormat = DateTimeUtils.toFileNameFormat(date);
assertEquals("20000101T000001", variableHeaderFormat);
date = DateTimeUtils.cfiDateToUtc(0, 0, 1000);
variableHeaderFormat = DateTimeUtils.toFileNameFormat(date);
assertEquals("20000101T000000", variableHeaderFormat);
}
@Test
public void testGetUtcCalendar() {
final Calendar calendar = DateTimeUtils.getUtcCalendar();
assertNotNull(calendar);
assertEquals("UTC", calendar.getTimeZone().getID());
}
}