diff --git a/app/src/main/java/com/philliphsu/clock2/DaysOfWeek.java b/app/src/main/java/com/philliphsu/clock2/DaysOfWeek.java index fa179d9..38d7bd4 100644 --- a/app/src/main/java/com/philliphsu/clock2/DaysOfWeek.java +++ b/app/src/main/java/com/philliphsu/clock2/DaysOfWeek.java @@ -3,6 +3,7 @@ package com.philliphsu.clock2; import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; +import android.support.annotation.VisibleForTesting; import android.util.Log; import java.util.Arrays; @@ -57,11 +58,21 @@ public class DaysOfWeek { return sAppContext.getString(LABELS_RES[weekDay]); } - /** @return the week day whose order is specified by {@code ordinalDay} */ - public int weekDay(int ordinalDay) { - if (ordinalDay < 0 || ordinalDay > 6) + /** @return the week day at {@code position} within the user-defined week */ + public int weekDay(int position) { + if (position < 0 || position > 6) throw new ArrayIndexOutOfBoundsException("Ordinal day out of range"); - return DAYS[ordinalDay]; + return DAYS[position]; + } + + /** @return the position of the {@code weekDay} within the user-defined week */ + public int positionOf(int weekDay) { + if (weekDay < SUNDAY || weekDay > SATURDAY) + throw new ArrayIndexOutOfBoundsException("Week day ("+weekDay+") out of range"); + for (int i = 0; i < DAYS.length; i++) + if (DAYS[i] == weekDay) + return i; + return -1; } @Override @@ -71,7 +82,8 @@ public class DaysOfWeek { + "}"; } - private DaysOfWeek(int firstDayOfWeek) { + @VisibleForTesting + DaysOfWeek(int firstDayOfWeek) { if (firstDayOfWeek != SATURDAY && firstDayOfWeek != SUNDAY && firstDayOfWeek != MONDAY) throw new IllegalArgumentException("Invalid first day of week: " + firstDayOfWeek); DAYS[0] = firstDayOfWeek; diff --git a/app/src/test/java/com/philliphsu/clock2/DaysOfWeekTest.java b/app/src/test/java/com/philliphsu/clock2/DaysOfWeekTest.java new file mode 100644 index 0000000..96cd306 --- /dev/null +++ b/app/src/test/java/com/philliphsu/clock2/DaysOfWeekTest.java @@ -0,0 +1,74 @@ +package com.philliphsu.clock2; + +import org.junit.Test; + +import static com.philliphsu.clock2.DaysOfWeek.*; +import static org.junit.Assert.assertEquals; + +/** + * Created by Phillip Hsu on 6/1/2016. + */ +public class DaysOfWeekTest { + + @Test + public void testSundayAsFirstDayOfWeek() { + DaysOfWeek days = new DaysOfWeek(SUNDAY); + assertEquals(days.weekDay(0), SUNDAY); + assertEquals(days.weekDay(1), MONDAY); + assertEquals(days.weekDay(2), TUESDAY); + assertEquals(days.weekDay(3), WEDNESDAY); + assertEquals(days.weekDay(4), THURSDAY); + assertEquals(days.weekDay(5), FRIDAY); + assertEquals(days.weekDay(6), SATURDAY); + + assertEquals(days.positionOf(SUNDAY), 0); + assertEquals(days.positionOf(MONDAY), 1); + assertEquals(days.positionOf(TUESDAY), 2); + assertEquals(days.positionOf(WEDNESDAY), 3); + assertEquals(days.positionOf(THURSDAY), 4); + assertEquals(days.positionOf(FRIDAY), 5); + assertEquals(days.positionOf(SATURDAY), 6); + } + + @Test + public void testSaturdayAsFirstDayOfWeek() { + DaysOfWeek days = new DaysOfWeek(SATURDAY); + assertEquals(days.weekDay(0), SATURDAY); + assertEquals(days.weekDay(1), SUNDAY); + assertEquals(days.weekDay(2), MONDAY); + assertEquals(days.weekDay(3), TUESDAY); + assertEquals(days.weekDay(4), WEDNESDAY); + assertEquals(days.weekDay(5), THURSDAY); + assertEquals(days.weekDay(6), FRIDAY); + + assertEquals(days.positionOf(SUNDAY), 1); + assertEquals(days.positionOf(MONDAY), 2); + assertEquals(days.positionOf(TUESDAY), 3); + assertEquals(days.positionOf(WEDNESDAY), 4); + assertEquals(days.positionOf(THURSDAY), 5); + assertEquals(days.positionOf(FRIDAY), 6); + assertEquals(days.positionOf(SATURDAY), 0); + } + + @Test + public void testMondayAsFirstDayOfWeek() { + DaysOfWeek days = new DaysOfWeek(MONDAY); + assertEquals(days.weekDay(0), MONDAY); + assertEquals(days.weekDay(1), TUESDAY); + assertEquals(days.weekDay(2), WEDNESDAY); + assertEquals(days.weekDay(3), THURSDAY); + assertEquals(days.weekDay(4), FRIDAY); + assertEquals(days.weekDay(5), SATURDAY); + assertEquals(days.weekDay(6), SUNDAY); + + assertEquals(days.positionOf(SUNDAY), 6); + assertEquals(days.positionOf(MONDAY), 0); + assertEquals(days.positionOf(TUESDAY), 1); + assertEquals(days.positionOf(WEDNESDAY), 2); + assertEquals(days.positionOf(THURSDAY), 3); + assertEquals(days.positionOf(FRIDAY), 4); + assertEquals(days.positionOf(SATURDAY), 5); + + System.out.println(days.toString()); + } +}