Skip to content
This repository was archived by the owner on Mar 25, 2025. It is now read-only.

Commit 947df41

Browse files
authored
Merge pull request #7 from slu-it/wait-until-fix
Wait until operations are now guaranteed to be executed at least once
2 parents 4d2b2e8 + 77def3a commit 947df41

File tree

2 files changed

+20
-11
lines changed

2 files changed

+20
-11
lines changed

webtester-core/src/main/java/info/novatec/testit/webtester/waiting/WaitOperations.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,15 +128,15 @@ public static void waitUntil(long timeout, TimeUnit unit, long interval, Supplie
128128
boolean conditionMet = false;
129129
RuntimeException lastException = null;
130130

131-
while (!conditionMet && timeSince(start) < effectiveTimeout) {
131+
do {
132132
try {
133133
conditionMet = condition.get();
134134
log.trace("condition '{}' met: {}", condition, conditionMet);
135135
wait(interval, TimeUnit.MILLISECONDS);
136136
} catch (RuntimeException e) {
137137
lastException = e;
138138
}
139-
}
139+
} while (!conditionMet && timeSince(start) < effectiveTimeout);
140140

141141
if (!conditionMet) {
142142
log.debug("condition not met: {}", condition);
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package info.novatec.testit.webtester.waiting;
22

33
import static org.mockito.Mockito.atMost;
4+
import static org.mockito.Mockito.doReturn;
45
import static org.mockito.Mockito.times;
56
import static org.mockito.Mockito.verify;
67
import static org.mockito.Mockito.when;
@@ -17,38 +18,46 @@
1718

1819

1920
@RunWith(MockitoJUnitRunner.class)
20-
public class WaitsTest {
21+
public class WaitOperationsTest {
2122

2223
@Mock
2324
Supplier<Boolean> supplier;
2425

2526
@Test
26-
public void testGenericWaitUntil_GoodCase() {
27-
when(supplier.get()).thenReturn(false, false, true);
28-
WaitOperations.waitUntil(100, TimeUnit.MILLISECONDS, 20, supplier);
29-
verify(supplier, times(3)).get();
27+
public void conditionIsCheckedAtLeastOnceEvenWithoutTimeout() {
28+
doReturn(true).when(supplier).get();
29+
WaitOperations.waitUntil(0, TimeUnit.MILLISECONDS, 100, supplier);
30+
verify(supplier, times(1)).get();
3031
}
3132

3233
@Test(expected = TimeoutException.class)
33-
public void testGenericWaitUntil_BadCase() {
34+
public void conditionIsCheckedAtMostTimeoutDividedByIntervalTimes() {
35+
doReturn(false).when(supplier).get();
3436
try {
35-
when(supplier.get()).thenReturn(false);
3637
WaitOperations.waitUntil(50, TimeUnit.MILLISECONDS, 25, supplier);
3738
} finally {
3839
verify(supplier, atMost(2)).get();
3940
}
4041
}
4142

4243
@Test
43-
public void testGenericWaitUntil_OriginalExceptionAsCauseOfTimeout() {
44+
public void conditionIsCheckedUntilItMatches() {
45+
when(supplier.get()).thenReturn(false, false, true);
46+
WaitOperations.waitUntil(100, TimeUnit.MILLISECONDS, 5, supplier);
47+
verify(supplier, times(3)).get();
48+
}
49+
50+
@Test
51+
public void timeoutExceptionHasOriginalExceptionAsItsCause() {
4452
Throwable expected = new IllegalStateException();
4553
try {
4654
when(supplier.get()).thenThrow(expected);
47-
WaitOperations.waitUntil(50, TimeUnit.MILLISECONDS, 25, supplier);
55+
WaitOperations.waitUntil(0, TimeUnit.MILLISECONDS, 0, supplier);
4856
Assert.fail("exception not reached");
4957
} catch (TimeoutException e) {
5058
Assertions.assertThat(e.getCause()).isSameAs(expected);
5159
}
5260
}
5361

62+
5463
}

0 commit comments

Comments
 (0)