field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | README | LICENSE

CalendarTimingTests.kt (2657B)


      1 package tera.smoke
      2 
      3 import java.nio.ByteBuffer
      4 import kotlin.test.Test
      5 import kotlin.test.assertEquals
      6 import kotlin.test.assertFailsWith
      7 import uniffi.tera_core.FfiCalendarTiming
      8 import uniffi.tera_core.FfiCivilDate
      9 import uniffi.tera_core.FfiConverterTypeFfiCalendarTiming
     10 import uniffi.tera_core.FfiConverterTypeFfiTodayPageRecord
     11 import uniffi.tera_core.FfiTodayPageRecord
     12 import uniffi.tera_core.FfiViewerCalendarContext
     13 
     14 class CalendarTimingTests {
     15     @Test
     16     fun generatedPageBufferRetainsFrozenViewerCalendarContext() {
     17         val value = FfiTodayPageRecord(
     18             calendar = FfiViewerCalendarContext(
     19                 schemaVersion = 1u, asOfUnixS = 1788569400uL,
     20                 timeZone = "America/Vancouver", civilDate = FfiCivilDate(2026u, 9u, 4u),
     21             ),
     22             projectionGeneration = 9uL, schemaVersion = 2u,
     23             asOfUnixS = 1788569400uL, items = emptyList(), nextCursor = "opaque",
     24         )
     25         assertEquals(value, FfiConverterTypeFfiTodayPageRecord.lift(FfiConverterTypeFfiTodayPageRecord.lower(value)))
     26     }
     27 
     28     @Test
     29     fun generatedNativeBuffersPreserveCivilDatesAndExclusiveEnds() {
     30         for (value in listOf(
     31             FfiCalendarTiming.DateBased(FfiCivilDate(1u, 1u, 1u), null),
     32             FfiCalendarTiming.DateBased(FfiCivilDate(2024u, 2u, 29u), FfiCivilDate(2024u, 3u, 1u)),
     33             FfiCalendarTiming.DateBased(FfiCivilDate(2026u, 9u, 5u), FfiCivilDate(2026u, 9u, 7u)),
     34             FfiCalendarTiming.DateBased(FfiCivilDate(9999u, 12u, 31u), null),
     35         )) {
     36             assertEquals(value, FfiConverterTypeFfiCalendarTiming.lift(FfiConverterTypeFfiCalendarTiming.lower(value)))
     37         }
     38     }
     39 
     40     @Test
     41     fun generatedNativeBuffersPreserveEveryUnsignedInstantBitAndSourceZone() {
     42         for (start in listOf(0uL, (1uL shl 53) + 1uL, ULong.MAX_VALUE - 1uL, ULong.MAX_VALUE)) {
     43             for (zones in listOf(false, true)) {
     44                 val value = FfiCalendarTiming.TimeBased(
     45                     start, if (start == ULong.MAX_VALUE) null else start + 1uL,
     46                     if (zones) "America/Vancouver" else null,
     47                     if (zones) "Europe/Paris" else null,
     48                 )
     49                 assertEquals(value, FfiConverterTypeFfiCalendarTiming.lift(FfiConverterTypeFfiCalendarTiming.lower(value)))
     50             }
     51         }
     52     }
     53 
     54     @Test
     55     fun unknownVariantsAndTruncatedGeneratedValuesFailWithoutFabricatingDates() {
     56         for (bytes in listOf(byteArrayOf(0, 0, 0, 99), byteArrayOf(0, 0, 0, 1), byteArrayOf())) {
     57             assertFailsWith<RuntimeException> { FfiConverterTypeFfiCalendarTiming.read(ByteBuffer.wrap(bytes)) }
     58         }
     59     }
     60 }