From 92d0a6f7e2dafe49377669884e665026fc1aa376 Mon Sep 17 00:00:00 2001 From: Vladimir Goncharov Date: Tue, 7 Jul 2020 19:09:53 +0300 Subject: [PATCH] Add a test to ensure that the `Throws` matcher only invokes its argument once. --- googlemock/test/gmock-matchers_test.cc | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/googlemock/test/gmock-matchers_test.cc b/googlemock/test/gmock-matchers_test.cc index cd89d81e0..21ade890f 100644 --- a/googlemock/test/gmock-matchers_test.cc +++ b/googlemock/test/gmock-matchers_test.cc @@ -8145,6 +8145,36 @@ TEST(ThrowsTest, DoesNotGenerateDuplicateCatchClauseWarning) { Throws()); } +TEST(ThrowsTest, CallableExecutedExactlyOnce) { + size_t a = 0; + + EXPECT_THAT( + [&a]() { a++; throw 10; }, + Throws()); + EXPECT_EQ(a, 1); + + EXPECT_THAT( + [&a]() { a++; throw std::runtime_error("message"); }, + Throws()); + EXPECT_EQ(a, 2); + + EXPECT_THAT( + [&a]() { a++; throw std::runtime_error("message"); }, + ThrowsMessage(HasSubstr("message"))); + EXPECT_EQ(a, 3); + + EXPECT_THAT( + [&a]() { a++; throw std::runtime_error("message"); }, + ThrowsMessageHasSubstr("message")); + EXPECT_EQ(a, 4); + + EXPECT_THAT( + [&a]() { a++; throw std::runtime_error("message"); }, + Throws( + Property(&std::runtime_error::what, HasSubstr("message")))); + EXPECT_EQ(a, 5); +} + TEST(ThrowsTest, Describe) { Matcher matcher = Throws(); std::stringstream ss;