Bug 537800 - wait for UI events even if test is running in non-UI thread
Change-Id: I6247ba51cad74431f0be435be461cb0bcfd225b4
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/TestUtil.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/TestUtil.java
index 9519c4c..41b0d7d 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/TestUtil.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/TestUtil.java
@@ -18,6 +18,7 @@
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
@@ -77,9 +78,22 @@
*/
public static void runEventLoop() {
Display display = Display.getCurrent();
- if (display != null && !display.isDisposed()) {
- while (display.readAndDispatch()) {
- // Keep pumping events until the queue is empty
+ if (display != null) {
+ if (!display.isDisposed()) {
+ while (display.readAndDispatch()) {
+ // Keep pumping events until the queue is empty
+ }
+ }
+ } else {
+ long start = System.currentTimeMillis();
+ AtomicBoolean stop = new AtomicBoolean();
+ Display.getDefault().asyncExec(() -> stop.set(true));
+ while (!stop.get() && System.currentTimeMillis() - start < AbstractDebugTest.DEFAULT_TIMEOUT) {
+ try {
+ Thread.sleep(10);
+ } catch (InterruptedException e) {
+ break;
+ }
}
}
}