@Override
 public void assertIsSatisfied(ResultSummary rs, FailFastException ffe) {
   if (rs.getFailureCount() + rs.getExceptionCount() == 0) {
     throw new ConcordionAssertionError(
         "Specification is expected to fail but has neither failures nor exceptions.", rs);
   }
 }
 @Override
 public ResultSummary convertForCache(ResultSummary rs) {
   try {
     assertIsSatisfied(rs, null);
     return new SingleResultSummary(Result.IGNORED, rs.getSpecificationDescription());
   } catch (ConcordionAssertionError cce) {
     return new SingleResultSummary(Result.FAILURE, rs.getSpecificationDescription());
   }
 }
 private void printResultSummary(
     Object fixture, ResultSummary resultSummary, String additionalInformation) {
   synchronized (System.out) {
     if (additionalInformation != null) {
       System.out.print(additionalInformation);
     }
     resultSummary.print(System.out, fixture);
     resultSummary.assertIsSatisfied(fixture);
   }
 }
 @Ignore
 @Test
 public void run() throws Exception {
   ResultSummary resultSummary =
       new ConcordionBuilder()
           .build()
           .process(
               new Resource(
                   "/specification/notification/subscription/forum/ForumSubscriptionScenariosNewEntry.html"),
               this);
   resultSummary.print(System.out, this);
   resultSummary.assertIsSatisfied(this);
 }
 @Test
 public void runScenario() throws Throwable {
   BasicConfigurator.configure();
   LogManager.getRootLogger().setLevel(Level.INFO);
   try {
     final Concordion concordion = createConcordion();
     final ResultSummary resultSummary = concordion.process(this);
     resultSummary.print(System.out, this);
     resultSummary.assertIsSatisfied(this);
   } finally {
     copyCustomCssIfDefined();
   }
 }
 @Override
 public void assertIsSatisfied(ResultSummary rs, FailFastException ffe) {
   if (ffe != null) {
     throw ffe;
   }
   if (rs.getFailureCount() > 0) {
     throw new ConcordionAssertionError(
         "Specification has failure(s). See output HTML for details.", rs);
   }
   if (rs.getExceptionCount() > 0) {
     throw new ConcordionAssertionError(
         "Specification has exception(s). See output HTML for details.", rs);
   }
 }
 @Override
 public void assertIsSatisfied(ResultSummary rs, FailFastException ffe) {
   List<String> list = new ArrayList<String>();
   addToList(list, rs.getSuccessCount(), "a success", "some successes");
   addToList(list, rs.getFailureCount(), "a failure", "some failures");
   addToList(list, rs.getExceptionCount(), "an exception", "some exceptions");
   if (list.size() > 0) {
     String s = list.get(0);
     if (list.size() > 1) {
       for (int i = 1; i < (list.size() - 1); i++) {
         s += ", " + list.get(i);
       }
       s += ", and " + list.get(list.size() - 1);
     }
     throw new ConcordionAssertionError(
         "Specification is supposed to be unimplemented, but is reporting " + s + ".", rs);
   }
 }
  public ResultSummary run(Object fixture) throws IOException {

    ConcordionRunOutput runOutput = cachedRunResults.startRun(fixture.getClass());
    ResultSummary actualResultSummary =
        runOutput == null ? null : runOutput.getActualResultSummary();

    ResultSummary postProcessedResultSummary =
        runOutput == null ? null : runOutput.getPostProcessedResultSummary();

    String additionalInformation = null;
    if (runOutput == null) {
      ConcordionBuilder concordionBuilder = new ConcordionBuilder().withFixture(fixture);
      fixtureExtensionLoader.addExtensions(fixture, concordionBuilder);

      try {
        actualResultSummary = concordionBuilder.build().process(fixture);
        // we want to make sure all the annotations are considered when storing the result summary

        postProcessedResultSummary =
            cachedRunResults.convertForCache(actualResultSummary, fixture.getClass());

        cachedRunResults.finishRun(
            fixture.getClass(), actualResultSummary, postProcessedResultSummary);

      } catch (RuntimeException e) {
        // the run failed miserably. Tell the cache that the run failed
        cachedRunResults.failRun(fixture.getClass());
        throw e;
      }

    } else {
      additionalInformation = "From cache: ";
    }

    printResultSummary(fixture, actualResultSummary, additionalInformation);

    return actualResultSummary.getMeaningfulResultSummary(fixture);
  }
 public long getExceptionCount() {
   return resultSummary.getExceptionCount();
 }
 public long getFailureCount() {
   return resultSummary.getFailureCount();
 }
 public long getSuccessCount() {
   return resultSummary.getSuccessCount();
 }