Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
googletest
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chen Yisong
googletest
Commits
f626deda
Commit
f626deda
authored
Aug 06, 2019
by
Ihor Dutchak
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added special catch for std::exception in GTEST_TEST_NO_THROW_
parent
11be5f53
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
44 additions
and
3 deletions
+44
-3
gtest-internal.h
googletest/include/gtest/internal/gtest-internal.h
+31
-3
gtest_unittest.cc
googletest/test/gtest_unittest.cc
+13
-0
No files found.
googletest/include/gtest/internal/gtest-internal.h
View file @
f626deda
...
@@ -825,6 +825,16 @@ struct GTEST_API_ ConstCharPtr {
...
@@ -825,6 +825,16 @@ struct GTEST_API_ ConstCharPtr {
const
char
*
value
;
const
char
*
value
;
};
};
// Helper for declaring std::string within 'if' statement
// in pre C++17 build environment.
struct
GTEST_API_
TrueWithString
{
TrueWithString
()
=
default
;
explicit
TrueWithString
(
const
char
*
str
)
:
value
(
str
)
{}
explicit
TrueWithString
(
const
std
::
string
&
str
)
:
value
(
str
)
{}
explicit
operator
bool
()
const
{
return
true
;
}
std
::
string
value
;
};
// A simple Linear Congruential Generator for generating random
// A simple Linear Congruential Generator for generating random
// numbers with a uniform distribution. Unlike rand() and srand(), it
// numbers with a uniform distribution. Unlike rand() and srand(), it
// doesn't use global state (and therefore can't interfere with user
// doesn't use global state (and therefore can't interfere with user
...
@@ -1335,19 +1345,37 @@ constexpr bool InstantiateTypedTestCase_P_IsDeprecated() { return true; }
...
@@ -1335,19 +1345,37 @@ constexpr bool InstantiateTypedTestCase_P_IsDeprecated() { return true; }
GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \
GTEST_CONCAT_TOKEN_(gtest_label_testthrow_, __LINE__): \
fail(gtest_msg.value)
fail(gtest_msg.value)
#if GTEST_HAS_EXCEPTIONS
#define GTEST_TEST_NO_THROW_CATCH_STD_EXCEPTION_() \
catch (std::exception const& e) { \
gtest_msg.value = "it throws std::exception-derived exception with description: \""; \
gtest_msg.value += e.what(); \
gtest_msg.value += "\"."; \
goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \
}
#else // GTEST_HAS_EXCEPTIONS
#define GTEST_TEST_NO_THROW_CATCH_STD_EXCEPTION_()
#endif // GTEST_HAS_EXCEPTIONS
#define GTEST_TEST_NO_THROW_(statement, fail) \
#define GTEST_TEST_NO_THROW_(statement, fail) \
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
if (::testing::internal::
AlwaysTrue()
) { \
if (::testing::internal::
TrueWithString gtest_msg{}
) { \
try { \
try { \
GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
} \
} \
GTEST_TEST_NO_THROW_CATCH_STD_EXCEPTION_() \
catch (...) { \
catch (...) { \
gtest_msg.value = "it throws."; \
goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \
goto GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__); \
} \
} \
} else \
} else \
GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \
GTEST_CONCAT_TOKEN_(gtest_label_testnothrow_, __LINE__): \
fail("Expected: " #statement " doesn't throw an exception.\n" \
fail(
(
"Expected: " #statement " doesn't throw an exception.\n" \
" Actual: it throws."
)
" Actual: " + gtest_msg.value).c_str()
)
#define GTEST_TEST_ANY_THROW_(statement, fail) \
#define GTEST_TEST_ANY_THROW_(statement, fail) \
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
...
...
googletest/test/gtest_unittest.cc
View file @
f626deda
...
@@ -3351,6 +3351,9 @@ TEST_F(SingleEvaluationTest, OtherCases) {
...
@@ -3351,6 +3351,9 @@ TEST_F(SingleEvaluationTest, OtherCases) {
void
ThrowAnInteger
()
{
void
ThrowAnInteger
()
{
throw
1
;
throw
1
;
}
}
void
ThrowRuntimeError
(
const
char
*
what
)
{
throw
std
::
runtime_error
(
what
);
}
// Tests that assertion arguments are evaluated exactly once.
// Tests that assertion arguments are evaluated exactly once.
TEST_F
(
SingleEvaluationTest
,
ExceptionTests
)
{
TEST_F
(
SingleEvaluationTest
,
ExceptionTests
)
{
...
@@ -3830,6 +3833,11 @@ TEST(AssertionTest, ASSERT_NO_THROW) {
...
@@ -3830,6 +3833,11 @@ TEST(AssertionTest, ASSERT_NO_THROW) {
EXPECT_FATAL_FAILURE
(
ASSERT_NO_THROW
(
ThrowAnInteger
()),
EXPECT_FATAL_FAILURE
(
ASSERT_NO_THROW
(
ThrowAnInteger
()),
"Expected: ThrowAnInteger() doesn't throw an exception."
"Expected: ThrowAnInteger() doesn't throw an exception."
"
\n
Actual: it throws."
);
"
\n
Actual: it throws."
);
EXPECT_FATAL_FAILURE
(
ASSERT_NO_THROW
(
ThrowRuntimeError
(
"A description"
)),
"Expected: ThrowRuntimeError(
\"
A description
\"
) "
"doesn't throw an exception.
\n
"
"Actual: it throws std::exception-derived exception "
"with description:
\"
A description
\"
."
);
}
}
// Tests ASSERT_ANY_THROW.
// Tests ASSERT_ANY_THROW.
...
@@ -4567,6 +4575,11 @@ TEST(ExpectTest, EXPECT_NO_THROW) {
...
@@ -4567,6 +4575,11 @@ TEST(ExpectTest, EXPECT_NO_THROW) {
EXPECT_NONFATAL_FAILURE
(
EXPECT_NO_THROW
(
ThrowAnInteger
()),
EXPECT_NONFATAL_FAILURE
(
EXPECT_NO_THROW
(
ThrowAnInteger
()),
"Expected: ThrowAnInteger() doesn't throw an "
"Expected: ThrowAnInteger() doesn't throw an "
"exception.
\n
Actual: it throws."
);
"exception.
\n
Actual: it throws."
);
EXPECT_NONFATAL_FAILURE
(
EXPECT_NO_THROW
(
ThrowRuntimeError
(
"A description"
)),
"Expected: ThrowRuntimeError(
\"
A description
\"
) "
"doesn't throw an exception.
\n
"
"Actual: it throws std::exception-derived exception "
"with description:
\"
A description
\"
."
);
}
}
// Tests EXPECT_ANY_THROW.
// Tests EXPECT_ANY_THROW.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment