forked from todoroo/astrid
-
Notifications
You must be signed in to change notification settings - Fork 0
/
AdvancedRepeatTests.java
65 lines (52 loc) · 2.67 KB
/
AdvancedRepeatTests.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package com.todoroo.astrid.repeats;
import java.text.ParseException;
import java.util.Date;
import com.google.ical.values.Frequency;
import com.google.ical.values.RRule;
import com.todoroo.andlib.test.TodorooTestCase;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.data.Task;
public class AdvancedRepeatTests extends TodorooTestCase {
public static void assertDatesEqual(long date, long other) {
assertEquals("Expected: " + new Date(date) + ", Actual: " + new Date(other),
date, other);
}
public void testDueDateInPast() throws ParseException {
RRule rrule = new RRule();
rrule.setInterval(1);
rrule.setFreq(Frequency.DAILY);
Task task = new Task();
// repeat once => due date should become tomorrow
long past = task.createDueDate(Task.URGENCY_SPECIFIC_DAY, new Date(110, 7, 1).getTime());
task.setValue(Task.DUE_DATE, past);
long tomorrow = task.createDueDate(Task.URGENCY_SPECIFIC_DAY, DateUtilities.now() + DateUtilities.ONE_DAY);
long nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal());
assertDatesEqual(tomorrow, nextDueDate);
// test specific day & time
long pastWithTime = task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, new Date(110, 7, 1, 10, 4).getTime());
task.setValue(Task.DUE_DATE, pastWithTime);
Date date = new Date(DateUtilities.now() / 1000L * 1000L);
date.setHours(10);
date.setMinutes(4);
date.setSeconds(0);
long todayWithTime = task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, date.getTime()) / 1000L * 1000L;
if(todayWithTime < DateUtilities.now())
todayWithTime += DateUtilities.ONE_DAY;
nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal());
assertDatesEqual(todayWithTime, nextDueDate);
}
public void testDueDateInPastRepeatMultiple() throws ParseException {
RRule rrule = new RRule();
rrule.setInterval(1);
rrule.setFreq(Frequency.DAILY);
Task task = new Task();
// repeat once => due date should become tomorrow
long past = task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME, new Date(110, 7, 1, 0, 0, 0).getTime());
task.setValue(Task.DUE_DATE, past);
long nextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal());
assertTrue(nextDueDate > DateUtilities.now());
task.setValue(Task.DUE_DATE, nextDueDate);
long evenMoreNextDueDate = RepeatTaskCompleteListener.computeNextDueDate(task, rrule.toIcal());
assertNotSame(nextDueDate, evenMoreNextDueDate);
}
}