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;
+				}
 			}
 		}
 	}