From a750f91f1aed9bccb2c990aafec572aae18e96d2 Mon Sep 17 00:00:00 2001 From: Renee Vandervelde Date: Sat, 4 Jan 2025 09:19:29 -0600 Subject: [PATCH] Add FixedClock implementation --- CHANGELOG.md | 4 ++++ datetime/api/datetime.api | 10 ++++++++++ .../com/inkapplications/datetime/FixedClock.kt | 15 +++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 datetime/src/commonMain/kotlin/com/inkapplications/datetime/FixedClock.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index a37687e..f79cc4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ Change Log - Added `Instant.toZonedDateTime` extension to convert an `Instant` to a `ZonedDateTime` in a specific timezone without needing to do multiple conversions. + - Added `FixedClock` class to provide a simple syntax for creating a + clock with a static time. This is particularly useful in combination + with the Zoned clock implementation, since an anonymous interface + conversion is cumbersome to convert. 1.8.1 ----- diff --git a/datetime/api/datetime.api b/datetime/api/datetime.api index b75c9ea..87357cd 100644 --- a/datetime/api/datetime.api +++ b/datetime/api/datetime.api @@ -1,3 +1,13 @@ +public final class com/inkapplications/datetime/FixedClock : kotlinx/datetime/Clock { + public fun (Lkotlinx/datetime/Instant;)V + public final fun copy (Lkotlinx/datetime/Instant;)Lcom/inkapplications/datetime/FixedClock; + public static synthetic fun copy$default (Lcom/inkapplications/datetime/FixedClock;Lkotlinx/datetime/Instant;ILjava/lang/Object;)Lcom/inkapplications/datetime/FixedClock; + public fun equals (Ljava/lang/Object;)Z + public fun hashCode ()I + public fun now ()Lkotlinx/datetime/Instant; + public fun toString ()Ljava/lang/String; +} + public final class com/inkapplications/datetime/ZonedClock : kotlinx/datetime/Clock { public static final field Companion Lcom/inkapplications/datetime/ZonedClock$Companion; public fun (Lkotlinx/datetime/Clock;Lkotlinx/datetime/TimeZone;)V diff --git a/datetime/src/commonMain/kotlin/com/inkapplications/datetime/FixedClock.kt b/datetime/src/commonMain/kotlin/com/inkapplications/datetime/FixedClock.kt new file mode 100644 index 0000000..71ae2c9 --- /dev/null +++ b/datetime/src/commonMain/kotlin/com/inkapplications/datetime/FixedClock.kt @@ -0,0 +1,15 @@ +package com.inkapplications.datetime + +import kotlinx.datetime.Clock +import kotlinx.datetime.Instant + +/** + * A static implementation of a Clock. + * + * This is primarily useful to simplify syntax in tests. + */ +data class FixedClock( + private val fixedTime: Instant, +): Clock { + override fun now(): Instant = fixedTime +}