Bug 517071 - [tests] random fail in
JavaThreadEventHandlerTests.testComputeFrameIndexDuringEvaluation()

Slightly reduce evaluation wait time to give
JavaThreadEventHandler.waitIfEvaluationRuns() a chance to see evaluation
end before timeout. Also retry the test if it should fail.

Change-Id: Ia5815bdff447da56d7896e6ff34150ad5bd1b01c
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/JavaThreadEventHandlerTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/JavaThreadEventHandlerTests.java
index 5ee4d32..b941ead 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/JavaThreadEventHandlerTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/JavaThreadEventHandlerTests.java
@@ -24,6 +24,7 @@
 import org.eclipse.jdt.debug.eval.IEvaluationListener;
 import org.eclipse.jdt.debug.eval.IEvaluationResult;
 import org.eclipse.jdt.debug.tests.AbstractDebugTest;
+import org.eclipse.jdt.debug.tests.TestAgainException;
 import org.eclipse.jdt.internal.debug.eval.ast.engine.ASTEvaluationEngine;
 import org.eclipse.jdt.internal.debug.ui.threadgroups.JavaDebugTargetProxy;
 import org.eclipse.jdt.internal.debug.ui.threadgroups.JavaThreadEventHandler;
@@ -139,7 +140,7 @@
 			assertNotNull("suspended, but not by breakpoint", hit);
 			assertTrue("breakpoint was not a method breakpoint", hit instanceof IJavaMethodBreakpoint);
 
-			final int sleepTimeMillis = 1000;
+			final int sleepTimeMillis = 750;
 			String snippet = "java.lang.Thread.sleep(" + sleepTimeMillis + "); return true;";
 			TaskOnFrame task = new TaskOnFrame() {
 				@Override
@@ -154,6 +155,9 @@
 					// indexOf method waits for evaluation and computes the right result
 					for (int i = 0; i < expectedFramesCount; i++) {
 						int index = eventHandler.indexOf(frames[i]);
+						if (index == -1) {
+							throw new TestAgainException("Evaluation took too long");
+						}
 						assertEquals(i, index);
 					}
 					Thread.sleep(sleepTimeMillis);