blob: d1dc0e0c5557879ff0beb901e6afa4b3ad77660d [file] [log] [blame]
package com.xtremelabs.robolectric.shadows;
import android.text.format.Time;
import android.util.TimeFormatException;
import com.xtremelabs.robolectric.WithTestDefaultsRunner;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.*;
@RunWith(WithTestDefaultsRunner.class)
public class TimeTest {
@Test
public void shouldSetToNow() throws Exception {
Time t = new Time();
t.setToNow();
assertThat(t.toMillis(false), not(equalTo(0l)));
}
@Test
public void shouldHaveNoArgsConstructor() throws Exception {
Time t = new Time();
assertNotNull(t.timezone);
}
@Test
public void shouldHaveCopyConstructor() throws Exception {
Time t = new Time();
t.setToNow();
Time t2 = new Time(t);
assertEquals(t.timezone, t2.timezone);
assertEquals(t.year, t2.year);
assertEquals(t.month, t2.month);
assertEquals(t.monthDay, t2.monthDay);
assertEquals(t.hour, t2.hour);
assertEquals(t.minute, t2.minute);
assertEquals(t.second, t2.second);
}
@Test
public void shouldHaveSetTime() throws Exception {
Time t = new Time();
t.setToNow();
Time t2 = new Time();
t2.set(t);
assertEquals(t.timezone, t2.timezone);
assertEquals(t.year, t2.year);
assertEquals(t.month, t2.month);
assertEquals(t.monthDay, t2.monthDay);
assertEquals(t.hour, t2.hour);
assertEquals(t.minute, t2.minute);
assertEquals(t.second, t2.second);
}
@Test
public void shouldHaveSet3Args() throws Exception {
Time t = new Time();
t.set(1, 1, 2000);
assertEquals(t.year, 2000);
assertEquals(t.month, 1);
assertEquals(t.monthDay, 1);
}
@Test
public void shouldHaveSet6Args() throws Exception {
Time t = new Time();
t.set(1, 1, 1, 1, 1, 2000);
assertEquals(t.year, 2000);
assertEquals(t.month, 1);
assertEquals(t.monthDay, 1);
assertEquals(t.second, 1);
assertEquals(t.minute, 1);
assertEquals(t.hour, 1);
}
@Test
public void shouldHaveTimeZoneConstructor() throws Exception {
Time t = new Time("UTC");
assertEquals(t.timezone, "UTC");
}
@Test
public void shouldClear() throws Exception {
Time t = new Time();
t.setToNow();
t.clear("UTC");
assertEquals("UTC", t.timezone);
assertEquals(0, t.year);
assertEquals(0, t.month);
assertEquals(0, t.monthDay);
assertEquals(0, t.hour);
assertEquals(0, t.minute);
assertEquals(0, t.second);
assertEquals(0, t.weekDay);
assertEquals(0, t.yearDay);
assertEquals(0, t.gmtoff);
assertEquals(-1, t.isDst);
}
@Test
public void shouldHaveToMillis() throws Exception {
Time t = new Time();
t.set(86400 * 1000);
assertEquals(86400 * 1000, t.toMillis(false));
}
@Test
public void shouldHaveCurrentTimeZone() throws Exception {
assertNotNull(Time.getCurrentTimezone());
}
@Test
public void shouldHaveCompareAndBeforeAfter() throws Exception {
Time a = new Time();
Time b = new Time();
assertEquals(0, Time.compare(a, b));
assertFalse(a.before(b));
assertFalse(a.after(b));
a.year = 2000;
assertEquals(1, Time.compare(a, b));
assertTrue(a.after(b));
assertTrue(b.before(a));
b.year = 2001;
assertEquals(-1, Time.compare(a, b));
assertTrue(b.after(a));
assertTrue(a.before(b));
}
@Test
public void shouldHaveParse() throws Exception {
Time t = new Time("Europe/Berlin");
assertFalse(t.parse("20081013T160000"));
assertEquals(2008, t.year);
assertEquals(9, t.month);
assertEquals(13, t.monthDay);
assertEquals(16, t.hour);
assertEquals(0, t.minute);
assertEquals(0, t.second);
assertTrue(t.parse("20081013T160000Z"));
assertEquals(2008, t.year);
assertEquals(9, t.month);
assertEquals(13, t.monthDay);
assertEquals(16, t.hour);
assertEquals(0, t.minute);
assertEquals(0, t.second);
}
@Test(expected = TimeFormatException.class)
public void shouldThrowTimeFormatException() throws Exception {
Time t = new Time();
t.parse("BLARGH");
}
@Test
public void shouldHaveParseShort() throws Exception {
Time t = new Time();
t.parse("20081013");
assertEquals(2008, t.year);
assertEquals(9, t.month);
assertEquals(13, t.monthDay);
assertEquals(0, t.hour);
assertEquals(0, t.minute);
assertEquals(0, t.second);
}
@Test
public void shouldFormat() throws Exception {
Time t = new Time();
assertEquals("Hallo epoch 01 1970 01", t.format("Hallo epoch %d %Y %d"));
}
@Test
public void shouldFormat2445() throws Exception {
Time t = new Time();
assertEquals("19700101T000000", t.format2445());
}
@Test
public void shouldFormat3339() throws Exception {
Time t = new Time("Europe/Berlin");
assertEquals("1970-01-01T00:00:00.000+00:00", t.format3339(false));
assertEquals("1970-01-01", t.format3339(true));
}
@Test
public void testIsEpoch() throws Exception {
Time t = new Time();
boolean isEpoch = Time.isEpoch(t);
assertEquals(true, isEpoch);
}
@Test
public void testGetJulianDay() throws Exception {
Time time = new Time();
time.set(0, 0, 0, 12, 5, 2008);
time.timezone = "Australia/Sydney";
long millis = time.normalize(true);
// This is the Julian day for 12am for this day of the year
int julianDay = Time.getJulianDay(millis, time.gmtoff);
// Change the time during the day and check that we get the same
// Julian day.
for (int hour = 0; hour < 24; hour++) {
for (int minute = 0; minute < 60; minute += 15) {
time.set(0, minute, hour, 12, 5, 2008);
millis = time.normalize(true);
int day = Time.getJulianDay(millis, time.gmtoff);
assertEquals(day, julianDay);
}
}
}
@Test
public void testSetJulianDay() throws Exception {
Time time = new Time();
time.set(0, 0, 0, 12, 5, 2008);
time.timezone = "Australia/Sydney";
long millis = time.normalize(true);
int julianDay = Time.getJulianDay(millis, time.gmtoff);
time.setJulianDay(julianDay);
assertTrue(time.hour == 0 || time.hour == 1);
assertEquals(0, time.minute);
assertEquals(0, time.second);
millis = time.toMillis(false);
int day = Time.getJulianDay(millis, time.gmtoff);
assertEquals(day, julianDay);
}
}