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
fa2b06c5
Commit
fa2b06c5
authored
Apr 24, 2009
by
zhanyong.wan
Browse files
Makes --gtest_list_tests honor the test filter (by Jay Campan).
parent
f2d0d0e3
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
85 additions
and
40 deletions
+85
-40
include/gtest/gtest.h
include/gtest/gtest.h
+6
-1
src/gtest-internal-inl.h
src/gtest-internal-inl.h
+10
-2
src/gtest.cc
src/gtest.cc
+29
-18
test/gtest_list_tests_unittest.py
test/gtest_list_tests_unittest.py
+38
-17
test/gtest_list_tests_unittest_.cc
test/gtest_list_tests_unittest_.cc
+2
-2
No files found.
include/gtest/gtest.h
View file @
fa2b06c5
...
@@ -376,7 +376,12 @@ class TestInfo {
...
@@ -376,7 +376,12 @@ class TestInfo {
// Returns the test comment.
// Returns the test comment.
const
char
*
comment
()
const
;
const
char
*
comment
()
const
;
// Returns true if this test should run.
// Returns true if this test matches the user-specified filter.
bool
matches_filter
()
const
;
// Returns true if this test should run, that is if the test is not disabled
// (or it is disabled but the also_run_disabled_tests flag has been specified)
// and its full name matches the user-specified filter.
//
//
// Google Test allows the user to filter the tests by their full names.
// Google Test allows the user to filter the tests by their full names.
// The full name of a test Bar in test case Foo is defined as
// The full name of a test Bar in test case Foo is defined as
...
...
src/gtest-internal-inl.h
View file @
fa2b06c5
...
@@ -621,6 +621,12 @@ class TestInfoImpl {
...
@@ -621,6 +621,12 @@ class TestInfoImpl {
// Sets the is_disabled member.
// Sets the is_disabled member.
void
set_is_disabled
(
bool
is
)
{
is_disabled_
=
is
;
}
void
set_is_disabled
(
bool
is
)
{
is_disabled_
=
is
;
}
// Returns true if this test matches the filter specified by the user.
bool
matches_filter
()
const
{
return
matches_filter_
;
}
// Sets the matches_filter member.
void
set_matches_filter
(
bool
matches
)
{
matches_filter_
=
matches
;
}
// Returns the test case name.
// Returns the test case name.
const
char
*
test_case_name
()
const
{
return
test_case_name_
.
c_str
();
}
const
char
*
test_case_name
()
const
{
return
test_case_name_
.
c_str
();
}
...
@@ -667,6 +673,8 @@ class TestInfoImpl {
...
@@ -667,6 +673,8 @@ class TestInfoImpl {
const
TypeId
fixture_class_id_
;
// ID of the test fixture class
const
TypeId
fixture_class_id_
;
// ID of the test fixture class
bool
should_run_
;
// True iff this test should run
bool
should_run_
;
// True iff this test should run
bool
is_disabled_
;
// True iff this test is disabled
bool
is_disabled_
;
// True iff this test is disabled
bool
matches_filter_
;
// True if this test matches the
// user-specified filter.
internal
::
TestFactoryBase
*
const
factory_
;
// The factory that creates
internal
::
TestFactoryBase
*
const
factory_
;
// The factory that creates
// the test object
// the test object
...
@@ -1164,8 +1172,8 @@ class UnitTestImpl {
...
@@ -1164,8 +1172,8 @@ class UnitTestImpl {
// Returns the number of tests that should run.
// Returns the number of tests that should run.
int
FilterTests
(
ReactionToSharding
shard_tests
);
int
FilterTests
(
ReactionToSharding
shard_tests
);
//
Lists all the tests by name
.
//
Prints the names of the tests matching the user-specified filter flag
.
void
List
All
Tests
();
void
ListTests
MatchingFilter
();
const
TestCase
*
current_test_case
()
const
{
return
current_test_case_
;
}
const
TestCase
*
current_test_case
()
const
{
return
current_test_case_
;
}
TestInfo
*
current_test_info
()
{
return
current_test_info_
;
}
TestInfo
*
current_test_info
()
{
return
current_test_info_
;
}
...
...
src/gtest.cc
View file @
fa2b06c5
...
@@ -2172,6 +2172,9 @@ const char* TestInfo::comment() const {
...
@@ -2172,6 +2172,9 @@ const char* TestInfo::comment() const {
// Returns true if this test should run.
// Returns true if this test should run.
bool
TestInfo
::
should_run
()
const
{
return
impl_
->
should_run
();
}
bool
TestInfo
::
should_run
()
const
{
return
impl_
->
should_run
();
}
// Returns true if this test matches the user-specified filter.
bool
TestInfo
::
matches_filter
()
const
{
return
impl_
->
matches_filter
();
}
// Returns the result of the test.
// Returns the result of the test.
const
internal
::
TestResult
*
TestInfo
::
result
()
const
{
return
impl_
->
result
();
}
const
internal
::
TestResult
*
TestInfo
::
result
()
const
{
return
impl_
->
result
();
}
...
@@ -3297,8 +3300,8 @@ void UnitTest::AddTestPartResult(TestPartResultType result_type,
...
@@ -3297,8 +3300,8 @@ void UnitTest::AddTestPartResult(TestPartResultType result_type,
ReportTestPartResult
(
result
);
ReportTestPartResult
(
result
);
if
(
result_type
!=
TPRT_SUCCESS
)
{
if
(
result_type
!=
TPRT_SUCCESS
)
{
// g
uni
t_break_on_failure takes precedence over
// g
tes
t_break_on_failure takes precedence over
// g
uni
t_throw_on_failure. This allows a user to set the latter
// g
tes
t_throw_on_failure. This allows a user to set the latter
// in the code (perhaps in order to use Google Test assertions
// in the code (perhaps in order to use Google Test assertions
// with another testing framework) and specify the former on the
// with another testing framework) and specify the former on the
// command line for debugging.
// command line for debugging.
...
@@ -3591,13 +3594,6 @@ int UnitTestImpl::RunAllTests() {
...
@@ -3591,13 +3594,6 @@ int UnitTestImpl::RunAllTests() {
// protocol.
// protocol.
internal
::
WriteToShardStatusFileIfNeeded
();
internal
::
WriteToShardStatusFileIfNeeded
();
// Lists all the tests and exits if the --gtest_list_tests
// flag was specified.
if
(
GTEST_FLAG
(
list_tests
))
{
ListAllTests
();
return
0
;
}
// True iff we are in a subprocess for running a thread-safe-style
// True iff we are in a subprocess for running a thread-safe-style
// death test.
// death test.
bool
in_subprocess_for_death_test
=
false
;
bool
in_subprocess_for_death_test
=
false
;
...
@@ -3618,6 +3614,13 @@ int UnitTestImpl::RunAllTests() {
...
@@ -3618,6 +3614,13 @@ int UnitTestImpl::RunAllTests() {
?
HONOR_SHARDING_PROTOCOL
?
HONOR_SHARDING_PROTOCOL
:
IGNORE_SHARDING_PROTOCOL
)
>
0
;
:
IGNORE_SHARDING_PROTOCOL
)
>
0
;
// List the tests and exit if the --gtest_list_tests flag was specified.
if
(
GTEST_FLAG
(
list_tests
))
{
// This must be called *after* FilterTests() has been called.
ListTestsMatchingFilter
();
return
0
;
}
// True iff at least one test has failed.
// True iff at least one test has failed.
bool
failed
=
false
;
bool
failed
=
false
;
...
@@ -3808,10 +3811,14 @@ int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) {
...
@@ -3808,10 +3811,14 @@ int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) {
kDisableTestFilter
);
kDisableTestFilter
);
test_info
->
impl
()
->
set_is_disabled
(
is_disabled
);
test_info
->
impl
()
->
set_is_disabled
(
is_disabled
);
const
bool
is_runnable
=
const
bool
matches_filter
=
(
GTEST_FLAG
(
also_run_disabled_tests
)
||
!
is_disabled
)
&&
internal
::
UnitTestOptions
::
FilterMatchesTest
(
test_case_name
,
internal
::
UnitTestOptions
::
FilterMatchesTest
(
test_case_name
,
test_name
);
test_name
);
test_info
->
impl
()
->
set_matches_filter
(
matches_filter
);
const
bool
is_runnable
=
(
GTEST_FLAG
(
also_run_disabled_tests
)
||
!
is_disabled
)
&&
matches_filter
;
const
bool
is_selected
=
is_runnable
&&
const
bool
is_selected
=
is_runnable
&&
(
shard_tests
==
IGNORE_SHARDING_PROTOCOL
||
(
shard_tests
==
IGNORE_SHARDING_PROTOCOL
||
...
@@ -3828,23 +3835,26 @@ int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) {
...
@@ -3828,23 +3835,26 @@ int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) {
return
num_selected_tests
;
return
num_selected_tests
;
}
}
//
Lists all tests by name
.
//
Prints the names of the tests matching the user-specified filter flag
.
void
UnitTestImpl
::
List
All
Tests
()
{
void
UnitTestImpl
::
ListTests
MatchingFilter
()
{
for
(
const
internal
::
ListNode
<
TestCase
*>*
test_case_node
=
test_cases_
.
Head
();
for
(
const
internal
::
ListNode
<
TestCase
*>*
test_case_node
=
test_cases_
.
Head
();
test_case_node
!=
NULL
;
test_case_node
!=
NULL
;
test_case_node
=
test_case_node
->
next
())
{
test_case_node
=
test_case_node
->
next
())
{
const
TestCase
*
const
test_case
=
test_case_node
->
element
();
const
TestCase
*
const
test_case
=
test_case_node
->
element
();
bool
printed_test_case_name
=
false
;
// Prints the test case name following by an indented list of test nodes.
printf
(
"%s.
\n
"
,
test_case
->
name
());
for
(
const
internal
::
ListNode
<
TestInfo
*>*
test_info_node
=
for
(
const
internal
::
ListNode
<
TestInfo
*>*
test_info_node
=
test_case
->
test_info_list
().
Head
();
test_case
->
test_info_list
().
Head
();
test_info_node
!=
NULL
;
test_info_node
!=
NULL
;
test_info_node
=
test_info_node
->
next
())
{
test_info_node
=
test_info_node
->
next
())
{
const
TestInfo
*
const
test_info
=
test_info_node
->
element
();
const
TestInfo
*
const
test_info
=
test_info_node
->
element
();
if
(
test_info
->
matches_filter
())
{
printf
(
" %s
\n
"
,
test_info
->
name
());
if
(
!
printed_test_case_name
)
{
printed_test_case_name
=
true
;
printf
(
"%s.
\n
"
,
test_case
->
name
());
}
printf
(
" %s
\n
"
,
test_info
->
name
());
}
}
}
}
}
fflush
(
stdout
);
fflush
(
stdout
);
...
@@ -3941,6 +3951,7 @@ TestInfoImpl::TestInfoImpl(TestInfo* parent,
...
@@ -3941,6 +3951,7 @@ TestInfoImpl::TestInfoImpl(TestInfo* parent,
fixture_class_id_
(
fixture_class_id
),
fixture_class_id_
(
fixture_class_id
),
should_run_
(
false
),
should_run_
(
false
),
is_disabled_
(
false
),
is_disabled_
(
false
),
matches_filter_
(
false
),
factory_
(
factory
)
{
factory_
(
factory
)
{
}
}
...
...
test/gtest_list_tests_unittest.py
View file @
fa2b06c5
...
@@ -56,12 +56,12 @@ EXE_PATH = gtest_test_utils.GetTestExecutablePath('gtest_list_tests_unittest_')
...
@@ -56,12 +56,12 @@ EXE_PATH = gtest_test_utils.GetTestExecutablePath('gtest_list_tests_unittest_')
# The expected output when running gtest_list_tests_unittest_ with
# The expected output when running gtest_list_tests_unittest_ with
# --gtest_list_tests
# --gtest_list_tests
EXPECTED_OUTPUT
=
"""FooDeathTest.
EXPECTED_OUTPUT
_NO_FILTER
=
"""FooDeathTest.
Test1
Test1
Foo.
Foo.
Bar1
Bar1
Bar2
Bar2
Bar3
DISABLED_
Bar3
Abc.
Abc.
Xyz
Xyz
Def
Def
...
@@ -69,17 +69,33 @@ FooBar.
...
@@ -69,17 +69,33 @@ FooBar.
Baz
Baz
FooTest.
FooTest.
Test1
Test1
Test2
DISABLED_Test2
Test3
"""
# The expected output when running gtest_list_tests_unittest_ with
# --gtest_list_tests and --gtest_filter=Foo*.
EXPECTED_OUTPUT_FILTER_FOO
=
"""FooDeathTest.
Test1
Foo.
Bar1
Bar2
DISABLED_Bar3
FooBar.
Baz
FooTest.
Test1
DISABLED_Test2
Test3
Test3
"""
"""
# Utilities.
# Utilities.
def
Run
(
command
):
def
Run
(
command
):
"""Runs a command and returns the list of tests printed.
"""Runs a command and returns the list of tests printed."""
"""
stdout_file
=
os
.
popen
(
command
,
"r"
)
stdout_file
=
os
.
popen
(
command
,
'r'
)
output
=
stdout_file
.
read
()
output
=
stdout_file
.
read
()
...
@@ -90,8 +106,7 @@ def Run(command):
...
@@ -90,8 +106,7 @@ def Run(command):
# The unit test.
# The unit test.
class
GTestListTestsUnitTest
(
unittest
.
TestCase
):
class
GTestListTestsUnitTest
(
unittest
.
TestCase
):
"""Tests using the --gtest_list_tests flag to list all tests.
"""Tests using the --gtest_list_tests flag to list all tests."""
"""
def
RunAndVerify
(
self
,
flag_value
,
expected_output
,
other_flag
):
def
RunAndVerify
(
self
,
flag_value
,
expected_output
,
other_flag
):
"""Runs gtest_list_tests_unittest_ and verifies that it prints
"""Runs gtest_list_tests_unittest_ and verifies that it prints
...
@@ -126,12 +141,12 @@ class GTestListTestsUnitTest(unittest.TestCase):
...
@@ -126,12 +141,12 @@ class GTestListTestsUnitTest(unittest.TestCase):
output
=
Run
(
command
)
output
=
Run
(
command
)
msg
=
(
'when %s is %s, the output of "%s" is "%s".'
%
msg
=
(
'when %s is %s, the output of "%s" is "%s".'
%
(
LIST_TESTS_FLAG
,
flag_expression
,
command
,
output
))
(
LIST_TESTS_FLAG
,
flag_expression
,
command
,
output
))
if
expected_output
is
not
None
:
if
expected_output
is
not
None
:
self
.
assert_
(
output
==
expected_output
,
msg
)
self
.
assert_
(
output
==
expected_output
,
msg
)
else
:
else
:
self
.
assert_
(
output
!=
EXPECTED_OUTPUT
,
msg
)
self
.
assert_
(
output
!=
EXPECTED_OUTPUT
_NO_FILTER
,
msg
)
def
testDefaultBehavior
(
self
):
def
testDefaultBehavior
(
self
):
"""Tests the behavior of the default mode."""
"""Tests the behavior of the default mode."""
...
@@ -147,18 +162,24 @@ class GTestListTestsUnitTest(unittest.TestCase):
...
@@ -147,18 +162,24 @@ class GTestListTestsUnitTest(unittest.TestCase):
expected_output
=
None
,
expected_output
=
None
,
other_flag
=
None
)
other_flag
=
None
)
self
.
RunAndVerify
(
flag_value
=
'1'
,
self
.
RunAndVerify
(
flag_value
=
'1'
,
expected_output
=
EXPECTED_OUTPUT
,
expected_output
=
EXPECTED_OUTPUT
_NO_FILTER
,
other_flag
=
None
)
other_flag
=
None
)
def
testOverride
Oth
erFlags
(
self
):
def
testOverride
NonFilt
erFlags
(
self
):
"""Tests that --gtest_list_tests overrides
all oth
er flags."""
"""Tests that --gtest_list_tests overrides
the non-filt
er flags."""
self
.
RunAndVerify
(
flag_value
=
"1"
,
self
.
RunAndVerify
(
flag_value
=
"1"
,
expected_output
=
EXPECTED_OUTPUT
,
expected_output
=
EXPECTED_OUTPUT_NO_FILTER
,
other_flag
=
"--gtest_filter=*"
)
self
.
RunAndVerify
(
flag_value
=
"1"
,
expected_output
=
EXPECTED_OUTPUT
,
other_flag
=
"--gtest_break_on_failure"
)
other_flag
=
"--gtest_break_on_failure"
)
def
testWithFilterFlags
(
self
):
"""Tests that --gtest_list_tests takes into account the
--gtest_filter flag."""
self
.
RunAndVerify
(
flag_value
=
"1"
,
expected_output
=
EXPECTED_OUTPUT_FILTER_FOO
,
other_flag
=
"--gtest_filter=Foo*"
)
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
gtest_test_utils
.
Main
()
gtest_test_utils
.
Main
()
test/gtest_list_tests_unittest_.cc
View file @
fa2b06c5
...
@@ -50,7 +50,7 @@ TEST(Foo, Bar1) {
...
@@ -50,7 +50,7 @@ TEST(Foo, Bar1) {
TEST
(
Foo
,
Bar2
)
{
TEST
(
Foo
,
Bar2
)
{
}
}
TEST
(
Foo
,
Bar3
)
{
TEST
(
Foo
,
DISABLED_
Bar3
)
{
}
}
TEST
(
Abc
,
Xyz
)
{
TEST
(
Abc
,
Xyz
)
{
...
@@ -68,7 +68,7 @@ class FooTest : public testing::Test {
...
@@ -68,7 +68,7 @@ class FooTest : public testing::Test {
TEST_F
(
FooTest
,
Test1
)
{
TEST_F
(
FooTest
,
Test1
)
{
}
}
TEST_F
(
FooTest
,
Test2
)
{
TEST_F
(
FooTest
,
DISABLED_
Test2
)
{
}
}
TEST_F
(
FooTest
,
Test3
)
{
TEST_F
(
FooTest
,
Test3
)
{
...
...
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