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
fa2b06c5
Commit
fa2b06c5
authored
Apr 24, 2009
by
zhanyong.wan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Makes --gtest_list_tests honor the test filter (by Jay Campan).
parent
f2d0d0e3
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
85 additions
and
40 deletions
+85
-40
gtest.h
include/gtest/gtest.h
+6
-1
gtest-internal-inl.h
src/gtest-internal-inl.h
+10
-2
gtest.cc
src/gtest.cc
+29
-18
gtest_list_tests_unittest.py
test/gtest_list_tests_unittest.py
+38
-17
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
AllTests
();
void
List
TestsMatchingFilter
();
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
AllTests
()
{
void
UnitTestImpl
::
List
TestsMatchingFilter
()
{
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