diff --git a/java/testFramework/src/com/intellij/debugger/DebuggerTestCase.java b/java/testFramework/src/com/intellij/debugger/DebuggerTestCase.java index 00b6742ad3db..af857da3cc82 100644 --- a/java/testFramework/src/com/intellij/debugger/DebuggerTestCase.java +++ b/java/testFramework/src/com/intellij/debugger/DebuggerTestCase.java @@ -59,10 +59,7 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.util.ThrowableRunnable; import com.intellij.util.ui.UIUtil; -import com.intellij.xdebugger.XDebugProcess; -import com.intellij.xdebugger.XDebugProcessStarter; -import com.intellij.xdebugger.XDebugSession; -import com.intellij.xdebugger.XDebuggerManager; +import com.intellij.xdebugger.*; import com.sun.jdi.Location; import org.jdom.Element; import org.jetbrains.annotations.NotNull; @@ -612,4 +609,26 @@ public abstract class DebuggerTestCase extends ExecutionWithDebuggerToolsTestCas renderer.setEnabled(state); } } + + protected void doWhenXSessionPausedThenResume(ThrowableRunnable runnable) { + XDebugSession session = getDebuggerSession().getXDebugSession(); + assertNotNull(session); + session.addSessionListener(new XDebugSessionListener() { + @Override + public void sessionPaused() { + ApplicationManager.getApplication().executeOnPooledThread(() -> { + try { + runnable.run(); + } + catch (Throwable e) { + addException(e); + } + finally { + //noinspection SSBasedInspection + SwingUtilities.invokeLater(session::resume); + } + }); + } + }); + } }