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


ros_opcua_impl_freeopcua
Author(s): Denis Štogl
autogenerated on Tue Jan 19 2021 03:12:01