Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mpd
Project
Project
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
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Иван Мажукин
mpd
Commits
2d96b054
Commit
2d96b054
authored
4 years ago
by
Max Kellermann
Committed by
Max Kellermann
4 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
test/util/TestException: add CheckFindRetrowNested() unit test
parent
ec0c1f0d
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
113 additions
and
0 deletions
+113
-0
TestException.cxx
test/util/TestException.cxx
+113
-0
No files found.
test/util/TestException.cxx
View file @
2d96b054
...
...
@@ -49,3 +49,116 @@ TEST(ExceptionTest, DerivedError)
ASSERT_EQ
(
GetFullMessage
(
std
::
make_exception_ptr
(
DerivedError
(
"Foo"
))),
"Foo"
);
}
template
<
typename
T
>
static
bool
CheckFindRetrowNested
(
std
::
exception_ptr
e
)
noexcept
{
try
{
FindRetrowNested
<
T
>
(
e
);
}
catch
(
const
T
&
)
{
return
true
;
}
return
false
;
}
TEST
(
ExceptionTest
,
FindRetrowNestedDirect
)
{
struct
Foo
{};
struct
Bar
{};
struct
Derived
:
Foo
{};
try
{
throw
Foo
{};
}
catch
(...)
{
EXPECT_TRUE
(
CheckFindRetrowNested
<
Foo
>
(
std
::
current_exception
()));
}
try
{
throw
Bar
{};
}
catch
(...)
{
EXPECT_FALSE
(
CheckFindRetrowNested
<
Foo
>
(
std
::
current_exception
()));
}
try
{
throw
Derived
{};
}
catch
(...)
{
EXPECT_TRUE
(
CheckFindRetrowNested
<
Foo
>
(
std
::
current_exception
()));
}
}
TEST
(
ExceptionTest
,
FindRetrowNestedIndirect
)
{
struct
Foo
{};
struct
Bar
{};
struct
Derived
:
Foo
{};
struct
Outer
{};
try
{
throw
Foo
{};
}
catch
(...)
{
try
{
std
::
throw_with_nested
(
Outer
{});
}
catch
(...)
{
EXPECT_TRUE
(
CheckFindRetrowNested
<
Foo
>
(
std
::
current_exception
()));
}
}
try
{
throw
Bar
{};
}
catch
(...)
{
try
{
std
::
throw_with_nested
(
Outer
{});
}
catch
(...)
{
EXPECT_FALSE
(
CheckFindRetrowNested
<
Foo
>
(
std
::
current_exception
()));
}
}
try
{
throw
Derived
{};
}
catch
(...)
{
try
{
std
::
throw_with_nested
(
Outer
{});
}
catch
(...)
{
EXPECT_TRUE
(
CheckFindRetrowNested
<
Foo
>
(
std
::
current_exception
()));
}
}
}
TEST
(
ExceptionTest
,
FindRetrowNestedIndirectRuntimeError
)
{
struct
Foo
{};
struct
Bar
{};
struct
Derived
:
Foo
{};
try
{
throw
Foo
{};
}
catch
(...)
{
try
{
std
::
throw_with_nested
(
std
::
runtime_error
(
"X"
));
}
catch
(...)
{
EXPECT_TRUE
(
CheckFindRetrowNested
<
Foo
>
(
std
::
current_exception
()));
}
}
try
{
throw
Bar
{};
}
catch
(...)
{
try
{
std
::
throw_with_nested
(
std
::
runtime_error
(
"X"
));
}
catch
(...)
{
EXPECT_FALSE
(
CheckFindRetrowNested
<
Foo
>
(
std
::
current_exception
()));
}
}
try
{
throw
Derived
{};
}
catch
(...)
{
try
{
std
::
throw_with_nested
(
std
::
runtime_error
(
"X"
));
}
catch
(...)
{
EXPECT_TRUE
(
CheckFindRetrowNested
<
Foo
>
(
std
::
current_exception
()));
}
}
}
This diff is collapsed.
Click to expand it.
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