mirror of
https://github.com/unittest-cpp/unittest-cpp
synced 2026-09-26 16:19:30 +03:00
Implement CHECK_THROW_DESCRIBED macro
This commit is contained in:
parent
e29a066ae3
commit
622963563f
3 changed files with 93 additions and 0 deletions
|
|
@ -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; \
|
||||
|
|
|
|||
|
|
@ -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__);
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue