#include "ThrowingTestReporter.h"
 
#include "RequiredCheckException.h"
 
 
 
#ifdef UNITTEST_NO_EXCEPTIONS
 
#include "ReportAssertImpl.h"
 
#endif 
 
 
 
namespace UnitTest {
 
 
 
   ThrowingTestReporter::ThrowingTestReporter(TestReporter* decoratedReporter)
 
      : m_decoratedReporter(decoratedReporter)
 
   {}
 
 
 
   //virtual
 
   ThrowingTestReporter::~ThrowingTestReporter()
 
   {}
 
 
 
   //virtual
 
   void ThrowingTestReporter::ReportTestStart(TestDetails const& test)
 
   {
 
      if(m_decoratedReporter)
 
      {
 
         m_decoratedReporter->ReportTestStart(test);
 
      }
 
   }
 
 
 
   //virtual
 
   void ThrowingTestReporter::ReportFailure(TestDetails const& test, char const* failure)
 
   {
 
      if(m_decoratedReporter)
 
      {
 
         m_decoratedReporter->ReportFailure(test, failure);
 
      }
 
      
 
      #ifndef UNITTEST_NO_EXCEPTIONS
 
         throw RequiredCheckException();
 
      #else
 
         static const int stopTest = 1;
 
         UNITTEST_LONGJMP(*UnitTest::Detail::GetAssertJmpBuf(), stopTest);
 
      #endif
 
   }
 
 
 
   //virtual
 
   void ThrowingTestReporter::ReportTestFinish(TestDetails const& test, float secondsElapsed)
 
   {
 
      if(m_decoratedReporter)
 
      {
 
         m_decoratedReporter->ReportTestFinish(test, secondsElapsed);
 
      }
 
   }
 
 
 
   //virtual
 
   void ThrowingTestReporter::ReportSummary(int totalTestCount, int failedTestCount, int failureCount, float secondsElapsed)
 
   {
 
      if(m_decoratedReporter)
 
      {
 
         m_decoratedReporter->ReportSummary(totalTestCount, failedTestCount, failureCount, secondsElapsed);
 
      }
 
   }
 
 
 
}