Skip to content

Commit c90aa10

Browse files
committed
[WIP]
Merge branch 'main' into introduce-mapping # Conflicts: # lib/src/androidTest/kotlin/at/bitfire/ical4android/AndroidEventTest.kt # lib/src/main/kotlin/at/bitfire/ical4android/AndroidEvent.kt
2 parents 499a64d + 50ec0b0 commit c90aa10

26 files changed

+178
-192
lines changed

lib/src/androidTest/kotlin/at/bitfire/ical4android/AndroidEventTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -432,8 +432,8 @@ class AndroidEventTest {
432432
localEvent.add()
433433

434434
assertEquals(
435-
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q)
436-
365 * 2 // Android <10: does not include UNTIL (incorrect!)
435+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P)
436+
365 * 2 // Android <9: does not include UNTIL (incorrect!)
437437
else
438438
365 * 2 + 1, // Android ≥10: includes UNTIL (correct)
439439
AndroidEvent.numInstances(client, testAccount, localEvent.id!!)

lib/src/androidTest/kotlin/at/bitfire/ical4android/AndroidTimeZonesTest.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
package at.bitfire.ical4android
88

9-
import at.bitfire.ical4android.util.DateUtils
9+
import net.fortuna.ical4j.model.TimeZoneRegistryFactory
1010
import org.junit.Assert
1111
import org.junit.Assert.assertNotNull
1212
import org.junit.Test
@@ -18,10 +18,11 @@ class AndroidTimeZonesTest {
1818

1919
@Test
2020
fun testLoadSystemTimezones() {
21+
val tzRegistry = TimeZoneRegistryFactory.getInstance().createRegistry()
2122
for (id in ZoneId.getAvailableZoneIds()) {
2223
val name = ZoneId.of(id).getDisplayName(TextStyle.FULL, Locale.US)
2324
val info = try {
24-
DateUtils.ical4jTimeZone(id)
25+
tzRegistry.getTimeZone(id)
2526
} catch(e: Exception) {
2627
Assert.fail("Invalid system timezone $name ($id)")
2728
}

lib/src/androidTest/kotlin/at/bitfire/ical4android/DmfsTaskTest.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ import android.net.Uri
1414
import android.provider.CalendarContract
1515
import at.bitfire.ical4android.impl.TestTask
1616
import at.bitfire.ical4android.impl.TestTaskList
17-
import at.bitfire.ical4android.util.DateUtils
1817
import at.bitfire.synctools.storage.LocalStorageException
1918
import net.fortuna.ical4j.model.Date
2019
import net.fortuna.ical4j.model.DateList
2120
import net.fortuna.ical4j.model.DateTime
21+
import net.fortuna.ical4j.model.TimeZoneRegistryFactory
2222
import net.fortuna.ical4j.model.component.VAlarm
2323
import net.fortuna.ical4j.model.parameter.Email
2424
import net.fortuna.ical4j.model.parameter.RelType
@@ -38,7 +38,6 @@ import net.fortuna.ical4j.model.property.RRule
3838
import net.fortuna.ical4j.model.property.RelatedTo
3939
import net.fortuna.ical4j.model.property.Status
4040
import net.fortuna.ical4j.model.property.XProperty
41-
import org.dmfs.tasks.contract.TaskContract.LOCAL_ACCOUNT_TYPE
4241
import org.dmfs.tasks.contract.TaskContract.Properties
4342
import org.dmfs.tasks.contract.TaskContract.Property
4443
import org.dmfs.tasks.contract.TaskContract.Property.Category
@@ -59,9 +58,10 @@ class DmfsTaskTest(
5958
providerName: TaskProvider.ProviderName
6059
): DmfsStyleProvidersTaskTest(providerName) {
6160

62-
private val tzVienna = DateUtils.ical4jTimeZone("Europe/Vienna")!!
63-
private val tzChicago = DateUtils.ical4jTimeZone("America/Chicago")!!
64-
private val tzDefault = DateUtils.ical4jTimeZone(ZoneId.systemDefault().id)!!
61+
private val tzRegistry = TimeZoneRegistryFactory.getInstance().createRegistry()!!
62+
private val tzVienna = tzRegistry.getTimeZone("Europe/Vienna")!!
63+
private val tzChicago = tzRegistry.getTimeZone("America/Chicago")!!
64+
private val tzDefault = tzRegistry.getTimeZone(ZoneId.systemDefault().id)!!
6565

6666
private val testAccount = Account(javaClass.name, CalendarContract.ACCOUNT_TYPE_LOCAL)
6767

lib/src/androidTest/kotlin/at/bitfire/ical4android/EventTest.kt

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import at.bitfire.synctools.icalendar.Css3Color
1212
import net.fortuna.ical4j.model.Date
1313
import net.fortuna.ical4j.model.DateTime
1414
import net.fortuna.ical4j.model.Parameter
15+
import net.fortuna.ical4j.model.TimeZoneRegistryFactory
1516
import net.fortuna.ical4j.model.component.VAlarm
1617
import net.fortuna.ical4j.model.parameter.Email
1718
import net.fortuna.ical4j.model.property.Attendee
@@ -20,6 +21,7 @@ import net.fortuna.ical4j.model.property.DtStart
2021
import net.fortuna.ical4j.model.property.Organizer
2122
import net.fortuna.ical4j.model.property.RRule
2223
import net.fortuna.ical4j.model.property.RecurrenceId
24+
import net.fortuna.ical4j.util.TimeZones
2325
import org.junit.Assert.assertEquals
2426
import org.junit.Assert.assertFalse
2527
import org.junit.Assert.assertNull
@@ -33,6 +35,11 @@ import java.time.Duration
3335

3436
class EventTest {
3537

38+
private val tzRegistry = TimeZoneRegistryFactory.getInstance().createRegistry()
39+
private val tzBerlin = tzRegistry.getTimeZone("Europe/Berlin")!!
40+
private val tzLondon = tzRegistry.getTimeZone("Europe/London")!!
41+
private val tzUTC = tzRegistry.getTimeZone(TimeZones.UTC_ID)!!
42+
3643
/* public interface tests */
3744

3845
@Test
@@ -69,8 +76,6 @@ class EventTest {
6976

7077
@Test
7178
fun testGenerateEtcUTC() {
72-
val tzUTC = DateUtils.ical4jTimeZone("Etc/UTC")
73-
7479
val e = Event()
7580
7681
e.dtStart = DtStart("20200926T080000", tzUTC)
@@ -126,13 +131,13 @@ class EventTest {
126131
fun testRecurringWriteFullDayException() {
127132
val event = Event().apply {
128133
uid = "test1"
129-
dtStart = DtStart("20190117T083000", DateUtils.ical4jTimeZone("Europe/Berlin"))
134+
dtStart = DtStart("20190117T083000", tzBerlin)
130135
summary = "Main event"
131136
rRules += RRule("FREQ=DAILY;COUNT=5")
132137
exceptions += arrayOf(
133138
Event().apply {
134139
uid = "test2"
135-
recurrenceId = RecurrenceId(DateTime("20190118T073000", DateUtils.ical4jTimeZone("Europe/London")))
140+
recurrenceId = RecurrenceId(DateTime("20190118T073000", tzLondon))
136141
summary = "Normal exception"
137142
},
138143
Event().apply {
@@ -248,7 +253,7 @@ class EventTest {
248253
fun testWrite() {
249254
val e = Event()
250255
e.uid = "SAMPLEUID"
251-
e.dtStart = DtStart("20190101T100000", DateUtils.ical4jTimeZone("Europe/Berlin"))
256+
e.dtStart = DtStart("20190101T100000", tzBerlin)
252257
e.alarms += VAlarm(Duration.ofHours(-1))
253258

254259
val os = ByteArrayOutputStream()

lib/src/androidTest/kotlin/at/bitfire/ical4android/ICalendarTest.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66

77
package at.bitfire.ical4android
88

9-
import at.bitfire.ical4android.util.DateUtils
109
import net.fortuna.ical4j.data.CalendarBuilder
1110
import net.fortuna.ical4j.model.Component
1211
import net.fortuna.ical4j.model.Date
1312
import net.fortuna.ical4j.model.DateTime
1413
import net.fortuna.ical4j.model.Property
14+
import net.fortuna.ical4j.model.TimeZoneRegistryFactory
1515
import net.fortuna.ical4j.model.component.VAlarm
1616
import net.fortuna.ical4j.model.component.VTimeZone
1717
import net.fortuna.ical4j.model.parameter.Related
@@ -31,7 +31,9 @@ import java.time.Period
3131
class ICalendarTest {
3232

3333
// UTC timezone
34-
private val tzUTC = DateUtils.ical4jTimeZone(TimeZones.UTC_ID)!!.vTimeZone
34+
private val tzRegistry = TimeZoneRegistryFactory.getInstance().createRegistry()
35+
val tzUTC = tzRegistry.getTimeZone(TimeZones.UTC_ID)!!
36+
private val vtzUTC = tzUTC.vTimeZone
3537

3638
// Austria (Europa/Vienna) uses DST regularly
3739
private val vtzVienna = readTimeZone("Vienna.ics")
@@ -98,8 +100,8 @@ class ICalendarTest {
98100
// Keep the only observance for UTC.
99101
// DATE-TIME values in UTC are usually noted with ...Z and don't have a VTIMEZONE,
100102
// but it is allowed to write them as TZID=Etc/UTC.
101-
assertEquals(1, tzUTC.observances.size)
102-
ICalendar.minifyVTimeZone(tzUTC, Date("20200612")).let { minified ->
103+
assertEquals(1, vtzUTC.observances.size)
104+
ICalendar.minifyVTimeZone(vtzUTC, Date("20200612")).let { minified ->
103105
assertEquals(1, minified.observances.size)
104106
}
105107
}

lib/src/androidTest/kotlin/at/bitfire/ical4android/TaskTest.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
package at.bitfire.ical4android
88

99
import at.bitfire.ical4android.impl.testProdId
10-
import at.bitfire.ical4android.util.DateUtils
1110
import net.fortuna.ical4j.model.Date
1211
import net.fortuna.ical4j.model.DateList
1312
import net.fortuna.ical4j.model.DateTime
1413
import net.fortuna.ical4j.model.Parameter
1514
import net.fortuna.ical4j.model.TimeZone
15+
import net.fortuna.ical4j.model.TimeZoneRegistryFactory
1616
import net.fortuna.ical4j.model.component.VAlarm
1717
import net.fortuna.ical4j.model.parameter.RelType
1818
import net.fortuna.ical4j.model.parameter.Value
@@ -39,7 +39,9 @@ import java.nio.charset.Charset
3939

4040
class TaskTest {
4141

42-
val tzVienna: TimeZone = DateUtils.ical4jTimeZone("Europe/Vienna")!!
42+
val tzRegistry = TimeZoneRegistryFactory.getInstance().createRegistry()!!
43+
val tzBerlin: TimeZone = tzRegistry.getTimeZone("Europe/Berlin")!!
44+
val tzVienna: TimeZone = tzRegistry.getTimeZone("Europe/Vienna")!!
4345

4446

4547
/* public interface tests */
@@ -200,7 +202,7 @@ class TaskTest {
200202
fun testWrite() {
201203
val t = Task()
202204
t.uid = "SAMPLEUID"
203-
t.dtStart = DtStart("20190101T100000", DateUtils.ical4jTimeZone("Europe/Berlin"))
205+
t.dtStart = DtStart("20190101T100000", tzBerlin)
204206

205207
val alarm = VAlarm(java.time.Duration.ofHours(-1) /*Dur(0, -1, 0, 0)*/)
206208
alarm.properties += Action.AUDIO

lib/src/androidTest/kotlin/at/bitfire/ical4android/util/AndroidTimeUtilsTest.kt

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,12 @@ import java.time.Period
2727

2828
class AndroidTimeUtilsTest {
2929

30-
val tzBerlin: TimeZone = DateUtils.ical4jTimeZone("Europe/Berlin")!!
31-
val tzToronto: TimeZone = DateUtils.ical4jTimeZone("America/Toronto")!!
30+
val tzRegistry = TimeZoneRegistryFactory.getInstance().createRegistry()!!
31+
val tzBerlin: TimeZone = tzRegistry.getTimeZone("Europe/Berlin")!!
32+
val tzToronto: TimeZone = tzRegistry.getTimeZone("America/Toronto")!!
3233

3334
val tzCustom by lazy {
34-
val builder = CalendarBuilder()
35+
val builder = CalendarBuilder(tzRegistry)
3536
val cal = builder.build(StringReader("BEGIN:VCALENDAR\n" +
3637
"BEGIN:VTIMEZONE\n" +
3738
"TZID:CustomTime\n" +
@@ -45,15 +46,15 @@ class AndroidTimeUtilsTest {
4546
TimeZone(cal.getComponent(VTimeZone.VTIMEZONE) as VTimeZone)
4647
}
4748

48-
val tzIdDefault = java.util.TimeZone.getDefault().id
49-
val tzDefault = DateUtils.ical4jTimeZone(tzIdDefault)
49+
val tzIdDefault = java.util.TimeZone.getDefault().id!!
50+
val tzDefault = tzRegistry.getTimeZone(tzIdDefault)!!
5051

5152
// androidifyTimeZone
5253

5354
@Test
5455
fun testAndroidifyTimeZone_Null() {
5556
// must not throw an exception
56-
AndroidTimeUtils.androidifyTimeZone(null)
57+
AndroidTimeUtils.androidifyTimeZone(null, tzRegistry)
5758
}
5859

5960
// androidifyTimeZone
@@ -63,7 +64,7 @@ class AndroidTimeUtilsTest {
6364
fun testAndroidifyTimeZone_DateProperty_Date() {
6465
// dates (without time) should be ignored
6566
val dtStart = DtStart(Date("20150101"))
66-
AndroidTimeUtils.androidifyTimeZone(dtStart)
67+
AndroidTimeUtils.androidifyTimeZone(dtStart, tzRegistry)
6768
assertTrue(DateUtils.isDate(dtStart))
6869
assertNull(dtStart.timeZone)
6970
assertFalse(dtStart.isUtc)
@@ -73,7 +74,7 @@ class AndroidTimeUtilsTest {
7374
fun testAndroidifyTimeZone_DateProperty_KnownTimeZone() {
7475
// date-time with known time zone should be unchanged
7576
val dtStart = DtStart("20150101T230350", tzBerlin)
76-
AndroidTimeUtils.androidifyTimeZone(dtStart)
77+
AndroidTimeUtils.androidifyTimeZone(dtStart, tzRegistry)
7778
assertEquals(tzBerlin, dtStart.timeZone)
7879
assertFalse(dtStart.isUtc)
7980
}
@@ -83,7 +84,7 @@ class AndroidTimeUtilsTest {
8384
// time zone that is not available on Android systems should be rewritten to system default
8485
val dtStart = DtStart("20150101T031000", tzCustom)
8586
// 20150101T031000 CustomTime [+0310] = 20150101T000000 UTC = 1420070400 UNIX
86-
AndroidTimeUtils.androidifyTimeZone(dtStart)
87+
AndroidTimeUtils.androidifyTimeZone(dtStart, tzRegistry)
8788
assertEquals(1420070400000L, dtStart.date.time)
8889
assertEquals(tzIdDefault, dtStart.timeZone.id)
8990
assertFalse(dtStart.isUtc)
@@ -93,7 +94,7 @@ class AndroidTimeUtilsTest {
9394
fun testAndroidifyTimeZone_DateProperty_FloatingTime() {
9495
// times with floating time should be treated as system default time zone
9596
val dtStart = DtStart("20150101T230350")
96-
AndroidTimeUtils.androidifyTimeZone(dtStart)
97+
AndroidTimeUtils.androidifyTimeZone(dtStart, tzRegistry)
9798
assertEquals(DateTime("20150101T230350", tzDefault).time, dtStart.date.time)
9899
assertEquals(tzIdDefault, dtStart.timeZone.id)
99100
assertFalse(dtStart.isUtc)
@@ -103,7 +104,7 @@ class AndroidTimeUtilsTest {
103104
fun testAndroidifyTimeZone_DateProperty_UTC() {
104105
// times with UTC should be unchanged
105106
val dtStart = DtStart("20150101T230350Z")
106-
AndroidTimeUtils.androidifyTimeZone(dtStart)
107+
AndroidTimeUtils.androidifyTimeZone(dtStart, tzRegistry)
107108
assertEquals(1420153430000L, dtStart.date.time)
108109
assertNull(dtStart.timeZone)
109110
assertTrue(dtStart.isUtc)
@@ -279,7 +280,7 @@ class AndroidTimeUtilsTest {
279280
@Test
280281
fun testAndroidStringToRecurrenceSets_UtcTimes() {
281282
// list of UTC times
282-
val exDate = AndroidTimeUtils.androidStringToRecurrenceSet("20150101T103010Z,20150702T103020Z", false) { ExDate(it) }
283+
val exDate = AndroidTimeUtils.androidStringToRecurrenceSet("20150101T103010Z,20150702T103020Z", tzRegistry, false) { ExDate(it) }
283284
assertNull(exDate.timeZone)
284285
val exDates = exDate.dates
285286
assertEquals(Value.DATE_TIME, exDates.type)
@@ -292,7 +293,7 @@ class AndroidTimeUtilsTest {
292293
@Test
293294
fun testAndroidStringToRecurrenceSets_ZonedTimes() {
294295
// list of time zone times
295-
val exDate = AndroidTimeUtils.androidStringToRecurrenceSet("${tzToronto.id};20150103T113030,20150704T113040",false) { ExDate(it) }
296+
val exDate = AndroidTimeUtils.androidStringToRecurrenceSet("${tzToronto.id};20150103T113030,20150704T113040", tzRegistry,false) { ExDate(it) }
296297
assertEquals(tzToronto, exDate.timeZone)
297298
assertEquals(tzToronto.id, (exDate.getParameter(Parameter.TZID) as TzId).value)
298299
val exDates = exDate.dates
@@ -306,7 +307,7 @@ class AndroidTimeUtilsTest {
306307
@Test
307308
fun testAndroidStringToRecurrenceSets_Dates() {
308309
// list of dates
309-
val exDate = AndroidTimeUtils.androidStringToRecurrenceSet("20150101T103010Z,20150702T103020Z", true) { ExDate(it) }
310+
val exDate = AndroidTimeUtils.androidStringToRecurrenceSet("20150101T103010Z,20150702T103020Z", tzRegistry, true) { ExDate(it) }
310311
val exDates = exDate.dates
311312
assertEquals(Value.DATE, exDates.type)
312313
assertEquals(2, exDates.size)
@@ -316,7 +317,7 @@ class AndroidTimeUtilsTest {
316317

317318
@Test
318319
fun testAndroidStringToRecurrenceSets_Exclude() {
319-
val exDate = AndroidTimeUtils.androidStringToRecurrenceSet("${tzToronto.id};20150103T113030",false, 1420302630000L) { ExDate(it) }
320+
val exDate = AndroidTimeUtils.androidStringToRecurrenceSet("${tzToronto.id};20150103T113030", tzRegistry,false, 1420302630000L) { ExDate(it) }
320321
assertEquals(0, exDate.dates.size)
321322
}
322323

lib/src/androidTest/kotlin/at/bitfire/ical4android/util/DateUtilsTest.kt

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import net.fortuna.ical4j.model.property.DtEnd
1212
import net.fortuna.ical4j.model.property.DtStart
1313
import org.junit.Assert.assertEquals
1414
import org.junit.Assert.assertFalse
15-
import org.junit.Assert.assertNotNull
1615
import org.junit.Assert.assertNull
1716
import org.junit.Assert.assertTrue
1817
import org.junit.Test
@@ -21,18 +20,6 @@ import java.util.TimeZone
2120

2221
class DateUtilsTest {
2322

24-
private val tzIdToronto = "America/Toronto"
25-
private val tzToronto = DateUtils.ical4jTimeZone(tzIdToronto)!!
26-
27-
@Test
28-
fun testTimeZoneRegistry() {
29-
assertNotNull(DateUtils.ical4jTimeZone("Europe/Vienna"))
30-
31-
// https://github.com/ical4j/ical4j/issues/207
32-
assertNotNull(DateUtils.ical4jTimeZone("EST"))
33-
}
34-
35-
3623
@Test
3724
fun testFindAndroidTimezoneID() {
3825
assertEquals("Europe/Vienna", DateUtils.findAndroidTimezoneID("Europe/Vienna"))

lib/src/androidTest/kotlin/at/bitfire/ical4android/util/TimeApiExtensionsTest.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import at.bitfire.ical4android.util.TimeApiExtensions.toZonedDateTime
1818
import net.fortuna.ical4j.model.Date
1919
import net.fortuna.ical4j.model.DateTime
2020
import net.fortuna.ical4j.model.TimeZone
21+
import net.fortuna.ical4j.model.TimeZoneRegistryFactory
2122
import net.fortuna.ical4j.util.TimeZones
2223
import org.junit.Assert.assertEquals
2324
import org.junit.Assert.assertTrue
@@ -34,7 +35,8 @@ import java.time.ZonedDateTime
3435

3536
class TimeApiExtensionsTest {
3637

37-
val tzBerlin: TimeZone = DateUtils.ical4jTimeZone("Europe/Berlin")!!
38+
val tzRegistry = TimeZoneRegistryFactory.getInstance().createRegistry()!!
39+
val tzBerlin = tzRegistry.getTimeZone("Europe/Berlin")!!
3840

3941

4042
@Test
@@ -155,18 +157,17 @@ class TimeApiExtensionsTest {
155157

156158
@Test
157159
fun testZonedDateTime_toIcal4jDateTime_NotUtc() {
158-
val tzBerlin = DateUtils.ical4jTimeZone("Europe/Berlin")
159160
assertEquals(
160161
DateTime("20200705T010203", tzBerlin),
161-
ZonedDateTime.of(2020, 7, 5, 1, 2, 3, 0, ZoneId.of("Europe/Berlin")).toIcal4jDateTime()
162+
ZonedDateTime.of(2020, 7, 5, 1, 2, 3, 0, ZoneId.of("Europe/Berlin")).toIcal4jDateTime(tzRegistry)
162163
)
163164
}
164165

165166
@Test
166167
fun testZonedDateTime_toIcal4jDateTime_Utc() {
167168
assertEquals(
168169
DateTime("20200705T010203Z"),
169-
ZonedDateTime.of(2020, 7, 5, 1, 2, 3, 0, ZoneOffset.UTC).toIcal4jDateTime()
170+
ZonedDateTime.of(2020, 7, 5, 1, 2, 3, 0, ZoneOffset.UTC).toIcal4jDateTime(tzRegistry)
170171
)
171172
}
172173

lib/src/androidTest/kotlin/at/bitfire/synctools/LoggingTestRunner.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class LoggingTestRunner: AndroidJUnitRunner() {
2121
val rootLogger = Logger.getLogger("")
2222
rootLogger.level = Level.ALL
2323
rootLogger.handlers.forEach { rootLogger.removeHandler(it) }
24-
rootLogger.addHandler(LogcatHandler(javaClass.packageName))
24+
rootLogger.addHandler(LogcatHandler(BuildConfig.LIBRARY_PACKAGE_NAME))
2525
}
2626

2727
}

0 commit comments

Comments
 (0)