@SuppressWarnings("UnusedDeclaration") public class Poller { public static long seconds(int seconds) { return seconds * 1000; } public static long milliseconds(int millis) { return millis; } public static Poller poller(long timeoutMillis, long pollDelayMillis) { return new Poller(timeoutMillis, pollDelayMillis); } private final long initialDelayMillis; private final long timeoutMillis; private final long pollDelayMillis; public Poller(long timeoutMillis, long pollDelayMillis) { this.timeoutMillis = timeoutMillis; this.pollDelayMillis = pollDelayMillis; this.initialDelayMillis = 0; } public Poller(long timeoutMillis, long pollDelayMillis, long initialDelayMillis) { this.initialDelayMillis = initialDelayMillis; this.timeoutMillis = timeoutMillis; this.pollDelayMillis = pollDelayMillis; } public void waitFor(Probe probe) { Timeout timeout = new Timeout(timeoutMillis); sleep(initialDelayMillis); while (!probe.isSatisfied()) { if (timeout.hasTimedOut()) throw new AssertionError(probe.describeFailure()); sleep(pollDelayMillis); } } public void alwaysSatisfy(Probe probe) { Timeout timeout = new Timeout(timeoutMillis); sleep(initialDelayMillis); while (!timeout.hasTimedOut()) { if (!probe.isSatisfied()) throw new AssertionError(probe.describeFailure()); sleep(pollDelayMillis); } } private static void sleep(long millis) { if (millis > 0) try { Thread.sleep(millis); } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new RuntimeException(e); } } public void assertEventually(Probe probe) { waitFor(probe); } public void assertEventually(PollingMatcherAssert.Matchers matchers){ assertEventually(new PollingMatcherAssert(matchers)); } public void assertAlways(Probe probe) { alwaysSatisfy(probe); } public void assertAlways(PollingMatcherAssert.Matchers matchers){ assertAlways(new PollingMatcherAssert(matchers)); } public void assertThat(Probe probe) { waitFor(probe); } public static class Timeout { private final long timeoutTimeInMillis; public Timeout(long timeoutInMillis) { this.timeoutTimeInMillis = System.currentTimeMillis() + timeoutInMillis; } public boolean hasTimedOut() { return System.currentTimeMillis() > timeoutTimeInMillis; } } }
Poller
猜你喜欢
转载自seafront12.iteye.com/blog/2299014
今日推荐
周排行