public void afterTest(TestDescriptor testDescriptor, TestResult result) {
   if (!testDescriptor.isComposite()) {
     String className = testDescriptor.getClassName();
     TestMethodResult methodResult = new TestMethodResult(testDescriptor.getName(), result);
     TestClassResult classResult = results.get(className);
     if (classResult == null) {
       classResult = new TestClassResult(className, result.getStartTime());
       results.put(className, classResult);
     }
     classResult.add(methodResult);
   }
 }
 public void onOutput(TestDescriptor testDescriptor, TestOutputEvent outputEvent) {
   String className = testDescriptor.getClassName();
   if (className == null) {
     // this means that we receive an output before even starting any class (or too late).
     // we don't have a place for such output in any of the reports so skipping.
     return;
   }
   cachingFileWriter.write(
       outputsFile(className, outputEvent.getDestination()), outputEvent.getMessage());
 }
  public TestResult runTest(TestDescriptor test) {
    if (!test.getContent().contains("<table")) {
      return new SingleTestResult(new Counts(), test.getName(), " contains no tables");
    }
    try {
      Parse tables = new Parse(test.getContent());
      FitLibraryServer fls = new FitLibraryServer();
      SimpleCounter pdl = new SimpleCounter();
      fls.fixtureListener = pdl;
      fls.doTables(tables);

      StringWriter sw = new StringWriter();
      PrintWriter pw = new PrintWriter(sw);
      tables.print(pw);
      pw.flush();

      return new SingleTestResult(pdl.getCounts(), test.getName(), sw.getBuffer().toString());
    } catch (Exception e) {
      Counts c = new Counts();
      c.exceptions = 1;
      return new SingleTestResult(c, test.getName(), e.toString());
    }
  }
 public void afterSuite(TestDescriptor suite, TestResult result) {
   if (suite.getParent() == null) {
     cachingFileWriter.closeAll();
     writeResults();
   }
 }