Skip to content

Commit d59e866

Browse files
authored
Fix fast forwarding InstanceLists, fixes #125 (#126)
1 parent 8ce5766 commit d59e866

File tree

2 files changed

+50
-4
lines changed

2 files changed

+50
-4
lines changed

src/main/java/org/dmfs/rfc5545/iterable/instanceiterable/FastForwarded.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,7 @@ public FastForwarded(long timeStamp, InstanceIterable delegate)
6060
public InstanceIterator iterator(DateTime firstInstance)
6161
{
6262
InstanceIterator iterator = mDelegate.iterator(firstInstance);
63-
if (firstInstance.getTimestamp() < mTimeStamp)
64-
{
65-
iterator.fastForward(mTimeStamp);
66-
}
63+
iterator.fastForward(mTimeStamp);
6764
return iterator;
6865
}
6966
}

src/test/java/org/dmfs/rfc5545/iterable/RecurrenceSetTest.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
import java.util.TimeZone;
3232

3333
import static org.dmfs.jems2.hamcrest.matchers.iterable.IterableMatcher.iteratesTo;
34+
import static org.dmfs.rfc5545.recur.Freq.MONTHLY;
35+
import static org.dmfs.rfc5545.recur.RecurrenceRule.Part.BYMONTHDAY;
3436
import static org.hamcrest.MatcherAssert.assertThat;
3537

3638

@@ -161,4 +163,51 @@ void testWithDuplicates() throws InvalidRecurrenceRuleException
161163
DateTime.parse("20220125")
162164
));
163165
}
166+
167+
168+
@Test
169+
void testFastForwardedWithInstanceList() throws InvalidRecurrenceRuleException
170+
{
171+
assertThat(new RecurrenceSet(DateTime.parse("20220101"),
172+
new FastForwarded(DateTime.parse("20220111"),
173+
new InstanceList("20220110,20220118", DateTime.UTC),
174+
new RuleInstances(new RecurrenceRule("FREQ=WEEKLY;BYDAY=SA;COUNT=5"))
175+
)
176+
),
177+
iteratesTo(
178+
DateTime.parse("20220115"),
179+
DateTime.parse("20220118"),
180+
DateTime.parse("20220122"),
181+
DateTime.parse("20220129")
182+
));
183+
}
184+
185+
/**
186+
* https://github.com/dmfs/lib-recur/issues/125
187+
*/
188+
@Test
189+
void testIssue125() throws InvalidRecurrenceRuleException
190+
{
191+
192+
RecurrenceRule rrule = new RecurrenceRule(MONTHLY);
193+
rrule.setByPart(BYMONTHDAY, 10);
194+
rrule.setCount(5);
195+
196+
long[] rdates = new long[] { 1689379200000L, 1692057600000L }; // 2023-07-15, 2023-08-15
197+
198+
199+
assertThat(
200+
new RecurrenceSet(new DateTime(2023, 7, 1), // 2023-08-01
201+
new FastForwarded(new DateTime(2023, 7, 1), // 2023-08-01
202+
new InstanceList(rdates),
203+
new RuleInstances(rrule))),
204+
iteratesTo(
205+
DateTime.parse("20230810"),
206+
DateTime.parse("20230815"),
207+
DateTime.parse("20230910"),
208+
DateTime.parse("20231010"),
209+
DateTime.parse("20231110"),
210+
DateTime.parse("20231210")
211+
));
212+
}
164213
}

0 commit comments

Comments
 (0)