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