Implement CHECK_THROW_DESCRIBED macro

This commit is contained in:
Erik Elfström 2015-08-20 19:16:19 +02:00
parent e29a066ae3
commit 622963563f
3 changed files with 93 additions and 0 deletions

View file

@ -225,6 +225,10 @@
UnitTest::CurrentTest::Results()->OnTestFailure(UnitTest::TestDetails(*UnitTest::CurrentTest::Details(), __LINE__), \
"Expected exception: \"" #ExpectedExceptionType "\" not thrown"))
#define CHECK_THROW_DESCRIBED(expression, ExpectedExceptionType, description) \
UNITTEST_CHECK_THROW(expression, ExpectedExceptionType, \
UNITTEST_CHECK_WITH_DESCRIPTION(false, description))
#define UNITTEST_CHECK_THROW(expression, ExpectedExceptionType, failure_action) \
UNITTEST_MULTILINE_MACRO_BEGIN \
bool caught_ = false; \

View file

@ -1128,6 +1128,89 @@ TEST(CheckThrowDoesNotHaveSideEffectsWhenFailing)
CHECK_EQUAL(1, g_sideEffect);
}
TEST(CheckThrowDescribedSucceedsWhenCorrectTypeTrown)
{
bool failure = true;
{
RecordingReporter reporter;
UnitTest::TestResults testResults(&reporter);
ScopedCurrentTest scopedResults(testResults);
CHECK_THROW_DESCRIBED(ThrowInt(), int, "description");
failure = (testResults.GetFailureCount() > 0);
}
CHECK(!failure);
}
TEST(CheckThrowDescribedFailsWhenNothingThrown)
{
bool failure = false;
{
RecordingReporter reporter;
UnitTest::TestResults testResults(&reporter);
ScopedCurrentTest scopedResults(testResults);
CHECK_THROW_DESCRIBED(ThrowNothing(), int, "description");
failure = (testResults.GetFailureCount() > 0);
}
CHECK(failure);
}
TEST(CheckThrowDescribedFailsWhenWrongTypeThrown)
{
bool failure = false;
{
RecordingReporter reporter;
UnitTest::TestResults testResults(&reporter);
ScopedCurrentTest scopedResults(testResults);
CHECK_THROW_DESCRIBED(ThrowInt(), float, "description");
failure = (testResults.GetFailureCount() > 0);
}
CHECK(failure);
}
TEST(CheckThrowDescribedFailureContainsCorrectDetails)
{
int line = 0;
RecordingReporter reporter;
{
UnitTest::TestResults testResults(&reporter);
UnitTest::TestDetails const testDetails("testName", "suiteName", "filename", -1);
ScopedCurrentTest scopedResults(testResults, &testDetails);
CHECK_THROW_DESCRIBED(ThrowInt(), float, "description " << hex << 0x1234); line = __LINE__;
}
CHECK_EQUAL("testName", reporter.lastFailedTest);
CHECK_EQUAL("suiteName", reporter.lastFailedSuite);
CHECK_EQUAL("filename", reporter.lastFailedFile);
CHECK_EQUAL("description 1234", reporter.lastFailedMessage);
CHECK_EQUAL(line, reporter.lastFailedLine);
}
TEST(CheckThrowDescribedDoesNotHaveSideEffectsWhenPassing)
{
g_sideEffect = 0;
{
UnitTest::TestResults testResults;
ScopedCurrentTest scopedResults(testResults);
CHECK_THROW_DESCRIBED(ThrowIntWithSideEffect(), int, "description");
}
CHECK_EQUAL(1, g_sideEffect);
}
TEST(CheckThrowDescribedDoesNotHaveSideEffectsWhenFailing)
{
g_sideEffect = 0;
{
UnitTest::TestResults testResults;
ScopedCurrentTest scopedResults(testResults);
CHECK_THROW_DESCRIBED(ThrowIntWithSideEffect(), float, "description");
}
CHECK_EQUAL(1, g_sideEffect);
}
void Assert()
{
UnitTest::ReportAssert("description", "filename", __LINE__);

View file

@ -109,6 +109,12 @@ TEST(CheckThrowMacroSucceedsOnCorrectException)
CHECK_THROW(throw TestException(), TestException);
}
TEST(CanUseCheckThrowDescribedToGetCustomFailureMessage)
{
struct TestException {};
CHECK_THROW_DESCRIBED(throw TestException(), TestException, "This should really throw a TestException");
}
TEST(CheckAssertSucceeds)
{
CHECK_ASSERT(UnitTest::ReportAssert("desc", "file", 0));