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 os 44import re 45import sys 46import unittest 47 48 49# Constants. 50 51# The command line flag for enabling/disabling listing all tests. 52LIST_TESTS_FLAG = 'gtest_list_tests' 53 54# Path to the gtest_list_tests_unittest_ program. 55EXE_PATH = os.path.join(gtest_test_utils.GetBuildDir(), 56 'gtest_list_tests_unittest_'); 57 58# The expected output when running gtest_list_tests_unittest_ with 59# --gtest_list_tests 60EXPECTED_OUTPUT = """FooDeathTest. 61 Test1 62Foo. 63 Bar1 64 Bar2 65 Bar3 66Abc. 67 Xyz 68 Def 69FooBar. 70 Baz 71FooTest. 72 Test1 73 Test2 74 Test3 75""" 76 77# Utilities. 78 79def Run(command): 80 """Runs a command and returns the list of tests printed. 81 """ 82 83 stdout_file = os.popen(command, "r") 84 85 output = stdout_file.read() 86 87 stdout_file.close() 88 return output 89 90 91# The unit test. 92 93class GTestListTestsUnitTest(unittest.TestCase): 94 """Tests using the --gtest_list_tests flag to list all tests. 95 """ 96 97 def RunAndVerify(self, flag_value, expected_output, other_flag): 98 """Runs gtest_list_tests_unittest_ and verifies that it prints 99 the correct tests. 100 101 Args: 102 flag_value: value of the --gtest_list_tests flag; 103 None if the flag should not be present. 104 105 expected_output: the expected output after running command; 106 107 other_flag: a different flag to be passed to command 108 along with gtest_list_tests; 109 None if the flag should not be present. 110 """ 111 112 if flag_value is None: 113 flag = '' 114 flag_expression = "not set" 115 elif flag_value == '0': 116 flag = ' --%s=0' % LIST_TESTS_FLAG 117 flag_expression = "0" 118 else: 119 flag = ' --%s' % LIST_TESTS_FLAG 120 flag_expression = "1" 121 122 command = EXE_PATH + flag 123 124 if other_flag is not None: 125 command += " " + other_flag 126 127 output = Run(command) 128 129 msg = ('when %s is %s, the output of "%s" is "%s".' % 130 (LIST_TESTS_FLAG, flag_expression, command, output)) 131 132 if expected_output is not None: 133 self.assert_(output == expected_output, msg) 134 else: 135 self.assert_(output != EXPECTED_OUTPUT, msg) 136 137 def testDefaultBehavior(self): 138 """Tests the behavior of the default mode.""" 139 140 self.RunAndVerify(flag_value=None, 141 expected_output=None, 142 other_flag=None) 143 144 def testFlag(self): 145 """Tests using the --gtest_list_tests flag.""" 146 147 self.RunAndVerify(flag_value='0', 148 expected_output=None, 149 other_flag=None) 150 self.RunAndVerify(flag_value='1', 151 expected_output=EXPECTED_OUTPUT, 152 other_flag=None) 153 154 def testOverrideOtherFlags(self): 155 """Tests that --gtest_list_tests overrides all other flags.""" 156 157 self.RunAndVerify(flag_value="1", 158 expected_output=EXPECTED_OUTPUT, 159 other_flag="--gtest_filter=*") 160 self.RunAndVerify(flag_value="1", 161 expected_output=EXPECTED_OUTPUT, 162 other_flag="--gtest_break_on_failure") 163 164if __name__ == '__main__': 165 gtest_test_utils.Main() 166