Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/bitfireAT/ical4android.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/androidTest/java/at/bitfire/ical4android/util/TimeApiExtensionsTest.kt')
-rw-r--r--src/androidTest/java/at/bitfire/ical4android/util/TimeApiExtensionsTest.kt198
1 files changed, 198 insertions, 0 deletions
diff --git a/src/androidTest/java/at/bitfire/ical4android/util/TimeApiExtensionsTest.kt b/src/androidTest/java/at/bitfire/ical4android/util/TimeApiExtensionsTest.kt
new file mode 100644
index 0000000..e5c6fc0
--- /dev/null
+++ b/src/androidTest/java/at/bitfire/ical4android/util/TimeApiExtensionsTest.kt
@@ -0,0 +1,198 @@
+/***************************************************************************************************
+ * Copyright © All Contributors. See LICENSE and AUTHORS in the root directory for details.
+ **************************************************************************************************/
+
+package at.bitfire.ical4android.util
+
+import at.bitfire.ical4android.util.TimeApiExtensions.requireTimeZone
+import at.bitfire.ical4android.util.TimeApiExtensions.toDuration
+import at.bitfire.ical4android.util.TimeApiExtensions.toIcal4jDate
+import at.bitfire.ical4android.util.TimeApiExtensions.toIcal4jDateTime
+import at.bitfire.ical4android.util.TimeApiExtensions.toLocalDate
+import at.bitfire.ical4android.util.TimeApiExtensions.toLocalTime
+import at.bitfire.ical4android.util.TimeApiExtensions.toRfc5545Duration
+import at.bitfire.ical4android.util.TimeApiExtensions.toZoneIdCompat
+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.util.TimeZones
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import java.time.*
+
+class TimeApiExtensionsTest {
+
+ val tzBerlin: TimeZone = DateUtils.ical4jTimeZone("Europe/Berlin")!!
+
+
+ @Test
+ fun testTimeZone_toZoneIdCompat_NotUtc() {
+ assertEquals(ZoneId.of("Europe/Berlin"), tzBerlin.toZoneId())
+ }
+
+ @Test
+ fun testTimeZone_toZoneIdCompat_Utc() {
+ assertEquals(ZoneOffset.UTC, TimeZones.getUtcTimeZone().toZoneIdCompat())
+ }
+
+
+ @Test
+ fun testDate_toLocalDate() {
+ val date = Date("20200620").toLocalDate()
+ assertEquals(2020, date.year)
+ assertEquals(6, date.monthValue)
+ assertEquals(20, date.dayOfMonth)
+ assertEquals(DayOfWeek.SATURDAY, date.dayOfWeek)
+ }
+
+
+ @Test
+ fun testDateTime_requireTimeZone() {
+ val time = DateTime("2020707T010203", tzBerlin)
+ assertEquals(tzBerlin, time.requireTimeZone())
+ }
+
+ @Test
+ fun testDateTime_requireTimeZone_Floating() {
+ val time = DateTime("2020707T010203")
+ assertEquals(TimeZone.getDefault(), time.requireTimeZone())
+ }
+
+ @Test
+ fun testDateTime_requireTimeZone_Utc() {
+ val time = DateTime("2020707T010203Z").apply { isUtc = true }
+ assertTrue(time.isUtc)
+ assertEquals(TimeZones.getUtcTimeZone(), time.requireTimeZone())
+ }
+
+
+ @Test
+ fun testDateTime_toLocalDate_TimezoneBoundary() {
+ val date = DateTime("20200620T000000", tzBerlin).toLocalDate()
+ assertEquals(2020, date.year)
+ assertEquals(6, date.monthValue)
+ assertEquals(20, date.dayOfMonth)
+ assertEquals(DayOfWeek.SATURDAY, date.dayOfWeek)
+ }
+
+ @Test
+ fun testDateTime_toLocalDate_TimezoneDuringDay() {
+ val date = DateTime("20200620T123000", tzBerlin).toLocalDate()
+ assertEquals(2020, date.year)
+ assertEquals(6, date.monthValue)
+ assertEquals(20, date.dayOfMonth)
+ assertEquals(DayOfWeek.SATURDAY, date.dayOfWeek)
+ }
+
+ @Test
+ fun testDateTime_toLocalDate_UtcDuringDay() {
+ val date = DateTime("20200620T123000Z").apply { isUtc = true }.toLocalDate()
+ assertEquals(2020, date.year)
+ assertEquals(6, date.monthValue)
+ assertEquals(20, date.dayOfMonth)
+ assertEquals(DayOfWeek.SATURDAY, date.dayOfWeek)
+ }
+
+
+ @Test
+ fun testDateTime_toLocalTime() {
+ assertEquals(LocalTime.of(12, 30), DateTime("20200620T123000", tzBerlin).toLocalTime())
+ }
+
+ @Test
+ fun testDateTime_toLocalTime_Floating() {
+ assertEquals(LocalTime.of(12, 30), DateTime("20200620T123000").toLocalTime())
+ }
+
+ @Test
+ fun testDateTime_toLocalTime_Utc() {
+ assertEquals(LocalTime.of(12, 30), DateTime("20200620T123000Z").apply { isUtc = true }.toLocalTime())
+ }
+
+
+ @Test
+ fun testDateTime_toZonedDateTime() {
+ assertEquals(
+ ZonedDateTime.of(2020, 7, 7, 10, 30, 0, 0, tzBerlin.toZoneIdCompat()),
+ DateTime("20200707T103000", tzBerlin).toZonedDateTime()
+ )
+ }
+
+ @Test
+ fun testDateTime_toZonedDateTime_Floating() {
+ assertEquals(
+ ZonedDateTime.of(2020, 7, 7, 10, 30, 0, 0, ZoneId.systemDefault()),
+ DateTime("20200707T103000").toZonedDateTime()
+ )
+ }
+
+ @Test
+ fun testDateTime_toZonedDateTime_UTC() {
+ assertEquals(
+ ZonedDateTime.of(2020, 7, 7, 10, 30, 0, 0, ZoneOffset.UTC),
+ DateTime("20200707T103000Z").apply { isUtc = true }.toZonedDateTime()
+ )
+ }
+
+
+ @Test
+ fun testLocalDate_toIcal4jDate() {
+ assertEquals(Date("19000118"), LocalDate.of(1900, 1, 18).toIcal4jDate())
+ assertEquals(Date("20200620"), LocalDate.of(2020, 6, 20).toIcal4jDate())
+ }
+
+ @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()
+ )
+ }
+
+ @Test
+ fun testZonedDateTime_toIcal4jDateTime_Utc() {
+ assertEquals(
+ DateTime("20200705T010203Z"),
+ ZonedDateTime.of(2020, 7, 5, 1, 2, 3, 0, ZoneOffset.UTC).toIcal4jDateTime()
+ )
+ }
+
+
+ @Test
+ fun testTemporalAmount_toDuration() {
+ assertEquals(Duration.ofHours(1), Duration.ofHours(1).toDuration(Instant.EPOCH))
+ assertEquals(Duration.ofDays(1), Duration.ofDays(1).toDuration(Instant.EPOCH))
+ assertEquals(Duration.ofDays(1), Period.ofDays(1).toDuration(Instant.EPOCH))
+ assertEquals(Duration.ofDays(7), Period.ofWeeks(1).toDuration(Instant.EPOCH))
+ assertEquals(Duration.ofDays(365), Period.ofYears(1).toDuration(Instant.EPOCH))
+ assertEquals(Duration.ofDays(366), Period.ofYears(1).toDuration(Instant.ofEpochSecond(1577836800)))
+ }
+
+ @Test
+ fun testTemporalAmount_toRfc5545Duration_Duration() {
+ assertEquals("P0S", Duration.ofDays(0).toRfc5545Duration(Instant.EPOCH))
+ assertEquals("P2W", Duration.ofDays(14).toRfc5545Duration(Instant.EPOCH))
+ assertEquals("P15D", Duration.ofDays(15).toRfc5545Duration(Instant.EPOCH))
+ assertEquals("P16DT1H", Duration.parse("P16DT1H").toRfc5545Duration(Instant.EPOCH))
+ assertEquals("P16DT1H4M", Duration.parse("P16DT1H4M").toRfc5545Duration(Instant.EPOCH))
+ assertEquals("P2DT1H4M5S", Duration.parse("P2DT1H4M5S").toRfc5545Duration(Instant.EPOCH))
+ assertEquals("PT1M20S", Duration.parse("PT80S").toRfc5545Duration(Instant.EPOCH))
+
+ assertEquals("P0D", Period.ofWeeks(0).toRfc5545Duration(Instant.EPOCH))
+
+ val date20200601 = Instant.ofEpochSecond(1590969600L)
+ // 2020/06/01 + 1 year = 2021/06/01 (365 days)
+ // 2021/06/01 + 2 months = 2020/08/01 (30 days + 31 days = 61 days)
+ // 2020/08/01 + 3 days = 2020/08/04 (3 days)
+ // total: 365 days + 61 days + 3 days = 429 days
+ assertEquals("P429D", Period.of(1, 2, 3).toRfc5545Duration(date20200601))
+ assertEquals("P2W", Period.ofWeeks(2).toRfc5545Duration(date20200601))
+ assertEquals("P2W", Period.ofDays(14).toRfc5545Duration(date20200601))
+ assertEquals("P15D", Period.ofDays(15).toRfc5545Duration(date20200601))
+ assertEquals("P30D", Period.ofMonths(1).toRfc5545Duration(date20200601))
+ }
+
+} \ No newline at end of file