Home | History | Annotate | Download | only in test
      1 #!/usr/bin/env python
      2 #
      3 # Copyright 2009, 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 """Tests the --help flag of Google C++ Testing Framework.
     33 
     34 SYNOPSIS
     35        gtest_help_test.py --gtest_build_dir=BUILD/DIR
     36          # where BUILD/DIR contains the built gtest_help_test_ file.
     37        gtest_help_test.py
     38 """
     39 
     40 __author__ = 'wan (at] google.com (Zhanyong Wan)'
     41 
     42 import os
     43 import re
     44 import gtest_test_utils
     45 
     46 
     47 IS_WINDOWS = os.name == 'nt'
     48 
     49 PROGRAM_PATH = gtest_test_utils.GetTestExecutablePath('gtest_help_test_')
     50 FLAG_PREFIX = '--gtest_'
     51 CATCH_EXCEPTIONS_FLAG = FLAG_PREFIX + 'catch_exceptions'
     52 DEATH_TEST_STYLE_FLAG = FLAG_PREFIX + 'death_test_style'
     53 
     54 # The help message must match this regex.
     55 HELP_REGEX = re.compile(
     56     FLAG_PREFIX + r'list_tests.*' +
     57     FLAG_PREFIX + r'filter=.*' +
     58     FLAG_PREFIX + r'also_run_disabled_tests.*' +
     59     FLAG_PREFIX + r'repeat=.*' +
     60     FLAG_PREFIX + r'shuffle.*' +
     61     FLAG_PREFIX + r'random_seed=.*' +
     62     FLAG_PREFIX + r'color=.*' +
     63     FLAG_PREFIX + r'print_time.*' +
     64     FLAG_PREFIX + r'output=.*' +
     65     FLAG_PREFIX + r'break_on_failure.*' +
     66     FLAG_PREFIX + r'throw_on_failure.*',
     67     re.DOTALL)
     68 
     69 
     70 def RunWithFlag(flag):
     71   """Runs gtest_help_test_ with the given flag.
     72 
     73   Returns:
     74     the exit code and the text output as a tuple.
     75   Args:
     76     flag: the command-line flag to pass to gtest_help_test_, or None.
     77   """
     78 
     79   if flag is None:
     80     command = [PROGRAM_PATH]
     81   else:
     82     command = [PROGRAM_PATH, flag]
     83   child = gtest_test_utils.Subprocess(command)
     84   return child.exit_code, child.output
     85 
     86 
     87 class GTestHelpTest(gtest_test_utils.TestCase):
     88   """Tests the --help flag and its equivalent forms."""
     89 
     90   def TestHelpFlag(self, flag):
     91     """Verifies that the right message is printed and the tests are
     92     skipped when the given flag is specified."""
     93 
     94     exit_code, output = RunWithFlag(flag)
     95     self.assertEquals(0, exit_code)
     96     self.assert_(HELP_REGEX.search(output), output)
     97     if IS_WINDOWS:
     98       self.assert_(CATCH_EXCEPTIONS_FLAG in output, output)
     99       self.assert_(DEATH_TEST_STYLE_FLAG not in output, output)
    100     else:
    101       self.assert_(CATCH_EXCEPTIONS_FLAG not in output, output)
    102       self.assert_(DEATH_TEST_STYLE_FLAG in output, output)
    103 
    104   def testPrintsHelpWithFullFlag(self):
    105     self.TestHelpFlag('--help')
    106 
    107   def testPrintsHelpWithShortFlag(self):
    108     self.TestHelpFlag('-h')
    109 
    110   def testPrintsHelpWithQuestionFlag(self):
    111     self.TestHelpFlag('-?')
    112 
    113   def testPrintsHelpWithWindowsStyleQuestionFlag(self):
    114     self.TestHelpFlag('/?')
    115 
    116   def testRunsTestsWithoutHelpFlag(self):
    117     """Verifies that when no help flag is specified, the tests are run
    118     and the help message is not printed."""
    119 
    120     exit_code, output = RunWithFlag(None)
    121     self.assert_(exit_code != 0)
    122     self.assert_(not HELP_REGEX.search(output), output)
    123 
    124 
    125 if __name__ == '__main__':
    126   gtest_test_utils.Main()
    127