mirror of
https://github.com/fmtlib/fmt.git
synced 2025-01-28 18:32:46 +00:00
Evaluate message argument passed to EXPECT_THROW_MSG once.
This commit is contained in:
parent
368505ebe9
commit
536e61386d
@ -77,12 +77,18 @@ bool IsClosedInternal(int fd) {
|
|||||||
class SingleEvaluationTest : public ::testing::Test {
|
class SingleEvaluationTest : public ::testing::Test {
|
||||||
protected:
|
protected:
|
||||||
SingleEvaluationTest() {
|
SingleEvaluationTest() {
|
||||||
|
p_ = s_;
|
||||||
a_ = 0;
|
a_ = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char* const s_;
|
||||||
|
static const char* p_;
|
||||||
|
|
||||||
static int a_;
|
static int a_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const char* const SingleEvaluationTest::s_ = "01234";
|
||||||
|
const char* SingleEvaluationTest::p_;
|
||||||
int SingleEvaluationTest::a_;
|
int SingleEvaluationTest::a_;
|
||||||
|
|
||||||
void ThrowNothing() {}
|
void ThrowNothing() {}
|
||||||
@ -91,6 +97,14 @@ void ThrowException() {
|
|||||||
throw std::runtime_error("test");
|
throw std::runtime_error("test");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Tests that when EXPECT_THROW_MSG fails, it evaluates its message argument
|
||||||
|
// exactly once.
|
||||||
|
TEST_F(SingleEvaluationTest, FailedASSERT_THROW_MSG) {
|
||||||
|
EXPECT_NONFATAL_FAILURE(
|
||||||
|
EXPECT_THROW_MSG(ThrowException(), std::exception, p_++), "01234");
|
||||||
|
EXPECT_EQ(s_ + 1, p_);
|
||||||
|
}
|
||||||
|
|
||||||
// Tests that assertion arguments are evaluated exactly once.
|
// Tests that assertion arguments are evaluated exactly once.
|
||||||
TEST_F(SingleEvaluationTest, ExceptionTests) {
|
TEST_F(SingleEvaluationTest, ExceptionTests) {
|
||||||
// successful EXPECT_THROW_MSG
|
// successful EXPECT_THROW_MSG
|
||||||
|
@ -44,15 +44,16 @@
|
|||||||
#define FMT_TEST_THROW_(statement, expected_exception, expected_message, fail) \
|
#define FMT_TEST_THROW_(statement, expected_exception, expected_message, fail) \
|
||||||
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
|
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
|
||||||
if (::testing::AssertionResult gtest_ar = ::testing::AssertionSuccess()) { \
|
if (::testing::AssertionResult gtest_ar = ::testing::AssertionSuccess()) { \
|
||||||
|
std::string expected_message_str = expected_message; \
|
||||||
bool gtest_caught_expected = false; \
|
bool gtest_caught_expected = false; \
|
||||||
try { \
|
try { \
|
||||||
GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
|
GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
|
||||||
} \
|
} \
|
||||||
catch (expected_exception const& e) { \
|
catch (expected_exception const& e) { \
|
||||||
if (expected_message != std::string(e.what())) { \
|
if (expected_message_str != e.what()) { \
|
||||||
gtest_ar \
|
gtest_ar \
|
||||||
<< #statement " throws an exception with a different message.\n" \
|
<< #statement " throws an exception with a different message.\n" \
|
||||||
<< "Expected: " << expected_message << "\n" \
|
<< "Expected: " << expected_message_str << "\n" \
|
||||||
<< " Actual: " << e.what(); \
|
<< " Actual: " << e.what(); \
|
||||||
goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \
|
goto GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__); \
|
||||||
} \
|
} \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user