| | |
| | | private final long sleepTime; |
| | | private final long totalNbSteps; |
| | | private long nbStepsRemaining; |
| | | private boolean started; |
| | | |
| | | private SteppingTimer(Builder builder) |
| | | { |
| | |
| | | this.nbStepsRemaining = totalNbSteps; |
| | | } |
| | | |
| | | private SteppingTimer startTimer() |
| | | { |
| | | started = true; |
| | | return this; |
| | | } |
| | | |
| | | /** |
| | | * Returns whether the timer has reached the timeout. This method may block by sleeping. |
| | | * |
| | |
| | | if (!done) |
| | | { |
| | | Thread.sleep(sleepTime); |
| | | nbStepsRemaining--; |
| | | } |
| | | return done; |
| | | } |
| | |
| | | */ |
| | | private boolean hasTimedOutNoSleep() |
| | | { |
| | | Reject.ifTrue(!started, "start() method should have been called first"); |
| | | return nbStepsRemaining-- <= 0; |
| | | return nbStepsRemaining <= 0; |
| | | } |
| | | |
| | | @Override |
| | | public <R> R repeatUntilSuccess(Callable<R> callable) throws Exception, InterruptedException |
| | | { |
| | | startTimer(); |
| | | do |
| | | { |
| | | try |