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