Skip to content

Commit

Permalink
Improve tests and MutableClock interface
Browse files Browse the repository at this point in the history
  • Loading branch information
trickl committed Jan 27, 2019
1 parent df98b84 commit e1224a0
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 7 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ buildNumber.properties

# Avoid ignoring Maven wrapper jar file (.jar files are usually ignored)
!/.mvn/wrapper/maven-wrapper.jar
/nbproject/
20 changes: 15 additions & 5 deletions src/main/java/com/trickl/time/MutableClock.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,39 @@
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
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;
}
}
51 changes: 51 additions & 0 deletions src/test/java/com/trickl/time/MutableClockTest.java
Original file line number Diff line number Diff line change
@@ -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());
}
}
4 changes: 2 additions & 2 deletions src/test/java/com/trickl/time/RelativeClockTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand All @@ -25,7 +25,7 @@ public class RelativeClockTest {

@Before
public void init() {
referenceClock.setInstant(referenceClockStart);
referenceClock.setTime(referenceClockStart);
}

@Test
Expand Down

0 comments on commit e1224a0

Please sign in to comment.