public void swapOut() {
    if (fTestRoot == null) return;
    if (isRunning() || isStarting() || isKeptAlive()) return;

    Object[] listeners = fSessionListeners.getListeners();
    for (int i = 0; i < listeners.length; ++i) {
      ITestSessionListener registered = (ITestSessionListener) listeners[i];
      if (!registered.acceptsSwapToDisk()) return;
    }

    try {
      File swapFile = getSwapFile();

      DLTKTestingModel.exportTestRunSession(this, swapFile);
      fTestResult = fTestRoot.getTestResult(true);
      fTestRoot = null;
      fTestRunnerClient = null;
      fIdToTest = new HashMap<String, TestElement>();
      fCategoryMap = new HashMap<String, TestCategoryElement>();
      fIncompleteTestSuites = null;
      fUnrootedSuite = null;

    } catch (IllegalStateException e) {
      DLTKTestingPlugin.log(e);
    } catch (CoreException e) {
      DLTKTestingPlugin.log(e);
    }
  }
 /* (non-Javadoc)
  * @see org.eclipse.jdt.junit.model.ITestElement#getTestResult(boolean)
  */
 public Result getTestResult(boolean includeChildren) {
   if (fTestRoot != null) {
     return fTestRoot.getTestResult(true);
   } else {
     return fTestResult;
   }
 }