@Test(timeout = 2000) public void conditionResultsCanBeBuffered() { final List<String> buffer = new ArrayList<String>(); with() .conditionEvaluationListener(new ConditionEvaluationListener<Integer>() { public void conditionEvaluated(EvaluatedCondition<Integer> condition) { String msg = String.format("%s (elapsed time %ds, remaining time %ds)%n", condition.getDescription(), condition.getElapsedTimeInMS() / 1000, condition.getRemainingTimeInMS() / 1000); buffer.add(msg); } }) .until(new CountDown(5), is(equalTo(0))); assertThat(buffer.size(), is(equalTo(5 + 1))); }
@Test(timeout = 2000) public void expectedMatchMessage() { final ValueHolder<String> lastMatchMessage = new ValueHolder<String>(); with() .conditionEvaluationListener(new ConditionEvaluationListener<Integer>() { public void conditionEvaluated(EvaluatedCondition<Integer> condition) { lastMatchMessage.value = condition.getDescription(); } }) .until(new CountDown(10), is(equalTo(5))); String expectedMatchMessage = String.format("%s reached its end value of <5>", CountDown.class.getName()); assertThat(lastMatchMessage.value, is(equalTo(expectedMatchMessage))); }
@Test(timeout = 2000) public void expectedMismatchMessage() { final ValueHolder<String> lastMismatchMessage = new ValueHolder<String>(); with() .conditionEvaluationListener(new ConditionEvaluationListener<Integer>() { public void conditionEvaluated(EvaluatedCondition<Integer> condition) { if (!condition.isSatisfied()) { lastMismatchMessage.value = condition.getDescription(); } } }) .until(new CountDown(10), is(equalTo(5))); String expectedMismatchMessage = String.format("%s expected <5> but was <6>", CountDown.class.getName()); assertThat(lastMismatchMessage.value, is(equalTo(expectedMismatchMessage))); }
@Test(timeout = 2000) public void awaitingForeverReturnsLongMaxValueAsRemainingTime() { final Set<Long> remainingTimes = new HashSet<Long>(); final Set<Long> elapsedTimes = new HashSet<Long>(); with() .conditionEvaluationListener(new ConditionEvaluationListener<Integer>() { public void conditionEvaluated(EvaluatedCondition<Integer> condition) { remainingTimes.add(condition.getRemainingTimeInMS()); elapsedTimes.add(condition.getElapsedTimeInMS()); } }) .forever() .until(new CountDown(10), is(equalTo(5))); assertThat(remainingTimes, everyItem(is(Long.MAX_VALUE))); assertThat(elapsedTimes, everyItem(is(not(Long.MAX_VALUE)))); }
@Test(expected = RuntimeException.class) public void listenerExceptionsAreNotCaught() { with() .catchUncaughtExceptions() .conditionEvaluationListener(new ConditionEvaluationListener<Integer>() { public void conditionEvaluated(EvaluatedCondition<Integer> condition) { throw new RuntimeException(); } }) .until(new CountDown(10), is(equalTo(0))); }
@Test(timeout = 2000) public void expectedMismatchMessageForComplexMatchers() { final ValueHolder<String> lastMismatchMessage = new ValueHolder<String>(); with() .conditionEvaluationListener(new ConditionEvaluationListener<CountDownBean>() { public void conditionEvaluated(EvaluatedCondition<CountDownBean> condition) { if (!condition.isSatisfied()) { lastMismatchMessage.value = condition.getDescription(); } } }) .until(new CountDownProvider(new CountDownBean(10, 20)), samePropertyValuesAs(new CountDownBean(10, 10))); String expectedMismatchMessage = String.format("%s expected same property values as CountDownBean [countDown: <10>, secondCountDown: <10>] but secondCountDown was <11>", CountDownProvider.class.getName()); assertThat(lastMismatchMessage.value, is(equalTo(expectedMismatchMessage))); }
@Test(timeout = 2000) public void defaultHandlerCanBeDisabledPerAwaitStatement() { final CountDown globalCountDown = new CountDown(20); ConditionEvaluationListener defaultConditionEvaluationListener = new ConditionEvaluationListener<Integer>() { public void conditionEvaluated(EvaluatedCondition<Integer> condition) { try { if (!condition.isSatisfied()) { globalCountDown.call(); } } catch (Exception ignored) { } } }; setDefaultConditionEvaluationListener(defaultConditionEvaluationListener); with().until(new CountDown(5), is(equalTo(0))); assertThat(globalCountDown.get(), is(equalTo(15))); with() .conditionEvaluationListener(null) .until(new CountDown(5), is(equalTo(0))); assertThat(globalCountDown.get(), is(equalTo(15))); with().until(new CountDown(5), is(equalTo(0))); assertThat(globalCountDown.get(), is(equalTo(10))); }
@Test(timeout = 10000) public void conditionResultsCanBeLoggedToSystemOut() { with() .conditionEvaluationListener(new ConditionEvaluationListener<Integer>() { public void conditionEvaluated(EvaluatedCondition<Integer> condition) { if (condition.isSatisfied()) { System.out.printf("%s (in %ds)%n", condition.getDescription(), condition.getElapsedTimeInMS() / 1000); } else { System.out.printf("%s (elapsed time %ds, remaining time %ds)%n", condition.getDescription(), condition.getElapsedTimeInMS() / 1000, condition.getRemainingTimeInMS() / 1000); } } }) .pollInterval(Duration.ONE_SECOND) .atMost(Duration.TEN_SECONDS) .until(new CountDown(5), is(equalTo(0))); }
.pollInterval(1, SECONDS) .atMost(timeout, timeoutUnit) .conditionEvaluationListener(condition -> awaitingListener.accept( new TimeInfo(condition.getElapsedTimeInMS(), condition.getRemainingTimeInMS()), (BundleDiagInfosImpl) condition.getValue()))