1#!/usr/bin/env python 2# 3# Copyright 2006, Google Inc. 4# All rights reserved. 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions are 8# met: 9# 10# * Redistributions of source code must retain the above copyright 11# notice, this list of conditions and the following disclaimer. 12# * Redistributions in binary form must reproduce the above 13# copyright notice, this list of conditions and the following disclaimer 14# in the documentation and/or other materials provided with the 15# distribution. 16# * Neither the name of Google Inc. nor the names of its 17# contributors may be used to endorse or promote products derived from 18# this software without specific prior written permission. 19# 20# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 23# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 24# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 25# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 32"""Unit test for Google Test's --gtest_list_tests flag. 33 34A user can ask Google Test to list all tests by specifying the 35--gtest_list_tests flag. This script tests such functionality 36by invoking gtest_list_tests_unittest_ (a program written with 37Google Test) the command line flags. 38""" 39 40__author__ = 'phanna@google.com (Patrick Hanna)' 41 42import gtest_test_utils 43import re 44 45 46# Constants. 47 48# The command line flag for enabling/disabling listing all tests. 49LIST_TESTS_FLAG = 'gtest_list_tests' 50 51# Path to the gtest_list_tests_unittest_ program. 52EXE_PATH = gtest_test_utils.GetTestExecutablePath('gtest_list_tests_unittest_') 53 54# The expected output when running gtest_list_tests_unittest_ with 55# --gtest_list_tests 56EXPECTED_OUTPUT_NO_FILTER_RE = re.compile(r"""FooDeathTest\. 57 Test1 58Foo\. 59 Bar1 60 Bar2 61 DISABLED_Bar3 62Abc\. 63 Xyz 64 Def 65FooBar\. 66 Baz 67FooTest\. 68 Test1 69 DISABLED_Test2 70 Test3 71TypedTest/0\. # TypeParam = (VeryLo{245}|class VeryLo{239})\.\.\. 72 TestA 73 TestB 74TypedTest/1\. # TypeParam = int\s*\* 75 TestA 76 TestB 77TypedTest/2\. # TypeParam = .*MyArray<bool,\s*42> 78 TestA 79 TestB 80My/TypeParamTest/0\. # TypeParam = (VeryLo{245}|class VeryLo{239})\.\.\. 81 TestA 82 TestB 83My/TypeParamTest/1\. # TypeParam = int\s*\* 84 TestA 85 TestB 86My/TypeParamTest/2\. # TypeParam = .*MyArray<bool,\s*42> 87 TestA 88 TestB 89MyInstantiation/ValueParamTest\. 90 TestA/0 # GetParam\(\) = one line 91 TestA/1 # GetParam\(\) = two\\nlines 92 TestA/2 # GetParam\(\) = a very\\nlo{241}\.\.\. 93 TestB/0 # GetParam\(\) = one line 94 TestB/1 # GetParam\(\) = two\\nlines 95 TestB/2 # GetParam\(\) = a very\\nlo{241}\.\.\. 96""") 97 98# The expected output when running gtest_list_tests_unittest_ with 99# --gtest_list_tests and --gtest_filter=Foo*. 100EXPECTED_OUTPUT_FILTER_FOO_RE = re.compile(r"""FooDeathTest\. 101 Test1 102Foo\. 103 Bar1 104 Bar2 105 DISABLED_Bar3 106FooBar\. 107 Baz 108FooTest\. 109 Test1 110 DISABLED_Test2 111 Test3 112""") 113 114# Utilities. 115 116 117def Run(args): 118 """Runs gtest_list_tests_unittest_ and returns the list of tests printed.""" 119 120 return gtest_test_utils.Subprocess([EXE_PATH] + args, 121 capture_stderr=False).output 122 123 124# The unit test. 125 126class GTestListTestsUnitTest(gtest_test_utils.TestCase): 127 """Tests using the --gtest_list_tests flag to list all tests.""" 128 129 def RunAndVerify(self, flag_value, expected_output_re, other_flag): 130 """Runs gtest_list_tests_unittest_ and verifies that it prints 131 the correct tests. 132 133 Args: 134 flag_value: value of the --gtest_list_tests flag; 135 None if the flag should not be present. 136 expected_output_re: regular expression that matches the expected 137 output after running command; 138 other_flag: a different flag to be passed to command 139 along with gtest_list_tests; 140 None if the flag should not be present. 141 """ 142 143 if flag_value is None: 144 flag = '' 145 flag_expression = 'not set' 146 elif flag_value == '0': 147 flag = '--%s=0' % LIST_TESTS_FLAG 148 flag_expression = '0' 149 else: 150 flag = '--%s' % LIST_TESTS_FLAG 151 flag_expression = '1' 152 153 args = [flag] 154 155 if other_flag is not None: 156 args += [other_flag] 157 158 output = Run(args) 159 160 if expected_output_re: 161 self.assert_( 162 expected_output_re.match(output), 163 ('when %s is %s, the output of "%s" is "%s",\n' 164 'which does not match regex "%s"' % 165 (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output, 166 expected_output_re.pattern))) 167 else: 168 self.assert_( 169 not EXPECTED_OUTPUT_NO_FILTER_RE.match(output), 170 ('when %s is %s, the output of "%s" is "%s"'% 171 (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output))) 172 173 def testDefaultBehavior(self): 174 """Tests the behavior of the default mode.""" 175 176 self.RunAndVerify(flag_value=None, 177 expected_output_re=None, 178 other_flag=None) 179 180 def testFlag(self): 181 """Tests using the --gtest_list_tests flag.""" 182 183 self.RunAndVerify(flag_value='0', 184 expected_output_re=None, 185 other_flag=None) 186 self.RunAndVerify(flag_value='1', 187 expected_output_re=EXPECTED_OUTPUT_NO_FILTER_RE, 188 other_flag=None) 189 190 def testOverrideNonFilterFlags(self): 191 """Tests that --gtest_list_tests overrides the non-filter flags.""" 192 193 self.RunAndVerify(flag_value='1', 194 expected_output_re=EXPECTED_OUTPUT_NO_FILTER_RE, 195 other_flag='--gtest_break_on_failure') 196 197 def testWithFilterFlags(self): 198 """Tests that --gtest_list_tests takes into account the 199 --gtest_filter flag.""" 200 201 self.RunAndVerify(flag_value='1', 202 expected_output_re=EXPECTED_OUTPUT_FILTER_FOO_RE, 203 other_flag='--gtest_filter=Foo*') 204 205 206if __name__ == '__main__': 207 gtest_test_utils.Main() 208