Skip to content

Commit eab048f

Browse files
committed
Provide specific tzRegistry in various contexts
1 parent 4365e84 commit eab048f

File tree

9 files changed

+40
-63
lines changed

9 files changed

+40
-63
lines changed

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import androidx.core.content.contentValuesOf
2121
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
2222
import at.bitfire.ical4android.impl.TestCalendar
2323
import at.bitfire.ical4android.util.AndroidTimeUtils
24-
import at.bitfire.ical4android.util.DateUtils
2524
import at.bitfire.ical4android.util.MiscUtils.asSyncAdapter
2625
import at.bitfire.ical4android.util.MiscUtils.closeCompat
2726
import at.bitfire.synctools.icalendar.Css3Color
@@ -35,6 +34,7 @@ import net.fortuna.ical4j.model.Parameter
3534
import net.fortuna.ical4j.model.ParameterList
3635
import net.fortuna.ical4j.model.Property
3736
import net.fortuna.ical4j.model.Recur
37+
import net.fortuna.ical4j.model.TimeZoneRegistryFactory
3838
import net.fortuna.ical4j.model.component.VAlarm
3939
import net.fortuna.ical4j.model.parameter.Cn
4040
import net.fortuna.ical4j.model.parameter.CuType
@@ -74,11 +74,12 @@ class AndroidEventTest {
7474

7575
private val testAccount = Account("[email protected]", ACCOUNT_TYPE_LOCAL)
7676

77-
private val tzVienna = DateUtils.ical4jTimeZone("Europe/Vienna")!!
78-
private val tzShanghai = DateUtils.ical4jTimeZone("Asia/Shanghai")!!
77+
private val tzRegistry = TimeZoneRegistryFactory.getInstance().createRegistry()!!
78+
private val tzVienna = tzRegistry.getTimeZone("Europe/Vienna")!!
79+
private val tzShanghai = tzRegistry.getTimeZone("Asia/Shanghai")!!
7980

8081
private val tzIdDefault = java.util.TimeZone.getDefault().id
81-
private val tzDefault = DateUtils.ical4jTimeZone(tzIdDefault)
82+
private val tzDefault = tzRegistry.getTimeZone(tzIdDefault)
8283

8384
lateinit var client: ContentProviderClient
8485
private lateinit var calendar: AndroidCalendar

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 & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ import android.database.DatabaseUtils
1313
import android.net.Uri
1414
import at.bitfire.ical4android.impl.TestTask
1515
import at.bitfire.ical4android.impl.TestTaskList
16-
import at.bitfire.ical4android.util.DateUtils
1716
import at.bitfire.synctools.storage.LocalStorageException
1817
import net.fortuna.ical4j.model.Date
1918
import net.fortuna.ical4j.model.DateList
2019
import net.fortuna.ical4j.model.DateTime
20+
import net.fortuna.ical4j.model.TimeZoneRegistryFactory
2121
import net.fortuna.ical4j.model.component.VAlarm
2222
import net.fortuna.ical4j.model.parameter.Email
2323
import net.fortuna.ical4j.model.parameter.RelType
@@ -58,9 +58,10 @@ class DmfsTaskTest(
5858
providerName: TaskProvider.ProviderName
5959
): DmfsStyleProvidersTaskTest(providerName) {
6060

61-
private val tzVienna = DateUtils.ical4jTimeZone("Europe/Vienna")!!
62-
private val tzChicago = DateUtils.ical4jTimeZone("America/Chicago")!!
63-
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)!!
6465

6566
private val testAccount = Account("AndroidTaskTest", LOCAL_ACCOUNT_TYPE)
6667

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/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/main/kotlin/at/bitfire/ical4android/util/DateUtils.kt

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import net.fortuna.ical4j.data.CalendarBuilder
1010
import net.fortuna.ical4j.model.Date
1111
import net.fortuna.ical4j.model.DateTime
1212
import net.fortuna.ical4j.model.TimeZone
13-
import net.fortuna.ical4j.model.TimeZoneRegistryFactory
1413
import net.fortuna.ical4j.model.component.VTimeZone
1514
import net.fortuna.ical4j.model.property.DateProperty
1615
import java.io.StringReader
@@ -28,13 +27,6 @@ object DateUtils {
2827
private val logger
2928
get() = Logger.getLogger(javaClass.name)
3029

31-
/**
32-
* Global ical4j time zone registry used for event/task processing. Do not
33-
* modify this registry or its entries!
34-
*/
35-
@Deprecated("For every context, it's own TimeZoneRegistry should be used")
36-
private val tzRegistry = TimeZoneRegistryFactory.getInstance().createRegistry()
37-
3830

3931
// time zones
4032

@@ -93,20 +85,6 @@ object DateUtils {
9385
}
9486
}
9587

96-
/**
97-
* Loads a time zone from the ical4j time zone registry (which contains the
98-
* VTIMEZONE definitions).
99-
*
100-
* All Android time zone IDs plus some other time zones should be available.
101-
* However, the possibility that the time zone is not available in ical4j should
102-
* be handled.
103-
*
104-
* @param id time zone ID (like `Europe/Vienna`)
105-
* @return the ical4j time zone (VTIMEZONE), or `null` if no VTIMEZONE is available
106-
*/
107-
@Deprecated("Create and query new TimeZoneRegistry instance if one is needed")
108-
fun ical4jTimeZone(id: String): TimeZone? = tzRegistry.getTimeZone(id)
109-
11088
/**
11189
* Determines whether a given date represents a DATE value.
11290
* @param date date property to check

lib/src/test/kotlin/at/bitfire/ical4android/validation/EventValidatorTest.kt

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

99
import at.bitfire.ical4android.Event
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
@@ -144,7 +143,7 @@ class EventValidatorTest {
144143
}
145144
assertEquals(
146145
DateTime("20211214T235959Z"),
147-
event.rRules.first.recur.until
146+
event.rRules.first().recur.until
148147
)
149148
EventValidator.sameTypeForDtStartAndRruleUntil(event.dtStart!!, event.rRules)
150149
assertEquals("FREQ=MONTHLY;UNTIL=20211214", event.rRules.joinToString())
@@ -160,7 +159,7 @@ class EventValidatorTest {
160159
"END:VCALENDAR"
161160
)
162161
).first()
163-
assertEquals(1639440000000, event1.rRules.first.recur.until.time)
162+
assertEquals(1639440000000, event1.rRules.first().recur.until.time)
164163
assertEquals("FREQ=MONTHLY;UNTIL=20211214;BYMONTHDAY=15", event1.rRules.joinToString())
165164
}
166165

@@ -375,7 +374,8 @@ class EventValidatorTest {
375374
@Test
376375
fun testRemoveRecurrencesOfRecurringWithExceptions() {
377376
// Test manually created event
378-
val tz = DateUtils.ical4jTimeZone("Europe/Paris")
377+
val tzRegistry = TimeZoneRegistryFactory.getInstance().createRegistry()
378+
val tz = tzRegistry.getTimeZone("Europe/Paris")
379379
val manualEvent = Event().apply {
380380
dtStart = DtStart("20240219T130000", tz)
381381
dtEnd = DtEnd("20240219T140000", tz)
@@ -507,7 +507,7 @@ class EventValidatorTest {
507507

508508
// helpers
509509

510-
private fun Iterable<RRule>.joinToString(): String =
511-
this.map { rRule -> rRule.value }.joinToString("\n")
510+
private fun Iterable<RRule>.joinToString() =
511+
this.joinToString("\n") { rRule -> rRule.value }
512512

513513
}

0 commit comments

Comments
 (0)