1 #include "UnitTest++/UnitTestPP.h" 2 #include "UnitTest++/TimeHelpers.h" 3 4 #include "RecordingReporter.h" 5 #include "ScopedCurrentTest.h" 6 7 namespace { 8 9 TEST(TimeConstraintMacroQualifiesNamespace) 10 { 11 // If this compiles without a "using namespace UnitTest;", all is well. 12 UNITTEST_TIME_CONSTRAINT(1); 13 } 14 15 TEST(TimeConstraintMacroUsesCorrectInfo) 16 { 17 int testLine = 0; 18 RecordingReporter reporter; 19 20 { 21 UnitTest::TestResults testResults(&reporter); 22 ScopedCurrentTest scopedResults(testResults); 23 24 UNITTEST_TIME_CONSTRAINT(10); testLine = __LINE__; 25 UnitTest::TimeHelpers::SleepMs(20); 26 } 27 28 using namespace std; 29 30 CHECK_EQUAL(1, reporter.testFailedCount); 31 CHECK(strstr(reporter.lastFailedFile, __FILE__)); 32 CHECK_EQUAL(testLine, reporter.lastFailedLine); 33 CHECK(strstr(reporter.lastFailedTest, "TimeConstraintMacroUsesCorrectInfo")); 34 } 35 36 TEST(TimeConstraintMacroComparesAgainstPreciseActual) 37 { 38 int testLine = 0; 39 RecordingReporter reporter; 40 41 { 42 UnitTest::TestResults testResults(&reporter); 43 ScopedCurrentTest scopedResults(testResults); 44 45 UNITTEST_TIME_CONSTRAINT(1); testLine = __LINE__; 46 47 // start a new timer and run until we're as little over the 1 msec 48 // threshold as we can achieve; this should guarantee that the "test" 49 // runs in some very small amount of time > 1 msec 50 UnitTest::Timer myTimer; 51 myTimer.Start(); 52 53 while (myTimer.GetTimeInMs() < 1.001) 54 UnitTest::TimeHelpers::SleepMs(0); 55 } 56 57 using namespace std; 58 59 CHECK_EQUAL(1, reporter.testFailedCount); 60 CHECK(strstr(reporter.lastFailedFile, __FILE__)); 61 CHECK_EQUAL(testLine, reporter.lastFailedLine); 62 CHECK(strstr(reporter.lastFailedTest, "TimeConstraintMacroComparesAgainstPreciseActual")); 63 } 64 65 struct EmptyFixture {}; 66 67 TEST_FIXTURE(EmptyFixture, TimeConstraintMacroWorksInFixtures) 68 { 69 int testLine = 0; 70 RecordingReporter reporter; 71 72 { 73 UnitTest::TestResults testResults(&reporter); 74 ScopedCurrentTest scopedResults(testResults); 75 76 UNITTEST_TIME_CONSTRAINT(10); testLine = __LINE__; 77 UnitTest::TimeHelpers::SleepMs(20); 78 } 79 80 using namespace std; 81 82 CHECK_EQUAL(1, reporter.testFailedCount); 83 CHECK(strstr(reporter.lastFailedFile, __FILE__)); 84 CHECK_EQUAL(testLine, reporter.lastFailedLine); 85 CHECK(strstr(reporter.lastFailedTest, "TimeConstraintMacroWorksInFixtures")); 86 } 87 88 } 89