1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#!/usr/bin/env python 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# Copyright 2005 Google Inc. All Rights Reserved. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# Redistribution and use in source and binary forms, with or without 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# modification, are permitted provided that the following conditions are 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# met: 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# * Redistributions of source code must retain the above copyright 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# notice, this list of conditions and the following disclaimer. 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# * Redistributions in binary form must reproduce the above 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# copyright notice, this list of conditions and the following disclaimer 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# in the documentation and/or other materials provided with the 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# distribution. 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# * Neither the name of Google Inc. nor the names of its 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# contributors may be used to endorse or promote products derived from 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# this software without specific prior written permission. 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch"""Unit test for Google Test test filters. 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochA user can specify which test(s) in a Google Test program to run via either 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochthe GTEST_FILTER environment variable or the --gtest_filter flag. 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochThis script tests such functionality by invoking 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochgtest_filter_unittest_ (a program written with Google Test) with different 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochenvironments and command line flags. 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochNote that test sharding may also influence which tests are filtered. Therefore, 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochwe test that here also. 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch""" 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch__author__ = 'wan@google.com (Zhanyong Wan)' 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochimport os 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochimport re 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochimport sets 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochimport sys 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochimport gtest_test_utils 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# Constants. 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# Checks if this platform can pass empty environment variables to child 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# processes. We set an env variable to an empty string and invoke a python 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# script in a subprocess to print whether the variable is STILL in 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# os.environ. We then use 'eval' to parse the child's output so that an 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# exception is thrown if the input is anything other than 'True' nor 'False'. 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochos.environ['EMPTY_VAR'] = '' 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochchild = gtest_test_utils.Subprocess( 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch [sys.executable, '-c', 'import os; print \'EMPTY_VAR\' in os.environ']) 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCAN_PASS_EMPTY_ENV = eval(child.output) 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# Check if this platform can unset environment variables in child processes. 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# We set an env variable to a non-empty string, unset it, and invoke 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# a python script in a subprocess to print whether the variable 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# is NO LONGER in os.environ. 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# We use 'eval' to parse the child's output so that an exception 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# is thrown if the input is neither 'True' nor 'False'. 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochos.environ['UNSET_VAR'] = 'X' 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochdel os.environ['UNSET_VAR'] 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochchild = gtest_test_utils.Subprocess( 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch [sys.executable, '-c', 'import os; print \'UNSET_VAR\' not in os.environ']) 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCAN_UNSET_ENV = eval(child.output) 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# Checks if we should test with an empty filter. This doesn't 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# make sense on platforms that cannot pass empty env variables (Win32) 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# and on platforms that cannot unset variables (since we cannot tell 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# the difference between "" and NULL -- Borland and Solaris < 5.10) 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCAN_TEST_EMPTY_FILTER = (CAN_PASS_EMPTY_ENV and CAN_UNSET_ENV) 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# The environment variable for specifying the test filters. 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochFILTER_ENV_VAR = 'GTEST_FILTER' 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# The environment variables for test sharding. 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTOTAL_SHARDS_ENV_VAR = 'GTEST_TOTAL_SHARDS' 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochSHARD_INDEX_ENV_VAR = 'GTEST_SHARD_INDEX' 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochSHARD_STATUS_FILE_ENV_VAR = 'GTEST_SHARD_STATUS_FILE' 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# The command line flag for specifying the test filters. 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochFILTER_FLAG = 'gtest_filter' 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# The command line flag for including disabled tests. 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochALSO_RUN_DISABED_TESTS_FLAG = 'gtest_also_run_disabled_tests' 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# Command to run the gtest_filter_unittest_ program. 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCOMMAND = gtest_test_utils.GetTestExecutablePath('gtest_filter_unittest_') 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# Regex for determining whether parameterized tests are enabled in the binary. 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochPARAM_TEST_REGEX = re.compile(r'/ParamTest') 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# Regex for parsing test case names from Google Test's output. 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_CASE_REGEX = re.compile(r'^\[\-+\] \d+ tests? from (\w+(/\w+)?)') 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# Regex for parsing test names from Google Test's output. 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_REGEX = re.compile(r'^\[\s*RUN\s*\].*\.(\w+(/\w+)?)') 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick# The command line flag to tell Google Test to output the list of tests it 1123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick# will run. 1133345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickLIST_TESTS_FLAG = '--gtest_list_tests' 1143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick# Indicates whether Google Test supports death tests. 1163345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickSUPPORTS_DEATH_TESTS = 'HasDeathTest' in gtest_test_utils.Subprocess( 1173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick [COMMAND, LIST_TESTS_FLAG]).output 1183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# Full names of all tests in gtest_filter_unittests_. 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochPARAM_TESTS = [ 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'SeqP/ParamTest.TestX/0', 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'SeqP/ParamTest.TestX/1', 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'SeqP/ParamTest.TestY/0', 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'SeqP/ParamTest.TestY/1', 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'SeqQ/ParamTest.TestX/0', 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'SeqQ/ParamTest.TestX/1', 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'SeqQ/ParamTest.TestY/0', 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'SeqQ/ParamTest.TestY/1', 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ] 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochDISABLED_TESTS = [ 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.DISABLED_TestFour', 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.DISABLED_TestFive', 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BazTest.DISABLED_TestC', 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'DISABLED_FoobarTest.Test1', 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'DISABLED_FoobarTest.DISABLED_Test2', 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'DISABLED_FoobarbazTest.TestA', 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ] 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickif SUPPORTS_DEATH_TESTS: 1413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DEATH_TESTS = [ 1423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 'HasDeathTest.Test1', 1433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 'HasDeathTest.Test2', 1443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ] 1453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickelse: 1463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DEATH_TESTS = [] 1473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# All the non-disabled tests. 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTIVE_TESTS = [ 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'FooTest.Abc', 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'FooTest.Xyz', 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.TestOne', 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.TestTwo', 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.TestThree', 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BazTest.TestOne', 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BazTest.TestA', 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BazTest.TestB', 1603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ] + DEATH_TESTS + PARAM_TESTS 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochparam_tests_present = None 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# Utilities. 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochenviron = os.environ.copy() 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochdef SetEnvVar(env_var, value): 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Sets the env variable to 'value'; unsets it when 'value' is None.""" 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if value is not None: 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch environ[env_var] = value 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch elif env_var in environ: 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch del environ[env_var] 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochdef RunAndReturnOutput(args = None): 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Runs the test program and returns its output.""" 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return gtest_test_utils.Subprocess([COMMAND] + (args or []), 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch env=environ).output 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochdef RunAndExtractTestList(args = None): 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Runs the test program and returns its exit code and a list of tests run.""" 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch p = gtest_test_utils.Subprocess([COMMAND] + (args or []), env=environ) 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tests_run = [] 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch test_case = '' 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch test = '' 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for line in p.output.split('\n'): 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch match = TEST_CASE_REGEX.match(line) 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if match is not None: 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch test_case = match.group(1) 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch else: 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch match = TEST_REGEX.match(line) 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if match is not None: 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch test = match.group(1) 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tests_run.append(test_case + '.' + test) 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return (tests_run, p.exit_code) 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochdef InvokeWithModifiedEnv(extra_env, function, *args, **kwargs): 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Runs the given function and arguments in a modified environment.""" 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch try: 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch original_env = environ.copy() 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch environ.update(extra_env) 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return function(*args, **kwargs) 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch finally: 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch environ.clear() 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch environ.update(original_env) 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochdef RunWithSharding(total_shards, shard_index, command): 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Runs a test program shard and returns exit code and a list of tests run.""" 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch extra_env = {SHARD_INDEX_ENV_VAR: str(shard_index), 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TOTAL_SHARDS_ENV_VAR: str(total_shards)} 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return InvokeWithModifiedEnv(extra_env, RunAndExtractTestList, command) 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch# The unit test. 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass GTestFilterUnitTest(gtest_test_utils.TestCase): 2263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick """Tests the env variable or the command line flag to filter tests.""" 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch # Utilities. 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def AssertSetEqual(self, lhs, rhs): 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Asserts that two sets are equal.""" 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for elem in lhs: 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.assert_(elem in rhs, '%s in %s' % (elem, rhs)) 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for elem in rhs: 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.assert_(elem in lhs, '%s in %s' % (elem, lhs)) 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def AssertPartitionIsValid(self, set_var, list_of_sets): 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Asserts that list_of_sets is a valid partition of set_var.""" 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch full_partition = [] 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for slice_var in list_of_sets: 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch full_partition.extend(slice_var) 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.assertEqual(len(set_var), len(full_partition)) 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.assertEqual(sets.Set(set_var), sets.Set(full_partition)) 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def AdjustForParameterizedTests(self, tests_to_run): 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Adjust tests_to_run in case value parameterized tests are disabled.""" 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch global param_tests_present 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if not param_tests_present: 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return list(sets.Set(tests_to_run) - sets.Set(PARAM_TESTS)) 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch else: 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return tests_to_run 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def RunAndVerify(self, gtest_filter, tests_to_run): 2583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick """Checks that the binary runs correct set of tests for a given filter.""" 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tests_to_run = self.AdjustForParameterizedTests(tests_to_run) 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick # First, tests using the environment variable. 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch # Windows removes empty variables from the environment when passing it 2653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick # to a new process. This means it is impossible to pass an empty filter 2663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick # into a process using the environment variable. However, we can still 2673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick # test the case when the variable is not supplied (i.e., gtest_filter is 2683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick # None). 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch # pylint: disable-msg=C6403 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if CAN_TEST_EMPTY_FILTER or gtest_filter != '': 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetEnvVar(FILTER_ENV_VAR, gtest_filter) 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tests_run = RunAndExtractTestList()[0] 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetEnvVar(FILTER_ENV_VAR, None) 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.AssertSetEqual(tests_run, tests_to_run) 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch # pylint: enable-msg=C6403 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick # Next, tests using the command line flag. 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if gtest_filter is None: 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch args = [] 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch else: 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch args = ['--%s=%s' % (FILTER_FLAG, gtest_filter)] 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tests_run = RunAndExtractTestList(args)[0] 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.AssertSetEqual(tests_run, tests_to_run) 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def RunAndVerifyWithSharding(self, gtest_filter, total_shards, tests_to_run, 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch args=None, check_exit_0=False): 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Checks that binary runs correct tests for the given filter and shard. 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Runs all shards of gtest_filter_unittest_ with the given filter, and 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch verifies that the right set of tests were run. The union of tests run 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch on each shard should be identical to tests_to_run, without duplicates. 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Args: 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gtest_filter: A filter to apply to the tests. 297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch total_shards: A total number of shards to split test run into. 298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tests_to_run: A set of tests expected to run. 299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch args : Arguments to pass to the to the test binary. 300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch check_exit_0: When set to a true value, make sure that all shards 301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return 0. 302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """ 303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tests_to_run = self.AdjustForParameterizedTests(tests_to_run) 305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch # Windows removes empty variables from the environment when passing it 3073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick # to a new process. This means it is impossible to pass an empty filter 3083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick # into a process using the environment variable. However, we can still 3093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick # test the case when the variable is not supplied (i.e., gtest_filter is 3103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick # None). 311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch # pylint: disable-msg=C6403 312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if CAN_TEST_EMPTY_FILTER or gtest_filter != '': 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetEnvVar(FILTER_ENV_VAR, gtest_filter) 314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch partition = [] 315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for i in range(0, total_shards): 316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (tests_run, exit_code) = RunWithSharding(total_shards, i, args) 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if check_exit_0: 318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.assertEqual(0, exit_code) 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch partition.append(tests_run) 320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.AssertPartitionIsValid(tests_to_run, partition) 322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetEnvVar(FILTER_ENV_VAR, None) 323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch # pylint: enable-msg=C6403 324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def RunAndVerifyAllowingDisabled(self, gtest_filter, tests_to_run): 326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Checks that the binary runs correct set of tests for the given filter. 327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Runs gtest_filter_unittest_ with the given filter, and enables 329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch disabled tests. Verifies that the right set of tests were run. 330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Args: 332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gtest_filter: A filter to apply to the tests. 333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tests_to_run: A set of tests expected to run. 334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """ 335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tests_to_run = self.AdjustForParameterizedTests(tests_to_run) 337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch # Construct the command line. 339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch args = ['--%s' % ALSO_RUN_DISABED_TESTS_FLAG] 340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if gtest_filter is not None: 341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch args.append('--%s=%s' % (FILTER_FLAG, gtest_filter)) 342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tests_run = RunAndExtractTestList(args)[0] 344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.AssertSetEqual(tests_run, tests_to_run) 345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def setUp(self): 347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Sets up test case. 348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Determines whether value-parameterized tests are enabled in the binary and 350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch sets the flags accordingly. 351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """ 352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch global param_tests_present 354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if param_tests_present is None: 355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch param_tests_present = PARAM_TEST_REGEX.search( 356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RunAndReturnOutput()) is not None 357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testDefaultBehavior(self): 359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Tests the behavior of not specifying the filter.""" 360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify(None, ACTIVE_TESTS) 362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testDefaultBehaviorWithShards(self): 364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Tests the behavior without the filter, with sharding enabled.""" 365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerifyWithSharding(None, 1, ACTIVE_TESTS) 367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerifyWithSharding(None, 2, ACTIVE_TESTS) 368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerifyWithSharding(None, len(ACTIVE_TESTS) - 1, ACTIVE_TESTS) 369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerifyWithSharding(None, len(ACTIVE_TESTS), ACTIVE_TESTS) 370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerifyWithSharding(None, len(ACTIVE_TESTS) + 1, ACTIVE_TESTS) 371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testEmptyFilter(self): 373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Tests an empty filter.""" 374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('', []) 376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerifyWithSharding('', 1, []) 377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerifyWithSharding('', 2, []) 378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testBadFilter(self): 380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Tests a filter that matches nothing.""" 381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('BadFilter', []) 383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerifyAllowingDisabled('BadFilter', []) 384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testFullName(self): 386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Tests filtering by full name.""" 387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('FooTest.Xyz', ['FooTest.Xyz']) 389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerifyAllowingDisabled('FooTest.Xyz', ['FooTest.Xyz']) 390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerifyWithSharding('FooTest.Xyz', 5, ['FooTest.Xyz']) 391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testUniversalFilters(self): 393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Tests filters that match everything.""" 394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('*', ACTIVE_TESTS) 396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('*.*', ACTIVE_TESTS) 397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerifyWithSharding('*.*', len(ACTIVE_TESTS) - 3, ACTIVE_TESTS) 398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerifyAllowingDisabled('*', ACTIVE_TESTS + DISABLED_TESTS) 399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerifyAllowingDisabled('*.*', ACTIVE_TESTS + DISABLED_TESTS) 400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testFilterByTestCase(self): 402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Tests filtering by test case name.""" 403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('FooTest.*', ['FooTest.Abc', 'FooTest.Xyz']) 405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BAZ_TESTS = ['BazTest.TestOne', 'BazTest.TestA', 'BazTest.TestB'] 407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('BazTest.*', BAZ_TESTS) 408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerifyAllowingDisabled('BazTest.*', 409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BAZ_TESTS + ['BazTest.DISABLED_TestC']) 410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testFilterByTest(self): 412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Tests filtering by test name.""" 413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('*.TestOne', ['BarTest.TestOne', 'BazTest.TestOne']) 415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testFilterDisabledTests(self): 417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Select only the disabled tests to run.""" 418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('DISABLED_FoobarTest.Test1', []) 420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerifyAllowingDisabled('DISABLED_FoobarTest.Test1', 421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ['DISABLED_FoobarTest.Test1']) 422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('*DISABLED_*', []) 424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerifyAllowingDisabled('*DISABLED_*', DISABLED_TESTS) 425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('*.DISABLED_*', []) 427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerifyAllowingDisabled('*.DISABLED_*', [ 428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.DISABLED_TestFour', 429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.DISABLED_TestFive', 430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BazTest.DISABLED_TestC', 431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'DISABLED_FoobarTest.DISABLED_Test2', 432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ]) 433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('DISABLED_*', []) 435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerifyAllowingDisabled('DISABLED_*', [ 436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'DISABLED_FoobarTest.Test1', 437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'DISABLED_FoobarTest.DISABLED_Test2', 438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'DISABLED_FoobarbazTest.TestA', 439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ]) 440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testWildcardInTestCaseName(self): 442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Tests using wildcard in the test case name.""" 443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('*a*.*', [ 445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.TestOne', 446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.TestTwo', 447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.TestThree', 448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BazTest.TestOne', 450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BazTest.TestA', 4513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 'BazTest.TestB', ] + DEATH_TESTS + PARAM_TESTS) 452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testWildcardInTestName(self): 454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Tests using wildcard in the test name.""" 455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('*.*A*', ['FooTest.Abc', 'BazTest.TestA']) 457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testFilterWithoutDot(self): 459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Tests a filter that has no '.' in it.""" 460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('*z*', [ 462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'FooTest.Xyz', 463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BazTest.TestOne', 465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BazTest.TestA', 466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BazTest.TestB', 467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ]) 468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testTwoPatterns(self): 470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Tests filters that consist of two patterns.""" 471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('Foo*.*:*A*', [ 473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'FooTest.Abc', 474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'FooTest.Xyz', 475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BazTest.TestA', 477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ]) 478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch # An empty pattern + a non-empty one 480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify(':*A*', ['FooTest.Abc', 'BazTest.TestA']) 481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testThreePatterns(self): 483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Tests filters that consist of three patterns.""" 484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('*oo*:*A*:*One', [ 486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'FooTest.Abc', 487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'FooTest.Xyz', 488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.TestOne', 490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BazTest.TestOne', 492c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BazTest.TestA', 493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ]) 494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch # The 2nd pattern is empty. 496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('*oo*::*One', [ 497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'FooTest.Abc', 498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'FooTest.Xyz', 499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.TestOne', 501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BazTest.TestOne', 503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ]) 504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch # The last 2 patterns are empty. 506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('*oo*::', [ 507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'FooTest.Abc', 508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'FooTest.Xyz', 509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ]) 510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testNegativeFilters(self): 5123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick self.RunAndVerify('*-BazTest.TestOne', [ 513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'FooTest.Abc', 514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'FooTest.Xyz', 515c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.TestOne', 517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.TestTwo', 518c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.TestThree', 519c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 520c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BazTest.TestA', 521c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BazTest.TestB', 5223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ] + DEATH_TESTS + PARAM_TESTS) 523c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick self.RunAndVerify('*-FooTest.Abc:BazTest.*', [ 525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'FooTest.Xyz', 526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.TestOne', 528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.TestTwo', 529c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.TestThree', 5303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ] + DEATH_TESTS + PARAM_TESTS) 531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('BarTest.*-BarTest.TestOne', [ 533c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.TestTwo', 534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.TestThree', 535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ]) 536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch # Tests without leading '*'. 5383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick self.RunAndVerify('-FooTest.Abc:FooTest.Xyz:BazTest.*', [ 539c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.TestOne', 540c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.TestTwo', 541c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'BarTest.TestThree', 5423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ] + DEATH_TESTS + PARAM_TESTS) 543c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch # Value parameterized tests. 545c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('*/*', PARAM_TESTS) 546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch # Value parameterized tests filtering by the sequence name. 548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('SeqP/*', [ 549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'SeqP/ParamTest.TestX/0', 550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'SeqP/ParamTest.TestX/1', 551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'SeqP/ParamTest.TestY/0', 552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'SeqP/ParamTest.TestY/1', 553c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ]) 554c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch # Value parameterized tests filtering by the test name. 556c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.RunAndVerify('*/0', [ 557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'SeqP/ParamTest.TestX/0', 558c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'SeqP/ParamTest.TestY/0', 559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'SeqQ/ParamTest.TestX/0', 560c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'SeqQ/ParamTest.TestY/0', 561c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ]) 562c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 563c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testFlagOverridesEnvVar(self): 564c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Tests that the filter flag overrides the filtering env. variable.""" 565c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 566c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetEnvVar(FILTER_ENV_VAR, 'Foo*') 567c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch args = ['--%s=%s' % (FILTER_FLAG, '*One')] 568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tests_run = RunAndExtractTestList(args)[0] 569c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SetEnvVar(FILTER_ENV_VAR, None) 570c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 571c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.AssertSetEqual(tests_run, ['BarTest.TestOne', 'BazTest.TestOne']) 572c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 573c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testShardStatusFileIsCreated(self): 574c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch """Tests that the shard file is created if specified in the environment.""" 575c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 576c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch shard_status_file = os.path.join(gtest_test_utils.GetTempDir(), 577c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'shard_status_file') 578c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.assert_(not os.path.exists(shard_status_file)) 579c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 580c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch extra_env = {SHARD_STATUS_FILE_ENV_VAR: shard_status_file} 581c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch try: 582c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch InvokeWithModifiedEnv(extra_env, RunAndReturnOutput) 583c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch finally: 584c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.assert_(os.path.exists(shard_status_file)) 585c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch os.remove(shard_status_file) 586c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 587c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch def testShardStatusFileIsCreatedWithListTests(self): 5883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick """Tests that the shard file is created with the "list_tests" flag.""" 589c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 590c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch shard_status_file = os.path.join(gtest_test_utils.GetTempDir(), 591c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 'shard_status_file2') 592c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.assert_(not os.path.exists(shard_status_file)) 593c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 594c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch extra_env = {SHARD_STATUS_FILE_ENV_VAR: shard_status_file} 595c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch try: 5963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick output = InvokeWithModifiedEnv(extra_env, 5973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick RunAndReturnOutput, 5983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick [LIST_TESTS_FLAG]) 599c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch finally: 6003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick # This assertion ensures that Google Test enumerated the tests as 6013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick # opposed to running them. 6023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick self.assert_('[==========]' not in output, 6033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 'Unexpected output during test enumeration.\n' 6043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 'Please ensure that LIST_TESTS_FLAG is assigned the\n' 6053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 'correct flag value for listing Google Test tests.') 6063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 607c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch self.assert_(os.path.exists(shard_status_file)) 608c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch os.remove(shard_status_file) 609c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 6103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if SUPPORTS_DEATH_TESTS: 6113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick def testShardingWorksWithDeathTests(self): 6123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick """Tests integration with death tests and sharding.""" 6133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick gtest_filter = 'HasDeathTest.*:SeqP/*' 6153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick expected_tests = [ 6163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 'HasDeathTest.Test1', 6173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 'HasDeathTest.Test2', 6183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 'SeqP/ParamTest.TestX/0', 6203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 'SeqP/ParamTest.TestX/1', 6213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 'SeqP/ParamTest.TestY/0', 6223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 'SeqP/ParamTest.TestY/1', 6233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ] 6243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick for flag in ['--gtest_death_test_style=threadsafe', 6263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick '--gtest_death_test_style=fast']: 6273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick self.RunAndVerifyWithSharding(gtest_filter, 3, expected_tests, 6283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick check_exit_0=True, args=[flag]) 6293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick self.RunAndVerifyWithSharding(gtest_filter, 5, expected_tests, 6303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick check_exit_0=True, args=[flag]) 631c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 632c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochif __name__ == '__main__': 633c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gtest_test_utils.Main() 634