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
eddd9e85
Commit
eddd9e85
authored
Apr 08, 2010
by
vladlosev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixes gtest_filter_unittest and gtest_help_test on systems without death tests.
parent
d21c142e
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
83 additions
and
64 deletions
+83
-64
gtest_filter_unittest.py
test/gtest_filter_unittest.py
+68
-60
gtest_help_test.py
test/gtest_help_test.py
+11
-4
gtest_help_test_.cc
test/gtest_help_test_.cc
+4
-0
No files found.
test/gtest_filter_unittest.py
View file @
eddd9e85
...
...
@@ -108,6 +108,14 @@ TEST_CASE_REGEX = re.compile(r'^\[\-+\] \d+ tests? from (\w+(/\w+)?)')
# Regex for parsing test names from Google Test's output.
TEST_REGEX
=
re
.
compile
(
r'^\[\s*RUN\s*\].*\.(\w+(/\w+)?)'
)
# 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
# Full names of all tests in gtest_filter_unittests_.
PARAM_TESTS
=
[
'SeqP/ParamTest.TestX/0'
,
...
...
@@ -129,6 +137,14 @@ DISABLED_TESTS = [
'DISABLED_FoobarbazTest.TestA'
,
]
if
SUPPORTS_DEATH_TESTS
:
DEATH_TESTS
=
[
'HasDeathTest.Test1'
,
'HasDeathTest.Test2'
,
]
else
:
DEATH_TESTS
=
[]
# All the non-disabled tests.
ACTIVE_TESTS
=
[
'FooTest.Abc'
,
...
...
@@ -141,10 +157,7 @@ ACTIVE_TESTS = [
'BazTest.TestOne'
,
'BazTest.TestA'
,
'BazTest.TestB'
,
'HasDeathTest.Test1'
,
'HasDeathTest.Test2'
,
]
+
PARAM_TESTS
]
+
DEATH_TESTS
+
PARAM_TESTS
param_tests_present
=
None
...
...
@@ -210,7 +223,7 @@ def RunWithSharding(total_shards, shard_index, command):
class
GTestFilterUnitTest
(
gtest_test_utils
.
TestCase
):
"""Tests
GTEST_FILTER env variable or --gtest_filter
flag to filter tests."""
"""Tests
the env variable or the command line
flag to filter tests."""
# Utilities.
...
...
@@ -242,17 +255,17 @@ class GTestFilterUnitTest(gtest_test_utils.TestCase):
return
tests_to_run
def
RunAndVerify
(
self
,
gtest_filter
,
tests_to_run
):
"""Checks that the binary runs correct set of tests for
the
given filter."""
"""Checks that the binary runs correct set of tests for
a
given filter."""
tests_to_run
=
self
.
AdjustForParameterizedTests
(
tests_to_run
)
# First, tests using
GTEST_FILTER
.
# First, tests using
the environment variable
.
# Windows removes empty variables from the environment when passing it
# to a new process. This means it is impossible to pass an empty filter
# into a process using the
GTEST_FILTER environment variable. However,
#
we can still test the case when the variable is not supplied (i.e.,
#
gtest_filter is
None).
# to a new process.
This means it is impossible to pass an empty filter
# into a process using the
environment variable. However, we can still
#
test the case when the variable is not supplied (i.e., gtest_filter is
# None).
# pylint: disable-msg=C6403
if
CAN_TEST_EMPTY_FILTER
or
gtest_filter
!=
''
:
SetEnvVar
(
FILTER_ENV_VAR
,
gtest_filter
)
...
...
@@ -261,7 +274,7 @@ class GTestFilterUnitTest(gtest_test_utils.TestCase):
self
.
AssertSetEqual
(
tests_run
,
tests_to_run
)
# pylint: enable-msg=C6403
# Next, tests using
--gtest_filter
.
# Next, tests using
the command line flag
.
if
gtest_filter
is
None
:
args
=
[]
...
...
@@ -291,10 +304,10 @@ class GTestFilterUnitTest(gtest_test_utils.TestCase):
tests_to_run
=
self
.
AdjustForParameterizedTests
(
tests_to_run
)
# Windows removes empty variables from the environment when passing it
# to a new process. This means it is impossible to pass an empty filter
# into a process using the
GTEST_FILTER environment variable. However,
#
we can still test the case when the variable is not supplied (i.e.,
#
gtest_filter is
None).
# to a new process.
This means it is impossible to pass an empty filter
# into a process using the
environment variable. However, we can still
#
test the case when the variable is not supplied (i.e., gtest_filter is
# None).
# pylint: disable-msg=C6403
if
CAN_TEST_EMPTY_FILTER
or
gtest_filter
!=
''
:
SetEnvVar
(
FILTER_ENV_VAR
,
gtest_filter
)
...
...
@@ -435,10 +448,7 @@ class GTestFilterUnitTest(gtest_test_utils.TestCase):
'BazTest.TestOne'
,
'BazTest.TestA'
,
'BazTest.TestB'
,
'HasDeathTest.Test1'
,
'HasDeathTest.Test2'
,
]
+
PARAM_TESTS
)
'BazTest.TestB'
,
]
+
DEATH_TESTS
+
PARAM_TESTS
)
def
testWildcardInTestName
(
self
):
"""Tests using wildcard in the test name."""
...
...
@@ -499,7 +509,7 @@ class GTestFilterUnitTest(gtest_test_utils.TestCase):
])
def
testNegativeFilters
(
self
):
self
.
RunAndVerify
(
'*-
HasDeathTest.Test1
'
,
[
self
.
RunAndVerify
(
'*-
BazTest.TestOne
'
,
[
'FooTest.Abc'
,
'FooTest.Xyz'
,
...
...
@@ -507,24 +517,17 @@ class GTestFilterUnitTest(gtest_test_utils.TestCase):
'BarTest.TestTwo'
,
'BarTest.TestThree'
,
'BazTest.TestOne'
,
'BazTest.TestA'
,
'BazTest.TestB'
,
]
+
DEATH_TESTS
+
PARAM_TESTS
)
'HasDeathTest.Test2'
,
]
+
PARAM_TESTS
)
self
.
RunAndVerify
(
'*-FooTest.Abc:HasDeathTest.*'
,
[
self
.
RunAndVerify
(
'*-FooTest.Abc:BazTest.*'
,
[
'FooTest.Xyz'
,
'BarTest.TestOne'
,
'BarTest.TestTwo'
,
'BarTest.TestThree'
,
'BazTest.TestOne'
,
'BazTest.TestA'
,
'BazTest.TestB'
,
]
+
PARAM_TESTS
)
]
+
DEATH_TESTS
+
PARAM_TESTS
)
self
.
RunAndVerify
(
'BarTest.*-BarTest.TestOne'
,
[
'BarTest.TestTwo'
,
...
...
@@ -532,15 +535,11 @@ class GTestFilterUnitTest(gtest_test_utils.TestCase):
])
# Tests without leading '*'.
self
.
RunAndVerify
(
'-FooTest.Abc:FooTest.Xyz:
HasDeath
Test.*'
,
[
self
.
RunAndVerify
(
'-FooTest.Abc:FooTest.Xyz:
Baz
Test.*'
,
[
'BarTest.TestOne'
,
'BarTest.TestTwo'
,
'BarTest.TestThree'
,
'BazTest.TestOne'
,
'BazTest.TestA'
,
'BazTest.TestB'
,
]
+
PARAM_TESTS
)
]
+
DEATH_TESTS
+
PARAM_TESTS
)
# Value parameterized tests.
self
.
RunAndVerify
(
'*/*'
,
PARAM_TESTS
)
...
...
@@ -586,7 +585,7 @@ class GTestFilterUnitTest(gtest_test_utils.TestCase):
os
.
remove
(
shard_status_file
)
def
testShardStatusFileIsCreatedWithListTests
(
self
):
"""Tests that the shard file is created with
--gtest_list_tests
."""
"""Tests that the shard file is created with
the "list_tests" flag
."""
shard_status_file
=
os
.
path
.
join
(
gtest_test_utils
.
GetTempDir
(),
'shard_status_file2'
)
...
...
@@ -594,32 +593,41 @@ class GTestFilterUnitTest(gtest_test_utils.TestCase):
extra_env
=
{
SHARD_STATUS_FILE_ENV_VAR
:
shard_status_file
}
try
:
InvokeWithModifiedEnv
(
extra_env
,
RunAndReturnOutput
,
[
'--gtest_list_tests'
])
output
=
InvokeWithModifiedEnv
(
extra_env
,
RunAndReturnOutput
,
[
LIST_TESTS_FLAG
])
finally
:
# This assertion ensures that Google Test enumerated the tests as
# opposed to running them.
self
.
assert_
(
'[==========]'
not
in
output
,
'Unexpected output during test enumeration.
\n
'
'Please ensure that LIST_TESTS_FLAG is assigned the
\n
'
'correct flag value for listing Google Test tests.'
)
self
.
assert_
(
os
.
path
.
exists
(
shard_status_file
))
os
.
remove
(
shard_status_file
)
def
testShardingWorksWithDeathTests
(
self
):
"""Tests integration with death tests and sharding."""
gtest_filter
=
'HasDeathTest.*:SeqP/*'
expected_tests
=
[
'HasDeathTest.Test1'
,
'HasDeathTest.Test2'
,
'SeqP/ParamTest.TestX/0'
,
'SeqP/ParamTest.TestX/1'
,
'SeqP/ParamTest.TestY/0'
,
'SeqP/ParamTest.TestY/1'
,
]
for
flag
in
[
'--gtest_death_test_style=threadsafe'
,
'--gtest_death_test_style=fast'
]:
self
.
RunAndVerifyWithSharding
(
gtest_filter
,
3
,
expected_tests
,
check_exit_0
=
True
,
args
=
[
flag
])
self
.
RunAndVerifyWithSharding
(
gtest_filter
,
5
,
expected_tests
,
check_exit_0
=
True
,
args
=
[
flag
])
if
SUPPORTS_DEATH_TESTS
:
def
testShardingWorksWithDeathTests
(
self
):
"""Tests integration with death tests and sharding."""
gtest_filter
=
'HasDeathTest.*:SeqP/*'
expected_tests
=
[
'HasDeathTest.Test1'
,
'HasDeathTest.Test2'
,
'SeqP/ParamTest.TestX/0'
,
'SeqP/ParamTest.TestX/1'
,
'SeqP/ParamTest.TestY/0'
,
'SeqP/ParamTest.TestY/1'
,
]
for
flag
in
[
'--gtest_death_test_style=threadsafe'
,
'--gtest_death_test_style=fast'
]:
self
.
RunAndVerifyWithSharding
(
gtest_filter
,
3
,
expected_tests
,
check_exit_0
=
True
,
args
=
[
flag
])
self
.
RunAndVerifyWithSharding
(
gtest_filter
,
5
,
expected_tests
,
check_exit_0
=
True
,
args
=
[
flag
])
if
__name__
==
'__main__'
:
gtest_test_utils
.
Main
()
test/gtest_help_test.py
View file @
eddd9e85
...
...
@@ -51,11 +51,15 @@ FLAG_PREFIX = '--gtest_'
CATCH_EXCEPTIONS_FLAG
=
FLAG_PREFIX
+
'catch_exceptions'
DEATH_TEST_STYLE_FLAG
=
FLAG_PREFIX
+
'death_test_style'
UNKNOWN_FLAG
=
FLAG_PREFIX
+
'unknown_flag_for_testing'
INCORRECT_FLAG_VARIANTS
=
[
re
.
sub
(
'^--'
,
'-'
,
DEATH_TEST_STYLE_FLAG
),
re
.
sub
(
'^--'
,
'/'
,
DEATH_TEST_STYLE_FLAG
),
re
.
sub
(
'_'
,
'-'
,
DEATH_TEST_STYLE_FLAG
)]
LIST_TESTS_FLAG
=
FLAG_PREFIX
+
'list_tests'
INCORRECT_FLAG_VARIANTS
=
[
re
.
sub
(
'^--'
,
'-'
,
LIST_TESTS_FLAG
),
re
.
sub
(
'^--'
,
'/'
,
LIST_TESTS_FLAG
),
re
.
sub
(
'_'
,
'-'
,
LIST_TESTS_FLAG
)]
INTERNAL_FLAG_FOR_TESTING
=
FLAG_PREFIX
+
'internal_flag_for_testing'
SUPPORTS_DEATH_TESTS
=
"DeathTest"
in
gtest_test_utils
.
Subprocess
(
[
PROGRAM_PATH
,
LIST_TESTS_FLAG
])
.
output
# The help message must match this regex.
HELP_REGEX
=
re
.
compile
(
FLAG_PREFIX
+
r'list_tests.*'
+
...
...
@@ -107,10 +111,13 @@ class GTestHelpTest(gtest_test_utils.TestCase):
self
.
assert_
(
HELP_REGEX
.
search
(
output
),
output
)
if
IS_WINDOWS
:
self
.
assert_
(
CATCH_EXCEPTIONS_FLAG
in
output
,
output
)
self
.
assert_
(
DEATH_TEST_STYLE_FLAG
not
in
output
,
output
)
else
:
self
.
assert_
(
CATCH_EXCEPTIONS_FLAG
not
in
output
,
output
)
if
SUPPORTS_DEATH_TESTS
and
not
IS_WINDOWS
:
self
.
assert_
(
DEATH_TEST_STYLE_FLAG
in
output
,
output
)
else
:
self
.
assert_
(
DEATH_TEST_STYLE_FLAG
not
in
output
,
output
)
def
TestNonHelpFlag
(
self
,
flag
):
"""Verifies correct behavior when no help flag is specified.
...
...
test/gtest_help_test_.cc
View file @
eddd9e85
...
...
@@ -40,3 +40,7 @@
TEST
(
HelpFlagTest
,
ShouldNotBeRun
)
{
ASSERT_TRUE
(
false
)
<<
"Tests shouldn't be run when --help is specified."
;
}
#if GTEST_HAS_DEATH_TEST
TEST
(
DeathTest
,
UsedByPythonScriptToDetectSupportForDeathTestsInThisBinary
)
{}
#endif
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