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
ee014912
Unverified
Commit
ee014912
authored
Apr 16, 2020
by
Mark Jan van Kampen
Browse files
Merge branch 'master' of
https://github.com/google/googletest
into cmake-QNX-fix
# Conflicts: # CMakeLists.txt
parents
937b3ce9
e3f0319d
Changes
28
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
665 additions
and
95 deletions
+665
-95
googletest/test/BUILD.bazel
googletest/test/BUILD.bazel
+16
-2
googletest/test/googletest-death-test-test.cc
googletest/test/googletest-death-test-test.cc
+7
-5
googletest/test/googletest-env-var-test.py
googletest/test/googletest-env-var-test.py
+2
-0
googletest/test/googletest-env-var-test_.cc
googletest/test/googletest-env-var-test_.cc
+5
-0
googletest/test/googletest-failfast-unittest.py
googletest/test/googletest-failfast-unittest.py
+410
-0
googletest/test/googletest-failfast-unittest_.cc
googletest/test/googletest-failfast-unittest_.cc
+167
-0
googletest/test/googletest-output-test_.cc
googletest/test/googletest-output-test_.cc
+0
-57
googletest/test/gtest_unittest.cc
googletest/test/gtest_unittest.cc
+58
-31
No files found.
googletest/test/BUILD.bazel
View file @
ee014912
...
...
@@ -28,8 +28,6 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# Author: misterg@google.com (Gennadiy Civil)
#
# Bazel BUILD for The Google C++ Testing Framework (Google Test)
load
(
"@rules_cc//cc:defs.bzl"
,
"cc_binary"
,
"cc_test"
)
...
...
@@ -60,6 +58,7 @@ cc_test(
"googletest-catch-exceptions-test_.cc"
,
"googletest-color-test_.cc"
,
"googletest-env-var-test_.cc"
,
"googletest-failfast-unittest_.cc"
,
"googletest-filter-unittest_.cc"
,
"googletest-break-on-failure-unittest_.cc"
,
"googletest-listener-test.cc"
,
...
...
@@ -224,6 +223,21 @@ py_test(
deps
=
[
":gtest_test_utils"
],
)
cc_binary
(
name
=
"googletest-failfast-unittest_"
,
testonly
=
1
,
srcs
=
[
"googletest-failfast-unittest_.cc"
],
deps
=
[
"//:gtest"
],
)
py_test
(
name
=
"googletest-failfast-unittest"
,
size
=
"medium"
,
srcs
=
[
"googletest-failfast-unittest.py"
],
data
=
[
":googletest-failfast-unittest_"
],
deps
=
[
":gtest_test_utils"
],
)
cc_binary
(
name
=
"googletest-filter-unittest_"
,
testonly
=
1
,
...
...
googletest/test/googletest-death-test-test.cc
View file @
ee014912
...
...
@@ -391,17 +391,19 @@ void SigprofAction(int, siginfo_t*, void*) { /* no op */ }
// Sets SIGPROF action and ITIMER_PROF timer (interval: 1ms).
void
SetSigprofActionAndTimer
()
{
struct
itimerval
timer
;
timer
.
it_interval
.
tv_sec
=
0
;
timer
.
it_interval
.
tv_usec
=
1
;
timer
.
it_value
=
timer
.
it_interval
;
ASSERT_EQ
(
0
,
setitimer
(
ITIMER_PROF
,
&
timer
,
nullptr
));
struct
sigaction
signal_action
;
memset
(
&
signal_action
,
0
,
sizeof
(
signal_action
));
sigemptyset
(
&
signal_action
.
sa_mask
);
signal_action
.
sa_sigaction
=
SigprofAction
;
signal_action
.
sa_flags
=
SA_RESTART
|
SA_SIGINFO
;
ASSERT_EQ
(
0
,
sigaction
(
SIGPROF
,
&
signal_action
,
nullptr
));
// timer comes second, to avoid SIGPROF premature delivery, as suggested at
// https://www.gnu.org/software/libc/manual/html_node/Setting-an-Alarm.html
struct
itimerval
timer
;
timer
.
it_interval
.
tv_sec
=
0
;
timer
.
it_interval
.
tv_usec
=
1
;
timer
.
it_value
=
timer
.
it_interval
;
ASSERT_EQ
(
0
,
setitimer
(
ITIMER_PROF
,
&
timer
,
nullptr
));
}
// Disables ITIMER_PROF timer and ignores SIGPROF signal.
...
...
googletest/test/googletest-env-var-test.py
View file @
ee014912
...
...
@@ -85,6 +85,8 @@ class GTestEnvVarTest(gtest_test_utils.TestCase):
TestFlag
(
'break_on_failure'
,
'1'
,
'0'
)
TestFlag
(
'color'
,
'yes'
,
'auto'
)
SetEnvVar
(
'TESTBRIDGE_TEST_RUNNER_FAIL_FAST'
,
None
)
# For 'fail_fast' test
TestFlag
(
'fail_fast'
,
'1'
,
'0'
)
TestFlag
(
'filter'
,
'FooTest.Bar'
,
'*'
)
SetEnvVar
(
'XML_OUTPUT_FILE'
,
None
)
# For 'output' test
TestFlag
(
'output'
,
'xml:tmp/foo.xml'
,
''
)
...
...
googletest/test/googletest-env-var-test_.cc
View file @
ee014912
...
...
@@ -72,6 +72,11 @@ void PrintFlag(const char* flag) {
return
;
}
if
(
strcmp
(
flag
,
"fail_fast"
)
==
0
)
{
cout
<<
GTEST_FLAG
(
fail_fast
);
return
;
}
if
(
strcmp
(
flag
,
"filter"
)
==
0
)
{
cout
<<
GTEST_FLAG
(
filter
);
return
;
...
...
googletest/test/googletest-failfast-unittest.py
0 → 100755
View file @
ee014912
#!/usr/bin/env python
#
# Copyright 2020 Google Inc. All Rights Reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
# * Neither the name of Google Inc. nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"""Unit test for Google Test fail_fast.
A user can specify if a Google Test program should continue test execution
after a test failure via the GTEST_FAIL_FAST environment variable or the
--gtest_fail_fast flag. The default value of the flag can also be changed
by Bazel fail fast environment variable TESTBRIDGE_TEST_RUNNER_FAIL_FAST.
This script tests such functionality by invoking googletest-failfast-unittest_
(a program written with Google Test) with different environments and command
line flags.
"""
import
os
import
gtest_test_utils
# Constants.
# Bazel testbridge environment variable for fail fast
BAZEL_FAIL_FAST_ENV_VAR
=
'TESTBRIDGE_TEST_RUNNER_FAIL_FAST'
# The environment variable for specifying fail fast.
FAIL_FAST_ENV_VAR
=
'GTEST_FAIL_FAST'
# The command line flag for specifying fail fast.
FAIL_FAST_FLAG
=
'gtest_fail_fast'
# The command line flag to run disabled tests.
RUN_DISABLED_FLAG
=
'gtest_also_run_disabled_tests'
# The command line flag for specifying a filter.
FILTER_FLAG
=
'gtest_filter'
# Command to run the googletest-failfast-unittest_ program.
COMMAND
=
gtest_test_utils
.
GetTestExecutablePath
(
'googletest-failfast-unittest_'
)
# The command line flag to tell Google Test to output the list of tests it
# will run.
LIST_TESTS_FLAG
=
'--gtest_list_tests'
# Indicates whether Google Test supports death tests.
SUPPORTS_DEATH_TESTS
=
'HasDeathTest'
in
gtest_test_utils
.
Subprocess
(
[
COMMAND
,
LIST_TESTS_FLAG
]).
output
# Utilities.
environ
=
os
.
environ
.
copy
()
def
SetEnvVar
(
env_var
,
value
):
"""Sets the env variable to 'value'; unsets it when 'value' is None."""
if
value
is
not
None
:
environ
[
env_var
]
=
value
elif
env_var
in
environ
:
del
environ
[
env_var
]
def
RunAndReturnOutput
(
test_suite
=
None
,
fail_fast
=
None
,
run_disabled
=
False
):
"""Runs the test program and returns its output."""
args
=
[]
xml_path
=
os
.
path
.
join
(
gtest_test_utils
.
GetTempDir
(),
'.GTestFailFastUnitTest.xml'
)
args
+=
[
'--gtest_output=xml:'
+
xml_path
]
if
fail_fast
is
not
None
:
if
isinstance
(
fail_fast
,
str
):
args
+=
[
'--%s=%s'
%
(
FAIL_FAST_FLAG
,
fail_fast
)]
elif
fail_fast
:
args
+=
[
'--%s'
%
FAIL_FAST_FLAG
]
else
:
args
+=
[
'--no%s'
%
FAIL_FAST_FLAG
]
if
test_suite
:
args
+=
[
'--%s=%s.*'
%
(
FILTER_FLAG
,
test_suite
)]
if
run_disabled
:
args
+=
[
'--%s'
%
RUN_DISABLED_FLAG
]
txt_out
=
gtest_test_utils
.
Subprocess
([
COMMAND
]
+
args
,
env
=
environ
).
output
with
open
(
xml_path
)
as
xml_file
:
return
txt_out
,
xml_file
.
read
()
# The unit test.
class
GTestFailFastUnitTest
(
gtest_test_utils
.
TestCase
):
"""Tests the env variable or the command line flag for fail_fast."""
def
testDefaultBehavior
(
self
):
"""Tests the behavior of not specifying the fail_fast."""
txt
,
_
=
RunAndReturnOutput
()
self
.
assertIn
(
'22 FAILED TEST'
,
txt
)
def
testGoogletestFlag
(
self
):
txt
,
_
=
RunAndReturnOutput
(
test_suite
=
'HasSimpleTest'
,
fail_fast
=
True
)
self
.
assertIn
(
'1 FAILED TEST'
,
txt
)
self
.
assertIn
(
'[ SKIPPED ] 3 tests'
,
txt
)
txt
,
_
=
RunAndReturnOutput
(
test_suite
=
'HasSimpleTest'
,
fail_fast
=
False
)
self
.
assertIn
(
'4 FAILED TEST'
,
txt
)
self
.
assertNotIn
(
'[ SKIPPED ]'
,
txt
)
def
testGoogletestEnvVar
(
self
):
"""Tests the behavior of specifying fail_fast via Googletest env var."""
try
:
SetEnvVar
(
FAIL_FAST_ENV_VAR
,
'1'
)
txt
,
_
=
RunAndReturnOutput
(
'HasSimpleTest'
)
self
.
assertIn
(
'1 FAILED TEST'
,
txt
)
self
.
assertIn
(
'[ SKIPPED ] 3 tests'
,
txt
)
SetEnvVar
(
FAIL_FAST_ENV_VAR
,
'0'
)
txt
,
_
=
RunAndReturnOutput
(
'HasSimpleTest'
)
self
.
assertIn
(
'4 FAILED TEST'
,
txt
)
self
.
assertNotIn
(
'[ SKIPPED ]'
,
txt
)
finally
:
SetEnvVar
(
FAIL_FAST_ENV_VAR
,
None
)
def
testBazelEnvVar
(
self
):
"""Tests the behavior of specifying fail_fast via Bazel testbridge."""
try
:
SetEnvVar
(
BAZEL_FAIL_FAST_ENV_VAR
,
'1'
)
txt
,
_
=
RunAndReturnOutput
(
'HasSimpleTest'
)
self
.
assertIn
(
'1 FAILED TEST'
,
txt
)
self
.
assertIn
(
'[ SKIPPED ] 3 tests'
,
txt
)
SetEnvVar
(
BAZEL_FAIL_FAST_ENV_VAR
,
'0'
)
txt
,
_
=
RunAndReturnOutput
(
'HasSimpleTest'
)
self
.
assertIn
(
'4 FAILED TEST'
,
txt
)
self
.
assertNotIn
(
'[ SKIPPED ]'
,
txt
)
finally
:
SetEnvVar
(
BAZEL_FAIL_FAST_ENV_VAR
,
None
)
def
testFlagOverridesEnvVar
(
self
):
"""Tests precedence of flag over env var."""
try
:
SetEnvVar
(
FAIL_FAST_ENV_VAR
,
'0'
)
txt
,
_
=
RunAndReturnOutput
(
'HasSimpleTest'
,
True
)
self
.
assertIn
(
'1 FAILED TEST'
,
txt
)
self
.
assertIn
(
'[ SKIPPED ] 3 tests'
,
txt
)
finally
:
SetEnvVar
(
FAIL_FAST_ENV_VAR
,
None
)
def
testGoogletestEnvVarOverridesBazelEnvVar
(
self
):
"""Tests that the Googletest native env var over Bazel testbridge."""
try
:
SetEnvVar
(
BAZEL_FAIL_FAST_ENV_VAR
,
'0'
)
SetEnvVar
(
FAIL_FAST_ENV_VAR
,
'1'
)
txt
,
_
=
RunAndReturnOutput
(
'HasSimpleTest'
)
self
.
assertIn
(
'1 FAILED TEST'
,
txt
)
self
.
assertIn
(
'[ SKIPPED ] 3 tests'
,
txt
)
finally
:
SetEnvVar
(
FAIL_FAST_ENV_VAR
,
None
)
SetEnvVar
(
BAZEL_FAIL_FAST_ENV_VAR
,
None
)
def
testEventListener
(
self
):
txt
,
_
=
RunAndReturnOutput
(
test_suite
=
'HasSkipTest'
,
fail_fast
=
True
)
self
.
assertIn
(
'1 FAILED TEST'
,
txt
)
self
.
assertIn
(
'[ SKIPPED ] 3 tests'
,
txt
)
for
expected_count
,
callback
in
[(
1
,
'OnTestSuiteStart'
),
(
5
,
'OnTestStart'
),
(
5
,
'OnTestEnd'
),
(
5
,
'OnTestPartResult'
),
(
1
,
'OnTestSuiteEnd'
)]:
self
.
assertEqual
(
expected_count
,
txt
.
count
(
callback
),
'Expected %d calls to callback %s match count on output: %s '
%
(
expected_count
,
callback
,
txt
))
txt
,
_
=
RunAndReturnOutput
(
test_suite
=
'HasSkipTest'
,
fail_fast
=
False
)
self
.
assertIn
(
'3 FAILED TEST'
,
txt
)
self
.
assertIn
(
'[ SKIPPED ] 1 test'
,
txt
)
for
expected_count
,
callback
in
[(
1
,
'OnTestSuiteStart'
),
(
5
,
'OnTestStart'
),
(
5
,
'OnTestEnd'
),
(
5
,
'OnTestPartResult'
),
(
1
,
'OnTestSuiteEnd'
)]:
self
.
assertEqual
(
expected_count
,
txt
.
count
(
callback
),
'Expected %d calls to callback %s match count on output: %s '
%
(
expected_count
,
callback
,
txt
))
def
assertXmlResultCount
(
self
,
result
,
count
,
xml
):
self
.
assertEqual
(
count
,
xml
.
count
(
'result="%s"'
%
result
),
'Expected
\'
result="%s"
\'
match count of %s: %s '
%
(
result
,
count
,
xml
))
def
assertXmlStatusCount
(
self
,
status
,
count
,
xml
):
self
.
assertEqual
(
count
,
xml
.
count
(
'status="%s"'
%
status
),
'Expected
\'
status="%s"
\'
match count of %s: %s '
%
(
status
,
count
,
xml
))
def
assertFailFastXmlAndTxtOutput
(
self
,
fail_fast
,
test_suite
,
passed_count
,
failure_count
,
skipped_count
,
suppressed_count
,
run_disabled
=
False
):
"""Assert XML and text output of a test execution."""
txt
,
xml
=
RunAndReturnOutput
(
test_suite
,
fail_fast
,
run_disabled
)
if
failure_count
>
0
:
self
.
assertIn
(
'%s FAILED TEST'
%
failure_count
,
txt
)
if
suppressed_count
>
0
:
self
.
assertIn
(
'%s DISABLED TEST'
%
suppressed_count
,
txt
)
if
skipped_count
>
0
:
self
.
assertIn
(
'[ SKIPPED ] %s tests'
%
skipped_count
,
txt
)
self
.
assertXmlStatusCount
(
'run'
,
passed_count
+
failure_count
+
skipped_count
,
xml
)
self
.
assertXmlStatusCount
(
'notrun'
,
suppressed_count
,
xml
)
self
.
assertXmlResultCount
(
'completed'
,
passed_count
+
failure_count
,
xml
)
self
.
assertXmlResultCount
(
'skipped'
,
skipped_count
,
xml
)
self
.
assertXmlResultCount
(
'suppressed'
,
suppressed_count
,
xml
)
def
assertFailFastBehavior
(
self
,
test_suite
,
passed_count
,
failure_count
,
skipped_count
,
suppressed_count
,
run_disabled
=
False
):
"""Assert --fail_fast via flag."""
for
fail_fast
in
(
'true'
,
'1'
,
't'
,
True
):
self
.
assertFailFastXmlAndTxtOutput
(
fail_fast
,
test_suite
,
passed_count
,
failure_count
,
skipped_count
,
suppressed_count
,
run_disabled
)
def
assertNotFailFastBehavior
(
self
,
test_suite
,
passed_count
,
failure_count
,
skipped_count
,
suppressed_count
,
run_disabled
=
False
):
"""Assert --nofail_fast via flag."""
for
fail_fast
in
(
'false'
,
'0'
,
'f'
,
False
):
self
.
assertFailFastXmlAndTxtOutput
(
fail_fast
,
test_suite
,
passed_count
,
failure_count
,
skipped_count
,
suppressed_count
,
run_disabled
)
def
testFlag_HasFixtureTest
(
self
):
"""Tests the behavior of fail_fast and TEST_F."""
self
.
assertFailFastBehavior
(
test_suite
=
'HasFixtureTest'
,
passed_count
=
1
,
failure_count
=
1
,
skipped_count
=
3
,
suppressed_count
=
0
)
self
.
assertNotFailFastBehavior
(
test_suite
=
'HasFixtureTest'
,
passed_count
=
1
,
failure_count
=
4
,
skipped_count
=
0
,
suppressed_count
=
0
)
def
testFlag_HasSimpleTest
(
self
):
"""Tests the behavior of fail_fast and TEST."""
self
.
assertFailFastBehavior
(
test_suite
=
'HasSimpleTest'
,
passed_count
=
1
,
failure_count
=
1
,
skipped_count
=
3
,
suppressed_count
=
0
)
self
.
assertNotFailFastBehavior
(
test_suite
=
'HasSimpleTest'
,
passed_count
=
1
,
failure_count
=
4
,
skipped_count
=
0
,
suppressed_count
=
0
)
def
testFlag_HasParametersTest
(
self
):
"""Tests the behavior of fail_fast and TEST_P."""
self
.
assertFailFastBehavior
(
test_suite
=
'HasParametersSuite/HasParametersTest'
,
passed_count
=
0
,
failure_count
=
1
,
skipped_count
=
3
,
suppressed_count
=
0
)
self
.
assertNotFailFastBehavior
(
test_suite
=
'HasParametersSuite/HasParametersTest'
,
passed_count
=
0
,
failure_count
=
4
,
skipped_count
=
0
,
suppressed_count
=
0
)
def
testFlag_HasDisabledTest
(
self
):
"""Tests the behavior of fail_fast and Disabled test cases."""
self
.
assertFailFastBehavior
(
test_suite
=
'HasDisabledTest'
,
passed_count
=
1
,
failure_count
=
1
,
skipped_count
=
2
,
suppressed_count
=
1
,
run_disabled
=
False
)
self
.
assertNotFailFastBehavior
(
test_suite
=
'HasDisabledTest'
,
passed_count
=
1
,
failure_count
=
3
,
skipped_count
=
0
,
suppressed_count
=
1
,
run_disabled
=
False
)
def
testFlag_HasDisabledRunDisabledTest
(
self
):
"""Tests the behavior of fail_fast and Disabled test cases enabled."""
self
.
assertFailFastBehavior
(
test_suite
=
'HasDisabledTest'
,
passed_count
=
1
,
failure_count
=
1
,
skipped_count
=
3
,
suppressed_count
=
0
,
run_disabled
=
True
)
self
.
assertNotFailFastBehavior
(
test_suite
=
'HasDisabledTest'
,
passed_count
=
1
,
failure_count
=
4
,
skipped_count
=
0
,
suppressed_count
=
0
,
run_disabled
=
True
)
def
testFlag_HasDisabledSuiteTest
(
self
):
"""Tests the behavior of fail_fast and Disabled test suites."""
self
.
assertFailFastBehavior
(
test_suite
=
'DISABLED_HasDisabledSuite'
,
passed_count
=
0
,
failure_count
=
0
,
skipped_count
=
0
,
suppressed_count
=
5
,
run_disabled
=
False
)
self
.
assertNotFailFastBehavior
(
test_suite
=
'DISABLED_HasDisabledSuite'
,
passed_count
=
0
,
failure_count
=
0
,
skipped_count
=
0
,
suppressed_count
=
5
,
run_disabled
=
False
)
def
testFlag_HasDisabledSuiteRunDisabledTest
(
self
):
"""Tests the behavior of fail_fast and Disabled test suites enabled."""
self
.
assertFailFastBehavior
(
test_suite
=
'DISABLED_HasDisabledSuite'
,
passed_count
=
1
,
failure_count
=
1
,
skipped_count
=
3
,
suppressed_count
=
0
,
run_disabled
=
True
)
self
.
assertNotFailFastBehavior
(
test_suite
=
'DISABLED_HasDisabledSuite'
,
passed_count
=
1
,
failure_count
=
4
,
skipped_count
=
0
,
suppressed_count
=
0
,
run_disabled
=
True
)
if
SUPPORTS_DEATH_TESTS
:
def
testFlag_HasDeathTest
(
self
):
"""Tests the behavior of fail_fast and death tests."""
self
.
assertFailFastBehavior
(
test_suite
=
'HasDeathTest'
,
passed_count
=
1
,
failure_count
=
1
,
skipped_count
=
3
,
suppressed_count
=
0
)
self
.
assertNotFailFastBehavior
(
test_suite
=
'HasDeathTest'
,
passed_count
=
1
,
failure_count
=
4
,
skipped_count
=
0
,
suppressed_count
=
0
)
if
__name__
==
'__main__'
:
gtest_test_utils
.
Main
()
googletest/test/googletest-failfast-unittest_.cc
0 → 100644
View file @
ee014912
// Copyright 2005, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Unit test for Google Test test filters.
//
// A user can specify which test(s) in a Google Test program to run via
// either the GTEST_FILTER environment variable or the --gtest_filter
// flag. This is used for testing such functionality.
//
// The program will be invoked from a Python unit test. Don't run it
// directly.
#include "gtest/gtest.h"
namespace
{
// Test HasFixtureTest.
class
HasFixtureTest
:
public
testing
::
Test
{};
TEST_F
(
HasFixtureTest
,
Test0
)
{}
TEST_F
(
HasFixtureTest
,
Test1
)
{
FAIL
()
<<
"Expected failure."
;
}
TEST_F
(
HasFixtureTest
,
Test2
)
{
FAIL
()
<<
"Expected failure."
;
}
TEST_F
(
HasFixtureTest
,
Test3
)
{
FAIL
()
<<
"Expected failure."
;
}
TEST_F
(
HasFixtureTest
,
Test4
)
{
FAIL
()
<<
"Expected failure."
;
}
// Test HasSimpleTest.
TEST
(
HasSimpleTest
,
Test0
)
{}
TEST
(
HasSimpleTest
,
Test1
)
{
FAIL
()
<<
"Expected failure."
;
}
TEST
(
HasSimpleTest
,
Test2
)
{
FAIL
()
<<
"Expected failure."
;
}
TEST
(
HasSimpleTest
,
Test3
)
{
FAIL
()
<<
"Expected failure."
;
}
TEST
(
HasSimpleTest
,
Test4
)
{
FAIL
()
<<
"Expected failure."
;
}
// Test HasDisabledTest.
TEST
(
HasDisabledTest
,
Test0
)
{}
TEST
(
HasDisabledTest
,
DISABLED_Test1
)
{
FAIL
()
<<
"Expected failure."
;
}
TEST
(
HasDisabledTest
,
Test2
)
{
FAIL
()
<<
"Expected failure."
;
}
TEST
(
HasDisabledTest
,
Test3
)
{
FAIL
()
<<
"Expected failure."
;
}
TEST
(
HasDisabledTest
,
Test4
)
{
FAIL
()
<<
"Expected failure."
;
}
// Test HasDeathTest
TEST
(
HasDeathTest
,
Test0
)
{
EXPECT_DEATH_IF_SUPPORTED
(
exit
(
1
),
".*"
);
}
TEST
(
HasDeathTest
,
Test1
)
{
EXPECT_DEATH_IF_SUPPORTED
(
FAIL
()
<<
"Expected failure."
,
".*"
);
}
TEST
(
HasDeathTest
,
Test2
)
{
EXPECT_DEATH_IF_SUPPORTED
(
FAIL
()
<<
"Expected failure."
,
".*"
);
}
TEST
(
HasDeathTest
,
Test3
)
{
EXPECT_DEATH_IF_SUPPORTED
(
FAIL
()
<<
"Expected failure."
,
".*"
);
}
TEST
(
HasDeathTest
,
Test4
)
{
EXPECT_DEATH_IF_SUPPORTED
(
FAIL
()
<<
"Expected failure."
,
".*"
);
}
// Test DISABLED_HasDisabledSuite
TEST
(
DISABLED_HasDisabledSuite
,
Test0
)
{}
TEST
(
DISABLED_HasDisabledSuite
,
Test1
)
{
FAIL
()
<<
"Expected failure."
;
}
TEST
(
DISABLED_HasDisabledSuite
,
Test2
)
{
FAIL
()
<<
"Expected failure."
;
}
TEST
(
DISABLED_HasDisabledSuite
,
Test3
)
{
FAIL
()
<<
"Expected failure."
;
}
TEST
(
DISABLED_HasDisabledSuite
,
Test4
)
{
FAIL
()
<<
"Expected failure."
;
}
// Test HasParametersTest
class
HasParametersTest
:
public
testing
::
TestWithParam
<
int
>
{};
TEST_P
(
HasParametersTest
,
Test1
)
{
FAIL
()
<<
"Expected failure."
;
}
TEST_P
(
HasParametersTest
,
Test2
)
{
FAIL
()
<<
"Expected failure."
;
}
INSTANTIATE_TEST_SUITE_P
(
HasParametersSuite
,
HasParametersTest
,
testing
::
Values
(
1
,
2
));
class
MyTestListener
:
public
::
testing
::
EmptyTestEventListener
{
void
OnTestSuiteStart
(
const
::
testing
::
TestSuite
&
test_suite
)
override
{
printf
(
"We are in OnTestSuiteStart of %s.
\n
"
,
test_suite
.
name
());
}
void
OnTestStart
(
const
::
testing
::
TestInfo
&
test_info
)
override
{
printf
(
"We are in OnTestStart of %s.%s.
\n
"
,
test_info
.
test_suite_name
(),
test_info
.
name
());
}
void
OnTestPartResult
(
const
::
testing
::
TestPartResult
&
test_part_result
)
override
{
printf
(
"We are in OnTestPartResult %s:%d.
\n
"
,
test_part_result
.
file_name
(),
test_part_result
.
line_number
());
}
void
OnTestEnd
(
const
::
testing
::
TestInfo
&
test_info
)
override
{
printf
(
"We are in OnTestEnd of %s.%s.
\n
"
,
test_info
.
test_suite_name
(),
test_info
.
name
());
}
void
OnTestSuiteEnd
(
const
::
testing
::
TestSuite
&
test_suite
)
override
{
printf
(
"We are in OnTestSuiteEnd of %s.
\n
"
,
test_suite
.
name
());
}
};
TEST
(
HasSkipTest
,
Test0
)
{
SUCCEED
()
<<
"Expected success."
;
}
TEST
(
HasSkipTest
,
Test1
)
{
GTEST_SKIP
()
<<
"Expected skip."
;
}
TEST
(
HasSkipTest
,
Test2
)
{
FAIL
()
<<
"Expected failure."
;
}
TEST
(
HasSkipTest
,
Test3
)
{
FAIL
()
<<
"Expected failure."
;
}
TEST
(
HasSkipTest
,
Test4
)
{
FAIL
()
<<
"Expected failure."
;
}
}
// namespace
int
main
(
int
argc
,
char
**
argv
)
{
::
testing
::
InitGoogleTest
(
&
argc
,
argv
);
::
testing
::
UnitTest
::
GetInstance
()
->
listeners
().
Append
(
new
MyTestListener
());
return
RUN_ALL_TESTS
();
}
googletest/test/googletest-output-test_.cc
View file @
ee014912
...
...
@@ -476,63 +476,6 @@ TEST(GtestFailAtTest, MessageContainsSpecifiedFileAndLineNumber) {
GTEST_FAIL_AT
(
"foo.cc"
,
42
)
<<
"Expected fatal failure in foo.cc"
;
}
#if GTEST_IS_THREADSAFE
// A unary function that may die.
void
DieIf
(
bool
should_die
)
{
GTEST_CHECK_
(
!
should_die
)
<<
" - death inside DieIf()."
;
}
// Tests running death tests in a multi-threaded context.
// Used for coordination between the main and the spawn thread.
struct
SpawnThreadNotifications
{
SpawnThreadNotifications
()
{}
Notification
spawn_thread_started
;
Notification
spawn_thread_ok_to_terminate
;
private:
GTEST_DISALLOW_COPY_AND_ASSIGN_
(
SpawnThreadNotifications
);
};
// The function to be executed in the thread spawn by the
// MultipleThreads test (below).
static
void
ThreadRoutine
(
SpawnThreadNotifications
*
notifications
)
{
// Signals the main thread that this thread has started.
notifications
->
spawn_thread_started
.
Notify
();
// Waits for permission to finish from the main thread.
notifications
->
spawn_thread_ok_to_terminate
.
WaitForNotification
();
}
// This is a death-test test, but it's not named with a DeathTest
// suffix. It starts threads which might interfere with later
// death tests, so it must run after all other death tests.
class
DeathTestAndMultiThreadsTest
:
public
testing
::
Test
{
protected:
// Starts a thread and waits for it to begin.
void
SetUp
()
override
{
thread_
.
reset
(
new
ThreadWithParam
<
SpawnThreadNotifications
*>
(
&
ThreadRoutine
,
&
notifications_
,
nullptr
));
notifications_
.
spawn_thread_started
.
WaitForNotification
();
}
// Tells the thread to finish, and reaps it.
// Depending on the version of the thread library in use,
// a manager thread might still be left running that will interfere
// with later death tests. This is unfortunate, but this class
// cleans up after itself as best it can.
void
TearDown
()
override
{
notifications_
.
spawn_thread_ok_to_terminate
.
Notify
();
}
private:
SpawnThreadNotifications
notifications_
;
std
::
unique_ptr
<
ThreadWithParam
<
SpawnThreadNotifications
*>
>
thread_
;
};
#endif // GTEST_IS_THREADSAFE
// The MixedUpTestSuiteTest test case verifies that Google Test will fail a
// test if it uses a different fixture class than what other tests in
// the same test case use. It deliberately contains two fixture
...
...
googletest/test/gtest_unittest.cc
View file @
ee014912
...
...
@@ -37,21 +37,22 @@
// code once "gtest.h" has been #included.
// Do not move it after other gtest #includes.
TEST
(
CommandLineFlagsTest
,
CanBeAccessedInCodeOnceGTestHIsIncluded
)
{
bool dummy = testing::GTEST_FLAG(also_run_disabled_tests)
|| testing::GTEST_FLAG(break_on_failure)
|| testing::GTEST_FLAG(catch_exceptions)
|| testing::GTEST_FLAG(color) != "unknown"
|| testing::GTEST_FLAG(filter) != "unknown"
|| testing::GTEST_FLAG(list_tests)
|| testing::GTEST_FLAG(output) != "unknown"
|| testing::GTEST_FLAG(print_time)
|| testing::GTEST_FLAG(random_seed)
|| testing::GTEST_FLAG(repeat) > 0
|| testing::GTEST_FLAG(show_internal_stack_frames)
|| testing::GTEST_FLAG(shuffle)
|| testing::GTEST_FLAG(stack_trace_depth) > 0
|| testing::GTEST_FLAG(stream_result_to) != "unknown"
|| testing::GTEST_FLAG(throw_on_failure);
bool
dummy
=
testing
::
GTEST_FLAG
(
also_run_disabled_tests
)
||
testing
::
GTEST_FLAG
(
break_on_failure
)
||
testing
::
GTEST_FLAG
(
catch_exceptions
)
||
testing
::
GTEST_FLAG
(
color
)
!=
"unknown"
||
testing
::
GTEST_FLAG
(
fail_fast
)
||
testing
::
GTEST_FLAG
(
filter
)
!=
"unknown"
||
testing
::
GTEST_FLAG
(
list_tests
)
||
testing
::
GTEST_FLAG
(
output
)
!=
"unknown"
||
testing
::
GTEST_FLAG
(
print_time
)
||
testing
::
GTEST_FLAG
(
random_seed
)
||
testing
::
GTEST_FLAG
(
repeat
)
>
0
||
testing
::
GTEST_FLAG
(
show_internal_stack_frames
)
||
testing
::
GTEST_FLAG
(
shuffle
)
||
testing
::
GTEST_FLAG
(
stack_trace_depth
)
>
0
||
testing
::
GTEST_FLAG
(
stream_result_to
)
!=
"unknown"
||
testing
::
GTEST_FLAG
(
throw_on_failure
);
EXPECT_TRUE
(
dummy
||
!
dummy
);
// Suppresses warning that dummy is unused.
}
...
...
@@ -202,6 +203,7 @@ using testing::GTEST_FLAG(break_on_failure);
using
testing
::
GTEST_FLAG
(
catch_exceptions
);
using
testing
::
GTEST_FLAG
(
color
);
using
testing
::
GTEST_FLAG
(
death_test_use_fork
);
using
testing
::
GTEST_FLAG
(
fail_fast
);
using
testing
::
GTEST_FLAG
(
filter
);
using
testing
::
GTEST_FLAG
(
list_tests
);
using
testing
::
GTEST_FLAG
(
output
);
...
...
@@ -1598,6 +1600,7 @@ class GTestFlagSaverTest : public Test {
GTEST_FLAG
(
catch_exceptions
)
=
false
;
GTEST_FLAG
(
death_test_use_fork
)
=
false
;
GTEST_FLAG
(
color
)
=
"auto"
;
GTEST_FLAG
(
fail_fast
)
=
false
;
GTEST_FLAG
(
filter
)
=
""
;
GTEST_FLAG
(
list_tests
)
=
false
;
GTEST_FLAG
(
output
)
=
""
;
...
...
@@ -1625,6 +1628,7 @@ class GTestFlagSaverTest : public Test {
EXPECT_FALSE
(
GTEST_FLAG
(
catch_exceptions
));
EXPECT_STREQ
(
"auto"
,
GTEST_FLAG
(
color
).
c_str
());
EXPECT_FALSE
(
GTEST_FLAG
(
death_test_use_fork
));
EXPECT_FALSE
(
GTEST_FLAG
(
fail_fast
));
EXPECT_STREQ
(
""
,
GTEST_FLAG
(
filter
).
c_str
());
EXPECT_FALSE
(
GTEST_FLAG
(
list_tests
));
EXPECT_STREQ
(
""
,
GTEST_FLAG
(
output
).
c_str
());
...
...
@@ -1641,6 +1645,7 @@ class GTestFlagSaverTest : public Test {
GTEST_FLAG
(
catch_exceptions
)
=
true
;
GTEST_FLAG
(
color
)
=
"no"
;
GTEST_FLAG
(
death_test_use_fork
)
=
true
;
GTEST_FLAG
(
fail_fast
)
=
true
;
GTEST_FLAG
(
filter
)
=
"abc"
;
GTEST_FLAG
(
list_tests
)
=
true
;
GTEST_FLAG
(
output
)
=
"xml:foo.xml"
;
...
...
@@ -5495,10 +5500,12 @@ TEST_F(SetUpTestSuiteTest, TestSetupTestSuite2) {
// The Flags struct stores a copy of all Google Test flags.
struct
Flags
{
// Constructs a Flags struct where each flag has its default value.
Flags() : also_run_disabled_tests(false),
Flags
()
:
also_run_disabled_tests
(
false
),
break_on_failure
(
false
),
catch_exceptions
(
false
),
death_test_use_fork
(
false
),
fail_fast
(
false
),
filter
(
""
),
list_tests
(
false
),
output
(
""
),
...
...
@@ -5544,6 +5551,14 @@ struct Flags {
return
flags
;
}
// Creates a Flags struct where the gtest_fail_fast flag has
// the given value.
static
Flags
FailFast
(
bool
fail_fast
)
{
Flags
flags
;
flags
.
fail_fast
=
fail_fast
;
return
flags
;
}
// Creates a Flags struct where the gtest_filter flag has the given
// value.
static
Flags
Filter
(
const
char
*
filter
)
{
...
...
@@ -5629,6 +5644,7 @@ struct Flags {
bool
break_on_failure
;
bool
catch_exceptions
;
bool
death_test_use_fork
;
bool
fail_fast
;
const
char
*
filter
;
bool
list_tests
;
const
char
*
output
;
...
...
@@ -5650,6 +5666,7 @@ class ParseFlagsTest : public Test {
GTEST_FLAG
(
break_on_failure
)
=
false
;
GTEST_FLAG
(
catch_exceptions
)
=
false
;
GTEST_FLAG
(
death_test_use_fork
)
=
false
;
GTEST_FLAG
(
fail_fast
)
=
false
;
GTEST_FLAG
(
filter
)
=
""
;
GTEST_FLAG
(
list_tests
)
=
false
;
GTEST_FLAG
(
output
)
=
""
;
...
...
@@ -5680,6 +5697,7 @@ class ParseFlagsTest : public Test {
EXPECT_EQ
(
expected
.
break_on_failure
,
GTEST_FLAG
(
break_on_failure
));
EXPECT_EQ
(
expected
.
catch_exceptions
,
GTEST_FLAG
(
catch_exceptions
));
EXPECT_EQ
(
expected
.
death_test_use_fork
,
GTEST_FLAG
(
death_test_use_fork
));
EXPECT_EQ
(
expected
.
fail_fast
,
GTEST_FLAG
(
fail_fast
));
EXPECT_STREQ
(
expected
.
filter
,
GTEST_FLAG
(
filter
).
c_str
());
EXPECT_EQ
(
expected
.
list_tests
,
GTEST_FLAG
(
list_tests
));
EXPECT_STREQ
(
expected
.
output
,
GTEST_FLAG
(
output
).
c_str
());
...
...
@@ -5766,6 +5784,15 @@ TEST_F(ParseFlagsTest, NoFlag) {
GTEST_TEST_PARSING_FLAGS_
(
argv
,
argv2
,
Flags
(),
false
);
}
// Tests parsing --gtest_fail_fast.
TEST_F
(
ParseFlagsTest
,
FailFast
)
{
const
char
*
argv
[]
=
{
"foo.exe"
,
"--gtest_fail_fast"
,
nullptr
};
const
char
*
argv2
[]
=
{
"foo.exe"
,
nullptr
};
GTEST_TEST_PARSING_FLAGS_
(
argv
,
argv2
,
Flags
::
FailFast
(
true
),
false
);
}
// Tests parsing a bad --gtest_filter flag.
TEST_F
(
ParseFlagsTest
,
FilterBad
)
{
const
char
*
argv
[]
=
{
"foo.exe"
,
"--gtest_filter"
,
nullptr
};
...
...
@@ -7077,7 +7104,7 @@ class ConversionHelperDerived : public ConversionHelperBase {};
// Tests that IsAProtocolMessage<T>::value is a compile-time constant.
TEST
(
IsAProtocolMessageTest
,
ValueIsCompileTimeConstant
)
{
GTEST_COMPILE_ASSERT_(IsAProtocolMessage<::proto2::Message>::value,
GTEST_COMPILE_ASSERT_
(
IsAProtocolMessage
<::
proto2
::
Message
Lite
>::
value
,
const_true
);
GTEST_COMPILE_ASSERT_
(
!
IsAProtocolMessage
<
int
>::
value
,
const_false
);
}
...
...
@@ -7085,7 +7112,7 @@ TEST(IsAProtocolMessageTest, ValueIsCompileTimeConstant) {
// Tests that IsAProtocolMessage<T>::value is true when T is
// proto2::Message or a sub-class of it.
TEST
(
IsAProtocolMessageTest
,
ValueIsTrueWhenTypeIsAProtocolMessage
)
{
EXPECT_TRUE(IsAProtocolMessage<
::proto2::Message>::value);
EXPECT_TRUE
(
IsAProtocolMessage
<::
proto2
::
Message
Lite
>::
value
);
}
// Tests that IsAProtocolMessage<T>::value is false when T is neither
...
...
Prev
1
2
Next
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