001package org.javasimon.clock;
002
003/**
004 * TestClock allows setting any arbitrary values for millis and nanos.
005 * Available for non-test code too, if for nothing else then it's easier to use in tests in other modules too.
006 *
007 * @since 3.5
008 */
009public final class TestClock implements SimonClock {
010
011        private long millis;
012        private long nanos;
013
014        @Override
015        public long nanoTime() {
016                return nanos;
017        }
018
019        @Override
020        public long milliTime() {
021                return millis;
022        }
023
024        /** Here millis are simply nanos divided by {@link SimonClock#NANOS_IN_MILLIS}. */
025        @Override
026        public long millisForNano(long nanos) {
027                return nanos / NANOS_IN_MILLIS;
028        }
029
030        public void setMillis(long millis) {
031                this.millis = millis;
032        }
033
034        public void setNanos(long nanos) {
035                this.nanos = nanos;
036        }
037
038        public void setMillisNanosFollow(long millis) {
039                this.millis = millis;
040                this.nanos = millis * NANOS_IN_MILLIS;
041        }
042}