
com.timgroup.clocks.testing.SupplierClock Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of clocks-testing Show documentation
Show all versions of clocks-testing Show documentation
JSR310 clock implementations for use in testing
The newest version!
package com.timgroup.clocks.testing;
import java.time.Clock;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.util.function.Supplier;
import static java.util.Objects.requireNonNull;
/**
* Clock that delegates to a supplier of instants.
*
* Typically, the supplier is a lambda, for example:
*
* private Instant now = Instant.now();
* private final Clock testClock = SupplierClock.utc(() -> now);
*
*
* @see ManualClock
*/
public final class SupplierClock extends Clock {
private final Supplier supplier;
private final ZoneId zone;
public static SupplierClock utc(Supplier supplier) {
return new SupplierClock(supplier, ZoneOffset.UTC);
}
public static SupplierClock systemDefault(Supplier supplier) {
return new SupplierClock(supplier, ZoneId.systemDefault());
}
public SupplierClock(Supplier supplier, ZoneId zone) {
this.supplier = requireNonNull(supplier);
this.zone = requireNonNull(zone);
}
@Override
public Instant instant() {
return supplier.get();
}
@Override
public ZoneId getZone() {
return zone;
}
@Override
public Clock withZone(ZoneId newZone) {
if (newZone.equals(zone)) {
return this;
}
return new SupplierClock(supplier, newZone);
}
@Override
public String toString() {
return "SupplierClock[" + supplier + " @ " + zone + "]";
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy