1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#!/usr/bin/env python
2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#
3fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Copyright 2006, Google Inc.
4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# All rights reserved.
5fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#
6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Redistribution and use in source and binary forms, with or without
7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# modification, are permitted provided that the following conditions are
8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# met:
9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#
10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#     * Redistributions of source code must retain the above copyright
11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# notice, this list of conditions and the following disclaimer.
12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#     * Redistributions in binary form must reproduce the above
13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# copyright notice, this list of conditions and the following disclaimer
14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# in the documentation and/or other materials provided with the
15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# distribution.
16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#     * Neither the name of Google Inc. nor the names of its
17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# contributors may be used to endorse or promote products derived from
18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# this software without specific prior written permission.
19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#
20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville"""Unit test for Google Test's --gtest_list_tests flag.
33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleA user can ask Google Test to list all tests by specifying the
35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville--gtest_list_tests flag.  This script tests such functionality
36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleby invoking gtest_list_tests_unittest_ (a program written with
37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleGoogle Test) the command line flags.
38fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville"""
39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville__author__ = 'phanna@google.com (Patrick Hanna)'
41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
42fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleimport gtest_test_utils
43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
44fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
45fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Constants.
46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# The command line flag for enabling/disabling listing all tests.
48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleLIST_TESTS_FLAG = 'gtest_list_tests'
49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Path to the gtest_list_tests_unittest_ program.
51fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleEXE_PATH = gtest_test_utils.GetTestExecutablePath('gtest_list_tests_unittest_')
52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# The expected output when running gtest_list_tests_unittest_ with
54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# --gtest_list_tests
55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleEXPECTED_OUTPUT_NO_FILTER = """FooDeathTest.
56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  Test1
57fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleFoo.
58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  Bar1
59fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  Bar2
60fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  DISABLED_Bar3
61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleAbc.
62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  Xyz
63fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  Def
64fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleFooBar.
65fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  Baz
66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleFooTest.
67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  Test1
68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  DISABLED_Test2
69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  Test3
70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville"""
71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# The expected output when running gtest_list_tests_unittest_ with
73fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# --gtest_list_tests and --gtest_filter=Foo*.
74fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleEXPECTED_OUTPUT_FILTER_FOO = """FooDeathTest.
75fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  Test1
76fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleFoo.
77fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  Bar1
78fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  Bar2
79fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  DISABLED_Bar3
80fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleFooBar.
81fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  Baz
82fbaaef999ba563838ebd00874ed8a1c01fbf286dWink SavilleFooTest.
83fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  Test1
84fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  DISABLED_Test2
85fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  Test3
86fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville"""
87fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
88fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# Utilities.
89fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
90fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
91fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilledef Run(args):
92fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  """Runs gtest_list_tests_unittest_ and returns the list of tests printed."""
93fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
94fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  return gtest_test_utils.Subprocess([EXE_PATH] + args,
95fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                                     capture_stderr=False).output
96fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
97fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
98fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville# The unit test.
99fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
100fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleclass GTestListTestsUnitTest(gtest_test_utils.TestCase):
101fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  """Tests using the --gtest_list_tests flag to list all tests."""
102fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
103fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  def RunAndVerify(self, flag_value, expected_output, other_flag):
104fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    """Runs gtest_list_tests_unittest_ and verifies that it prints
105fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    the correct tests.
106fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
107fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    Args:
108fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      flag_value:       value of the --gtest_list_tests flag;
109fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                        None if the flag should not be present.
110fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
111fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      expected_output:  the expected output after running command;
112fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
113fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      other_flag:       a different flag to be passed to command
114fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                        along with gtest_list_tests;
115fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                        None if the flag should not be present.
116fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    """
117fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
118fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    if flag_value is None:
119fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      flag = ''
120fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      flag_expression = 'not set'
121fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    elif flag_value == '0':
122fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      flag = '--%s=0' % LIST_TESTS_FLAG
123fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      flag_expression = '0'
124fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    else:
125fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      flag = '--%s' % LIST_TESTS_FLAG
126fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      flag_expression = '1'
127fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
128fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    args = [flag]
129fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
130fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    if other_flag is not None:
131fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      args += [other_flag]
132fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
133fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    output = Run(args)
134fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
135fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    msg = ('when %s is %s, the output of "%s" is "%s".' %
136fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville           (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output))
137fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
138fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    if expected_output is not None:
139fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      self.assert_(output == expected_output, msg)
140fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    else:
141fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville      self.assert_(output != EXPECTED_OUTPUT_NO_FILTER, msg)
142fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
143fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  def testDefaultBehavior(self):
144fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    """Tests the behavior of the default mode."""
145fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
146fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    self.RunAndVerify(flag_value=None,
147fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                      expected_output=None,
148fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                      other_flag=None)
149fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
150fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  def testFlag(self):
151fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    """Tests using the --gtest_list_tests flag."""
152fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
153fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    self.RunAndVerify(flag_value='0',
154fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                      expected_output=None,
155fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                      other_flag=None)
156fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    self.RunAndVerify(flag_value='1',
157fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                      expected_output=EXPECTED_OUTPUT_NO_FILTER,
158fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                      other_flag=None)
159fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
160fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  def testOverrideNonFilterFlags(self):
161fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    """Tests that --gtest_list_tests overrides the non-filter flags."""
162fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
163fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    self.RunAndVerify(flag_value='1',
164fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                      expected_output=EXPECTED_OUTPUT_NO_FILTER,
165fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                      other_flag='--gtest_break_on_failure')
166fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
167fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  def testWithFilterFlags(self):
168fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    """Tests that --gtest_list_tests takes into account the
169fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    --gtest_filter flag."""
170fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
171fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville    self.RunAndVerify(flag_value='1',
172fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                      expected_output=EXPECTED_OUTPUT_FILTER_FOO,
173fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                      other_flag='--gtest_filter=Foo*')
174fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
175fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
176fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleif __name__ == '__main__':
177fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  gtest_test_utils.Main()
178