package com.thoughtworks.calabash.android;
import static com.thoughtworks.calabash.android.CalabashLogger.info;
import static java.lang.String.format;
public class ConditionalWaiter {
private final ICondition condition;
public ConditionalWaiter(ICondition condition) {
this.condition = condition;
}
public void run(int times, int sleepTimeInSec) throws CalabashException {
int timesTested = 0;
int sleepTimeInMilli = sleepTimeInSec * 1000;
while (!condition.test() && timesTested <= times) {
try {
info("Retrying wait condition: " + condition.getDescription());
Thread.sleep(sleepTimeInMilli);
timesTested++;
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
if (timesTested > times)
throw new CalabashException("Wait condition failed : " + condition.getDescription());
}
public void run(int timeoutInMillis) throws CalabashException {
long startTime = System.currentTimeMillis();
do {
if (condition.test()) {
return;
}
} while ((System.currentTimeMillis() - startTime) < timeoutInMillis);
throw new CalabashException(format("Wait condition (%s) timed out after %s ms", condition.getDescription(), timeoutInMillis));
}
}