Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
yangql
googletest
Commits
4abbb774
Commit
4abbb774
authored
Jul 17, 2018
by
Gennadiy Civil
Browse files
Merge branch 'master' of
https://github.com/google/googletest
parents
5437926b
077ee54c
Changes
12
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
423 additions
and
57 deletions
+423
-57
BUILD.bazel
BUILD.bazel
+22
-17
googlemock/test/gmock_ex_test.cc
googlemock/test/gmock_ex_test.cc
+2
-3
googletest/CMakeLists.txt
googletest/CMakeLists.txt
+2
-2
googletest/cmake/internal_utils.cmake
googletest/cmake/internal_utils.cmake
+3
-3
googletest/include/gtest/gtest-printers.h
googletest/include/gtest/gtest-printers.h
+23
-0
googletest/include/gtest/internal/gtest-port.h
googletest/include/gtest/internal/gtest-port.h
+1
-1
googletest/src/gtest-internal-inl.h
googletest/src/gtest-internal-inl.h
+10
-0
googletest/src/gtest.cc
googletest/src/gtest.cc
+83
-3
googletest/test/BUILD.bazel
googletest/test/BUILD.bazel
+42
-20
googletest/test/gtest_output_test.py
googletest/test/gtest_output_test.py
+10
-4
googletest/test/gtest_output_test_golden_lin.txt
googletest/test/gtest_output_test_golden_lin.txt
+219
-3
googletest/test/gtest_xml_output_unittest.py
googletest/test/gtest_xml_output_unittest.py
+6
-1
No files found.
BUILD.bazel
View file @
4abbb774
...
...
@@ -38,7 +38,7 @@ licenses(["notice"])
config_setting
(
name
=
"windows"
,
values
=
{
"cpu"
:
"x64_windows"
},
values
=
{
"cpu"
:
"x64_windows"
},
)
config_setting
(
...
...
@@ -51,7 +51,6 @@ config_setting(
values
=
{
"define"
:
"absl=1"
},
)
# Google Test including Google Mock
cc_library
(
name
=
"gtest"
,
...
...
@@ -70,7 +69,7 @@ cc_library(
"googlemock/src/gmock_main.cc"
,
],
),
hdrs
=
glob
([
hdrs
=
glob
([
"googletest/include/gtest/*.h"
,
"googlemock/include/gmock/*.h"
,
]),
...
...
@@ -81,6 +80,14 @@ cc_library(
"//conditions:default"
:
[
"-pthread"
],
},
),
defines
=
select
(
{
":has_absl"
:
[
"GTEST_HAS_ABSL=1"
,
],
"//conditions:default"
:
[],
},
),
includes
=
[
"googlemock"
,
"googlemock/include"
,
...
...
@@ -94,21 +101,19 @@ cc_library(
"-pthread"
,
],
}),
defines
=
select
({
":has_absl"
:
[
"GTEST_HAS_ABSL=1"
,
],
"//conditions:default"
:
[],
}
deps
=
select
(
{
":has_absl"
:
[
"@com_google_absl//absl/debugging:failure_signal_handler"
,
"@com_google_absl//absl/debugging:stacktrace"
,
"@com_google_absl//absl/debugging:symbolize"
,
"@com_google_absl//absl/strings"
,
"@com_google_absl//absl/types:optional"
,
"@com_google_absl//absl/types:variant"
,
],
"//conditions:default"
:
[],
},
),
deps
=
select
({
":has_absl"
:
[
"@com_google_absl//absl/types:optional"
,
"@com_google_absl//absl/strings"
],
"//conditions:default"
:
[],
}
)
)
cc_library
(
...
...
googlemock/test/gmock_ex_test.cc
View file @
4abbb774
...
...
@@ -34,6 +34,7 @@
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#if GTEST_HAS_EXCEPTIONS
namespace
{
using
testing
::
HasSubstr
;
...
...
@@ -52,7 +53,6 @@ class MockFoo {
MOCK_METHOD0
(
GetNonDefaultConstructible
,
NonDefaultConstructible
());
};
#if GTEST_HAS_EXCEPTIONS
TEST
(
DefaultValueTest
,
ThrowsRuntimeErrorWhenNoDefaultValue
)
{
MockFoo
mock
;
...
...
@@ -76,6 +76,5 @@ TEST(DefaultValueTest, ThrowsRuntimeErrorWhenNoDefaultValue) {
}
}
#endif
}
// unnamed namespace
#endif
googletest/CMakeLists.txt
View file @
4abbb774
...
...
@@ -284,7 +284,7 @@ if (gtest_build_tests)
py_test
(
gtest_list_tests_unittest
)
cxx_executable
(
gtest_output_test_ test gtest
)
py_test
(
gtest_output_test
)
py_test
(
gtest_output_test
--no_stacktrace_support
)
cxx_executable
(
gtest_shuffle_test_ test gtest
)
py_test
(
gtest_shuffle_test
)
...
...
@@ -307,6 +307,6 @@ if (gtest_build_tests)
py_test
(
gtest_json_outfiles_test
)
cxx_executable
(
gtest_xml_output_unittest_ test gtest
)
py_test
(
gtest_xml_output_unittest
)
py_test
(
gtest_xml_output_unittest
--no_stacktrace_support
)
py_test
(
gtest_json_output_unittest
)
endif
()
googletest/cmake/internal_utils.cmake
View file @
4abbb774
...
...
@@ -257,14 +257,14 @@ function(py_test name)
add_test
(
NAME
${
name
}
COMMAND
${
PYTHON_EXECUTABLE
}
${
CMAKE_CURRENT_SOURCE_DIR
}
/test/
${
name
}
.py
--build_dir=
${
CMAKE_CURRENT_BINARY_DIR
}
/$<CONFIG>
)
--build_dir=
${
CMAKE_CURRENT_BINARY_DIR
}
/$<CONFIG>
${
ARGN
}
)
else
(
CMAKE_CONFIGURATION_TYPES
)
# Single-configuration build generators like Makefile generators
# don't have subdirs below CMAKE_CURRENT_BINARY_DIR.
add_test
(
NAME
${
name
}
COMMAND
${
PYTHON_EXECUTABLE
}
${
CMAKE_CURRENT_SOURCE_DIR
}
/test/
${
name
}
.py
--build_dir=
${
CMAKE_CURRENT_BINARY_DIR
}
)
--build_dir=
${
CMAKE_CURRENT_BINARY_DIR
}
${
ARGN
}
)
endif
(
CMAKE_CONFIGURATION_TYPES
)
else
(
${
CMAKE_MAJOR_VERSION
}
.
${
CMAKE_MINOR_VERSION
}
GREATER 3.1
)
# ${CMAKE_CURRENT_BINARY_DIR} is known at configuration time, so we can
...
...
@@ -274,7 +274,7 @@ function(py_test name)
add_test
(
${
name
}
${
PYTHON_EXECUTABLE
}
${
CMAKE_CURRENT_SOURCE_DIR
}
/test/
${
name
}
.py
--build_dir=
${
CMAKE_CURRENT_BINARY_DIR
}
/\
${
CTEST_CONFIGURATION_TYPE
}
)
--build_dir=
${
CMAKE_CURRENT_BINARY_DIR
}
/\
${
CTEST_CONFIGURATION_TYPE
}
${
ARGN
}
)
endif
(
${
CMAKE_MAJOR_VERSION
}
.
${
CMAKE_MINOR_VERSION
}
GREATER 3.1
)
endif
(
PYTHONINTERP_FOUND
)
endfunction
()
googletest/include/gtest/gtest-printers.h
View file @
4abbb774
...
...
@@ -114,6 +114,7 @@
#if GTEST_HAS_ABSL
#include "absl/strings/string_view.h"
#include "absl/types/optional.h"
#include "absl/types/variant.h"
#endif // GTEST_HAS_ABSL
namespace
testing
{
...
...
@@ -787,6 +788,28 @@ class UniversalPrinter<::absl::optional<T>> {
}
};
// Printer for absl::variant
template
<
typename
...
T
>
class
UniversalPrinter
<::
absl
::
variant
<
T
...
>>
{
public:
static
void
Print
(
const
::
absl
::
variant
<
T
...
>&
value
,
::
std
::
ostream
*
os
)
{
*
os
<<
'('
;
absl
::
visit
(
Visitor
{
os
},
value
);
*
os
<<
')'
;
}
private:
struct
Visitor
{
template
<
typename
U
>
void
operator
()(
const
U
&
u
)
const
{
*
os
<<
"'"
<<
GetTypeName
<
U
>
()
<<
"' with value "
;
UniversalPrint
(
u
,
os
);
}
::
std
::
ostream
*
os
;
};
};
#endif // GTEST_HAS_ABSL
// UniversalPrintArray(begin, len, os) prints an array of 'len'
...
...
googletest/include/gtest/internal/gtest-port.h
View file @
4abbb774
...
...
@@ -313,7 +313,7 @@
// GTEST_DISABLE_MSC_WARNINGS_PUSH_(4800 4385)
// /* code that triggers warnings C4800 and C4385 */
// GTEST_DISABLE_MSC_WARNINGS_POP_()
#if _MSC_VER >= 1
5
00
#if _MSC_VER >= 1
4
00
# define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings) \
__pragma(warning(push)) \
__pragma(warning(disable: warnings))
...
...
googletest/src/gtest-internal-inl.h
View file @
4abbb774
...
...
@@ -446,6 +446,16 @@ class OsStackTraceGetter : public OsStackTraceGetterInterface {
virtual
void
UponLeavingGTest
();
private:
#if GTEST_HAS_ABSL
Mutex
mutex_
;
// Protects all internal state.
// We save the stack frame below the frame that calls user code.
// We do this because the address of the frame immediately below
// the user code changes between the call to UponLeavingGTest()
// and any calls to the stack trace code from within the user code.
void
*
caller_frame_
=
nullptr
;
#endif // GTEST_HAS_ABSL
GTEST_DISALLOW_COPY_AND_ASSIGN_
(
OsStackTraceGetter
);
};
...
...
googletest/src/gtest.cc
View file @
4abbb774
...
...
@@ -139,6 +139,13 @@
# define vsnprintf _vsnprintf
#endif // GTEST_OS_WINDOWS
#if GTEST_HAS_ABSL
#include "absl/debugging/failure_signal_handler.h"
#include "absl/debugging/stacktrace.h"
#include "absl/debugging/symbolize.h"
#include "absl/strings/str_cat.h"
#endif // GTEST_HAS_ABSL
namespace
testing
{
using
internal
::
CountIf
;
...
...
@@ -228,6 +235,13 @@ GTEST_DEFINE_string_(
"exclude). A test is run if it matches one of the positive "
"patterns and does not match any of the negative patterns."
);
GTEST_DEFINE_bool_
(
install_failure_signal_handler
,
internal
::
BoolFromGTestEnv
(
"install_failure_signal_handler"
,
false
),
"If true and supported on the current platform, "
GTEST_NAME_
" should "
"install a signal handler that dumps debugging information when fatal "
"signals are raised."
);
GTEST_DEFINE_bool_
(
list_tests
,
false
,
"List all tests without running them."
);
...
...
@@ -4243,12 +4257,67 @@ void StreamingListener::SocketWriter::MakeConnection() {
const
char
*
const
OsStackTraceGetterInterface
::
kElidedFramesMarker
=
"... "
GTEST_NAME_
" internal frames ..."
;
std
::
string
OsStackTraceGetter
::
CurrentStackTrace
(
int
/*max_depth*/
,
int
/*skip_count*/
)
{
std
::
string
OsStackTraceGetter
::
CurrentStackTrace
(
int
max_depth
,
int
skip_count
)
GTEST_LOCK_EXCLUDED_
(
mutex_
)
{
#if GTEST_HAS_ABSL
std
::
string
result
;
if
(
max_depth
<=
0
)
{
return
result
;
}
max_depth
=
std
::
min
(
max_depth
,
kMaxStackTraceDepth
);
std
::
vector
<
void
*>
raw_stack
(
max_depth
);
// Skips the frames requested by the caller, plus this function.
const
int
raw_stack_size
=
absl
::
GetStackTrace
(
&
raw_stack
[
0
],
max_depth
,
skip_count
+
1
);
void
*
caller_frame
=
nullptr
;
{
MutexLock
lock
(
&
mutex_
);
caller_frame
=
caller_frame_
;
}
for
(
int
i
=
0
;
i
<
raw_stack_size
;
++
i
)
{
if
(
raw_stack
[
i
]
==
caller_frame
&&
!
GTEST_FLAG
(
show_internal_stack_frames
))
{
// Add a marker to the trace and stop adding frames.
absl
::
StrAppend
(
&
result
,
kElidedFramesMarker
,
"
\n
"
);
break
;
}
char
tmp
[
1024
];
const
char
*
symbol
=
"(unknown)"
;
if
(
absl
::
Symbolize
(
raw_stack
[
i
],
tmp
,
sizeof
(
tmp
)))
{
symbol
=
tmp
;
}
char
line
[
1024
];
snprintf
(
line
,
sizeof
(
line
),
" %p: %s
\n
"
,
raw_stack
[
i
],
symbol
);
result
+=
line
;
}
return
result
;
#else // !GTEST_HAS_ABSL
static_cast
<
void
>
(
max_depth
);
static_cast
<
void
>
(
skip_count
);
return
""
;
#endif // GTEST_HAS_ABSL
}
void
OsStackTraceGetter
::
UponLeavingGTest
()
{}
void
OsStackTraceGetter
::
UponLeavingGTest
()
GTEST_LOCK_EXCLUDED_
(
mutex_
)
{
#if GTEST_HAS_ABSL
void
*
caller_frame
=
nullptr
;
if
(
absl
::
GetStackTrace
(
&
caller_frame
,
1
,
3
)
<=
0
)
{
caller_frame
=
nullptr
;
}
MutexLock
lock
(
&
mutex_
);
caller_frame_
=
caller_frame
;
#endif // GTEST_HAS_ABSL
}
// A helper class that creates the premature-exit file in its
// constructor and deletes the file in its destructor.
...
...
@@ -4865,6 +4934,13 @@ void UnitTestImpl::PostFlagParsingInit() {
// Configures listeners for streaming test results to the specified server.
ConfigureStreamingOutput
();
#endif // GTEST_CAN_STREAM_RESULTS_
#if GTEST_HAS_ABSL
if
(
GTEST_FLAG
(
install_failure_signal_handler
))
{
absl
::
FailureSignalHandlerOptions
options
;
absl
::
InstallFailureSignalHandler
(
options
);
}
#endif // GTEST_HAS_ABSL
}
}
...
...
@@ -5769,6 +5845,10 @@ void InitGoogleTestImpl(int* argc, CharType** argv) {
g_argvs
.
push_back
(
StreamableToString
(
argv
[
i
]));
}
#if GTEST_HAS_ABSL
absl
::
InitializeSymbolizer
(
g_argvs
[
0
].
c_str
());
#endif // GTEST_HAS_ABSL
ParseGoogleTestFlagsOnly
(
argc
,
argv
);
GetUnitTestImpl
()
->
PostFlagParsingInit
();
}
...
...
googletest/test/BUILD.bazel
View file @
4abbb774
...
...
@@ -34,35 +34,48 @@
licenses
([
"notice"
])
""" gtest own tests """
config_setting
(
name
=
"windows"
,
values
=
{
"cpu"
:
"x64_windows"
},
)
config_setting
(
name
=
"windows_msvc"
,
values
=
{
"cpu"
:
"x64_windows_msvc"
},
)
config_setting
(
name
=
"has_absl"
,
values
=
{
"define"
:
"absl=1"
},
)
#on windows exclude gtest-tuple.h and gtest-tuple_test.cc
cc_test
(
name
=
"gtest_all_test"
,
size
=
"small"
,
srcs
=
glob
(
include
=
[
"gtest-*.cc"
,
"*.h"
,
"googletest/include/gtest/**/*.h"
,
],
exclude
=
[
"gtest-unittest-api_test.cc"
,
"gtest-tuple_test.cc"
,
"googletest/src/gtest-all.cc"
,
"gtest_all_test.cc"
,
"gtest-death-test_ex_test.cc"
,
"gtest-listener_test.cc"
,
"gtest-unittest-api_test.cc"
,
"gtest-param-test_test.cc"
,
],
)
+
select
({
srcs
=
glob
(
include
=
[
"gtest-*.cc"
,
"*.h"
,
"googletest/include/gtest/**/*.h"
,
],
exclude
=
[
"gtest-unittest-api_test.cc"
,
"gtest-tuple_test.cc"
,
"googletest/src/gtest-all.cc"
,
"gtest_all_test.cc"
,
"gtest-death-test_ex_test.cc"
,
"gtest-listener_test.cc"
,
"gtest-unittest-api_test.cc"
,
"gtest-param-test_test.cc"
,
],
)
+
select
({
"//:windows"
:
[],
"//:windows_msvc"
:
[],
"//conditions:default"
:
[
"gtest-tuple_test.cc"
,
],
}),
}),
copts
=
select
({
"//:windows"
:
[
"-DGTEST_USE_OWN_TR1_TUPLE=0"
],
"//:windows_msvc"
:
[
"-DGTEST_USE_OWN_TR1_TUPLE=0"
],
...
...
@@ -135,7 +148,6 @@ py_library(
name
=
"gtest_test_utils"
,
testonly
=
1
,
srcs
=
[
"gtest_test_utils.py"
],
)
cc_binary
(
...
...
@@ -144,6 +156,7 @@ cc_binary(
srcs
=
[
"gtest_help_test_.cc"
],
deps
=
[
"//:gtest_main"
],
)
py_test
(
name
=
"gtest_help_test"
,
size
=
"small"
,
...
...
@@ -163,6 +176,10 @@ py_test(
name
=
"gtest_output_test"
,
size
=
"small"
,
srcs
=
[
"gtest_output_test.py"
],
args
=
select
({
":has_absl"
:
[],
"//conditions:default"
:
[
"--no_stacktrace_support"
],
}),
data
=
[
"gtest_output_test_golden_lin.txt"
,
":gtest_output_test_"
,
...
...
@@ -176,6 +193,7 @@ cc_binary(
srcs
=
[
"gtest_color_test_.cc"
],
deps
=
[
"//:gtest"
],
)
py_test
(
name
=
"gtest_color_test"
,
size
=
"small"
,
...
...
@@ -327,6 +345,10 @@ py_test(
"gtest_xml_output_unittest.py"
,
"gtest_xml_test_utils.py"
,
],
args
=
select
({
":has_absl"
:
[],
"//conditions:default"
:
[
"--no_stacktrace_support"
],
}),
data
=
[
# We invoke gtest_no_test_unittest to verify the XML output
# when the test program contains no test definition.
...
...
googletest/test/gtest_output_test.py
View file @
4abbb774
...
...
@@ -52,6 +52,9 @@ import gtest_test_utils
GENGOLDEN_FLAG
=
'--gengolden'
CATCH_EXCEPTIONS_ENV_VAR_NAME
=
'GTEST_CATCH_EXCEPTIONS'
# The flag indicating stacktraces are not supported
NO_STACKTRACE_SUPPORT_FLAG
=
'--no_stacktrace_support'
IS_LINUX
=
os
.
name
==
'posix'
and
os
.
uname
()[
0
]
==
'Linux'
IS_WINDOWS
=
os
.
name
==
'nt'
...
...
@@ -252,13 +255,12 @@ test_list = GetShellCommandOutput(COMMAND_LIST_TESTS)
SUPPORTS_DEATH_TESTS
=
'DeathTest'
in
test_list
SUPPORTS_TYPED_TESTS
=
'TypedTest'
in
test_list
SUPPORTS_THREADS
=
'ExpectFailureWithThreadsTest'
in
test_list
SUPPORTS_STACK_TRACES
=
IS_LINUX
SUPPORTS_STACK_TRACES
=
NO_STACKTRACE_SUPPORT_FLAG
not
in
sys
.
argv
CAN_GENERATE_GOLDEN_FILE
=
(
SUPPORTS_DEATH_TESTS
and
SUPPORTS_TYPED_TESTS
and
SUPPORTS_THREADS
and
SUPPORTS_STACK_TRACES
and
not
IS_WINDOWS
)
SUPPORTS_STACK_TRACES
)
class
GTestOutputTest
(
gtest_test_utils
.
TestCase
):
def
RemoveUnsupportedTests
(
self
,
test_output
):
...
...
@@ -325,7 +327,11 @@ class GTestOutputTest(gtest_test_utils.TestCase):
if
__name__
==
'__main__'
:
if
sys
.
argv
[
1
:]
==
[
GENGOLDEN_FLAG
]:
if
NO_STACKTRACE_SUPPORT_FLAG
in
sys
.
argv
:
# unittest.main() can't handle unknown flags
sys
.
argv
.
remove
(
NO_STACKTRACE_SUPPORT_FLAG
)
if
GENGOLDEN_FLAG
in
sys
.
argv
:
if
CAN_GENERATE_GOLDEN_FILE
:
output
=
GetOutputOfAllCommands
()
golden_file
=
open
(
GOLDEN_PATH
,
'wb'
)
...
...
googletest/test/gtest_output_test_golden_lin.txt
View file @
4abbb774
This diff is collapsed.
Click to expand it.
googletest/test/gtest_xml_output_unittest.py
View file @
4abbb774
...
...
@@ -47,17 +47,22 @@ GTEST_OUTPUT_FLAG = '--gtest_output'
GTEST_DEFAULT_OUTPUT_FILE
=
'test_detail.xml'
GTEST_PROGRAM_NAME
=
'gtest_xml_output_unittest_'
# The flag indicating stacktraces are not supported
NO_STACKTRACE_SUPPORT_FLAG
=
'--no_stacktrace_support'
# The environment variables for test sharding.
TOTAL_SHARDS_ENV_VAR
=
'GTEST_TOTAL_SHARDS'
SHARD_INDEX_ENV_VAR
=
'GTEST_SHARD_INDEX'
SHARD_STATUS_FILE_ENV_VAR
=
'GTEST_SHARD_STATUS_FILE'
SUPPORTS_STACK_TRACES
=
False
SUPPORTS_STACK_TRACES
=
NO_STACKTRACE_SUPPORT_FLAG
not
in
sys
.
argv
if
SUPPORTS_STACK_TRACES
:
STACK_TRACE_TEMPLATE
=
'
\n
Stack trace:
\n
*'
else
:
STACK_TRACE_TEMPLATE
=
''
# unittest.main() can't handle unknown flags
sys
.
argv
.
remove
(
NO_STACKTRACE_SUPPORT_FLAG
)
EXPECTED_NON_EMPTY_XML
=
"""<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="23" failures="4" disabled="2" errors="0" time="*" timestamp="*" name="AllTests" ad_hoc_property="42">
...
...
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