14b6829f0d28990dd645e16386eb226d0f10c8731shiqian#!/usr/bin/env python
24b6829f0d28990dd645e16386eb226d0f10c8731shiqian#
34b6829f0d28990dd645e16386eb226d0f10c8731shiqian# Copyright 2006, Google Inc.
44b6829f0d28990dd645e16386eb226d0f10c8731shiqian# All rights reserved.
54b6829f0d28990dd645e16386eb226d0f10c8731shiqian#
64b6829f0d28990dd645e16386eb226d0f10c8731shiqian# Redistribution and use in source and binary forms, with or without
74b6829f0d28990dd645e16386eb226d0f10c8731shiqian# modification, are permitted provided that the following conditions are
84b6829f0d28990dd645e16386eb226d0f10c8731shiqian# met:
94b6829f0d28990dd645e16386eb226d0f10c8731shiqian#
104b6829f0d28990dd645e16386eb226d0f10c8731shiqian#     * Redistributions of source code must retain the above copyright
114b6829f0d28990dd645e16386eb226d0f10c8731shiqian# notice, this list of conditions and the following disclaimer.
124b6829f0d28990dd645e16386eb226d0f10c8731shiqian#     * Redistributions in binary form must reproduce the above
134b6829f0d28990dd645e16386eb226d0f10c8731shiqian# copyright notice, this list of conditions and the following disclaimer
144b6829f0d28990dd645e16386eb226d0f10c8731shiqian# in the documentation and/or other materials provided with the
154b6829f0d28990dd645e16386eb226d0f10c8731shiqian# distribution.
164b6829f0d28990dd645e16386eb226d0f10c8731shiqian#     * Neither the name of Google Inc. nor the names of its
174b6829f0d28990dd645e16386eb226d0f10c8731shiqian# contributors may be used to endorse or promote products derived from
184b6829f0d28990dd645e16386eb226d0f10c8731shiqian# this software without specific prior written permission.
194b6829f0d28990dd645e16386eb226d0f10c8731shiqian#
204b6829f0d28990dd645e16386eb226d0f10c8731shiqian# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
214b6829f0d28990dd645e16386eb226d0f10c8731shiqian# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
224b6829f0d28990dd645e16386eb226d0f10c8731shiqian# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
234b6829f0d28990dd645e16386eb226d0f10c8731shiqian# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
244b6829f0d28990dd645e16386eb226d0f10c8731shiqian# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
254b6829f0d28990dd645e16386eb226d0f10c8731shiqian# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
264b6829f0d28990dd645e16386eb226d0f10c8731shiqian# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
274b6829f0d28990dd645e16386eb226d0f10c8731shiqian# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
284b6829f0d28990dd645e16386eb226d0f10c8731shiqian# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
294b6829f0d28990dd645e16386eb226d0f10c8731shiqian# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
304b6829f0d28990dd645e16386eb226d0f10c8731shiqian# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
314b6829f0d28990dd645e16386eb226d0f10c8731shiqian
324b6829f0d28990dd645e16386eb226d0f10c8731shiqian"""Unit test for Google Test's --gtest_list_tests flag.
334b6829f0d28990dd645e16386eb226d0f10c8731shiqian
344b6829f0d28990dd645e16386eb226d0f10c8731shiqianA user can ask Google Test to list all tests by specifying the
354b6829f0d28990dd645e16386eb226d0f10c8731shiqian--gtest_list_tests flag.  This script tests such functionality
364b6829f0d28990dd645e16386eb226d0f10c8731shiqianby invoking gtest_list_tests_unittest_ (a program written with
374b6829f0d28990dd645e16386eb226d0f10c8731shiqianGoogle Test) the command line flags.
384b6829f0d28990dd645e16386eb226d0f10c8731shiqian"""
394b6829f0d28990dd645e16386eb226d0f10c8731shiqian
404b6829f0d28990dd645e16386eb226d0f10c8731shiqian__author__ = 'phanna@google.com (Patrick Hanna)'
414b6829f0d28990dd645e16386eb226d0f10c8731shiqian
426d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanimport gtest_test_utils
43b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanimport re
444b6829f0d28990dd645e16386eb226d0f10c8731shiqian
454b6829f0d28990dd645e16386eb226d0f10c8731shiqian
464b6829f0d28990dd645e16386eb226d0f10c8731shiqian# Constants.
474b6829f0d28990dd645e16386eb226d0f10c8731shiqian
484b6829f0d28990dd645e16386eb226d0f10c8731shiqian# The command line flag for enabling/disabling listing all tests.
494b6829f0d28990dd645e16386eb226d0f10c8731shiqianLIST_TESTS_FLAG = 'gtest_list_tests'
504b6829f0d28990dd645e16386eb226d0f10c8731shiqian
514b6829f0d28990dd645e16386eb226d0f10c8731shiqian# Path to the gtest_list_tests_unittest_ program.
52767998dfadaf87c1193d51cf5847a7f147c6e1f7zhanyong.wanEXE_PATH = gtest_test_utils.GetTestExecutablePath('gtest_list_tests_unittest_')
534b6829f0d28990dd645e16386eb226d0f10c8731shiqian
544b6829f0d28990dd645e16386eb226d0f10c8731shiqian# The expected output when running gtest_list_tests_unittest_ with
554b6829f0d28990dd645e16386eb226d0f10c8731shiqian# --gtest_list_tests
56b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanEXPECTED_OUTPUT_NO_FILTER_RE = re.compile(r"""FooDeathTest\.
574b6829f0d28990dd645e16386eb226d0f10c8731shiqian  Test1
58b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanFoo\.
594b6829f0d28990dd645e16386eb226d0f10c8731shiqian  Bar1
604b6829f0d28990dd645e16386eb226d0f10c8731shiqian  Bar2
6193a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan  DISABLED_Bar3
62b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanAbc\.
634b6829f0d28990dd645e16386eb226d0f10c8731shiqian  Xyz
644b6829f0d28990dd645e16386eb226d0f10c8731shiqian  Def
65b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanFooBar\.
664b6829f0d28990dd645e16386eb226d0f10c8731shiqian  Baz
67b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanFooTest\.
684b6829f0d28990dd645e16386eb226d0f10c8731shiqian  Test1
6993a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan  DISABLED_Test2
7093a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan  Test3
71b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanTypedTest/0\.  # TypeParam = (VeryLo{245}|class VeryLo{239})\.\.\.
72b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan  TestA
73b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan  TestB
74b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanTypedTest/1\.  # TypeParam = int\s*\*
75b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan  TestA
76b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan  TestB
77b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanTypedTest/2\.  # TypeParam = .*MyArray<bool,\s*42>
78b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan  TestA
79b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan  TestB
80b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanMy/TypeParamTest/0\.  # TypeParam = (VeryLo{245}|class VeryLo{239})\.\.\.
81b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan  TestA
82b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan  TestB
83b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanMy/TypeParamTest/1\.  # TypeParam = int\s*\*
84b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan  TestA
85b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan  TestB
86b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanMy/TypeParamTest/2\.  # TypeParam = .*MyArray<bool,\s*42>
87b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan  TestA
88b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan  TestB
89b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanMyInstantiation/ValueParamTest\.
90b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan  TestA/0  # GetParam\(\) = one line
91b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan  TestA/1  # GetParam\(\) = two\\nlines
92b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan  TestA/2  # GetParam\(\) = a very\\nlo{241}\.\.\.
93b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan  TestB/0  # GetParam\(\) = one line
94b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan  TestB/1  # GetParam\(\) = two\\nlines
95b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan  TestB/2  # GetParam\(\) = a very\\nlo{241}\.\.\.
96b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan""")
9793a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan
9893a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan# The expected output when running gtest_list_tests_unittest_ with
9993a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan# --gtest_list_tests and --gtest_filter=Foo*.
100b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanEXPECTED_OUTPUT_FILTER_FOO_RE = re.compile(r"""FooDeathTest\.
10193a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan  Test1
102b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanFoo\.
10393a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan  Bar1
10493a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan  Bar2
10593a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan  DISABLED_Bar3
106b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanFooBar\.
10793a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan  Baz
108b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wanFooTest\.
10993a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan  Test1
11093a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan  DISABLED_Test2
1114b6829f0d28990dd645e16386eb226d0f10c8731shiqian  Test3
112b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan""")
1134b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1144b6829f0d28990dd645e16386eb226d0f10c8731shiqian# Utilities.
1154b6829f0d28990dd645e16386eb226d0f10c8731shiqian
11693a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan
117b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wandef Run(args):
118b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan  """Runs gtest_list_tests_unittest_ and returns the list of tests printed."""
1194b6829f0d28990dd645e16386eb226d0f10c8731shiqian
120b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan  return gtest_test_utils.Subprocess([EXE_PATH] + args,
121b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan                                     capture_stderr=False).output
1224b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1234b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1244b6829f0d28990dd645e16386eb226d0f10c8731shiqian# The unit test.
1254b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1266d63ee6720540cadb8919037c5d41a6413cc9101zhanyong.wanclass GTestListTestsUnitTest(gtest_test_utils.TestCase):
12793a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan  """Tests using the --gtest_list_tests flag to list all tests."""
1284b6829f0d28990dd645e16386eb226d0f10c8731shiqian
129b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan  def RunAndVerify(self, flag_value, expected_output_re, other_flag):
1304b6829f0d28990dd645e16386eb226d0f10c8731shiqian    """Runs gtest_list_tests_unittest_ and verifies that it prints
1314b6829f0d28990dd645e16386eb226d0f10c8731shiqian    the correct tests.
1324b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1334b6829f0d28990dd645e16386eb226d0f10c8731shiqian    Args:
134b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan      flag_value:         value of the --gtest_list_tests flag;
135b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan                          None if the flag should not be present.
136b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan      expected_output_re: regular expression that matches the expected
137b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan                          output after running command;
138b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan      other_flag:         a different flag to be passed to command
139b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan                          along with gtest_list_tests;
140b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan                          None if the flag should not be present.
1414b6829f0d28990dd645e16386eb226d0f10c8731shiqian    """
1424b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1434b6829f0d28990dd645e16386eb226d0f10c8731shiqian    if flag_value is None:
1444b6829f0d28990dd645e16386eb226d0f10c8731shiqian      flag = ''
145b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan      flag_expression = 'not set'
1464b6829f0d28990dd645e16386eb226d0f10c8731shiqian    elif flag_value == '0':
147b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan      flag = '--%s=0' % LIST_TESTS_FLAG
148b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan      flag_expression = '0'
1494b6829f0d28990dd645e16386eb226d0f10c8731shiqian    else:
150b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan      flag = '--%s' % LIST_TESTS_FLAG
151b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan      flag_expression = '1'
1524b6829f0d28990dd645e16386eb226d0f10c8731shiqian
153b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan    args = [flag]
1544b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1554b6829f0d28990dd645e16386eb226d0f10c8731shiqian    if other_flag is not None:
156b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan      args += [other_flag]
1574b6829f0d28990dd645e16386eb226d0f10c8731shiqian
158b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan    output = Run(args)
1594b6829f0d28990dd645e16386eb226d0f10c8731shiqian
160b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan    if expected_output_re:
161b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan      self.assert_(
162b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan          expected_output_re.match(output),
163b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan          ('when %s is %s, the output of "%s" is "%s",\n'
164b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan           'which does not match regex "%s"' %
165b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan           (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output,
166b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan            expected_output_re.pattern)))
1674b6829f0d28990dd645e16386eb226d0f10c8731shiqian    else:
168b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan      self.assert_(
169b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan          not EXPECTED_OUTPUT_NO_FILTER_RE.match(output),
170b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan          ('when %s is %s, the output of "%s" is "%s"'%
171b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan           (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output)))
1724b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1734b6829f0d28990dd645e16386eb226d0f10c8731shiqian  def testDefaultBehavior(self):
1744b6829f0d28990dd645e16386eb226d0f10c8731shiqian    """Tests the behavior of the default mode."""
1754b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1764b6829f0d28990dd645e16386eb226d0f10c8731shiqian    self.RunAndVerify(flag_value=None,
177b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan                      expected_output_re=None,
1784b6829f0d28990dd645e16386eb226d0f10c8731shiqian                      other_flag=None)
1794b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1804b6829f0d28990dd645e16386eb226d0f10c8731shiqian  def testFlag(self):
1814b6829f0d28990dd645e16386eb226d0f10c8731shiqian    """Tests using the --gtest_list_tests flag."""
1824b6829f0d28990dd645e16386eb226d0f10c8731shiqian
1834b6829f0d28990dd645e16386eb226d0f10c8731shiqian    self.RunAndVerify(flag_value='0',
184b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan                      expected_output_re=None,
1854b6829f0d28990dd645e16386eb226d0f10c8731shiqian                      other_flag=None)
1864b6829f0d28990dd645e16386eb226d0f10c8731shiqian    self.RunAndVerify(flag_value='1',
187b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan                      expected_output_re=EXPECTED_OUTPUT_NO_FILTER_RE,
1884b6829f0d28990dd645e16386eb226d0f10c8731shiqian                      other_flag=None)
1894b6829f0d28990dd645e16386eb226d0f10c8731shiqian
19093a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan  def testOverrideNonFilterFlags(self):
19193a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan    """Tests that --gtest_list_tests overrides the non-filter flags."""
1924b6829f0d28990dd645e16386eb226d0f10c8731shiqian
193b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan    self.RunAndVerify(flag_value='1',
194b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan                      expected_output_re=EXPECTED_OUTPUT_NO_FILTER_RE,
195b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan                      other_flag='--gtest_break_on_failure')
1964b6829f0d28990dd645e16386eb226d0f10c8731shiqian
19793a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan  def testWithFilterFlags(self):
19893a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan    """Tests that --gtest_list_tests takes into account the
19993a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan    --gtest_filter flag."""
20093a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan
201b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan    self.RunAndVerify(flag_value='1',
202b3d0b4ea4ab877a355e79dd0de704577811fff0fzhanyong.wan                      expected_output_re=EXPECTED_OUTPUT_FILTER_FOO_RE,
203b7ec0f7b3b21338babc9a6ab5a593a40634a8062zhanyong.wan                      other_flag='--gtest_filter=Foo*')
20493a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan
20593a87b3a4d608dd0439b1f6c909520be197c88efzhanyong.wan
2064b6829f0d28990dd645e16386eb226d0f10c8731shiqianif __name__ == '__main__':
2074b6829f0d28990dd645e16386eb226d0f10c8731shiqian  gtest_test_utils.Main()
208