Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import androidx.core.content.contentValuesOf
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import at.bitfire.ical4android.impl.TestCalendar
import at.bitfire.ical4android.util.AndroidTimeUtils
import at.bitfire.ical4android.util.DateUtils
import at.bitfire.ical4android.util.MiscUtils.asSyncAdapter
import at.bitfire.ical4android.util.MiscUtils.closeCompat
import at.bitfire.synctools.icalendar.Css3Color
Expand All @@ -35,6 +34,7 @@ import net.fortuna.ical4j.model.Parameter
import net.fortuna.ical4j.model.ParameterList
import net.fortuna.ical4j.model.Property
import net.fortuna.ical4j.model.Recur
import net.fortuna.ical4j.model.TimeZoneRegistryFactory
import net.fortuna.ical4j.model.component.VAlarm
import net.fortuna.ical4j.model.parameter.Cn
import net.fortuna.ical4j.model.parameter.CuType
Expand Down Expand Up @@ -74,11 +74,12 @@ class AndroidEventTest {

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

private val tzVienna = DateUtils.ical4jTimeZone("Europe/Vienna")!!
private val tzShanghai = DateUtils.ical4jTimeZone("Asia/Shanghai")!!
private val tzRegistry = TimeZoneRegistryFactory.getInstance().createRegistry()!!
private val tzVienna = tzRegistry.getTimeZone("Europe/Vienna")!!
private val tzShanghai = tzRegistry.getTimeZone("Asia/Shanghai")!!

private val tzIdDefault = java.util.TimeZone.getDefault().id
private val tzDefault = DateUtils.ical4jTimeZone(tzIdDefault)
private val tzDefault = tzRegistry.getTimeZone(tzIdDefault)

lateinit var client: ContentProviderClient
private lateinit var calendar: AndroidCalendar
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

package at.bitfire.ical4android

import at.bitfire.ical4android.util.DateUtils
import net.fortuna.ical4j.model.TimeZoneRegistryFactory
import org.junit.Assert
import org.junit.Assert.assertNotNull
import org.junit.Test
Expand All @@ -18,10 +18,11 @@ class AndroidTimeZonesTest {

@Test
fun testLoadSystemTimezones() {
val tzRegistry = TimeZoneRegistryFactory.getInstance().createRegistry()
for (id in ZoneId.getAvailableZoneIds()) {
val name = ZoneId.of(id).getDisplayName(TextStyle.FULL, Locale.US)
val info = try {
DateUtils.ical4jTimeZone(id)
tzRegistry.getTimeZone(id)
} catch(e: Exception) {
Assert.fail("Invalid system timezone $name ($id)")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ import android.database.DatabaseUtils
import android.net.Uri
import at.bitfire.ical4android.impl.TestTask
import at.bitfire.ical4android.impl.TestTaskList
import at.bitfire.ical4android.util.DateUtils
import at.bitfire.synctools.storage.LocalStorageException
import net.fortuna.ical4j.model.Date
import net.fortuna.ical4j.model.DateList
import net.fortuna.ical4j.model.DateTime
import net.fortuna.ical4j.model.TimeZoneRegistryFactory
import net.fortuna.ical4j.model.component.VAlarm
import net.fortuna.ical4j.model.parameter.Email
import net.fortuna.ical4j.model.parameter.RelType
Expand Down Expand Up @@ -58,9 +58,10 @@ class DmfsTaskTest(
providerName: TaskProvider.ProviderName
): DmfsStyleProvidersTaskTest(providerName) {

private val tzVienna = DateUtils.ical4jTimeZone("Europe/Vienna")!!
private val tzChicago = DateUtils.ical4jTimeZone("America/Chicago")!!
private val tzDefault = DateUtils.ical4jTimeZone(ZoneId.systemDefault().id)!!
private val tzRegistry = TimeZoneRegistryFactory.getInstance().createRegistry()!!
private val tzVienna = tzRegistry.getTimeZone("Europe/Vienna")!!
private val tzChicago = tzRegistry.getTimeZone("America/Chicago")!!
private val tzDefault = tzRegistry.getTimeZone(ZoneId.systemDefault().id)!!

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

Expand Down
15 changes: 10 additions & 5 deletions lib/src/androidTest/kotlin/at/bitfire/ical4android/EventTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import at.bitfire.synctools.icalendar.Css3Color
import net.fortuna.ical4j.model.Date
import net.fortuna.ical4j.model.DateTime
import net.fortuna.ical4j.model.Parameter
import net.fortuna.ical4j.model.TimeZoneRegistryFactory
import net.fortuna.ical4j.model.component.VAlarm
import net.fortuna.ical4j.model.parameter.Email
import net.fortuna.ical4j.model.property.Attendee
Expand All @@ -20,6 +21,7 @@ import net.fortuna.ical4j.model.property.DtStart
import net.fortuna.ical4j.model.property.Organizer
import net.fortuna.ical4j.model.property.RRule
import net.fortuna.ical4j.model.property.RecurrenceId
import net.fortuna.ical4j.util.TimeZones
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNull
Expand All @@ -33,6 +35,11 @@ import java.time.Duration

class EventTest {

private val tzRegistry = TimeZoneRegistryFactory.getInstance().createRegistry()
private val tzBerlin = tzRegistry.getTimeZone("Europe/Berlin")!!
private val tzLondon = tzRegistry.getTimeZone("Europe/London")!!
private val tzUTC = tzRegistry.getTimeZone(TimeZones.UTC_ID)!!

/* public interface tests */

@Test
Expand Down Expand Up @@ -69,8 +76,6 @@ class EventTest {

@Test
fun testGenerateEtcUTC() {
val tzUTC = DateUtils.ical4jTimeZone("Etc/UTC")

val e = Event()
e.uid = "[email protected]"
e.dtStart = DtStart("20200926T080000", tzUTC)
Expand Down Expand Up @@ -126,13 +131,13 @@ class EventTest {
fun testRecurringWriteFullDayException() {
val event = Event().apply {
uid = "test1"
dtStart = DtStart("20190117T083000", DateUtils.ical4jTimeZone("Europe/Berlin"))
dtStart = DtStart("20190117T083000", tzBerlin)
summary = "Main event"
rRules += RRule("FREQ=DAILY;COUNT=5")
exceptions += arrayOf(
Event().apply {
uid = "test2"
recurrenceId = RecurrenceId(DateTime("20190118T073000", DateUtils.ical4jTimeZone("Europe/London")))
recurrenceId = RecurrenceId(DateTime("20190118T073000", tzLondon))
summary = "Normal exception"
},
Event().apply {
Expand Down Expand Up @@ -248,7 +253,7 @@ class EventTest {
fun testWrite() {
val e = Event()
e.uid = "SAMPLEUID"
e.dtStart = DtStart("20190101T100000", DateUtils.ical4jTimeZone("Europe/Berlin"))
e.dtStart = DtStart("20190101T100000", tzBerlin)
e.alarms += VAlarm(Duration.ofHours(-1))

val os = ByteArrayOutputStream()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@

package at.bitfire.ical4android

import at.bitfire.ical4android.util.DateUtils
import net.fortuna.ical4j.data.CalendarBuilder
import net.fortuna.ical4j.model.Component
import net.fortuna.ical4j.model.Date
import net.fortuna.ical4j.model.DateTime
import net.fortuna.ical4j.model.Property
import net.fortuna.ical4j.model.TimeZoneRegistryFactory
import net.fortuna.ical4j.model.component.VAlarm
import net.fortuna.ical4j.model.component.VTimeZone
import net.fortuna.ical4j.model.parameter.Related
Expand All @@ -31,7 +31,9 @@ import java.time.Period
class ICalendarTest {

// UTC timezone
private val tzUTC = DateUtils.ical4jTimeZone(TimeZones.UTC_ID)!!.vTimeZone
private val tzRegistry = TimeZoneRegistryFactory.getInstance().createRegistry()
val tzUTC = tzRegistry.getTimeZone(TimeZones.UTC_ID)!!
private val vtzUTC = tzUTC.vTimeZone

// Austria (Europa/Vienna) uses DST regularly
private val vtzVienna = readTimeZone("Vienna.ics")
Expand Down Expand Up @@ -98,8 +100,8 @@ class ICalendarTest {
// Keep the only observance for UTC.
// DATE-TIME values in UTC are usually noted with ...Z and don't have a VTIMEZONE,
// but it is allowed to write them as TZID=Etc/UTC.
assertEquals(1, tzUTC.observances.size)
ICalendar.minifyVTimeZone(tzUTC, Date("20200612")).let { minified ->
assertEquals(1, vtzUTC.observances.size)
ICalendar.minifyVTimeZone(vtzUTC, Date("20200612")).let { minified ->
assertEquals(1, minified.observances.size)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
package at.bitfire.ical4android

import at.bitfire.ical4android.impl.testProdId
import at.bitfire.ical4android.util.DateUtils
import net.fortuna.ical4j.model.Date
import net.fortuna.ical4j.model.DateList
import net.fortuna.ical4j.model.DateTime
import net.fortuna.ical4j.model.Parameter
import net.fortuna.ical4j.model.TimeZone
import net.fortuna.ical4j.model.TimeZoneRegistryFactory
import net.fortuna.ical4j.model.component.VAlarm
import net.fortuna.ical4j.model.parameter.RelType
import net.fortuna.ical4j.model.parameter.Value
Expand All @@ -39,7 +39,9 @@ import java.nio.charset.Charset

class TaskTest {

val tzVienna: TimeZone = DateUtils.ical4jTimeZone("Europe/Vienna")!!
val tzRegistry = TimeZoneRegistryFactory.getInstance().createRegistry()!!
val tzBerlin: TimeZone = tzRegistry.getTimeZone("Europe/Berlin")!!
val tzVienna: TimeZone = tzRegistry.getTimeZone("Europe/Vienna")!!


/* public interface tests */
Expand Down Expand Up @@ -200,7 +202,7 @@ class TaskTest {
fun testWrite() {
val t = Task()
t.uid = "SAMPLEUID"
t.dtStart = DtStart("20190101T100000", DateUtils.ical4jTimeZone("Europe/Berlin"))
t.dtStart = DtStart("20190101T100000", tzBerlin)

val alarm = VAlarm(java.time.Duration.ofHours(-1) /*Dur(0, -1, 0, 0)*/)
alarm.properties += Action.AUDIO
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,12 @@ import java.time.Period

class AndroidTimeUtilsTest {

val tzBerlin: TimeZone = DateUtils.ical4jTimeZone("Europe/Berlin")!!
val tzToronto: TimeZone = DateUtils.ical4jTimeZone("America/Toronto")!!
val tzRegistry = TimeZoneRegistryFactory.getInstance().createRegistry()!!
val tzBerlin: TimeZone = tzRegistry.getTimeZone("Europe/Berlin")!!
val tzToronto: TimeZone = tzRegistry.getTimeZone("America/Toronto")!!

val tzCustom by lazy {
val builder = CalendarBuilder()
val builder = CalendarBuilder(tzRegistry)
val cal = builder.build(StringReader("BEGIN:VCALENDAR\n" +
"BEGIN:VTIMEZONE\n" +
"TZID:CustomTime\n" +
Expand All @@ -45,15 +46,15 @@ class AndroidTimeUtilsTest {
TimeZone(cal.getComponent(VTimeZone.VTIMEZONE) as VTimeZone)
}

val tzIdDefault = java.util.TimeZone.getDefault().id
val tzDefault = DateUtils.ical4jTimeZone(tzIdDefault)
val tzIdDefault = java.util.TimeZone.getDefault().id!!
val tzDefault = tzRegistry.getTimeZone(tzIdDefault)!!

// androidifyTimeZone

@Test
fun testAndroidifyTimeZone_Null() {
// must not throw an exception
AndroidTimeUtils.androidifyTimeZone(null)
AndroidTimeUtils.androidifyTimeZone(null, tzRegistry)
}

// androidifyTimeZone
Expand All @@ -63,7 +64,7 @@ class AndroidTimeUtilsTest {
fun testAndroidifyTimeZone_DateProperty_Date() {
// dates (without time) should be ignored
val dtStart = DtStart(Date("20150101"))
AndroidTimeUtils.androidifyTimeZone(dtStart)
AndroidTimeUtils.androidifyTimeZone(dtStart, tzRegistry)
assertTrue(DateUtils.isDate(dtStart))
assertNull(dtStart.timeZone)
assertFalse(dtStart.isUtc)
Expand All @@ -73,7 +74,7 @@ class AndroidTimeUtilsTest {
fun testAndroidifyTimeZone_DateProperty_KnownTimeZone() {
// date-time with known time zone should be unchanged
val dtStart = DtStart("20150101T230350", tzBerlin)
AndroidTimeUtils.androidifyTimeZone(dtStart)
AndroidTimeUtils.androidifyTimeZone(dtStart, tzRegistry)
assertEquals(tzBerlin, dtStart.timeZone)
assertFalse(dtStart.isUtc)
}
Expand All @@ -83,7 +84,7 @@ class AndroidTimeUtilsTest {
// time zone that is not available on Android systems should be rewritten to system default
val dtStart = DtStart("20150101T031000", tzCustom)
// 20150101T031000 CustomTime [+0310] = 20150101T000000 UTC = 1420070400 UNIX
AndroidTimeUtils.androidifyTimeZone(dtStart)
AndroidTimeUtils.androidifyTimeZone(dtStart, tzRegistry)
assertEquals(1420070400000L, dtStart.date.time)
assertEquals(tzIdDefault, dtStart.timeZone.id)
assertFalse(dtStart.isUtc)
Expand All @@ -93,7 +94,7 @@ class AndroidTimeUtilsTest {
fun testAndroidifyTimeZone_DateProperty_FloatingTime() {
// times with floating time should be treated as system default time zone
val dtStart = DtStart("20150101T230350")
AndroidTimeUtils.androidifyTimeZone(dtStart)
AndroidTimeUtils.androidifyTimeZone(dtStart, tzRegistry)
assertEquals(DateTime("20150101T230350", tzDefault).time, dtStart.date.time)
assertEquals(tzIdDefault, dtStart.timeZone.id)
assertFalse(dtStart.isUtc)
Expand All @@ -103,7 +104,7 @@ class AndroidTimeUtilsTest {
fun testAndroidifyTimeZone_DateProperty_UTC() {
// times with UTC should be unchanged
val dtStart = DtStart("20150101T230350Z")
AndroidTimeUtils.androidifyTimeZone(dtStart)
AndroidTimeUtils.androidifyTimeZone(dtStart, tzRegistry)
assertEquals(1420153430000L, dtStart.date.time)
assertNull(dtStart.timeZone)
assertTrue(dtStart.isUtc)
Expand Down Expand Up @@ -279,7 +280,7 @@ class AndroidTimeUtilsTest {
@Test
fun testAndroidStringToRecurrenceSets_UtcTimes() {
// list of UTC times
val exDate = AndroidTimeUtils.androidStringToRecurrenceSet("20150101T103010Z,20150702T103020Z", false) { ExDate(it) }
val exDate = AndroidTimeUtils.androidStringToRecurrenceSet("20150101T103010Z,20150702T103020Z", tzRegistry, false) { ExDate(it) }
assertNull(exDate.timeZone)
val exDates = exDate.dates
assertEquals(Value.DATE_TIME, exDates.type)
Expand All @@ -292,7 +293,7 @@ class AndroidTimeUtilsTest {
@Test
fun testAndroidStringToRecurrenceSets_ZonedTimes() {
// list of time zone times
val exDate = AndroidTimeUtils.androidStringToRecurrenceSet("${tzToronto.id};20150103T113030,20150704T113040",false) { ExDate(it) }
val exDate = AndroidTimeUtils.androidStringToRecurrenceSet("${tzToronto.id};20150103T113030,20150704T113040", tzRegistry,false) { ExDate(it) }
assertEquals(tzToronto, exDate.timeZone)
assertEquals(tzToronto.id, (exDate.getParameter(Parameter.TZID) as TzId).value)
val exDates = exDate.dates
Expand All @@ -306,7 +307,7 @@ class AndroidTimeUtilsTest {
@Test
fun testAndroidStringToRecurrenceSets_Dates() {
// list of dates
val exDate = AndroidTimeUtils.androidStringToRecurrenceSet("20150101T103010Z,20150702T103020Z", true) { ExDate(it) }
val exDate = AndroidTimeUtils.androidStringToRecurrenceSet("20150101T103010Z,20150702T103020Z", tzRegistry, true) { ExDate(it) }
val exDates = exDate.dates
assertEquals(Value.DATE, exDates.type)
assertEquals(2, exDates.size)
Expand All @@ -316,7 +317,7 @@ class AndroidTimeUtilsTest {

@Test
fun testAndroidStringToRecurrenceSets_Exclude() {
val exDate = AndroidTimeUtils.androidStringToRecurrenceSet("${tzToronto.id};20150103T113030",false, 1420302630000L) { ExDate(it) }
val exDate = AndroidTimeUtils.androidStringToRecurrenceSet("${tzToronto.id};20150103T113030", tzRegistry,false, 1420302630000L) { ExDate(it) }
assertEquals(0, exDate.dates.size)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import net.fortuna.ical4j.model.property.DtEnd
import net.fortuna.ical4j.model.property.DtStart
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
import org.junit.Test
Expand All @@ -21,18 +20,6 @@ import java.util.TimeZone

class DateUtilsTest {

private val tzIdToronto = "America/Toronto"
private val tzToronto = DateUtils.ical4jTimeZone(tzIdToronto)!!

@Test
fun testTimeZoneRegistry() {
assertNotNull(DateUtils.ical4jTimeZone("Europe/Vienna"))

// https://github.com/ical4j/ical4j/issues/207
assertNotNull(DateUtils.ical4jTimeZone("EST"))
}


@Test
fun testFindAndroidTimezoneID() {
assertEquals("Europe/Vienna", DateUtils.findAndroidTimezoneID("Europe/Vienna"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import at.bitfire.ical4android.util.TimeApiExtensions.toZonedDateTime
import net.fortuna.ical4j.model.Date
import net.fortuna.ical4j.model.DateTime
import net.fortuna.ical4j.model.TimeZone
import net.fortuna.ical4j.model.TimeZoneRegistryFactory
import net.fortuna.ical4j.util.TimeZones
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
Expand All @@ -34,7 +35,8 @@ import java.time.ZonedDateTime

class TimeApiExtensionsTest {

val tzBerlin: TimeZone = DateUtils.ical4jTimeZone("Europe/Berlin")!!
val tzRegistry = TimeZoneRegistryFactory.getInstance().createRegistry()!!
val tzBerlin = tzRegistry.getTimeZone("Europe/Berlin")!!


@Test
Expand Down Expand Up @@ -155,18 +157,17 @@ class TimeApiExtensionsTest {

@Test
fun testZonedDateTime_toIcal4jDateTime_NotUtc() {
val tzBerlin = DateUtils.ical4jTimeZone("Europe/Berlin")
assertEquals(
DateTime("20200705T010203", tzBerlin),
ZonedDateTime.of(2020, 7, 5, 1, 2, 3, 0, ZoneId.of("Europe/Berlin")).toIcal4jDateTime()
ZonedDateTime.of(2020, 7, 5, 1, 2, 3, 0, ZoneId.of("Europe/Berlin")).toIcal4jDateTime(tzRegistry)
)
}

@Test
fun testZonedDateTime_toIcal4jDateTime_Utc() {
assertEquals(
DateTime("20200705T010203Z"),
ZonedDateTime.of(2020, 7, 5, 1, 2, 3, 0, ZoneOffset.UTC).toIcal4jDateTime()
ZonedDateTime.of(2020, 7, 5, 1, 2, 3, 0, ZoneOffset.UTC).toIcal4jDateTime(tzRegistry)
)
}

Expand Down
Loading