package jfxtras.icalendarfx.calendar; import static org.junit.Assert.assertEquals; import java.time.LocalDateTime; import java.time.temporal.Temporal; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import org.junit.Test; import jfxtras.icalendarfx.ICalendarTestAbstract; import jfxtras.icalendarfx.VCalendar; import jfxtras.icalendarfx.components.VEvent; public class VCalendarRecurrenceIDTest extends ICalendarTestAbstract { @Test public void canHandleRecurrenceID1() { VEvent parent = getYearly1(); VEvent child = getRecurrenceForYearly1(); VCalendar c = new VCalendar() .withVEvents(parent, child); assertEquals(2, c.getVEvents().size()); assertEquals(1, parent.recurrenceChildren().size()); List<Temporal> expectedRecurrences = Arrays.asList( LocalDateTime.of(2015, 11, 9, 10, 0), LocalDateTime.of(2017, 11, 9, 10, 0), LocalDateTime.of(2018, 11, 9, 10, 0), LocalDateTime.of(2019, 11, 9, 10, 0), LocalDateTime.of(2020, 11, 9, 10, 0) ); List<Temporal> madeRecurrences = parent.streamRecurrences().limit(5).collect(Collectors.toList()); assertEquals(expectedRecurrences, madeRecurrences); } @Test public void canHandleRecurrenceID2() { VEvent parent = getYearly1(); VEvent child = getRecurrenceForYearly1(); VEvent child2 = getRecurrenceForYearly2(); VCalendar c = new VCalendar(); // add components out-of-order c.setVEvents(new ArrayList<>()); c.getVEvents().add(child); c.orderChild(child); c.getVEvents().add(parent); c.orderChild(parent); // c.childrenUnmodifiable().forEach(System.out::println); assertEquals(1, parent.recurrenceChildren().size()); c.getVEvents().add(child2); c.orderChild(child2); assertEquals(2, parent.recurrenceChildren().size()); { List<Temporal> expectedRecurrences = Arrays.asList( LocalDateTime.of(2015, 11, 9, 10, 0), LocalDateTime.of(2017, 11, 9, 10, 0), LocalDateTime.of(2019, 11, 9, 10, 0), LocalDateTime.of(2020, 11, 9, 10, 0), LocalDateTime.of(2021, 11, 9, 10, 0) ); List<Temporal> madeRecurrences = parent.streamRecurrences().limit(5).collect(Collectors.toList()); assertEquals(expectedRecurrences, madeRecurrences); } // remove child c.getVEvents().remove(child); assertEquals(1, parent.recurrenceChildren().size()); { List<Temporal> expectedRecurrences = Arrays.asList( LocalDateTime.of(2015, 11, 9, 10, 0), LocalDateTime.of(2016, 11, 9, 10, 0), LocalDateTime.of(2017, 11, 9, 10, 0), LocalDateTime.of(2019, 11, 9, 10, 0), LocalDateTime.of(2020, 11, 9, 10, 0) ); List<Temporal> madeRecurrences = parent.streamRecurrences().limit(5).collect(Collectors.toList()); assertEquals(expectedRecurrences, madeRecurrences); } } @Test public void canHandleRecurrenceID3() { VEvent parent = getYearly1(); VEvent child = getRecurrenceForYearly1(); VEvent child2 = getRecurrenceForYearly2(); VCalendar cal = new VCalendar(); // add components all at once List<VEvent> children = Arrays.asList(child, parent, child2); children.forEach(c -> cal.addChild(c)); assertEquals(2, parent.recurrenceChildren().size()); { List<Temporal> expectedRecurrences = Arrays.asList( LocalDateTime.of(2015, 11, 9, 10, 0), LocalDateTime.of(2017, 11, 9, 10, 0), LocalDateTime.of(2019, 11, 9, 10, 0), LocalDateTime.of(2020, 11, 9, 10, 0), LocalDateTime.of(2021, 11, 9, 10, 0) ); List<Temporal> madeRecurrences = parent.streamRecurrences().limit(5).collect(Collectors.toList()); assertEquals(expectedRecurrences, madeRecurrences); } } }