| #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")); |
| } |
| |
| } |