added repeat tests, fixed up others

pull/14/head
Tim Su 13 years ago
parent 06e7274bc5
commit 42ea483336

@ -95,7 +95,7 @@ public class DateUtilities {
public static long ONE_WEEK = 7 * ONE_DAY;
/** Represents a single minute */
public static long ONE_MINUTE = ONE_HOUR / 60;
public static long ONE_MINUTE = 60000L;
/* ======================================================================
* =========================================================== formatters

@ -170,6 +170,7 @@ public class RepeatTaskCompleteListener extends BroadcastReceiver {
else if(task.hasDueTime()) {
startDate.setHours(dueDate.getHours());
startDate.setMinutes(dueDate.getMinutes());
startDate.setSeconds(dueDate.getSeconds());
}
}
return startDate;
@ -195,10 +196,9 @@ public class RepeatTaskCompleteListener extends BroadcastReceiver {
}
private static long handleSubdayRepeat(Date startDate, RRule rrule, long millis) {
long newDueDate;
newDueDate = Task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME,
startDate.getTime() + millis * rrule.getInterval());
return newDueDate;
long newDueDate = startDate.getTime() + millis * rrule.getInterval();
return Task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME,
newDueDate);
}
}

@ -53,7 +53,7 @@ public class AdvancedRepeatTests extends TodorooTestCase {
buildRRule(1, Frequency.DAILY);
// test specific day & time
long dayWithTime = Task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, new Date(110, 7, 1, 10, 4).getTime());
long dayWithTime = Task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, new Date(110, 7, 1, 10, 4, 0).getTime());
task.setValue(Task.DUE_DATE, dayWithTime);
Date todayWithTime = new Date();
@ -61,11 +61,11 @@ public class AdvancedRepeatTests extends TodorooTestCase {
todayWithTime.setMinutes(4);
todayWithTime.setSeconds(0);
long nextDayWithTimeLong = todayWithTime.getTime();
if(nextDayWithTimeLong < DateUtilities.now())
nextDayWithTimeLong += DateUtilities.ONE_DAY;
nextDayWithTimeLong += DateUtilities.ONE_DAY;
nextDayWithTimeLong = nextDayWithTimeLong / 1000L * 1000;
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal());
assertDateTimeEquals(nextDueDate, nextDueDate);
assertDateTimeEquals(nextDayWithTimeLong, nextDueDate);
}
// --- due date tests

@ -0,0 +1,116 @@
package com.todoroo.astrid.repeats;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import com.google.ical.values.Frequency;
import com.google.ical.values.RRule;
import com.google.ical.values.Weekday;
import com.google.ical.values.WeekdayNum;
import com.todoroo.andlib.test.TodorooTestCase;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.data.Task;
public class RepeatAfterCompleteTests extends TodorooTestCase {
private Task task;
private long nextDueDate;
private RRule rrule;
@Override
protected void setUp() throws Exception {
super.setUp();
task = new Task();
rrule = new RRule();
}
// --- date with time tests
public void testSubDailyFreqs() throws ParseException {
task.setValue(Task.DUE_DATE, DateUtilities.now() - DateUtilities.ONE_WEEK);
task.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, true);
for(Frequency freq : Frequency.values()) {
long interval = -1;
switch(freq) {
case MINUTELY:
interval = DateUtilities.ONE_MINUTE; break;
case HOURLY:
interval = DateUtilities.ONE_HOUR; break;
default:
continue;
}
buildRRule(1, freq);
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal());
assertDateTimeEquals(freq.toString() + "x1", DateUtilities.now() + interval, nextDueDate);
buildRRule(6, freq);
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal());
assertDateTimeEquals(freq.toString() + "x6", DateUtilities.now() + 6 * interval, nextDueDate);
}
}
public void testSuperDailyFreqs() throws ParseException {
task.setValue(Task.DUE_DATE, DateUtilities.now() - DateUtilities.ONE_WEEK);
task.setFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION, true);
for(Frequency freq : Frequency.values()) {
long interval = -1;
switch(freq) {
case DAILY:
interval = DateUtilities.ONE_DAY; break;
case WEEKLY:
interval = DateUtilities.ONE_WEEK; break;
case MONTHLY:
interval = DateUtilities.addCalendarMonthsToUnixtime(DateUtilities.now(), 1) -
DateUtilities.now(); break;
case YEARLY:
interval = 365 * DateUtilities.ONE_DAY; break;
default:
continue;
}
buildRRule(1, freq);
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal());
assertDateEquals(freq.toString() + "x1", DateUtilities.now() + interval, nextDueDate);
buildRRule(6, freq);
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal());
assertDateEquals(freq.toString() + "x6", DateUtilities.now() + 6 * interval, nextDueDate);
}
}
// --- helpers
private void buildRRule(int interval, Frequency freq, Weekday... weekdays) {
rrule.setInterval(interval);
rrule.setFreq(freq);
setRRuleDays(rrule, weekdays);
}
public static void assertDateTimeEquals(String message, long expected, long actual) {
expected = expected / 1000L * 1000;
actual = actual / 1000L * 1000;
assertEquals(message + ": Expected: " + new Date(expected) + ", Actual: " + new Date(actual),
expected, actual);
}
private void assertDateEquals(String message, long expected, long actual) {
expected = Task.createDueDate(Task.URGENCY_SPECIFIC_DAY, expected);
actual = Task.createDueDate(Task.URGENCY_SPECIFIC_DAY, actual);
assertEquals("Due Date is '" + DateUtilities.getDateStringWithWeekday(getContext(), new Date(actual))
+ "', expected '" + DateUtilities.getDateStringWithWeekday(getContext(), new Date(expected)) + "'",
expected, actual);
}
private void setRRuleDays(RRule rrule, Weekday... weekdays) {
ArrayList<WeekdayNum> days = new ArrayList<WeekdayNum>();
for(Weekday wd : weekdays)
days.add(new WeekdayNum(0, wd));
rrule.setByDay(days);
}
}
Loading…
Cancel
Save