package org.embulk.spi.time;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import org.junit.Test;
public class TestTimestamp
{
@Test
public void testEqualsToTimestamp()
{
assertEqualsMethods(Timestamp.ofEpochSecond(0), Timestamp.ofEpochSecond(0));
assertEqualsMethods(Timestamp.ofEpochSecond(10), Timestamp.ofEpochSecond(10));
assertEqualsMethods(Timestamp.ofEpochSecond(10, 2), Timestamp.ofEpochSecond(10, 2));
}
private void assertEqualsMethods(Timestamp t1, Timestamp t2)
{
assertEquals(t1, t2);
assertEquals(t1.hashCode(), t2.hashCode());
assertEquals(0, t1.compareTo(t2));
}
@Test
public void testNotEqualsToTimestamp()
{
assertFalse(Timestamp.ofEpochSecond(0).equals(Timestamp.ofEpochSecond(1)));
assertFalse(Timestamp.ofEpochSecond(10).equals(Timestamp.ofEpochSecond(10, 2)));
assertFalse(Timestamp.ofEpochSecond(10, 2).equals(Timestamp.ofEpochSecond(20, 2)));
}
@Test
public void testEqualsToNull()
{
assertFalse(Timestamp.ofEpochSecond(0).equals(null));
assertFalse(Timestamp.ofEpochSecond(1, 2).equals(null));
}
@Test
public void testEqualsOtherClass()
{
assertFalse(Timestamp.ofEpochSecond(0).equals(new Object()));
assertFalse(Timestamp.ofEpochSecond(1, 2).equals("other"));
}
@Test
public void testAdjustMillisToNanos()
{
Timestamp t = Timestamp.ofEpochMilli(3); // 3 msec = 3_000 usec == 3_000_000 nsec
assertEquals(0L, t.getEpochSecond());
assertEquals(3_000_000, t.getNano());
}
@Test
public void testAdjustMillisToSeconds()
{
Timestamp t = Timestamp.ofEpochMilli(3_000); // 3_000 msec = 3 sec
assertEquals(3L, t.getEpochSecond());
assertEquals(0, t.getNano());
}
@Test
public void testAdjustNano()
{
Timestamp t = Timestamp.ofEpochSecond(0, 1_000_000_000); // 1_000_000_000 nsec = 1_000_000 usec = 1_000 msec = 1 sec
assertEquals(1L, t.getEpochSecond());
assertEquals(0, t.getNano());
}
@Test
public void testCompareTo()
{
assertEquals(-1, Timestamp.ofEpochSecond(3).compareTo(Timestamp.ofEpochSecond(4)));
assertEquals(-1, Timestamp.ofEpochSecond(3).compareTo(Timestamp.ofEpochSecond(3, 4)));
assertEquals( 1, Timestamp.ofEpochSecond(4).compareTo(Timestamp.ofEpochSecond(3)));
assertEquals( 1, Timestamp.ofEpochSecond(3, 4).compareTo(Timestamp.ofEpochSecond(3)));
}
@Test
public void testToString()
{
assertEquals("1970-01-01 00:00:00 UTC", Timestamp.ofEpochSecond(0).toString());
assertEquals("2015-01-19 07:36:10 UTC", Timestamp.ofEpochSecond(1421652970).toString());
assertEquals("2015-01-19 07:36:10.100 UTC", Timestamp.ofEpochSecond(1421652970, 100*1000*1000).toString());
assertEquals("2015-01-19 07:36:10.120 UTC", Timestamp.ofEpochSecond(1421652970, 120*1000*1000).toString());
assertEquals("2015-01-19 07:36:10.123 UTC", Timestamp.ofEpochSecond(1421652970, 123*1000*1000).toString());
assertEquals("2015-01-19 07:36:10.123400 UTC", Timestamp.ofEpochSecond(1421652970, 123400*1000).toString());
assertEquals("2015-01-19 07:36:10.123450 UTC", Timestamp.ofEpochSecond(1421652970, 123450*1000).toString());
assertEquals("2015-01-19 07:36:10.123456 UTC", Timestamp.ofEpochSecond(1421652970, 123456*1000).toString());
assertEquals("2015-01-19 07:36:10.123456700 UTC", Timestamp.ofEpochSecond(1421652970, 123456700).toString());
assertEquals("2015-01-19 07:36:10.123456780 UTC", Timestamp.ofEpochSecond(1421652970, 123456780).toString());
assertEquals("2015-01-19 07:36:10.123456789 UTC", Timestamp.ofEpochSecond(1421652970, 123456789).toString());
}
@Test
public void testFromString()
{
checkToStringFromString(Timestamp.ofEpochSecond(0));
checkToStringFromString(Timestamp.ofEpochSecond(1421652970));
checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 100*1000*1000));
checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 120*1000*1000));
checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123*1000*1000));
checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123400*1000));
checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123450*1000));
checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123456*1000));
checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123456700));
checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123456780));
checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123456789));
}
private void checkToStringFromString(Timestamp timestamp)
{
assertEquals(timestamp, Timestamp.fromString(timestamp.toString()));
}
}