protected void addFormatters(MultipleTestsRunner runner) {
   runner.addTestSystemListener(mainFormatter);
   if (!request.hasInput("nohistory")) {
     runner.addTestSystemListener(getSuiteHistoryFormatter());
   }
   runner.addTestSystemListener(newTestInProgressFormatter());
   if (context.testSystemListener != null) {
     runner.addTestSystemListener(context.testSystemListener);
   }
 }
  protected MultipleTestsRunner newMultipleTestsRunner(List<WikiPage> pages) {
    // Add test url inputs to context's variableSource.
    final PagesByTestSystem pagesByTestSystem = new PagesByTestSystem(pages, root);

    MultipleTestsRunner runner =
        new MultipleTestsRunner(pagesByTestSystem, context.testSystemFactory);
    runner.setRunInProcess(debug);
    runner.setEnableRemoteDebug(remoteDebug);
    runner.addExecutionLogListener(log);
    addFormatters(runner);

    return runner;
  }
 protected void performExecution() throws IOException, InterruptedException {
   MultipleTestsRunner runner = newMultipleTestsRunner(getPagesToRun());
   runningTestingTracker.addStartedProcess(testRunId, runner);
   if (isInteractive()) {
     ((InteractiveFormatter) mainFormatter).setTrackingId(testRunId);
   }
   try {
     runner.executeTestPages();
   } finally {
     runningTestingTracker.removeEndedProcess(testRunId);
     log.publish(context.pageFactory);
   }
 }