Differential D18622 Diff 52199 google/googletest/dist/googletest/test/googletest-list-tests-unittest.py
Changeset View
Changeset View
Standalone View
Standalone View
google/googletest/dist/googletest/test/googletest-list-tests-unittest.py
- This file was added.
Property | Old Value | New Value |
---|---|---|
svn:eol-style | null | native \ No newline at end of property |
svn:executable | null | * \ No newline at end of property |
svn:keywords | null | FreeBSD=%H \ No newline at end of property |
svn:mime-type | null | text/plain \ No newline at end of property |
#!/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() |