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 }