113481Sgiacomo.travaglini@arm.com#!/usr/bin/env python 213481Sgiacomo.travaglini@arm.com# 313481Sgiacomo.travaglini@arm.com# Copyright 2006, Google Inc. 413481Sgiacomo.travaglini@arm.com# All rights reserved. 513481Sgiacomo.travaglini@arm.com# 613481Sgiacomo.travaglini@arm.com# Redistribution and use in source and binary forms, with or without 713481Sgiacomo.travaglini@arm.com# modification, are permitted provided that the following conditions are 813481Sgiacomo.travaglini@arm.com# met: 913481Sgiacomo.travaglini@arm.com# 1013481Sgiacomo.travaglini@arm.com# * Redistributions of source code must retain the above copyright 1113481Sgiacomo.travaglini@arm.com# notice, this list of conditions and the following disclaimer. 1213481Sgiacomo.travaglini@arm.com# * Redistributions in binary form must reproduce the above 1313481Sgiacomo.travaglini@arm.com# copyright notice, this list of conditions and the following disclaimer 1413481Sgiacomo.travaglini@arm.com# in the documentation and/or other materials provided with the 1513481Sgiacomo.travaglini@arm.com# distribution. 1613481Sgiacomo.travaglini@arm.com# * Neither the name of Google Inc. nor the names of its 1713481Sgiacomo.travaglini@arm.com# contributors may be used to endorse or promote products derived from 1813481Sgiacomo.travaglini@arm.com# this software without specific prior written permission. 1913481Sgiacomo.travaglini@arm.com# 2013481Sgiacomo.travaglini@arm.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2113481Sgiacomo.travaglini@arm.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2213481Sgiacomo.travaglini@arm.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2313481Sgiacomo.travaglini@arm.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2413481Sgiacomo.travaglini@arm.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2513481Sgiacomo.travaglini@arm.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2613481Sgiacomo.travaglini@arm.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2713481Sgiacomo.travaglini@arm.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2813481Sgiacomo.travaglini@arm.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2913481Sgiacomo.travaglini@arm.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3013481Sgiacomo.travaglini@arm.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3113481Sgiacomo.travaglini@arm.com 3213481Sgiacomo.travaglini@arm.com"""Unit test for Google Test's --gtest_list_tests flag. 3313481Sgiacomo.travaglini@arm.com 3413481Sgiacomo.travaglini@arm.comA user can ask Google Test to list all tests by specifying the 3513481Sgiacomo.travaglini@arm.com--gtest_list_tests flag. This script tests such functionality 3613481Sgiacomo.travaglini@arm.comby invoking gtest_list_tests_unittest_ (a program written with 3713481Sgiacomo.travaglini@arm.comGoogle Test) the command line flags. 3813481Sgiacomo.travaglini@arm.com""" 3913481Sgiacomo.travaglini@arm.com 4013481Sgiacomo.travaglini@arm.com__author__ = 'phanna@google.com (Patrick Hanna)' 4113481Sgiacomo.travaglini@arm.com 4213481Sgiacomo.travaglini@arm.comimport gtest_test_utils 4313481Sgiacomo.travaglini@arm.comimport re 4413481Sgiacomo.travaglini@arm.com 4513481Sgiacomo.travaglini@arm.com 4613481Sgiacomo.travaglini@arm.com# Constants. 4713481Sgiacomo.travaglini@arm.com 4813481Sgiacomo.travaglini@arm.com# The command line flag for enabling/disabling listing all tests. 4913481Sgiacomo.travaglini@arm.comLIST_TESTS_FLAG = 'gtest_list_tests' 5013481Sgiacomo.travaglini@arm.com 5113481Sgiacomo.travaglini@arm.com# Path to the gtest_list_tests_unittest_ program. 5213481Sgiacomo.travaglini@arm.comEXE_PATH = gtest_test_utils.GetTestExecutablePath('gtest_list_tests_unittest_') 5313481Sgiacomo.travaglini@arm.com 5413481Sgiacomo.travaglini@arm.com# The expected output when running gtest_list_tests_unittest_ with 5513481Sgiacomo.travaglini@arm.com# --gtest_list_tests 5613481Sgiacomo.travaglini@arm.comEXPECTED_OUTPUT_NO_FILTER_RE = re.compile(r"""FooDeathTest\. 5713481Sgiacomo.travaglini@arm.com Test1 5813481Sgiacomo.travaglini@arm.comFoo\. 5913481Sgiacomo.travaglini@arm.com Bar1 6013481Sgiacomo.travaglini@arm.com Bar2 6113481Sgiacomo.travaglini@arm.com DISABLED_Bar3 6213481Sgiacomo.travaglini@arm.comAbc\. 6313481Sgiacomo.travaglini@arm.com Xyz 6413481Sgiacomo.travaglini@arm.com Def 6513481Sgiacomo.travaglini@arm.comFooBar\. 6613481Sgiacomo.travaglini@arm.com Baz 6713481Sgiacomo.travaglini@arm.comFooTest\. 6813481Sgiacomo.travaglini@arm.com Test1 6913481Sgiacomo.travaglini@arm.com DISABLED_Test2 7013481Sgiacomo.travaglini@arm.com Test3 7113481Sgiacomo.travaglini@arm.comTypedTest/0\. # TypeParam = (VeryLo{245}|class VeryLo{239})\.\.\. 7213481Sgiacomo.travaglini@arm.com TestA 7313481Sgiacomo.travaglini@arm.com TestB 7413481Sgiacomo.travaglini@arm.comTypedTest/1\. # TypeParam = int\s*\*( __ptr64)? 7513481Sgiacomo.travaglini@arm.com TestA 7613481Sgiacomo.travaglini@arm.com TestB 7713481Sgiacomo.travaglini@arm.comTypedTest/2\. # TypeParam = .*MyArray<bool,\s*42> 7813481Sgiacomo.travaglini@arm.com TestA 7913481Sgiacomo.travaglini@arm.com TestB 8013481Sgiacomo.travaglini@arm.comMy/TypeParamTest/0\. # TypeParam = (VeryLo{245}|class VeryLo{239})\.\.\. 8113481Sgiacomo.travaglini@arm.com TestA 8213481Sgiacomo.travaglini@arm.com TestB 8313481Sgiacomo.travaglini@arm.comMy/TypeParamTest/1\. # TypeParam = int\s*\*( __ptr64)? 8413481Sgiacomo.travaglini@arm.com TestA 8513481Sgiacomo.travaglini@arm.com TestB 8613481Sgiacomo.travaglini@arm.comMy/TypeParamTest/2\. # TypeParam = .*MyArray<bool,\s*42> 8713481Sgiacomo.travaglini@arm.com TestA 8813481Sgiacomo.travaglini@arm.com TestB 8913481Sgiacomo.travaglini@arm.comMyInstantiation/ValueParamTest\. 9013481Sgiacomo.travaglini@arm.com TestA/0 # GetParam\(\) = one line 9113481Sgiacomo.travaglini@arm.com TestA/1 # GetParam\(\) = two\\nlines 9213481Sgiacomo.travaglini@arm.com TestA/2 # GetParam\(\) = a very\\nlo{241}\.\.\. 9313481Sgiacomo.travaglini@arm.com TestB/0 # GetParam\(\) = one line 9413481Sgiacomo.travaglini@arm.com TestB/1 # GetParam\(\) = two\\nlines 9513481Sgiacomo.travaglini@arm.com TestB/2 # GetParam\(\) = a very\\nlo{241}\.\.\. 9613481Sgiacomo.travaglini@arm.com""") 9713481Sgiacomo.travaglini@arm.com 9813481Sgiacomo.travaglini@arm.com# The expected output when running gtest_list_tests_unittest_ with 9913481Sgiacomo.travaglini@arm.com# --gtest_list_tests and --gtest_filter=Foo*. 10013481Sgiacomo.travaglini@arm.comEXPECTED_OUTPUT_FILTER_FOO_RE = re.compile(r"""FooDeathTest\. 10113481Sgiacomo.travaglini@arm.com Test1 10213481Sgiacomo.travaglini@arm.comFoo\. 10313481Sgiacomo.travaglini@arm.com Bar1 10413481Sgiacomo.travaglini@arm.com Bar2 10513481Sgiacomo.travaglini@arm.com DISABLED_Bar3 10613481Sgiacomo.travaglini@arm.comFooBar\. 10713481Sgiacomo.travaglini@arm.com Baz 10813481Sgiacomo.travaglini@arm.comFooTest\. 10913481Sgiacomo.travaglini@arm.com Test1 11013481Sgiacomo.travaglini@arm.com DISABLED_Test2 11113481Sgiacomo.travaglini@arm.com Test3 11213481Sgiacomo.travaglini@arm.com""") 11313481Sgiacomo.travaglini@arm.com 11413481Sgiacomo.travaglini@arm.com# Utilities. 11513481Sgiacomo.travaglini@arm.com 11613481Sgiacomo.travaglini@arm.com 11713481Sgiacomo.travaglini@arm.comdef Run(args): 11813481Sgiacomo.travaglini@arm.com """Runs gtest_list_tests_unittest_ and returns the list of tests printed.""" 11913481Sgiacomo.travaglini@arm.com 12013481Sgiacomo.travaglini@arm.com return gtest_test_utils.Subprocess([EXE_PATH] + args, 12113481Sgiacomo.travaglini@arm.com capture_stderr=False).output 12213481Sgiacomo.travaglini@arm.com 12313481Sgiacomo.travaglini@arm.com 12413481Sgiacomo.travaglini@arm.com# The unit test. 12513481Sgiacomo.travaglini@arm.com 12613481Sgiacomo.travaglini@arm.comclass GTestListTestsUnitTest(gtest_test_utils.TestCase): 12713481Sgiacomo.travaglini@arm.com """Tests using the --gtest_list_tests flag to list all tests.""" 12813481Sgiacomo.travaglini@arm.com 12913481Sgiacomo.travaglini@arm.com def RunAndVerify(self, flag_value, expected_output_re, other_flag): 13013481Sgiacomo.travaglini@arm.com """Runs gtest_list_tests_unittest_ and verifies that it prints 13113481Sgiacomo.travaglini@arm.com the correct tests. 13213481Sgiacomo.travaglini@arm.com 13313481Sgiacomo.travaglini@arm.com Args: 13413481Sgiacomo.travaglini@arm.com flag_value: value of the --gtest_list_tests flag; 13513481Sgiacomo.travaglini@arm.com None if the flag should not be present. 13613481Sgiacomo.travaglini@arm.com expected_output_re: regular expression that matches the expected 13713481Sgiacomo.travaglini@arm.com output after running command; 13813481Sgiacomo.travaglini@arm.com other_flag: a different flag to be passed to command 13913481Sgiacomo.travaglini@arm.com along with gtest_list_tests; 14013481Sgiacomo.travaglini@arm.com None if the flag should not be present. 14113481Sgiacomo.travaglini@arm.com """ 14213481Sgiacomo.travaglini@arm.com 14313481Sgiacomo.travaglini@arm.com if flag_value is None: 14413481Sgiacomo.travaglini@arm.com flag = '' 14513481Sgiacomo.travaglini@arm.com flag_expression = 'not set' 14613481Sgiacomo.travaglini@arm.com elif flag_value == '0': 14713481Sgiacomo.travaglini@arm.com flag = '--%s=0' % LIST_TESTS_FLAG 14813481Sgiacomo.travaglini@arm.com flag_expression = '0' 14913481Sgiacomo.travaglini@arm.com else: 15013481Sgiacomo.travaglini@arm.com flag = '--%s' % LIST_TESTS_FLAG 15113481Sgiacomo.travaglini@arm.com flag_expression = '1' 15213481Sgiacomo.travaglini@arm.com 15313481Sgiacomo.travaglini@arm.com args = [flag] 15413481Sgiacomo.travaglini@arm.com 15513481Sgiacomo.travaglini@arm.com if other_flag is not None: 15613481Sgiacomo.travaglini@arm.com args += [other_flag] 15713481Sgiacomo.travaglini@arm.com 15813481Sgiacomo.travaglini@arm.com output = Run(args) 15913481Sgiacomo.travaglini@arm.com 16013481Sgiacomo.travaglini@arm.com if expected_output_re: 16113481Sgiacomo.travaglini@arm.com self.assert_( 16213481Sgiacomo.travaglini@arm.com expected_output_re.match(output), 16313481Sgiacomo.travaglini@arm.com ('when %s is %s, the output of "%s" is "%s",\n' 16413481Sgiacomo.travaglini@arm.com 'which does not match regex "%s"' % 16513481Sgiacomo.travaglini@arm.com (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output, 16613481Sgiacomo.travaglini@arm.com expected_output_re.pattern))) 16713481Sgiacomo.travaglini@arm.com else: 16813481Sgiacomo.travaglini@arm.com self.assert_( 16913481Sgiacomo.travaglini@arm.com not EXPECTED_OUTPUT_NO_FILTER_RE.match(output), 17013481Sgiacomo.travaglini@arm.com ('when %s is %s, the output of "%s" is "%s"'% 17113481Sgiacomo.travaglini@arm.com (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output))) 17213481Sgiacomo.travaglini@arm.com 17313481Sgiacomo.travaglini@arm.com def testDefaultBehavior(self): 17413481Sgiacomo.travaglini@arm.com """Tests the behavior of the default mode.""" 17513481Sgiacomo.travaglini@arm.com 17613481Sgiacomo.travaglini@arm.com self.RunAndVerify(flag_value=None, 17713481Sgiacomo.travaglini@arm.com expected_output_re=None, 17813481Sgiacomo.travaglini@arm.com other_flag=None) 17913481Sgiacomo.travaglini@arm.com 18013481Sgiacomo.travaglini@arm.com def testFlag(self): 18113481Sgiacomo.travaglini@arm.com """Tests using the --gtest_list_tests flag.""" 18213481Sgiacomo.travaglini@arm.com 18313481Sgiacomo.travaglini@arm.com self.RunAndVerify(flag_value='0', 18413481Sgiacomo.travaglini@arm.com expected_output_re=None, 18513481Sgiacomo.travaglini@arm.com other_flag=None) 18613481Sgiacomo.travaglini@arm.com self.RunAndVerify(flag_value='1', 18713481Sgiacomo.travaglini@arm.com expected_output_re=EXPECTED_OUTPUT_NO_FILTER_RE, 18813481Sgiacomo.travaglini@arm.com other_flag=None) 18913481Sgiacomo.travaglini@arm.com 19013481Sgiacomo.travaglini@arm.com def testOverrideNonFilterFlags(self): 19113481Sgiacomo.travaglini@arm.com """Tests that --gtest_list_tests overrides the non-filter flags.""" 19213481Sgiacomo.travaglini@arm.com 19313481Sgiacomo.travaglini@arm.com self.RunAndVerify(flag_value='1', 19413481Sgiacomo.travaglini@arm.com expected_output_re=EXPECTED_OUTPUT_NO_FILTER_RE, 19513481Sgiacomo.travaglini@arm.com other_flag='--gtest_break_on_failure') 19613481Sgiacomo.travaglini@arm.com 19713481Sgiacomo.travaglini@arm.com def testWithFilterFlags(self): 19813481Sgiacomo.travaglini@arm.com """Tests that --gtest_list_tests takes into account the 19913481Sgiacomo.travaglini@arm.com --gtest_filter flag.""" 20013481Sgiacomo.travaglini@arm.com 20113481Sgiacomo.travaglini@arm.com self.RunAndVerify(flag_value='1', 20213481Sgiacomo.travaglini@arm.com expected_output_re=EXPECTED_OUTPUT_FILTER_FOO_RE, 20313481Sgiacomo.travaglini@arm.com other_flag='--gtest_filter=Foo*') 20413481Sgiacomo.travaglini@arm.com 20513481Sgiacomo.travaglini@arm.com 20613481Sgiacomo.travaglini@arm.comif __name__ == '__main__': 20713481Sgiacomo.travaglini@arm.com gtest_test_utils.Main() 208