1dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter#!/usr/bin/env python 2dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# 3dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# Copyright 2005 Google Inc. All Rights Reserved. 4dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# 5dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# Redistribution and use in source and binary forms, with or without 6dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# modification, are permitted provided that the following conditions are 7dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# met: 8dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# 9dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# * Redistributions of source code must retain the above copyright 10dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# notice, this list of conditions and the following disclaimer. 11dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# * Redistributions in binary form must reproduce the above 12dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# copyright notice, this list of conditions and the following disclaimer 13dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# in the documentation and/or other materials provided with the 14dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# distribution. 15dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# * Neither the name of Google Inc. nor the names of its 16dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# contributors may be used to endorse or promote products derived from 17dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# this software without specific prior written permission. 18dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# 19dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 31dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter"""Unit test for Google Test test filters. 32dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 33dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterA user can specify which test(s) in a Google Test program to run via either 34dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterthe GTEST_FILTER environment variable or the --gtest_filter flag. 35dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterThis script tests such functionality by invoking 36dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixtergtest_filter_unittest_ (a program written with Google Test) with different 37dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterenvironments and command line flags. 38dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 39dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterNote that test sharding may also influence which tests are filtered. Therefore, 40dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterwe test that here also. 41dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter""" 42dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 43dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter__author__ = 'wan@google.com (Zhanyong Wan)' 44dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 45dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterimport os 46dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterimport re 47dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterimport sets 4846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanimport sys 4946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 50dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterimport gtest_test_utils 51dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 52dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# Constants. 53dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 5446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# Checks if this platform can pass empty environment variables to child 5546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# processes. We set an env variable to an empty string and invoke a python 5646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# script in a subprocess to print whether the variable is STILL in 5746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# os.environ. We then use 'eval' to parse the child's output so that an 5846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# exception is thrown if the input is anything other than 'True' nor 'False'. 5946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanos.environ['EMPTY_VAR'] = '' 6046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanchild = gtest_test_utils.Subprocess( 6146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan [sys.executable, '-c', 'import os; print \'EMPTY_VAR\' in os.environ']) 6246108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanCAN_PASS_EMPTY_ENV = eval(child.output) 6346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 6446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 6546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# Check if this platform can unset environment variables in child processes. 6646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# We set an env variable to a non-empty string, unset it, and invoke 6746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# a python script in a subprocess to print whether the variable 6846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# is NO LONGER in os.environ. 6946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# We use 'eval' to parse the child's output so that an exception 7046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# is thrown if the input is neither 'True' nor 'False'. 7146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanos.environ['UNSET_VAR'] = 'X' 7246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chandel os.environ['UNSET_VAR'] 7346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanchild = gtest_test_utils.Subprocess( 7446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan [sys.executable, '-c', 'import os; print \'UNSET_VAR\' not in os.environ']) 7546108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanCAN_UNSET_ENV = eval(child.output) 7646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 7746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 7846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# Checks if we should test with an empty filter. This doesn't 7946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# make sense on platforms that cannot pass empty env variables (Win32) 8046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# and on platforms that cannot unset variables (since we cannot tell 8146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# the difference between "" and NULL -- Borland and Solaris < 5.10) 8246108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanCAN_TEST_EMPTY_FILTER = (CAN_PASS_EMPTY_ENV and CAN_UNSET_ENV) 8346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 84dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 85dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# The environment variable for specifying the test filters. 86dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterFILTER_ENV_VAR = 'GTEST_FILTER' 87dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 88dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# The environment variables for test sharding. 89dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTOTAL_SHARDS_ENV_VAR = 'GTEST_TOTAL_SHARDS' 90dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterSHARD_INDEX_ENV_VAR = 'GTEST_SHARD_INDEX' 91dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterSHARD_STATUS_FILE_ENV_VAR = 'GTEST_SHARD_STATUS_FILE' 92dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 93dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# The command line flag for specifying the test filters. 94dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterFILTER_FLAG = 'gtest_filter' 95dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 96dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# The command line flag for including disabled tests. 97dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterALSO_RUN_DISABED_TESTS_FLAG = 'gtest_also_run_disabled_tests' 98dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 99dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# Command to run the gtest_filter_unittest_ program. 100dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterCOMMAND = gtest_test_utils.GetTestExecutablePath('gtest_filter_unittest_') 101dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 102dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# Regex for determining whether parameterized tests are enabled in the binary. 103dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterPARAM_TEST_REGEX = re.compile(r'/ParamTest') 104dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 105dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# Regex for parsing test case names from Google Test's output. 106dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST_CASE_REGEX = re.compile(r'^\[\-+\] \d+ tests? from (\w+(/\w+)?)') 107dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 108dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# Regex for parsing test names from Google Test's output. 109dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterTEST_REGEX = re.compile(r'^\[\s*RUN\s*\].*\.(\w+(/\w+)?)') 110dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 11146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# The command line flag to tell Google Test to output the list of tests it 11246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# will run. 11346108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanLIST_TESTS_FLAG = '--gtest_list_tests' 11446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 11546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan# Indicates whether Google Test supports death tests. 11646108a219a4b812dd8f36fee479a0340ea5963f5Ben ChanSUPPORTS_DEATH_TESTS = 'HasDeathTest' in gtest_test_utils.Subprocess( 11746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan [COMMAND, LIST_TESTS_FLAG]).output 11846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 119dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# Full names of all tests in gtest_filter_unittests_. 120dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterPARAM_TESTS = [ 121dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'SeqP/ParamTest.TestX/0', 122dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'SeqP/ParamTest.TestX/1', 123dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'SeqP/ParamTest.TestY/0', 124dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'SeqP/ParamTest.TestY/1', 125dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'SeqQ/ParamTest.TestX/0', 126dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'SeqQ/ParamTest.TestX/1', 127dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'SeqQ/ParamTest.TestY/0', 128dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'SeqQ/ParamTest.TestY/1', 129dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ] 130dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 131dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterDISABLED_TESTS = [ 132dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.DISABLED_TestFour', 133dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.DISABLED_TestFive', 134dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BazTest.DISABLED_TestC', 135dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'DISABLED_FoobarTest.Test1', 136dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'DISABLED_FoobarTest.DISABLED_Test2', 137dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'DISABLED_FoobarbazTest.TestA', 138dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ] 139dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 14046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanif SUPPORTS_DEATH_TESTS: 14146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan DEATH_TESTS = [ 14246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 'HasDeathTest.Test1', 14346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 'HasDeathTest.Test2', 14446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ] 14546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanelse: 14646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan DEATH_TESTS = [] 14746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 148dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# All the non-disabled tests. 149dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken MixterACTIVE_TESTS = [ 150dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'FooTest.Abc', 151dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'FooTest.Xyz', 152dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 153dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.TestOne', 154dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.TestTwo', 155dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.TestThree', 156dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 157dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BazTest.TestOne', 158dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BazTest.TestA', 159dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BazTest.TestB', 16046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ] + DEATH_TESTS + PARAM_TESTS 161dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 162dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterparam_tests_present = None 163dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 164dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# Utilities. 165dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 16646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chanenviron = os.environ.copy() 16746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 168dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 169dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterdef SetEnvVar(env_var, value): 170dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Sets the env variable to 'value'; unsets it when 'value' is None.""" 171dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 172dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter if value is not None: 17346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan environ[env_var] = value 17446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan elif env_var in environ: 17546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan del environ[env_var] 17646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 177dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 17846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chandef RunAndReturnOutput(args = None): 17946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan """Runs the test program and returns its output.""" 180dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 18146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return gtest_test_utils.Subprocess([COMMAND] + (args or []), 18246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan env=environ).output 183dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 18446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 18546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chandef RunAndExtractTestList(args = None): 18646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan """Runs the test program and returns its exit code and a list of tests run.""" 18746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 18846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan p = gtest_test_utils.Subprocess([COMMAND] + (args or []), env=environ) 189dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter tests_run = [] 190dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter test_case = '' 191dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter test = '' 19246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan for line in p.output.split('\n'): 193dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter match = TEST_CASE_REGEX.match(line) 194dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter if match is not None: 195dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter test_case = match.group(1) 196dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter else: 197dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter match = TEST_REGEX.match(line) 198dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter if match is not None: 199dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter test = match.group(1) 20046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan tests_run.append(test_case + '.' + test) 20146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return (tests_run, p.exit_code) 202dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 203dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 204dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterdef InvokeWithModifiedEnv(extra_env, function, *args, **kwargs): 205dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Runs the given function and arguments in a modified environment.""" 206dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter try: 20746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan original_env = environ.copy() 20846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan environ.update(extra_env) 209dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return function(*args, **kwargs) 210dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter finally: 21146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan environ.clear() 21246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan environ.update(original_env) 213dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 214dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 215dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterdef RunWithSharding(total_shards, shard_index, command): 216dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Runs a test program shard and returns exit code and a list of tests run.""" 217dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 218dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter extra_env = {SHARD_INDEX_ENV_VAR: str(shard_index), 219dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter TOTAL_SHARDS_ENV_VAR: str(total_shards)} 22046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan return InvokeWithModifiedEnv(extra_env, RunAndExtractTestList, command) 221dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 222dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter# The unit test. 223dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 224dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 225dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterclass GTestFilterUnitTest(gtest_test_utils.TestCase): 22646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan """Tests the env variable or the command line flag to filter tests.""" 227dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 228dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter # Utilities. 229dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 230dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def AssertSetEqual(self, lhs, rhs): 231dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Asserts that two sets are equal.""" 232dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 233dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter for elem in lhs: 234dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.assert_(elem in rhs, '%s in %s' % (elem, rhs)) 235dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 236dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter for elem in rhs: 237dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.assert_(elem in lhs, '%s in %s' % (elem, lhs)) 238dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 239dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def AssertPartitionIsValid(self, set_var, list_of_sets): 240dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Asserts that list_of_sets is a valid partition of set_var.""" 241dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 242dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter full_partition = [] 243dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter for slice_var in list_of_sets: 244dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter full_partition.extend(slice_var) 245dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.assertEqual(len(set_var), len(full_partition)) 246dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.assertEqual(sets.Set(set_var), sets.Set(full_partition)) 247dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 248dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def AdjustForParameterizedTests(self, tests_to_run): 249dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Adjust tests_to_run in case value parameterized tests are disabled.""" 250dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 251dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter global param_tests_present 252dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter if not param_tests_present: 253dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return list(sets.Set(tests_to_run) - sets.Set(PARAM_TESTS)) 254dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter else: 255dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return tests_to_run 256dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 257dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def RunAndVerify(self, gtest_filter, tests_to_run): 25846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan """Checks that the binary runs correct set of tests for a given filter.""" 259dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 260dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter tests_to_run = self.AdjustForParameterizedTests(tests_to_run) 261dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 26246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan # First, tests using the environment variable. 263dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 264dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter # Windows removes empty variables from the environment when passing it 26546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan # to a new process. This means it is impossible to pass an empty filter 26646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan # into a process using the environment variable. However, we can still 26746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan # test the case when the variable is not supplied (i.e., gtest_filter is 26846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan # None). 269dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter # pylint: disable-msg=C6403 27046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan if CAN_TEST_EMPTY_FILTER or gtest_filter != '': 271dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter SetEnvVar(FILTER_ENV_VAR, gtest_filter) 27246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan tests_run = RunAndExtractTestList()[0] 273dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter SetEnvVar(FILTER_ENV_VAR, None) 274dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.AssertSetEqual(tests_run, tests_to_run) 275dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter # pylint: enable-msg=C6403 276dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 27746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan # Next, tests using the command line flag. 278dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 279dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter if gtest_filter is None: 28046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan args = [] 281dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter else: 28246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan args = ['--%s=%s' % (FILTER_FLAG, gtest_filter)] 283dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 28446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan tests_run = RunAndExtractTestList(args)[0] 285dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.AssertSetEqual(tests_run, tests_to_run) 286dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 287dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def RunAndVerifyWithSharding(self, gtest_filter, total_shards, tests_to_run, 28846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan args=None, check_exit_0=False): 289dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Checks that binary runs correct tests for the given filter and shard. 290dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 291dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Runs all shards of gtest_filter_unittest_ with the given filter, and 292dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter verifies that the right set of tests were run. The union of tests run 293dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter on each shard should be identical to tests_to_run, without duplicates. 294dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 295dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Args: 296dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter gtest_filter: A filter to apply to the tests. 297dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter total_shards: A total number of shards to split test run into. 298dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter tests_to_run: A set of tests expected to run. 29946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan args : Arguments to pass to the to the test binary. 300dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter check_exit_0: When set to a true value, make sure that all shards 301dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter return 0. 302dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """ 303dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 304dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter tests_to_run = self.AdjustForParameterizedTests(tests_to_run) 305dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 306dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter # Windows removes empty variables from the environment when passing it 30746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan # to a new process. This means it is impossible to pass an empty filter 30846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan # into a process using the environment variable. However, we can still 30946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan # test the case when the variable is not supplied (i.e., gtest_filter is 31046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan # None). 311dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter # pylint: disable-msg=C6403 31246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan if CAN_TEST_EMPTY_FILTER or gtest_filter != '': 313dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter SetEnvVar(FILTER_ENV_VAR, gtest_filter) 314dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter partition = [] 315dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter for i in range(0, total_shards): 31646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan (tests_run, exit_code) = RunWithSharding(total_shards, i, args) 317dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter if check_exit_0: 31846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan self.assertEqual(0, exit_code) 319dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter partition.append(tests_run) 320dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 321dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.AssertPartitionIsValid(tests_to_run, partition) 322dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter SetEnvVar(FILTER_ENV_VAR, None) 323dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter # pylint: enable-msg=C6403 324dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 325dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def RunAndVerifyAllowingDisabled(self, gtest_filter, tests_to_run): 326dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Checks that the binary runs correct set of tests for the given filter. 327dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 328dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Runs gtest_filter_unittest_ with the given filter, and enables 329dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter disabled tests. Verifies that the right set of tests were run. 330dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 331dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Args: 332dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter gtest_filter: A filter to apply to the tests. 333dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter tests_to_run: A set of tests expected to run. 334dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """ 335dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 336dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter tests_to_run = self.AdjustForParameterizedTests(tests_to_run) 337dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 338dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter # Construct the command line. 33946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan args = ['--%s' % ALSO_RUN_DISABED_TESTS_FLAG] 340dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter if gtest_filter is not None: 34146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan args.append('--%s=%s' % (FILTER_FLAG, gtest_filter)) 342dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 34346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan tests_run = RunAndExtractTestList(args)[0] 344dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.AssertSetEqual(tests_run, tests_to_run) 345dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 346dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def setUp(self): 347dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Sets up test case. 348dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 349dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter Determines whether value-parameterized tests are enabled in the binary and 350dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter sets the flags accordingly. 351dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """ 352dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 353dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter global param_tests_present 354dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter if param_tests_present is None: 355dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter param_tests_present = PARAM_TEST_REGEX.search( 35646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan RunAndReturnOutput()) is not None 357dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 358dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def testDefaultBehavior(self): 359dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Tests the behavior of not specifying the filter.""" 360dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 361dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify(None, ACTIVE_TESTS) 362dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 363dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def testDefaultBehaviorWithShards(self): 364dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Tests the behavior without the filter, with sharding enabled.""" 365dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 366dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerifyWithSharding(None, 1, ACTIVE_TESTS) 367dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerifyWithSharding(None, 2, ACTIVE_TESTS) 368dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerifyWithSharding(None, len(ACTIVE_TESTS) - 1, ACTIVE_TESTS) 369dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerifyWithSharding(None, len(ACTIVE_TESTS), ACTIVE_TESTS) 370dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerifyWithSharding(None, len(ACTIVE_TESTS) + 1, ACTIVE_TESTS) 371dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 372dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def testEmptyFilter(self): 373dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Tests an empty filter.""" 374dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 375dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('', []) 376dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerifyWithSharding('', 1, []) 377dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerifyWithSharding('', 2, []) 378dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 379dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def testBadFilter(self): 380dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Tests a filter that matches nothing.""" 381dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 382dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('BadFilter', []) 383dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerifyAllowingDisabled('BadFilter', []) 384dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 385dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def testFullName(self): 386dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Tests filtering by full name.""" 387dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 388dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('FooTest.Xyz', ['FooTest.Xyz']) 389dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerifyAllowingDisabled('FooTest.Xyz', ['FooTest.Xyz']) 390dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerifyWithSharding('FooTest.Xyz', 5, ['FooTest.Xyz']) 391dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 392dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def testUniversalFilters(self): 393dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Tests filters that match everything.""" 394dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 395dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('*', ACTIVE_TESTS) 396dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('*.*', ACTIVE_TESTS) 397dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerifyWithSharding('*.*', len(ACTIVE_TESTS) - 3, ACTIVE_TESTS) 398dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerifyAllowingDisabled('*', ACTIVE_TESTS + DISABLED_TESTS) 399dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerifyAllowingDisabled('*.*', ACTIVE_TESTS + DISABLED_TESTS) 400dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 401dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def testFilterByTestCase(self): 402dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Tests filtering by test case name.""" 403dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 404dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('FooTest.*', ['FooTest.Abc', 'FooTest.Xyz']) 405dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 406dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter BAZ_TESTS = ['BazTest.TestOne', 'BazTest.TestA', 'BazTest.TestB'] 407dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('BazTest.*', BAZ_TESTS) 408dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerifyAllowingDisabled('BazTest.*', 409dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter BAZ_TESTS + ['BazTest.DISABLED_TestC']) 410dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 411dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def testFilterByTest(self): 412dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Tests filtering by test name.""" 413dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 414dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('*.TestOne', ['BarTest.TestOne', 'BazTest.TestOne']) 415dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 416dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def testFilterDisabledTests(self): 417dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Select only the disabled tests to run.""" 418dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 419dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('DISABLED_FoobarTest.Test1', []) 420dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerifyAllowingDisabled('DISABLED_FoobarTest.Test1', 421dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ['DISABLED_FoobarTest.Test1']) 422dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 423dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('*DISABLED_*', []) 424dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerifyAllowingDisabled('*DISABLED_*', DISABLED_TESTS) 425dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 426dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('*.DISABLED_*', []) 427dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerifyAllowingDisabled('*.DISABLED_*', [ 428dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.DISABLED_TestFour', 429dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.DISABLED_TestFive', 430dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BazTest.DISABLED_TestC', 431dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'DISABLED_FoobarTest.DISABLED_Test2', 432dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ]) 433dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 434dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('DISABLED_*', []) 435dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerifyAllowingDisabled('DISABLED_*', [ 436dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'DISABLED_FoobarTest.Test1', 437dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'DISABLED_FoobarTest.DISABLED_Test2', 438dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'DISABLED_FoobarbazTest.TestA', 439dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ]) 440dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 441dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def testWildcardInTestCaseName(self): 442dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Tests using wildcard in the test case name.""" 443dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 444dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('*a*.*', [ 445dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.TestOne', 446dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.TestTwo', 447dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.TestThree', 448dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 449dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BazTest.TestOne', 450dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BazTest.TestA', 45146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 'BazTest.TestB', ] + DEATH_TESTS + PARAM_TESTS) 452dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 453dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def testWildcardInTestName(self): 454dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Tests using wildcard in the test name.""" 455dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 456dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('*.*A*', ['FooTest.Abc', 'BazTest.TestA']) 457dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 458dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def testFilterWithoutDot(self): 459dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Tests a filter that has no '.' in it.""" 460dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 461dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('*z*', [ 462dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'FooTest.Xyz', 463dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 464dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BazTest.TestOne', 465dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BazTest.TestA', 466dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BazTest.TestB', 467dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ]) 468dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 469dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def testTwoPatterns(self): 470dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Tests filters that consist of two patterns.""" 471dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 472dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('Foo*.*:*A*', [ 473dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'FooTest.Abc', 474dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'FooTest.Xyz', 475dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 476dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BazTest.TestA', 477dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ]) 478dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 479dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter # An empty pattern + a non-empty one 480dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify(':*A*', ['FooTest.Abc', 'BazTest.TestA']) 481dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 482dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def testThreePatterns(self): 483dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Tests filters that consist of three patterns.""" 484dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 485dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('*oo*:*A*:*One', [ 486dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'FooTest.Abc', 487dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'FooTest.Xyz', 488dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 489dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.TestOne', 490dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 491dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BazTest.TestOne', 492dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BazTest.TestA', 493dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ]) 494dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 495dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter # The 2nd pattern is empty. 496dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('*oo*::*One', [ 497dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'FooTest.Abc', 498dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'FooTest.Xyz', 499dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 500dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.TestOne', 501dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 502dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BazTest.TestOne', 503dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ]) 504dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 505dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter # The last 2 patterns are empty. 506dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('*oo*::', [ 507dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'FooTest.Abc', 508dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'FooTest.Xyz', 509dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ]) 510dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 511dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def testNegativeFilters(self): 51246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan self.RunAndVerify('*-BazTest.TestOne', [ 513dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'FooTest.Abc', 514dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'FooTest.Xyz', 515dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 516dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.TestOne', 517dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.TestTwo', 518dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.TestThree', 519dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 520dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BazTest.TestA', 521dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BazTest.TestB', 52246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ] + DEATH_TESTS + PARAM_TESTS) 523dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 52446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan self.RunAndVerify('*-FooTest.Abc:BazTest.*', [ 525dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'FooTest.Xyz', 526dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 527dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.TestOne', 528dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.TestTwo', 529dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.TestThree', 53046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ] + DEATH_TESTS + PARAM_TESTS) 531dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 532dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('BarTest.*-BarTest.TestOne', [ 533dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.TestTwo', 534dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.TestThree', 535dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ]) 536dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 537dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter # Tests without leading '*'. 53846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan self.RunAndVerify('-FooTest.Abc:FooTest.Xyz:BazTest.*', [ 539dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.TestOne', 540dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.TestTwo', 541dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'BarTest.TestThree', 54246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ] + DEATH_TESTS + PARAM_TESTS) 543dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 544dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter # Value parameterized tests. 545dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('*/*', PARAM_TESTS) 546dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 547dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter # Value parameterized tests filtering by the sequence name. 548dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('SeqP/*', [ 549dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'SeqP/ParamTest.TestX/0', 550dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'SeqP/ParamTest.TestX/1', 551dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'SeqP/ParamTest.TestY/0', 552dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'SeqP/ParamTest.TestY/1', 553dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ]) 554dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 555dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter # Value parameterized tests filtering by the test name. 556dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.RunAndVerify('*/0', [ 557dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'SeqP/ParamTest.TestX/0', 558dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'SeqP/ParamTest.TestY/0', 559dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'SeqQ/ParamTest.TestX/0', 560dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'SeqQ/ParamTest.TestY/0', 561dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter ]) 562dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 563dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def testFlagOverridesEnvVar(self): 564dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Tests that the filter flag overrides the filtering env. variable.""" 565dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 566dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter SetEnvVar(FILTER_ENV_VAR, 'Foo*') 56746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan args = ['--%s=%s' % (FILTER_FLAG, '*One')] 56846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan tests_run = RunAndExtractTestList(args)[0] 569dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter SetEnvVar(FILTER_ENV_VAR, None) 570dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 571dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.AssertSetEqual(tests_run, ['BarTest.TestOne', 'BazTest.TestOne']) 572dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 573dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def testShardStatusFileIsCreated(self): 574dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter """Tests that the shard file is created if specified in the environment.""" 575dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 576dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter shard_status_file = os.path.join(gtest_test_utils.GetTempDir(), 577dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'shard_status_file') 578dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.assert_(not os.path.exists(shard_status_file)) 579dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 580dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter extra_env = {SHARD_STATUS_FILE_ENV_VAR: shard_status_file} 581dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter try: 58246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan InvokeWithModifiedEnv(extra_env, RunAndReturnOutput) 583dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter finally: 584dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.assert_(os.path.exists(shard_status_file)) 585dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter os.remove(shard_status_file) 586dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 587dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter def testShardStatusFileIsCreatedWithListTests(self): 58846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan """Tests that the shard file is created with the "list_tests" flag.""" 589dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 590dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter shard_status_file = os.path.join(gtest_test_utils.GetTempDir(), 591dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 'shard_status_file2') 592dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.assert_(not os.path.exists(shard_status_file)) 593dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 594dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter extra_env = {SHARD_STATUS_FILE_ENV_VAR: shard_status_file} 595dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter try: 59646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan output = InvokeWithModifiedEnv(extra_env, 59746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan RunAndReturnOutput, 59846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan [LIST_TESTS_FLAG]) 599dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter finally: 60046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan # This assertion ensures that Google Test enumerated the tests as 60146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan # opposed to running them. 60246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan self.assert_('[==========]' not in output, 60346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 'Unexpected output during test enumeration.\n' 60446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 'Please ensure that LIST_TESTS_FLAG is assigned the\n' 60546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 'correct flag value for listing Google Test tests.') 60646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 607dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter self.assert_(os.path.exists(shard_status_file)) 608dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter os.remove(shard_status_file) 609dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 61046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan if SUPPORTS_DEATH_TESTS: 61146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan def testShardingWorksWithDeathTests(self): 61246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan """Tests integration with death tests and sharding.""" 61346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 61446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan gtest_filter = 'HasDeathTest.*:SeqP/*' 61546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan expected_tests = [ 61646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 'HasDeathTest.Test1', 61746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 'HasDeathTest.Test2', 61846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 61946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 'SeqP/ParamTest.TestX/0', 62046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 'SeqP/ParamTest.TestX/1', 62146108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 'SeqP/ParamTest.TestY/0', 62246108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 'SeqP/ParamTest.TestY/1', 62346108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan ] 62446108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan 62546108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan for flag in ['--gtest_death_test_style=threadsafe', 62646108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan '--gtest_death_test_style=fast']: 62746108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan self.RunAndVerifyWithSharding(gtest_filter, 3, expected_tests, 62846108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan check_exit_0=True, args=[flag]) 62946108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan self.RunAndVerifyWithSharding(gtest_filter, 5, expected_tests, 63046108a219a4b812dd8f36fee479a0340ea5963f5Ben Chan check_exit_0=True, args=[flag]) 631dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter 632dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixterif __name__ == '__main__': 633dd1c93d5709e32713961cfd95fe30489a4ad2d26Ken Mixter gtest_test_utils.Main() 634