#include "TestResults.h"
#include "TestReporter.h"

#include "TestDetails.h"

namespace UnitTest {

   TestResults::TestResults(TestReporter* testReporter)
      : m_testReporter(testReporter)
      , m_totalTestCount(0)
      , m_failedTestCount(0)
      , m_failureCount(0)
      , m_currentTestFailed(false)
   {}

   void TestResults::OnTestStart(TestDetails const& test)
   {
      ++m_totalTestCount;
      m_currentTestFailed = false;
      if (m_testReporter)
         m_testReporter->ReportTestStart(test);
   }

   void TestResults::OnTestFailure(TestDetails const& test, char const* failure)
   {
      ++m_failureCount;
      if (!m_currentTestFailed)
      {
         ++m_failedTestCount;
         m_currentTestFailed = true;
      }

      if (m_testReporter)
         m_testReporter->ReportFailure(test, failure);
   }

   void TestResults::OnTestFinish(TestDetails const& test, float secondsElapsed)
   {
      if (m_testReporter)
         m_testReporter->ReportTestFinish(test, secondsElapsed);
   }

   int TestResults::GetTotalTestCount() const
   {
      return m_totalTestCount;
   }

   int TestResults::GetFailedTestCount() const
   {
      return m_failedTestCount;
   }

   int TestResults::GetFailureCount() const
   {
      return m_failureCount;
   }


}
