Skip to content

Commit

Permalink
Bug fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
benfortuna committed Mar 7, 2020
1 parent 9739a31 commit 71ed8a3
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 11 deletions.
13 changes: 7 additions & 6 deletions src/main/java/net/fortuna/ical4j/model/ComponentGroup.java
Expand Up @@ -6,9 +6,7 @@
import net.fortuna.ical4j.model.property.Uid;

import java.time.temporal.Temporal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -86,7 +84,8 @@ public C getLatestRevision() {
* @see Component#calculateRecurrenceSet(Period)
*/
public <T extends Temporal> List<Period<T>> calculateRecurrenceSet(final Period<T> period) {
List<Period<T>> periods = new ArrayList<>();
// Use set to exclude duplicates..
Set<Period<T>> periods = new HashSet<>();
List<Component> replacements = new ArrayList<>();

for (Component component : getRevisions()) {
Expand All @@ -97,7 +96,7 @@ public <T extends Temporal> List<Period<T>> calculateRecurrenceSet(final Period<
}
}

List<Period<T>> finalPeriods = periods;
List<Period<T>> finalPeriods = new ArrayList<>(periods);
replacements.forEach(component -> {
RecurrenceId recurrenceId = component.getProperty(Property.RECURRENCE_ID);
List<Period> match = finalPeriods.stream().filter(p -> p.getStart().equals(recurrenceId.getDate()))
Expand All @@ -107,6 +106,8 @@ public <T extends Temporal> List<Period<T>> calculateRecurrenceSet(final Period<
finalPeriods.addAll(component.calculateRecurrenceSet(period));
});

return periods;
// Natural sort of final list..
Collections.sort(finalPeriods);
return finalPeriods;
}
}
Expand Up @@ -51,7 +51,7 @@ class ComponentGroupTest extends Specification {
uid(uid)
sequence('3')
recurrenceid('20101129', parameters: parameters() { value('DATE') })
dtstamp(new DtStamp(new DateTime()))
dtstamp(new DtStamp(Instant.now()))
dtstart('20101130', parameters: parameters() { value('DATE') })
dtend('20101201', parameters: parameters() { value('DATE') })
}
Expand Down Expand Up @@ -84,22 +84,22 @@ class ComponentGroupTest extends Specification {
def components = new ComponentList<VEvent>([event, rev1])

when: 'recurrence instances are calculated'
Period period = Period.parse('20101113T120000/P3W')
Period period = Period.parse('20101113/P3W')
def recurrences = new ComponentGroup(components, uid).calculateRecurrenceSet(period)

then: 'the expected number of recurrences are returned'
recurrences == event.calculateRecurrenceSet(period).normalise()
recurrences == event.calculateRecurrenceSet(period)
}

def "CalculateRecurrenceSetWithException"() {
given: 'an event with 2 revisions'
def components = new ComponentList<VEvent>([event, rev1, rev2, rev3])

when: 'recurrence instances are calculated'
Period period = ['20101113T120000/P3W']
Period period = Period.parse '20101113/P3W'
def recurrences = new ComponentGroup(components, uid).calculateRecurrenceSet(period)

then: 'the expected number of recurrences are returned'
recurrences.size() == event.calculateRecurrenceSet(period).normalise().size()
recurrences.size() == event.calculateRecurrenceSet(period).size()
}
}

0 comments on commit 71ed8a3

Please sign in to comment.