From e1224a0a255253cc5427fec2259e4e9192232085 Mon Sep 17 00:00:00 2001 From: Tim Gee Date: Sun, 27 Jan 2019 16:15:13 +0000 Subject: [PATCH] Improve tests and MutableClock interface --- .gitignore | 1 + .../java/com/trickl/time/MutableClock.java | 20 ++++++-- .../com/trickl/time/MutableClockTest.java | 51 +++++++++++++++++++ .../com/trickl/time/RelativeClockTest.java | 4 +- 4 files changed, 69 insertions(+), 7 deletions(-) create mode 100644 src/test/java/com/trickl/time/MutableClockTest.java diff --git a/.gitignore b/.gitignore index 5f2dbe1..a5ca158 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ buildNumber.properties # Avoid ignoring Maven wrapper jar file (.jar files are usually ignored) !/.mvn/wrapper/maven-wrapper.jar +/nbproject/ \ No newline at end of file diff --git a/src/main/java/com/trickl/time/MutableClock.java b/src/main/java/com/trickl/time/MutableClock.java index e6331ef..7268c94 100644 --- a/src/main/java/com/trickl/time/MutableClock.java +++ b/src/main/java/com/trickl/time/MutableClock.java @@ -4,17 +4,27 @@ import java.time.Duration; import java.time.Instant; import java.time.ZoneId; +import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; -@AllArgsConstructor +@AllArgsConstructor(access = AccessLevel.PRIVATE) final class MutableClock extends Clock { - @Getter @Setter private Instant instant; + @Setter private Instant time; @Getter private final ZoneId zone; + /** + * Create a mutable clock. + * + * @return A mutable clock + */ + public static MutableClock at(Instant time) { + return new MutableClock(time, ZoneId.of("Z")); + } + public void advance(Duration duration) { - instant = instant.plus(duration); + time = time.plus(duration); } @Override @@ -22,11 +32,11 @@ public Clock withZone(ZoneId zone) { if (zone.equals(this.zone)) { return this; } - return new MutableClock(instant, zone); + return new MutableClock(time, zone); } @Override public Instant instant() { - return instant; + return time; } } diff --git a/src/test/java/com/trickl/time/MutableClockTest.java b/src/test/java/com/trickl/time/MutableClockTest.java new file mode 100644 index 0000000..dfdc781 --- /dev/null +++ b/src/test/java/com/trickl/time/MutableClockTest.java @@ -0,0 +1,51 @@ +package com.trickl.time; + +import java.time.Clock; +import java.time.Duration; +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.Month; +import java.time.ZoneId; +import java.time.ZoneOffset; +import org.junit.Test; +import static org.junit.Assert.*; + +public class MutableClockTest { + + private final Instant clockStart = LocalDateTime.of( + LocalDate.of(2018, Month.JANUARY, 1), + LocalTime.NOON + ).toInstant(ZoneOffset.UTC); + + @Test + public void testAdvance() { + MutableClock mutableClock = MutableClock.at(clockStart); + Duration adjustment = Duration.ofMinutes(5); + mutableClock.advance(adjustment); + assertEquals(clockStart.plus(adjustment), mutableClock.instant()); + } + + @Test + public void testWithZone() { + Clock mutableClock = MutableClock.at(clockStart) + .withZone(ZoneId.of("GMT+2")); + + assertEquals(ZoneId.of("GMT+2"), mutableClock.getZone()); + } + + @Test + public void testInstant() { + MutableClock mutableClock = MutableClock.at(clockStart); + assertEquals(clockStart, mutableClock.instant()); + } + + @Test + public void testSetTime() { + MutableClock mutableClock = MutableClock.at(clockStart); + Instant adjustedTime = clockStart.plus(Duration.ofMinutes(5)); + mutableClock.setTime(adjustedTime); + assertEquals(adjustedTime, mutableClock.instant()); + } +} diff --git a/src/test/java/com/trickl/time/RelativeClockTest.java b/src/test/java/com/trickl/time/RelativeClockTest.java index a88d7bd..ccf2a5b 100644 --- a/src/test/java/com/trickl/time/RelativeClockTest.java +++ b/src/test/java/com/trickl/time/RelativeClockTest.java @@ -16,7 +16,7 @@ public class RelativeClockTest { private final MutableClock referenceClock = - new MutableClock(Instant.MIN, ZoneId.of("Z")); + MutableClock.at(Instant.MIN); private final Instant referenceClockStart = LocalDateTime.of( LocalDate.of(2018, Month.JANUARY, 1), @@ -25,7 +25,7 @@ public class RelativeClockTest { @Before public void init() { - referenceClock.setInstant(referenceClockStart); + referenceClock.setTime(referenceClockStart); } @Test