#include "UnitTest++/UnitTestPP.h" #include "UnitTest++/TimeHelpers.h" #include "RecordingReporter.h" #include "ScopedCurrentTest.h" namespace { TEST(TimeConstraintMacroQualifiesNamespace) { // If this compiles without a "using namespace UnitTest;", all is well. UNITTEST_TIME_CONSTRAINT(1); } TEST(TimeConstraintMacroUsesCorrectInfo) { int testLine = 0; RecordingReporter reporter; { UnitTest::TestResults testResults(&reporter); ScopedCurrentTest scopedResults(testResults); UNITTEST_TIME_CONSTRAINT(10); testLine = __LINE__; UnitTest::TimeHelpers::SleepMs(20); } using namespace std; CHECK_EQUAL(1, reporter.testFailedCount); CHECK(strstr(reporter.lastFailedFile, __FILE__)); CHECK_EQUAL(testLine, reporter.lastFailedLine); CHECK(strstr(reporter.lastFailedTest, "TimeConstraintMacroUsesCorrectInfo")); } TEST(TimeConstraintMacroComparesAgainstPreciseActual) { int testLine = 0; RecordingReporter reporter; { UnitTest::TestResults testResults(&reporter); ScopedCurrentTest scopedResults(testResults); UNITTEST_TIME_CONSTRAINT(1); testLine = __LINE__; // start a new timer and run until we're as little over the 1 msec // threshold as we can achieve; this should guarantee that the "test" // runs in some very small amount of time > 1 msec UnitTest::Timer myTimer; myTimer.Start(); while (myTimer.GetTimeInMs() < 1.001) UnitTest::TimeHelpers::SleepMs(0); } using namespace std; CHECK_EQUAL(1, reporter.testFailedCount); CHECK(strstr(reporter.lastFailedFile, __FILE__)); CHECK_EQUAL(testLine, reporter.lastFailedLine); CHECK(strstr(reporter.lastFailedTest, "TimeConstraintMacroComparesAgainstPreciseActual")); } struct EmptyFixture {}; TEST_FIXTURE(EmptyFixture, TimeConstraintMacroWorksInFixtures) { int testLine = 0; RecordingReporter reporter; { UnitTest::TestResults testResults(&reporter); ScopedCurrentTest scopedResults(testResults); UNITTEST_TIME_CONSTRAINT(10); testLine = __LINE__; UnitTest::TimeHelpers::SleepMs(20); } using namespace std; CHECK_EQUAL(1, reporter.testFailedCount); CHECK(strstr(reporter.lastFailedFile, __FILE__)); CHECK_EQUAL(testLine, reporter.lastFailedLine); CHECK(strstr(reporter.lastFailedTest, "TimeConstraintMacroWorksInFixtures")); } }