All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.timgroup.clocks.testing.SupplierClock Maven / Gradle / Ivy

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