Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F68286348
googletest-list-tests-unittest.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Wed, Jun 26, 17:56
Size
6 KB
Mime Type
text/x-python
Expires
Fri, Jun 28, 17:56 (2 d)
Engine
blob
Format
Raw Data
Handle
18556745
Attached To
R9484 sp4e-homework-lars-bertil
googletest-list-tests-unittest.py
View Options
#!/usr/bin/env python
#
# Copyright 2006, 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's --gtest_list_tests flag.
A user can ask Google Test to list all tests by specifying the
--gtest_list_tests flag. This script tests such functionality
by invoking googletest-list-tests-unittest_ (a program written with
Google Test) the command line flags.
"""
import
re
import
gtest_test_utils
# Constants.
# The command line flag for enabling/disabling listing all tests.
LIST_TESTS_FLAG
=
'gtest_list_tests'
# Path to the googletest-list-tests-unittest_ program.
EXE_PATH
=
gtest_test_utils
.
GetTestExecutablePath
(
'googletest-list-tests-unittest_'
)
# The expected output when running googletest-list-tests-unittest_ with
# --gtest_list_tests
EXPECTED_OUTPUT_NO_FILTER_RE
=
re
.
compile
(
r"""FooDeathTest\.
Test1
Foo\.
Bar1
Bar2
DISABLED_Bar3
Abc\.
Xyz
Def
FooBar\.
Baz
FooTest\.
Test1
DISABLED_Test2
Test3
TypedTest/0\. # TypeParam = (VeryLo{245}|class VeryLo{239})\.\.\.
TestA
TestB
TypedTest/1\. # TypeParam = int\s*\*( __ptr64)?
TestA
TestB
TypedTest/2\. # TypeParam = .*MyArray<bool,\s*42>
TestA
TestB
My/TypeParamTest/0\. # TypeParam = (VeryLo{245}|class VeryLo{239})\.\.\.
TestA
TestB
My/TypeParamTest/1\. # TypeParam = int\s*\*( __ptr64)?
TestA
TestB
My/TypeParamTest/2\. # TypeParam = .*MyArray<bool,\s*42>
TestA
TestB
MyInstantiation/ValueParamTest\.
TestA/0 # GetParam\(\) = one line
TestA/1 # GetParam\(\) = two\\nlines
TestA/2 # GetParam\(\) = a very\\nlo{241}\.\.\.
TestB/0 # GetParam\(\) = one line
TestB/1 # GetParam\(\) = two\\nlines
TestB/2 # GetParam\(\) = a very\\nlo{241}\.\.\.
"""
)
# The expected output when running googletest-list-tests-unittest_ with
# --gtest_list_tests and --gtest_filter=Foo*.
EXPECTED_OUTPUT_FILTER_FOO_RE
=
re
.
compile
(
r"""FooDeathTest\.
Test1
Foo\.
Bar1
Bar2
DISABLED_Bar3
FooBar\.
Baz
FooTest\.
Test1
DISABLED_Test2
Test3
"""
)
# Utilities.
def
Run
(
args
):
"""Runs googletest-list-tests-unittest_ and returns the list of tests printed."""
return
gtest_test_utils
.
Subprocess
([
EXE_PATH
]
+
args
,
capture_stderr
=
False
)
.
output
# The unit test.
class
GTestListTestsUnitTest
(
gtest_test_utils
.
TestCase
):
"""Tests using the --gtest_list_tests flag to list all tests."""
def
RunAndVerify
(
self
,
flag_value
,
expected_output_re
,
other_flag
):
"""Runs googletest-list-tests-unittest_ and verifies that it prints
the correct tests.
Args:
flag_value: value of the --gtest_list_tests flag;
None if the flag should not be present.
expected_output_re: regular expression that matches the expected
output after running command;
other_flag: a different flag to be passed to command
along with gtest_list_tests;
None if the flag should not be present.
"""
if
flag_value
is
None
:
flag
=
''
flag_expression
=
'not set'
elif
flag_value
==
'0'
:
flag
=
'--
%s
=0'
%
LIST_TESTS_FLAG
flag_expression
=
'0'
else
:
flag
=
'--
%s
'
%
LIST_TESTS_FLAG
flag_expression
=
'1'
args
=
[
flag
]
if
other_flag
is
not
None
:
args
+=
[
other_flag
]
output
=
Run
(
args
)
if
expected_output_re
:
self
.
assert_
(
expected_output_re
.
match
(
output
),
(
'when
%s
is
%s
, the output of "
%s
" is "
%s
",
\n
'
'which does not match regex "
%s
"'
%
(
LIST_TESTS_FLAG
,
flag_expression
,
' '
.
join
(
args
),
output
,
expected_output_re
.
pattern
)))
else
:
self
.
assert_
(
not
EXPECTED_OUTPUT_NO_FILTER_RE
.
match
(
output
),
(
'when
%s
is
%s
, the output of "
%s
" is "
%s
"'
%
(
LIST_TESTS_FLAG
,
flag_expression
,
' '
.
join
(
args
),
output
)))
def
testDefaultBehavior
(
self
):
"""Tests the behavior of the default mode."""
self
.
RunAndVerify
(
flag_value
=
None
,
expected_output_re
=
None
,
other_flag
=
None
)
def
testFlag
(
self
):
"""Tests using the --gtest_list_tests flag."""
self
.
RunAndVerify
(
flag_value
=
'0'
,
expected_output_re
=
None
,
other_flag
=
None
)
self
.
RunAndVerify
(
flag_value
=
'1'
,
expected_output_re
=
EXPECTED_OUTPUT_NO_FILTER_RE
,
other_flag
=
None
)
def
testOverrideNonFilterFlags
(
self
):
"""Tests that --gtest_list_tests overrides the non-filter flags."""
self
.
RunAndVerify
(
flag_value
=
'1'
,
expected_output_re
=
EXPECTED_OUTPUT_NO_FILTER_RE
,
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_re
=
EXPECTED_OUTPUT_FILTER_FOO_RE
,
other_flag
=
'--gtest_filter=Foo*'
)
if
__name__
==
'__main__'
:
gtest_test_utils
.
Main
()
Event Timeline
Log In to Comment