Better disposal in tests.

This commit is contained in:
Dmitry Trofimov
2014-09-16 01:02:58 +04:00
parent df12f7194b
commit d77471180b
2 changed files with 21 additions and 6 deletions
@@ -1,9 +1,11 @@
package com.jetbrains.env.python.debug;
import com.google.common.collect.Sets;
import com.intellij.execution.ExecutionResult;
import com.intellij.openapi.application.Result;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.JarFileSystem;
@@ -37,6 +39,7 @@ public abstract class PyBaseDebuggerTask extends PyExecutionFixtureTestTask {
protected Semaphore myTerminateSemaphore;
protected boolean shouldPrintOutput = false;
protected boolean myProcessCanTerminate;
protected ExecutionResult myExecutionResult;
protected void waitForPause() throws InterruptedException, InvocationTargetException {
Assert.assertTrue("Debugger didn't stopped within timeout\nOutput:" + output(), waitFor(myPausedSemaphore));
@@ -246,9 +249,8 @@ public abstract class PyBaseDebuggerTask extends PyExecutionFixtureTestTask {
UIUtil.invokeAndWaitIfNeeded(new Runnable() {
public void run() {
try {
if (mySession != null) {
finishSession();
}
finishSession();
PyBaseDebuggerTask.super.tearDown();
}
catch (Exception e) {
@@ -271,10 +273,22 @@ public abstract class PyBaseDebuggerTask extends PyExecutionFixtureTestTask {
waitFor(mySession.getDebugProcess().getProcessHandler()); //wait for process termination after session.stop() which is async
XDebuggerTestUtil.disposeDebugSession(mySession);
mySession = null;
myDebugProcess = null;
myPausedSemaphore = null;
}
if (myExecutionResult != null) {
UIUtil.invokeLaterIfNeeded(new Runnable() {
@Override
public void run() {
Disposer.dispose(myExecutionResult.getExecutionConsole());
}
});
myExecutionResult = null;
}
}
protected abstract void disposeDebugProcess() throws InterruptedException;
@@ -12,6 +12,7 @@ import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.openapi.application.Result;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Key;
import com.intellij.xdebugger.*;
import com.jetbrains.python.debugger.PyDebugProcess;
@@ -111,7 +112,7 @@ public class PyDebuggerTask extends PyBaseDebuggerTask {
new WriteAction<ExecutionResult>() {
@Override
protected void run(@NotNull Result<ExecutionResult> result) throws Throwable {
final ExecutionResult res =
myExecutionResult =
pyState.execute(executor, PyDebugRunner.createCommandLinePatchers(myFixture.getProject(), pyState, profile, serverLocalPort));
mySession = XDebuggerManager.getInstance(getProject()).
@@ -119,7 +120,7 @@ public class PyDebuggerTask extends PyBaseDebuggerTask {
@NotNull
public XDebugProcess start(@NotNull final XDebugSession session) {
myDebugProcess =
new PyDebugProcess(session, serverSocket, res.getExecutionConsole(), res.getProcessHandler(), isMultiprocessDebug());
new PyDebugProcess(session, serverSocket, myExecutionResult.getExecutionConsole(), myExecutionResult.getProcessHandler(), isMultiprocessDebug());
myDebugProcess.getProcessHandler().addProcessListener(new ProcessAdapter() {
@@ -142,7 +143,7 @@ public class PyDebuggerTask extends PyBaseDebuggerTask {
return myDebugProcess;
}
});
result.setResult(res);
result.setResult(myExecutionResult);
}
}.execute().getResultObject();