From 1ddeb2add60b7ff543b4ea19e4f158e19ddab5de Mon Sep 17 00:00:00 2001 From: Tim Su Date: Fri, 8 Jul 2011 02:18:38 -0700 Subject: [PATCH] Added a unit test for new case and also tweaked a minor setting in repeat task complete listener that might fix the bug Jon is describing --- .../repeats/RepeatTaskCompleteListener.java | 2 +- .../astrid/repeats/AdvancedRepeatTests.java | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java index 7f7011be8..91642e11a 100644 --- a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java +++ b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java @@ -165,7 +165,7 @@ public class RepeatTaskCompleteListener extends BroadcastReceiver { // detect if we finished if(newDueDate > DateUtilities.now()) { // if byDay is set and interval > 1, we need to run again - if(rrule.getByDay().size() > 0 && rrule.getInterval() > 0) { + if(rrule.getByDay().size() > 0 && rrule.getInterval() > 1) { if(newDueDate - repeatFromDate.getTime() > DateUtilities.ONE_WEEK) break; } else if(newDueDate > repeatFromDate.getTime()) diff --git a/tests/src/com/todoroo/astrid/repeats/AdvancedRepeatTests.java b/tests/src/com/todoroo/astrid/repeats/AdvancedRepeatTests.java index de85ff1f2..39ff82e81 100644 --- a/tests/src/com/todoroo/astrid/repeats/AdvancedRepeatTests.java +++ b/tests/src/com/todoroo/astrid/repeats/AdvancedRepeatTests.java @@ -88,4 +88,32 @@ public class AdvancedRepeatTests extends TodorooTestCase { } } + /** test multiple days per week */ + public void testMultipleDaysPerWeek() throws Exception { + Task task = new Task(); + long originalDueDate = (DateUtilities.now() - 1 * DateUtilities.ONE_DAY) / 1000L * 1000L; + task.setValue(Task.DUE_DATE, task.createDueDate(Task.URGENCY_SPECIFIC_DAY, DateUtilities.now())); + + RRule rrule = new RRule(); + rrule.setInterval(1); + rrule.setFreq(Frequency.WEEKLY); + ArrayList days = new ArrayList(); + + days.add(new WeekdayNum(0, Weekday.MO)); + days.add(new WeekdayNum(0, Weekday.TH)); + rrule.setByDay(days); + + long nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal()); + assertTrue("Due date is '" + new Date(nextDueDate) + "', expected no more than '" + + new Date(DateUtilities.now() + DateUtilities.ONE_WEEK) + "'", + nextDueDate - DateUtilities.now() < DateUtilities.ONE_WEEK); + + task.setValue(Task.DUE_DATE, nextDueDate); + + long subsequentDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal()); + assertTrue("Due date is '" + new Date(subsequentDueDate) + "', expected no more than '" + + new Date(DateUtilities.now() + 5 * DateUtilities.ONE_DAY) + "'", + nextDueDate - DateUtilities.now() < 5 * DateUtilities.ONE_DAY); + } + }