#include "TimeConstraint.h"
#include "TestResults.h"
#include "MemoryOutStream.h"
#include "CurrentTest.h"

namespace UnitTest {


   TimeConstraint::TimeConstraint(int ms, TestDetails const& details, int lineNumber)
      : m_details(details, lineNumber)
      , m_maxMs(ms)
   {
      m_timer.Start();
   }

   TimeConstraint::~TimeConstraint()
   {
      double const totalTimeInMs = m_timer.GetTimeInMs();
      if (totalTimeInMs > m_maxMs)
      {
         MemoryOutStream stream;
         stream << "Time constraint failed. Expected to run test under " << m_maxMs <<
            "ms but took " << totalTimeInMs << "ms.";

         CurrentTest::Results()->OnTestFailure(m_details, stream.GetText());
      }
   }

}
