mirror of https://github.com/tasks/tasks
added repeat tests, fixed up others
parent
06e7274bc5
commit
42ea483336
@ -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…
Reference in New Issue