- #!/usr/bin/env python 
- # 
- # Copyright 2006, Google Inc. 
- # All rights reserved. 
- # 
- # Redistribution and use in source and binary forms, with or without 
- # modification, are permitted provided that the following conditions are 
- # met: 
- # 
- #     * Redistributions of source code must retain the above copyright 
- # notice, this list of conditions and the following disclaimer. 
- #     * Redistributions in binary form must reproduce the above 
- # copyright notice, this list of conditions and the following disclaimer 
- # in the documentation and/or other materials provided with the 
- # distribution. 
- #     * Neither the name of Google Inc. nor the names of its 
- # contributors may be used to endorse or promote products derived from 
- # this software without specific prior written permission. 
- # 
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
- # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
- # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
- # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
- # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
- # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
- # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
- # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
- # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
-   
- """Unit test for Google Test's --gtest_list_tests flag. 
-   
- A user can ask Google Test to list all tests by specifying the 
- --gtest_list_tests flag.  This script tests such functionality 
- by invoking googletest-list-tests-unittest_ (a program written with 
- Google Test) the command line flags. 
- """ 
-   
- import re 
- import gtest_test_utils 
-   
- # Constants. 
-   
- # The command line flag for enabling/disabling listing all tests. 
- LIST_TESTS_FLAG = 'gtest_list_tests' 
-   
- # Path to the googletest-list-tests-unittest_ program. 
- EXE_PATH = gtest_test_utils.GetTestExecutablePath('googletest-list-tests-unittest_') 
-   
- # The expected output when running googletest-list-tests-unittest_ with 
- # --gtest_list_tests 
- EXPECTED_OUTPUT_NO_FILTER_RE = re.compile(r"""FooDeathTest\. 
-   Test1 
- Foo\. 
-   Bar1 
-   Bar2 
-   DISABLED_Bar3 
- Abc\. 
-   Xyz 
-   Def 
- FooBar\. 
-   Baz 
- FooTest\. 
-   Test1 
-   DISABLED_Test2 
-   Test3 
- TypedTest/0\.  # TypeParam = (VeryLo{245}|class VeryLo{239})\.\.\. 
-   TestA 
-   TestB 
- TypedTest/1\.  # TypeParam = int\s*\*( __ptr64)? 
-   TestA 
-   TestB 
- TypedTest/2\.  # TypeParam = .*MyArray<bool,\s*42> 
-   TestA 
-   TestB 
- My/TypeParamTest/0\.  # TypeParam = (VeryLo{245}|class VeryLo{239})\.\.\. 
-   TestA 
-   TestB 
- My/TypeParamTest/1\.  # TypeParam = int\s*\*( __ptr64)? 
-   TestA 
-   TestB 
- My/TypeParamTest/2\.  # TypeParam = .*MyArray<bool,\s*42> 
-   TestA 
-   TestB 
- MyInstantiation/ValueParamTest\. 
-   TestA/0  # GetParam\(\) = one line 
-   TestA/1  # GetParam\(\) = two\\nlines 
-   TestA/2  # GetParam\(\) = a very\\nlo{241}\.\.\. 
-   TestB/0  # GetParam\(\) = one line 
-   TestB/1  # GetParam\(\) = two\\nlines 
-   TestB/2  # GetParam\(\) = a very\\nlo{241}\.\.\. 
- """) 
-   
- # The expected output when running googletest-list-tests-unittest_ with 
- # --gtest_list_tests and --gtest_filter=Foo*. 
- EXPECTED_OUTPUT_FILTER_FOO_RE = re.compile(r"""FooDeathTest\. 
-   Test1 
- Foo\. 
-   Bar1 
-   Bar2 
-   DISABLED_Bar3 
- FooBar\. 
-   Baz 
- FooTest\. 
-   Test1 
-   DISABLED_Test2 
-   Test3 
- """) 
-   
- # Utilities. 
-   
-   
- def Run(args): 
-   """Runs googletest-list-tests-unittest_ and returns the list of tests printed.""" 
-   
-   return gtest_test_utils.Subprocess([EXE_PATH] + args, 
-                                      capture_stderr=False).output 
-   
-   
- # The unit test. 
-   
-   
- class GTestListTestsUnitTest(gtest_test_utils.TestCase): 
-   """Tests using the --gtest_list_tests flag to list all tests.""" 
-   
-   def RunAndVerify(self, flag_value, expected_output_re, other_flag): 
-     """Runs googletest-list-tests-unittest_ and verifies that it prints 
-     the correct tests. 
-   
-     Args: 
-       flag_value:         value of the --gtest_list_tests flag; 
-                           None if the flag should not be present. 
-       expected_output_re: regular expression that matches the expected 
-                           output after running command; 
-       other_flag:         a different flag to be passed to command 
-                           along with gtest_list_tests; 
-                           None if the flag should not be present. 
-     """ 
-   
-     if flag_value is None: 
-       flag = '' 
-       flag_expression = 'not set' 
-     elif flag_value == '0': 
-       flag = '--%s=0' % LIST_TESTS_FLAG 
-       flag_expression = '0' 
-     else: 
-       flag = '--%s' % LIST_TESTS_FLAG 
-       flag_expression = '1' 
-   
-     args = [flag] 
-   
-     if other_flag is not None: 
-       args += [other_flag] 
-   
-     output = Run(args) 
-   
-     if expected_output_re: 
-       self.assert_( 
-           expected_output_re.match(output), 
-           ('when %s is %s, the output of "%s" is "%s",\n' 
-            'which does not match regex "%s"' % 
-            (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output, 
-             expected_output_re.pattern))) 
-     else: 
-       self.assert_( 
-           not EXPECTED_OUTPUT_NO_FILTER_RE.match(output), 
-           ('when %s is %s, the output of "%s" is "%s"'% 
-            (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output))) 
-   
-   def testDefaultBehavior(self): 
-     """Tests the behavior of the default mode.""" 
-   
-     self.RunAndVerify(flag_value=None, 
-                       expected_output_re=None, 
-                       other_flag=None) 
-   
-   def testFlag(self): 
-     """Tests using the --gtest_list_tests flag.""" 
-   
-     self.RunAndVerify(flag_value='0', 
-                       expected_output_re=None, 
-                       other_flag=None) 
-     self.RunAndVerify(flag_value='1', 
-                       expected_output_re=EXPECTED_OUTPUT_NO_FILTER_RE, 
-                       other_flag=None) 
-   
-   def testOverrideNonFilterFlags(self): 
-     """Tests that --gtest_list_tests overrides the non-filter flags.""" 
-   
-     self.RunAndVerify(flag_value='1', 
-                       expected_output_re=EXPECTED_OUTPUT_NO_FILTER_RE, 
-                       other_flag='--gtest_break_on_failure') 
-   
-   def testWithFilterFlags(self): 
-     """Tests that --gtest_list_tests takes into account the 
-     --gtest_filter flag.""" 
-   
-     self.RunAndVerify(flag_value='1', 
-                       expected_output_re=EXPECTED_OUTPUT_FILTER_FOO_RE, 
-                       other_flag='--gtest_filter=Foo*') 
-   
-   
- if __name__ == '__main__': 
-   gtest_test_utils.Main() 
-