14b6829f0d28990dd645e16386eb226d0f10c8731shiqian#!/usr/bin/env python 24b6829f0d28990dd645e16386eb226d0f10c8731shiqian# 34b6829f0d28990dd645e16386eb226d0f10c8731shiqian# Copyright 2006, Google Inc. 44b6829f0d28990dd645e16386eb226d0f10c8731shiqian# All rights reserved. 54b6829f0d28990dd645e16386eb226d0f10c8731shiqian# 64b6829f0d28990dd645e16386eb226d0f10c8731shiqian# Redistribution and use in source and binary forms, with or without 74b6829f0d28990dd645e16386eb226d0f10c8731shiqian# modification, are permitted provided that the following conditions are 84b6829f0d28990dd645e16386eb226d0f10c8731shiqian# met: 94b6829f0d28990dd645e16386eb226d0f10c8731shiqian# 104b6829f0d28990dd645e16386eb226d0f10c8731shiqian# * Redistributions of source code must retain the above copyright 114b6829f0d28990dd645e16386eb226d0f10c8731shiqian# notice, this list of conditions and the following disclaimer. 124b6829f0d28990dd645e16386eb226d0f10c8731shiqian# * Redistributions in binary form must reproduce the above 134b6829f0d28990dd645e16386eb226d0f10c8731shiqian# copyright notice, this list of conditions and the following disclaimer 144b6829f0d28990dd645e16386eb226d0f10c8731shiqian# in the documentation and/or other materials provided with the 154b6829f0d28990dd645e16386eb226d0f10c8731shiqian# distribution. 164b6829f0d28990dd645e16386eb226d0f10c8731shiqian# * Neither the name of Google Inc. nor the names of its 174b6829f0d28990dd645e16386eb226d0f10c8731shiqian# contributors may be used to endorse or promote products derived from 184b6829f0d28990dd645e16386eb226d0f10c8731shiqian# this software without specific prior written permission. 194b6829f0d28990dd645e16386eb226d0f10c8731shiqian# 204b6829f0d28990dd645e16386eb226d0f10c8731shiqian# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 214b6829f0d28990dd645e16386eb226d0f10c8731shiqian# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 224b6829f0d28990dd645e16386eb226d0f10c8731shiqian# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 234b6829f0d28990dd645e16386eb226d0f10c8731shiqian# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 244b6829f0d28990dd645e16386eb226d0f10c8731shiqian# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 254b6829f0d28990dd645e16386eb226d0f10c8731shiqian# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 264b6829f0d28990dd645e16386eb226d0f10c8731shiqian# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 274b6829f0d28990dd645e16386eb226d0f10c8731shiqian# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 284b6829f0d28990dd645e16386eb226d0f10c8731shiqian# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 294b6829f0d28990dd645e16386eb226d0f10c8731shiqian# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 304b6829f0d28990dd645e16386eb226d0f10c8731shiqian# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 314b6829f0d28990dd645e16386eb226d0f10c8731shiqian 324b6829f0d28990dd645e16386eb226d0f10c8731shiqian"""Unit test for Google Test's --gtest_list_tests flag. 334b6829f0d28990dd645e16386eb226d0f10c8731shiqian 344b6829f0d28990dd645e16386eb226d0f10c8731shiqianA user can ask Google Test to list all tests by specifying the 354b6829f0d28990dd645e16386eb226d0f10c8731shiqian--gtest_list_tests flag. This script tests such functionality 364b6829f0d28990dd645e16386eb226d0f10c8731shiqianby invoking gtest_list_tests_unittest_ (a program written with 374b6829f0d28990dd645e16386eb226d0f10c8731shiqianGoogle Test) the command line flags. 384b6829f0d28990dd645e16386eb226d0f10c8731shiqian""" 394b6829f0d28990dd645e16386eb226d0f10c8731shiqian 404b6829f0d28990dd645e16386eb226d0f10c8731shiqian__author__ = 'phanna@google.com (Patrick Hanna)' 414b6829f0d28990dd645e16386eb226d0f10c8731shiqian 426d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanimport gtest_test_utils 43b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanimport re 444b6829f0d28990dd645e16386eb226d0f10c8731shiqian 454b6829f0d28990dd645e16386eb226d0f10c8731shiqian 464b6829f0d28990dd645e16386eb226d0f10c8731shiqian# Constants. 474b6829f0d28990dd645e16386eb226d0f10c8731shiqian 484b6829f0d28990dd645e16386eb226d0f10c8731shiqian# The command line flag for enabling/disabling listing all tests. 494b6829f0d28990dd645e16386eb226d0f10c8731shiqianLIST_TESTS_FLAG = 'gtest_list_tests' 504b6829f0d28990dd645e16386eb226d0f10c8731shiqian 514b6829f0d28990dd645e16386eb226d0f10c8731shiqian# Path to the gtest_list_tests_unittest_ program. 52767998dfadaf87c1193d51cf5847a7f147c6e1f7zhanyong.wanEXE_PATH = gtest_test_utils.GetTestExecutablePath('gtest_list_tests_unittest_') 534b6829f0d28990dd645e16386eb226d0f10c8731shiqian 544b6829f0d28990dd645e16386eb226d0f10c8731shiqian# The expected output when running gtest_list_tests_unittest_ with 554b6829f0d28990dd645e16386eb226d0f10c8731shiqian# --gtest_list_tests 56b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanEXPECTED_OUTPUT_NO_FILTER_RE = re.compile(r"""FooDeathTest\. 574b6829f0d28990dd645e16386eb226d0f10c8731shiqian Test1 58b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanFoo\. 594b6829f0d28990dd645e16386eb226d0f10c8731shiqian Bar1 604b6829f0d28990dd645e16386eb226d0f10c8731shiqian Bar2 6193a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan DISABLED_Bar3 62b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanAbc\. 634b6829f0d28990dd645e16386eb226d0f10c8731shiqian Xyz 644b6829f0d28990dd645e16386eb226d0f10c8731shiqian Def 65b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanFooBar\. 664b6829f0d28990dd645e16386eb226d0f10c8731shiqian Baz 67b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanFooTest\. 684b6829f0d28990dd645e16386eb226d0f10c8731shiqian Test1 6993a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan DISABLED_Test2 7093a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan Test3 71b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanTypedTest/0\. # TypeParam = (VeryLo{245}|class VeryLo{239})\.\.\. 72b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan TestA 73b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan TestB 74b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanTypedTest/1\. # TypeParam = int\s*\* 75b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan TestA 76b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan TestB 77b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanTypedTest/2\. # TypeParam = .*MyArray<bool,\s*42> 78b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan TestA 79b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan TestB 80b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanMy/TypeParamTest/0\. # TypeParam = (VeryLo{245}|class VeryLo{239})\.\.\. 81b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan TestA 82b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan TestB 83b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanMy/TypeParamTest/1\. # TypeParam = int\s*\* 84b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan TestA 85b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan TestB 86b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanMy/TypeParamTest/2\. # TypeParam = .*MyArray<bool,\s*42> 87b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan TestA 88b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan TestB 89b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanMyInstantiation/ValueParamTest\. 90b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan TestA/0 # GetParam\(\) = one line 91b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan TestA/1 # GetParam\(\) = two\\nlines 92b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan TestA/2 # GetParam\(\) = a very\\nlo{241}\.\.\. 93b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan TestB/0 # GetParam\(\) = one line 94b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan TestB/1 # GetParam\(\) = two\\nlines 95b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan TestB/2 # GetParam\(\) = a very\\nlo{241}\.\.\. 96b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan""") 9793a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan 9893a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan# The expected output when running gtest_list_tests_unittest_ with 9993a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan# --gtest_list_tests and --gtest_filter=Foo*. 100b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanEXPECTED_OUTPUT_FILTER_FOO_RE = re.compile(r"""FooDeathTest\. 10193a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan Test1 102b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanFoo\. 10393a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan Bar1 10493a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan Bar2 10593a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan DISABLED_Bar3 106b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanFooBar\. 10793a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan Baz 108b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanFooTest\. 10993a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan Test1 11093a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan DISABLED_Test2 1114b6829f0d28990dd645e16386eb226d0f10c8731shiqian Test3 112b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan""") 1134b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1144b6829f0d28990dd645e16386eb226d0f10c8731shiqian# Utilities. 1154b6829f0d28990dd645e16386eb226d0f10c8731shiqian 11693a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan 117b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wandef Run(args): 118b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan """Runs gtest_list_tests_unittest_ and returns the list of tests printed.""" 1194b6829f0d28990dd645e16386eb226d0f10c8731shiqian 120b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan return gtest_test_utils.Subprocess([EXE_PATH] + args, 121b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan capture_stderr=False).output 1224b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1234b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1244b6829f0d28990dd645e16386eb226d0f10c8731shiqian# The unit test. 1254b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1266d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass GTestListTestsUnitTest(gtest_test_utils.TestCase): 12793a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan """Tests using the --gtest_list_tests flag to list all tests.""" 1284b6829f0d28990dd645e16386eb226d0f10c8731shiqian 129b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan def RunAndVerify(self, flag_value, expected_output_re, other_flag): 1304b6829f0d28990dd645e16386eb226d0f10c8731shiqian """Runs gtest_list_tests_unittest_ and verifies that it prints 1314b6829f0d28990dd645e16386eb226d0f10c8731shiqian the correct tests. 1324b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1334b6829f0d28990dd645e16386eb226d0f10c8731shiqian Args: 134b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan flag_value: value of the --gtest_list_tests flag; 135b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan None if the flag should not be present. 136b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan expected_output_re: regular expression that matches the expected 137b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan output after running command; 138b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan other_flag: a different flag to be passed to command 139b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan along with gtest_list_tests; 140b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan None if the flag should not be present. 1414b6829f0d28990dd645e16386eb226d0f10c8731shiqian """ 1424b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1434b6829f0d28990dd645e16386eb226d0f10c8731shiqian if flag_value is None: 1444b6829f0d28990dd645e16386eb226d0f10c8731shiqian flag = '' 145b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan flag_expression = 'not set' 1464b6829f0d28990dd645e16386eb226d0f10c8731shiqian elif flag_value == '0': 147b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan flag = '--%s=0' % LIST_TESTS_FLAG 148b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan flag_expression = '0' 1494b6829f0d28990dd645e16386eb226d0f10c8731shiqian else: 150b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan flag = '--%s' % LIST_TESTS_FLAG 151b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan flag_expression = '1' 1524b6829f0d28990dd645e16386eb226d0f10c8731shiqian 153b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan args = [flag] 1544b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1554b6829f0d28990dd645e16386eb226d0f10c8731shiqian if other_flag is not None: 156b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan args += [other_flag] 1574b6829f0d28990dd645e16386eb226d0f10c8731shiqian 158b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan output = Run(args) 1594b6829f0d28990dd645e16386eb226d0f10c8731shiqian 160b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan if expected_output_re: 161b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan self.assert_( 162b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan expected_output_re.match(output), 163b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan ('when %s is %s, the output of "%s" is "%s",\n' 164b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan 'which does not match regex "%s"' % 165b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output, 166b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan expected_output_re.pattern))) 1674b6829f0d28990dd645e16386eb226d0f10c8731shiqian else: 168b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan self.assert_( 169b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan not EXPECTED_OUTPUT_NO_FILTER_RE.match(output), 170b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan ('when %s is %s, the output of "%s" is "%s"'% 171b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output))) 1724b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1734b6829f0d28990dd645e16386eb226d0f10c8731shiqian def testDefaultBehavior(self): 1744b6829f0d28990dd645e16386eb226d0f10c8731shiqian """Tests the behavior of the default mode.""" 1754b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1764b6829f0d28990dd645e16386eb226d0f10c8731shiqian self.RunAndVerify(flag_value=None, 177b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan expected_output_re=None, 1784b6829f0d28990dd645e16386eb226d0f10c8731shiqian other_flag=None) 1794b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1804b6829f0d28990dd645e16386eb226d0f10c8731shiqian def testFlag(self): 1814b6829f0d28990dd645e16386eb226d0f10c8731shiqian """Tests using the --gtest_list_tests flag.""" 1824b6829f0d28990dd645e16386eb226d0f10c8731shiqian 1834b6829f0d28990dd645e16386eb226d0f10c8731shiqian self.RunAndVerify(flag_value='0', 184b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan expected_output_re=None, 1854b6829f0d28990dd645e16386eb226d0f10c8731shiqian other_flag=None) 1864b6829f0d28990dd645e16386eb226d0f10c8731shiqian self.RunAndVerify(flag_value='1', 187b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan expected_output_re=EXPECTED_OUTPUT_NO_FILTER_RE, 1884b6829f0d28990dd645e16386eb226d0f10c8731shiqian other_flag=None) 1894b6829f0d28990dd645e16386eb226d0f10c8731shiqian 19093a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan def testOverrideNonFilterFlags(self): 19193a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan """Tests that --gtest_list_tests overrides the non-filter flags.""" 1924b6829f0d28990dd645e16386eb226d0f10c8731shiqian 193b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan self.RunAndVerify(flag_value='1', 194b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan expected_output_re=EXPECTED_OUTPUT_NO_FILTER_RE, 195b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan other_flag='--gtest_break_on_failure') 1964b6829f0d28990dd645e16386eb226d0f10c8731shiqian 19793a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan def testWithFilterFlags(self): 19893a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan """Tests that --gtest_list_tests takes into account the 19993a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan --gtest_filter flag.""" 20093a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan 201b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan self.RunAndVerify(flag_value='1', 202b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan expected_output_re=EXPECTED_OUTPUT_FILTER_FOO_RE, 203b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan other_flag='--gtest_filter=Foo*') 20493a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan 20593a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan 2064b6829f0d28990dd645e16386eb226d0f10c8731shiqianif __name__ == '__main__': 2074b6829f0d28990dd645e16386eb226d0f10c8731shiqian gtest_test_utils.Main() 208