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
95b0ea2c
Commit
95b0ea2c
authored
Mar 07, 2020
by
Krystian Kuzniarek
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
specialize UniversalPrinter<> for std::optional
parent
33b44c4b
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
42 additions
and
13 deletions
+42
-13
gtest-printers.h
googletest/include/gtest/gtest-printers.h
+5
-6
gtest-port.h
googletest/include/gtest/internal/gtest-port.h
+32
-0
googletest-printers-test.cc
googletest/test/googletest-printers-test.cc
+5
-7
No files found.
googletest/include/gtest/gtest-printers.h
View file @
95b0ea2c
...
...
@@ -113,7 +113,6 @@
#if GTEST_HAS_ABSL
#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
#endif // GTEST_HAS_ABSL
namespace
testing
{
...
...
@@ -680,14 +679,14 @@ class UniversalPrinter {
GTEST_DISABLE_MSC_WARNINGS_POP_
()
};
#if GTEST_
HAS_ABS
L
#if GTEST_
INTERNAL_HAS_OPTIONA
L
// Printer for absl::optional
// Printer for
std::optional /
absl::optional
template
<
typename
T
>
class
UniversalPrinter
<
::
absl
::
o
ptional
<
T
>>
{
class
UniversalPrinter
<
O
ptional
<
T
>>
{
public
:
static
void
Print
(
const
::
absl
::
o
ptional
<
T
>&
value
,
::
std
::
ostream
*
os
)
{
static
void
Print
(
const
O
ptional
<
T
>&
value
,
::
std
::
ostream
*
os
)
{
*
os
<<
'('
;
if
(
!
value
)
{
*
os
<<
"nullopt"
;
...
...
@@ -698,7 +697,7 @@ class UniversalPrinter<::absl::optional<T>> {
}
};
#endif // GTEST_
HAS_ABS
L
#endif // GTEST_
INTERNAL_HAS_OPTIONA
L
#if GTEST_INTERNAL_HAS_VARIANT
...
...
googletest/include/gtest/internal/gtest-port.h
View file @
95b0ea2c
...
...
@@ -199,6 +199,8 @@
// suppressed (constant conditional).
// GTEST_INTENTIONAL_CONST_COND_POP_ - finish code section where MSVC C4127
// is suppressed.
// GTEST_INTERNAL_HAS_OPTIONAL - for enabling UniversalPrinter<std::optional> or
// UniversalPrinter<absl::optional> specializations.
// GTEST_INTERNAL_HAS_STRING_VIEW - for enabling Matcher<std::string_view> or
// Matcher<absl::string_view>
// specializations.
...
...
@@ -2226,6 +2228,36 @@ const char* StringFromGTestEnv(const char* flag, const char* default_val);
#endif // !defined(GTEST_INTERNAL_DEPRECATED)
#if GTEST_HAS_ABSL
// Always use absl::optional for UniversalPrinter<> specializations if googletest
// is built with absl support.
# define GTEST_INTERNAL_HAS_OPTIONAL 1
#include "absl/types/optional.h"
namespace
testing
{
namespace
internal
{
template
<
typename
T
>
using
Optional
=
::
absl
::
optional
<
T
>
;
}
// namespace internal
}
// namespace testing
#else
# ifdef __has_include
# if __has_include(<optional>) && __cplusplus >= 201703L
// Otherwise for C++17 and higher use std::optional for UniversalPrinter<>
// specializations.
# define GTEST_INTERNAL_HAS_OPTIONAL 1
#include <optional>
namespace
testing
{
namespace
internal
{
template
<
typename
T
>
using
Optional
=
::
std
::
optional
<
T
>
;
}
// namespace internal
}
// namespace testing
// The case where absl is configured NOT to alias std::optional is not
// supported.
# endif // __has_include(<optional>) && __cplusplus >= 201703L
# endif // __has_include
#endif // GTEST_HAS_ABSL
#if GTEST_HAS_ABSL
// Always use absl::string_view for Matcher<> specializations if googletest
// is built with absl support.
# define GTEST_INTERNAL_HAS_STRING_VIEW 1
...
...
googletest/test/googletest-printers-test.cc
View file @
95b0ea2c
...
...
@@ -1531,18 +1531,16 @@ TEST(UniversalTersePrintTupleFieldsToStringsTestWithStd, PrintsTersely) {
EXPECT_EQ
(
"
\"
a
\"
"
,
result
[
1
]);
}
#if GTEST_HAS_ABSL
#if GTEST_INTERNAL_HAS_OPTIONAL
TEST
(
PrintOptionalTest
,
Basic
)
{
absl
::
o
ptional
<
int
>
value
;
internal
::
O
ptional
<
int
>
value
;
EXPECT_EQ
(
"(nullopt)"
,
PrintToString
(
value
));
value
=
{
7
};
EXPECT_EQ
(
"(7)"
,
PrintToString
(
value
));
EXPECT_EQ
(
"(1.1)"
,
PrintToString
(
absl
::
o
ptional
<
double
>
{
1.1
}));
EXPECT_EQ
(
"(
\"
A
\"
)"
,
PrintToString
(
absl
::
o
ptional
<
std
::
string
>
{
"A"
}));
EXPECT_EQ
(
"(1.1)"
,
PrintToString
(
internal
::
O
ptional
<
double
>
{
1.1
}));
EXPECT_EQ
(
"(
\"
A
\"
)"
,
PrintToString
(
internal
::
O
ptional
<
std
::
string
>
{
"A"
}));
}
#endif // GTEST_HAS_ABSL
#endif // GTEST_INTERNAL_HAS_OPTIONAL
#if GTEST_INTERNAL_HAS_VARIANT
struct
NonPrintable
{
...
...
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