package org.robolectric.shadows; import android.text.format.DateUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; import org.robolectric.TestRunners; import org.robolectric.annotation.Config; import java.util.Calendar; import java.util.TimeZone; import static android.os.Build.VERSION_CODES.*; import static org.assertj.core.api.Assertions.assertThat; @RunWith(TestRunners.MultiApiSelfTest.class) public class ShadowDateUtilsTest { @Test @Config(minSdk = KITKAT, maxSdk = LOLLIPOP_MR1) public void formatDateTime_withCurrentYear_worksSinceKitKat() { final long millisAtStartOfYear = getMillisAtStartOfYear(); String actual = DateUtils.formatDateTime(RuntimeEnvironment.application, millisAtStartOfYear, DateUtils.FORMAT_NUMERIC_DATE); assertThat(actual).isEqualTo("1/1"); } @Test @Config(minSdk = M) public void formatDateTime_withCurrentYear_worksSinceM() { final long millisAtStartOfYear = getMillisAtStartOfYear(); // starting with M, sometimes the year is there, sometimes it's missing, unless you specify FORMAT_SHOW_YEAR String actual = DateUtils.formatDateTime(RuntimeEnvironment.application, millisAtStartOfYear, DateUtils.FORMAT_SHOW_YEAR | DateUtils.FORMAT_NUMERIC_DATE); final int currentYear = Calendar.getInstance().get(Calendar.YEAR); assertThat(actual).isEqualTo("1/1/" + currentYear); } @Test @Config(maxSdk = JELLY_BEAN_MR2) public void formatDateTime_withCurrentYear_worksPreKitKat() { Calendar calendar = Calendar.getInstance(); final int currentYear = calendar.get(Calendar.YEAR); final long millisAtStartOfYear = getMillisAtStartOfYear(); String actual = DateUtils.formatDateTime(RuntimeEnvironment.application, millisAtStartOfYear, DateUtils.FORMAT_NUMERIC_DATE); assertThat(actual).isEqualTo("1/1/" + currentYear); } @Test public void formatDateTime_withPastYear() { String actual = DateUtils.formatDateTime(RuntimeEnvironment.application, 1420099200000L, DateUtils.FORMAT_NUMERIC_DATE); assertThat(actual).isEqualTo("1/1/2015"); } @Test public void isToday_shouldReturnFalseForNotToday() { long today = java.util.Calendar.getInstance().getTimeInMillis(); ShadowSystemClock.setCurrentTimeMillis(today); assertThat(DateUtils.isToday(today)).isTrue(); assertThat(DateUtils.isToday(today + (86400 * 1000) /* 24 hours */)).isFalse(); assertThat(DateUtils.isToday(today + (86400 * 10000) /* 240 hours */)).isFalse(); } private long getMillisAtStartOfYear() { Calendar calendar = Calendar.getInstance(); final int currentYear = calendar.get(Calendar.YEAR); calendar.setTimeZone(TimeZone.getTimeZone("GMT-8:00")); calendar.set(currentYear, Calendar.JANUARY, 1, 0, 0, 0); return calendar.getTimeInMillis(); } }