package com.ggasoftware.uitest.utils; import com.ggasoftware.uitest.utils.linqInterfaces.JAction; import com.ggasoftware.uitest.utils.linqInterfaces.JFuncTEx; import com.ggasoftware.uitest.utils.linqInterfaces.JFuncTT; import java.text.SimpleDateFormat; import java.util.Date; import static com.ggasoftware.uitest.utils.WebDriverWrapper.TIMEOUT; import static java.lang.System.currentTimeMillis; /** * Created by 12345 on 28.09.2014. */ public class Timer { private final Long start = currentTimeMillis(); private long _timeoutInMSec = TIMEOUT * 1000; private long _retryTimeoutInMSec = 100; public Timer() { } public Timer(long timeoutInMSec, long retryTimeoutInMSec) { this(); _timeoutInMSec = timeoutInMSec; _retryTimeoutInMSec = retryTimeoutInMSec; } public Timer(long timeoutInMSec) { this(); _timeoutInMSec = timeoutInMSec; } public static String nowTime() { return nowTime("HH:mm:ss.SSS"); } public static String nowTimeShort() { return nowTime("mm:ss.SSS"); } public static String nowDate() { return nowTime("yyyy-MM-dd HH:mm:ss"); } public static String nowTime(String timeFormat) { return new SimpleDateFormat(timeFormat).format(new Date()); } public static String nowMSecs() { return currentTimeMillis() + ""; } public static void sleep(long mSec) { try { Thread.sleep(mSec); } catch (InterruptedException ignore) { } } public static <T> T getByCondition(JFuncTEx<T> getFunc, JFuncTT<T, Boolean> conditionFunc) { return new Timer().getResultByCondition(getFunc, conditionFunc); } public static <T> T getResultAction(JFuncTEx<T> getFunc) { return new Timer().getResultByCondition(getFunc, result -> true); } public static boolean alwaysDoneAction(JAction action) { return new Timer().wait(() -> { action.invoke(); return true; }); } public static boolean waitCondition(JFuncTEx<Boolean> condition) { return new Timer().wait(condition); } public Timer setTimeout(long timeoutInMSec) { _timeoutInMSec = timeoutInMSec; return this; } public Timer setRetryTimeout(long retryTimeoutInMSec) { _retryTimeoutInMSec = retryTimeoutInMSec; return this; } public Long timePassedInMSec() { Long now = currentTimeMillis(); return now - start; } public boolean timeoutPassed() { return timePassedInMSec() > _timeoutInMSec; } public boolean wait(JFuncTEx<Boolean> waitCase) { while (!timeoutPassed()) try { if (waitCase.invoke() != null) return true; sleep(_retryTimeoutInMSec); } catch (Exception | AssertionError ignore) { } return false; } public <T> T getResult(JFuncTEx<T> getFunc) { return getResultByCondition(getFunc, result -> true); } public <T> T getResultByCondition(JFuncTEx<T> getFunc, JFuncTT<T, Boolean> conditionFunc) { while (!timeoutPassed()) { try { T result = getFunc.invoke(); if (result != null && conditionFunc.invoke(result)) return result; } catch (Exception | AssertionError ignore) { } sleep(_retryTimeoutInMSec); } return null; } }