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