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