@@ -13,12 +13,14 @@ import androidx.core.content.contentValuesOf
1313import io.mockk.mockk
1414import junit.framework.TestCase.assertEquals
1515import net.fortuna.ical4j.model.Date
16+ import net.fortuna.ical4j.model.DateList
1617import net.fortuna.ical4j.model.DateTime
1718import net.fortuna.ical4j.model.ParameterList
1819import net.fortuna.ical4j.model.Property
1920import net.fortuna.ical4j.model.Recur
2021import net.fortuna.ical4j.model.TimeZoneRegistryFactory
2122import net.fortuna.ical4j.model.component.VEvent
23+ import net.fortuna.ical4j.model.parameter.Value
2224import net.fortuna.ical4j.model.property.ExDate
2325import net.fortuna.ical4j.model.property.ExRule
2426import net.fortuna.ical4j.model.property.RDate
@@ -75,10 +77,10 @@ class RecurrenceFieldHandlerTest {
7577 fun `Recurring main event` () {
7678 val result = VEvent ()
7779 val entity = Entity (contentValuesOf(
78- Events .DTSTART to System .currentTimeMillis(),
79- Events .RRULE to " FREQ=DAILY;COUNT=10" ,
80- Events .RDATE to " 20251010T010203Z " ,
81- Events .EXRULE to " FREQ=WEEKLY;COUNT=1" ,
80+ Events .DTSTART to 1759403653000 , // Thu Oct 02 2025 11:14:13 GMT+0000
81+ Events .RRULE to " FREQ=DAILY;COUNT=10" , // Oct 02 ... Oct 12
82+ Events .RDATE to " 20251002T111413Z,20251015T010203Z " , // RDATE at event start as required by Android plus Oct 15
83+ Events .EXRULE to " FREQ=WEEKLY;COUNT=1" , // meaningless EXRULE/EXDATE
8284 Events .EXDATE to " 20260201T010203Z"
8385 ))
8486 handler.process(entity, entity, result)
@@ -87,7 +89,7 @@ class RecurrenceFieldHandlerTest {
8789 result.getProperties<RRule >(Property .RRULE )
8890 )
8991 assertEquals(
90- listOf (RDate (ParameterList (), " 20251010T010203Z " )),
92+ listOf (RDate (ParameterList (), " 20251015T010203Z " )),
9193 result.getProperties<RDate >(Property .RDATE )
9294 )
9395 assertEquals(
@@ -100,6 +102,35 @@ class RecurrenceFieldHandlerTest {
100102 )
101103 }
102104
105+ @Test
106+ fun `Recurring main event (all-day)` () {
107+ val result = VEvent ()
108+ val entity = Entity (contentValuesOf(
109+ Events .ALL_DAY to 1 ,
110+ Events .DTSTART to 1759363200000 , // Thu Oct 02 2025 00:00:00 GMT+0000
111+ Events .RRULE to " FREQ=DAILY;COUNT=10" , // Oct 02 ... Oct 12
112+ Events .RDATE to " 20251002,20251015" , // RDATE at event start as required by Android plus Oct 15
113+ Events .EXRULE to " FREQ=WEEKLY;COUNT=1" , // meaningless EXRULE/EXDATE
114+ Events .EXDATE to " 20260201T010203Z"
115+ ))
116+ handler.process(entity, entity, result)
117+ assertEquals(
118+ listOf (RRule (" FREQ=DAILY;COUNT=10" )),
119+ result.getProperties<RRule >(Property .RRULE )
120+ )
121+ assertEquals(
122+ listOf (RDate (DateList (Value .DATE ).apply { add(Date (" 20251015" )) })),
123+ result.getProperties<RDate >(Property .RDATE )
124+ )
125+ assertEquals(
126+ " FREQ=WEEKLY;COUNT=1" ,
127+ result.getProperties<ExRule >(Property .EXRULE ).joinToString { it.value }
128+ )
129+ assertEquals(
130+ " 20260201" ,
131+ result.getProperties<ExDate >(Property .EXDATE ).joinToString { it.value }
132+ )
133+ }
103134
104135 @Test
105136 fun `RRULE with UNTIL before DTSTART` () {
0 commit comments