Bug 560682: [Py4J] Debug tests are unstable

  improve dispatcher job termination

Change-Id: I0461fddaad7677821ef4478c2392339d423e4493
diff --git a/plugins/org.eclipse.ease/src/org/eclipse/ease/debugging/dispatcher/EventDispatchJob.java b/plugins/org.eclipse.ease/src/org/eclipse/ease/debugging/dispatcher/EventDispatchJob.java
index 9d05c4f..c86a934 100644
--- a/plugins/org.eclipse.ease/src/org/eclipse/ease/debugging/dispatcher/EventDispatchJob.java
+++ b/plugins/org.eclipse.ease/src/org/eclipse/ease/debugging/dispatcher/EventDispatchJob.java
@@ -26,6 +26,7 @@
 import org.eclipse.ease.debugging.IScriptRegistry;
 import org.eclipse.ease.debugging.ScriptRegistry;
 import org.eclipse.ease.debugging.events.IDebugEvent;
+import org.eclipse.ease.debugging.events.debugger.EngineTerminatedEvent;
 import org.eclipse.ease.debugging.events.debugger.IDebuggerEvent;
 import org.eclipse.ease.debugging.events.model.IModelRequest;
 import org.eclipse.jface.dialogs.ErrorDialog;
@@ -123,7 +124,7 @@
 			if ((monitor.isCanceled()) || (!platformRunning))
 				terminate();
 
-			if (event != null) {
+			else if (event != null) {
 				try {
 					handleEvent(event);
 				} catch (final Throwable e) {
@@ -149,6 +150,9 @@
 			DebugTracer.debug("Dispatcher", "debugger -> " + event + " -> model");
 			fModel.handleEvent(event);
 
+			if (event instanceof EngineTerminatedEvent)
+				terminate();
+
 		} else if (event instanceof IModelRequest) {
 			DebugTracer.debug("Dispatcher", "debugger <- " + event + " <- model");
 			fDebugger.handleEvent(event);
diff --git a/tests/org.eclipse.ease.testhelper/src/org/eclipse/ease/testhelper/AbstractDebugTest.java b/tests/org.eclipse.ease.testhelper/src/org/eclipse/ease/testhelper/AbstractDebugTest.java
index 91eed32..cfeaa2b 100644
--- a/tests/org.eclipse.ease.testhelper/src/org/eclipse/ease/testhelper/AbstractDebugTest.java
+++ b/tests/org.eclipse.ease.testhelper/src/org/eclipse/ease/testhelper/AbstractDebugTest.java
@@ -502,7 +502,7 @@
 
 		fScriptEngine.executeAsync(getFile(MAIN_SCRIPT));
 		final int suspendedEvents = runUntilTerminated(fScriptEngine, () -> {
-			getDebugTarget().disconnect();
+			elementProvider.getDebugElement().disconnect();
 
 			assertTrue(getDebugTarget().isDisconnected());
 			assertTrue(getProcess().isDisconnected());