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