You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/04/05 13:58:06 UTC
[isis] branch master updated: ISIS-2992: fixes VirtualClock construction issues
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 102aa31fbc ISIS-2992: fixes VirtualClock construction issues
102aa31fbc is described below
commit 102aa31fbc065867f7b57ecf2fd5283c3de29849
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Apr 5 15:57:58 2022 +0200
ISIS-2992: fixes VirtualClock construction issues
---
.../org/apache/isis/applib/clock/VirtualClock.java | 29 +++--
.../isis/applib/clock/VirtualClock_Test.java | 145 +++++++++++++++++++--
2 files changed, 153 insertions(+), 21 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock.java b/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock.java
index 5dda8a562a..6a52310c5d 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/clock/VirtualClock.java
@@ -86,11 +86,11 @@ public interface VirtualClock extends Serializable {
* Returns a ticking clock set to virtual time.
*/
static VirtualClock nowAt(@NonNull final java.time.LocalDate virtualNow) {
- return nowAt(Instant.from(virtualNow));
+ return nowAt(Instant.from(virtualNow.atStartOfDay().atZone(localTimeZone())));
}
static VirtualClock nowAt(@NonNull final java.time.LocalDateTime virtualNow) {
- return nowAt(Instant.from(virtualNow));
+ return nowAt(Instant.from(virtualNow.atZone(localTimeZone())));
}
static VirtualClock nowAt(@NonNull final java.time.OffsetDateTime virtualNow) {
@@ -138,11 +138,11 @@ public interface VirtualClock extends Serializable {
}
static VirtualClock frozenAt(@NonNull final java.time.LocalDate frozenAt) {
- return frozenAt(Instant.from(frozenAt));
+ return frozenAt(Instant.from(frozenAt.atStartOfDay(localTimeZone())));
}
static VirtualClock frozenAt(@NonNull final java.time.LocalDateTime frozenAt) {
- return frozenAt(Instant.from(frozenAt.atZone(ZoneId.systemDefault())));
+ return frozenAt(Instant.from(frozenAt.atZone(localTimeZone())));
}
static VirtualClock frozenAt(@NonNull final java.time.OffsetDateTime frozenAt) {
@@ -191,6 +191,17 @@ public interface VirtualClock extends Serializable {
return frozenAt(frozenAt);
}
+ // -- TIME ZONE
+
+ /**
+ * Used to interpret local time.
+ * <p>
+ * Returns {@link ZoneId#systemDefault()} .
+ */
+ static ZoneId localTimeZone() {
+ return ZoneId.systemDefault();
+ }
+
// -- UTILITY
/**
@@ -223,7 +234,7 @@ public interface VirtualClock extends Serializable {
* @see #nowAsLocalDate(ZoneId)
*/
default LocalDate nowAsLocalDate() {
- return nowAsLocalDate(ZoneId.systemDefault());
+ return nowAsLocalDate(localTimeZone());
}
/**
@@ -243,7 +254,7 @@ public interface VirtualClock extends Serializable {
* @see #nowAsLocalDateTime(ZoneId)
*/
default LocalDateTime nowAsLocalDateTime() {
- return nowAsLocalDateTime(ZoneId.systemDefault());
+ return nowAsLocalDateTime(localTimeZone());
}
/**
@@ -262,7 +273,7 @@ public interface VirtualClock extends Serializable {
* @see #nowAsOffsetDateTime(ZoneId)
*/
default OffsetDateTime nowAsOffsetDateTime() {
- return nowAsOffsetDateTime(ZoneId.systemDefault());
+ return nowAsOffsetDateTime(localTimeZone());
}
/**
@@ -310,7 +321,7 @@ public interface VirtualClock extends Serializable {
*/
@Deprecated // forRemoval=? ideally applib should no longer depend on joda.time, use converters instead
default org.joda.time.DateTime nowAsJodaDateTime() {
- return nowAsJodaDateTime(ZoneId.systemDefault());
+ return nowAsJodaDateTime(localTimeZone());
}
/**
@@ -363,7 +374,7 @@ public interface VirtualClock extends Serializable {
*/
@Deprecated // forRemoval=? ideally applib should no longer depend on joda.time, use converters instead
default org.joda.time.LocalDate nowAsJodaLocalDate() {
- val zoneId = ZoneId.systemDefault();
+ val zoneId = localTimeZone();
return nowAsJodaLocalDate(zoneId);
}
diff --git a/api/applib/src/test/java/org/apache/isis/applib/clock/VirtualClock_Test.java b/api/applib/src/test/java/org/apache/isis/applib/clock/VirtualClock_Test.java
index 5504abfb12..160ee54eff 100644
--- a/api/applib/src/test/java/org/apache/isis/applib/clock/VirtualClock_Test.java
+++ b/api/applib/src/test/java/org/apache/isis/applib/clock/VirtualClock_Test.java
@@ -18,13 +18,18 @@
*/
package org.apache.isis.applib.clock;
+import java.time.Instant;
import java.time.ZoneId;
+import java.time.ZoneOffset;
-import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
class VirtualClock_Test {
private VirtualClock virtualClock;
@@ -34,57 +39,173 @@ class VirtualClock_Test {
virtualClock = VirtualClock.frozenTestClock();
}
+ // -- FACTORIES (TICKING)
+
+ final static long TOLERANCE_SECONDS = 2;
+
+ @Test
+ void nowAtLocalDate() {
+ final java.time.LocalDate virtualNow = java.time.LocalDate.of(2014, 5, 18);
+ assertTimeEquals(
+ VirtualClock.nowAt(virtualNow),
+ virtualNow.atStartOfDay().atZone(VirtualClock.localTimeZone()).toInstant(),
+ TOLERANCE_SECONDS);
+ }
+
+ @Test
+ void nowAtLocalDateTime() {
+ final java.time.LocalDateTime virtualNow = java.time.LocalDateTime.of(2014, 5, 18, 7, 15);
+ assertTimeEquals(
+ VirtualClock.nowAt(virtualNow),
+ virtualNow.atZone(VirtualClock.localTimeZone()).toInstant(),
+ TOLERANCE_SECONDS);
+ }
+
+ @Test
+ void nowAtOffsetDateTime() {
+ final java.time.OffsetDateTime virtualNow =
+ java.time.OffsetDateTime.of(2014, 5, 18, 7, 15, 0, 0, ZoneOffset.ofHours(-3));
+ assertTimeEquals(
+ VirtualClock.nowAt(virtualNow),
+ virtualNow.toInstant(),
+ TOLERANCE_SECONDS);
+ }
+
+ @Test
+ void nowAtZonedDateTime() {
+ final java.time.ZonedDateTime virtualNow =
+ java.time.ZonedDateTime.of(2014, 5, 18, 7, 15, 0, 0, ZoneOffset.ofHours(-3));
+ assertTimeEquals(
+ VirtualClock.nowAt(virtualNow),
+ virtualNow.toInstant(),
+ TOLERANCE_SECONDS);
+ }
+
+ @Test
+ void nowAtDate() {
+ @SuppressWarnings("deprecation")
+ final java.util.Date virtualNow = new java.util.Date(2014-1900, 5-1, 18);
+ assertTimeEquals(
+ VirtualClock.nowAt(virtualNow),
+ Instant.ofEpochMilli(virtualNow.getTime()),
+ TOLERANCE_SECONDS);
+ }
+
+ // -- FACTORIES (FROZEN)
+
+ @Test
+ void frozenAtLocalDate() {
+ final java.time.LocalDate virtualNow = java.time.LocalDate.of(2014, 5, 18);
+ assertTimeEquals(
+ VirtualClock.frozenAt(virtualNow),
+ virtualNow.atStartOfDay().atZone(VirtualClock.localTimeZone()).toInstant());
+ }
+
@Test
- void nowAt() {
- Assertions.assertThat(virtualClock.nowAsInstant()).isEqualTo("2003-07-17T21:30:25Z");
+ void frozenAtLocalDateTime() {
+ final java.time.LocalDateTime virtualNow = java.time.LocalDateTime.of(2014, 5, 18, 7, 15);
+ assertTimeEquals(
+ VirtualClock.frozenAt(virtualNow),
+ virtualNow.atZone(VirtualClock.localTimeZone()).toInstant());
+ }
+
+ @Test
+ void frozenAtOffsetDateTime() {
+ final java.time.OffsetDateTime virtualNow =
+ java.time.OffsetDateTime.of(2014, 5, 18, 7, 15, 0, 0, ZoneOffset.ofHours(-3));
+ assertTimeEquals(
+ VirtualClock.frozenAt(virtualNow),
+ virtualNow.toInstant());
+ }
+
+ @Test
+ void frozenAtZonedDateTime() {
+ final java.time.ZonedDateTime virtualNow =
+ java.time.ZonedDateTime.of(2014, 5, 18, 7, 15, 0, 0, ZoneOffset.ofHours(-3));
+ assertTimeEquals(
+ VirtualClock.frozenAt(virtualNow),
+ virtualNow.toInstant());
+ }
+
+ @Test
+ void frozenAtDate() {
+ @SuppressWarnings("deprecation")
+ final java.util.Date virtualNow = new java.util.Date(2014-1900, 5-1, 18);
+ assertTimeEquals(
+ VirtualClock.frozenAt(virtualNow),
+ Instant.ofEpochMilli(virtualNow.getTime()));
+ }
+
+
+ // -- QUERIES
+
+ @Test
+ void nowAsInstant() {
+ assertThat(virtualClock.nowAsInstant()).isEqualTo("2003-07-17T21:30:25Z");
}
@Test
void nowAsEpochMilli() {
- Assertions.assertThat(virtualClock.nowAsEpochMilli()).isEqualTo(1058477425000L);
+ assertThat(virtualClock.nowAsEpochMilli()).isEqualTo(1058477425000L);
}
@Test
void nowAsLocalDate() {
- Assertions.assertThat(virtualClock.nowAsLocalDate(ZoneId.of("UTC")).toString()).isEqualTo("2003-07-17");
+ assertThat(virtualClock.nowAsLocalDate(ZoneId.of("UTC")).toString()).isEqualTo("2003-07-17");
}
@Test
void nowAsLocalDateTime() {
- Assertions.assertThat(virtualClock.nowAsLocalDateTime(ZoneId.of("UTC")).toString()).isEqualTo("2003-07-17T21:30:25");
+ assertThat(virtualClock.nowAsLocalDateTime(ZoneId.of("UTC")).toString()).isEqualTo("2003-07-17T21:30:25");
}
@Test
void nowAsOffsetDateTime() {
- Assertions.assertThat(virtualClock.nowAsOffsetDateTime(ZoneId.of("UTC")).toString()).isEqualTo("2003-07-17T21:30:25Z");
+ assertThat(virtualClock.nowAsOffsetDateTime(ZoneId.of("UTC")).toString()).isEqualTo("2003-07-17T21:30:25Z");
}
@Test
@Disabled // depends on the timezone
void nowAsJavaUtilDate() {
- Assertions.assertThat(virtualClock.nowAsJavaUtilDate().toString()).isEqualTo("Thu Jul 17 22:30:25 BST 2003");
+ assertThat(virtualClock.nowAsJavaUtilDate().toString()).isEqualTo("Thu Jul 17 22:30:25 BST 2003");
}
@Test
@Disabled // depends on the timezone
void nowAsJavaSqlTimestamp() {
- Assertions.assertThat(virtualClock.nowAsJavaSqlTimestamp().toString()).isEqualTo("2003-07-17 22:30:25.0");
+ assertThat(virtualClock.nowAsJavaSqlTimestamp().toString()).isEqualTo("2003-07-17 22:30:25.0");
}
@Test
@Disabled // depends on the timezone
void nowAsXmlGregorianCalendar() {
- Assertions.assertThat(virtualClock.nowAsXmlGregorianCalendar().toString()).isEqualTo("2003-07-17T22:30:25.000+01:00");
+ assertThat(virtualClock.nowAsXmlGregorianCalendar().toString()).isEqualTo("2003-07-17T22:30:25.000+01:00");
}
@Test
void nowAsJodaDateTime() {
- Assertions.assertThat(virtualClock.nowAsJodaDateTime(ZoneId.of("UTC")).toString()).isEqualTo("2003-07-17T21:30:25.000Z");
+ assertThat(virtualClock.nowAsJodaDateTime(ZoneId.of("UTC")).toString()).isEqualTo("2003-07-17T21:30:25.000Z");
}
@Test
void nowAsJodaLocalDate() {
- Assertions.assertThat(virtualClock.nowAsJodaLocalDate(ZoneId.of("UTC")).toString()).isEqualTo("2003-07-17");
+ assertThat(virtualClock.nowAsJodaLocalDate(ZoneId.of("UTC")).toString()).isEqualTo("2003-07-17");
+ }
+
+ // -- HELPER
+
+ static void assertTimeEquals(final VirtualClock virtualClock, final Instant expectedInstant) {
+ assertEquals(virtualClock.nowAsInstant(), expectedInstant);
+ }
+
+ private void assertTimeEquals(final VirtualClock virtualClock,
+ final Instant expectedInstant, final long toleranceSeconds) {
+ final long deltaSeconds = Math.abs(
+ virtualClock.nowAsInstant().getEpochSecond()
+ - expectedInstant.getEpochSecond());
+ assertTrue(deltaSeconds <= toleranceSeconds);
}
+
+
}
\ No newline at end of file