github.com/jlmucb/cloudproxy@v0.0.0-20170830161738-b5aa0b619bc4/src/third_party/googlemock/gtest/test/gtest_help_test.py (about)

     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 --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@google.com (Zhanyong Wan)'
    41  
    42  import os
    43  import re
    44  import gtest_test_utils
    45  
    46  
    47  IS_LINUX = os.name == 'posix' and os.uname()[0] == 'Linux'
    48  IS_WINDOWS = os.name == 'nt'
    49  
    50  PROGRAM_PATH = gtest_test_utils.GetTestExecutablePath('gtest_help_test_')
    51  FLAG_PREFIX = '--gtest_'
    52  DEATH_TEST_STYLE_FLAG = FLAG_PREFIX + 'death_test_style'
    53  STREAM_RESULT_TO_FLAG = FLAG_PREFIX + 'stream_result_to'
    54  UNKNOWN_FLAG = FLAG_PREFIX + 'unknown_flag_for_testing'
    55  LIST_TESTS_FLAG = FLAG_PREFIX + 'list_tests'
    56  INCORRECT_FLAG_VARIANTS = [re.sub('^--', '-', LIST_TESTS_FLAG),
    57                             re.sub('^--', '/', LIST_TESTS_FLAG),
    58                             re.sub('_', '-', LIST_TESTS_FLAG)]
    59  INTERNAL_FLAG_FOR_TESTING = FLAG_PREFIX + 'internal_flag_for_testing'
    60  
    61  SUPPORTS_DEATH_TESTS = "DeathTest" in gtest_test_utils.Subprocess(
    62      [PROGRAM_PATH, LIST_TESTS_FLAG]).output
    63  
    64  # The help message must match this regex.
    65  HELP_REGEX = re.compile(
    66      FLAG_PREFIX + r'list_tests.*' +
    67      FLAG_PREFIX + r'filter=.*' +
    68      FLAG_PREFIX + r'also_run_disabled_tests.*' +
    69      FLAG_PREFIX + r'repeat=.*' +
    70      FLAG_PREFIX + r'shuffle.*' +
    71      FLAG_PREFIX + r'random_seed=.*' +
    72      FLAG_PREFIX + r'color=.*' +
    73      FLAG_PREFIX + r'print_time.*' +
    74      FLAG_PREFIX + r'output=.*' +
    75      FLAG_PREFIX + r'break_on_failure.*' +
    76      FLAG_PREFIX + r'throw_on_failure.*' +
    77      FLAG_PREFIX + r'catch_exceptions=0.*',
    78      re.DOTALL)
    79  
    80  
    81  def RunWithFlag(flag):
    82    """Runs gtest_help_test_ with the given flag.
    83  
    84    Returns:
    85      the exit code and the text output as a tuple.
    86    Args:
    87      flag: the command-line flag to pass to gtest_help_test_, or None.
    88    """
    89  
    90    if flag is None:
    91      command = [PROGRAM_PATH]
    92    else:
    93      command = [PROGRAM_PATH, flag]
    94    child = gtest_test_utils.Subprocess(command)
    95    return child.exit_code, child.output
    96  
    97  
    98  class GTestHelpTest(gtest_test_utils.TestCase):
    99    """Tests the --help flag and its equivalent forms."""
   100  
   101    def TestHelpFlag(self, flag):
   102      """Verifies correct behavior when help flag is specified.
   103  
   104      The right message must be printed and the tests must
   105      skipped when the given flag is specified.
   106  
   107      Args:
   108        flag:  A flag to pass to the binary or None.
   109      """
   110  
   111      exit_code, output = RunWithFlag(flag)
   112      self.assertEquals(0, exit_code)
   113      self.assert_(HELP_REGEX.search(output), output)
   114  
   115      if IS_LINUX:
   116        self.assert_(STREAM_RESULT_TO_FLAG in output, output)
   117      else:
   118        self.assert_(STREAM_RESULT_TO_FLAG not in output, output)
   119  
   120      if SUPPORTS_DEATH_TESTS and not IS_WINDOWS:
   121        self.assert_(DEATH_TEST_STYLE_FLAG in output, output)
   122      else:
   123        self.assert_(DEATH_TEST_STYLE_FLAG not in output, output)
   124  
   125    def TestNonHelpFlag(self, flag):
   126      """Verifies correct behavior when no help flag is specified.
   127  
   128      Verifies that when no help flag is specified, the tests are run
   129      and the help message is not printed.
   130  
   131      Args:
   132        flag:  A flag to pass to the binary or None.
   133      """
   134  
   135      exit_code, output = RunWithFlag(flag)
   136      self.assert_(exit_code != 0)
   137      self.assert_(not HELP_REGEX.search(output), output)
   138  
   139    def testPrintsHelpWithFullFlag(self):
   140      self.TestHelpFlag('--help')
   141  
   142    def testPrintsHelpWithShortFlag(self):
   143      self.TestHelpFlag('-h')
   144  
   145    def testPrintsHelpWithQuestionFlag(self):
   146      self.TestHelpFlag('-?')
   147  
   148    def testPrintsHelpWithWindowsStyleQuestionFlag(self):
   149      self.TestHelpFlag('/?')
   150  
   151    def testPrintsHelpWithUnrecognizedGoogleTestFlag(self):
   152      self.TestHelpFlag(UNKNOWN_FLAG)
   153  
   154    def testPrintsHelpWithIncorrectFlagStyle(self):
   155      for incorrect_flag in INCORRECT_FLAG_VARIANTS:
   156        self.TestHelpFlag(incorrect_flag)
   157  
   158    def testRunsTestsWithoutHelpFlag(self):
   159      """Verifies that when no help flag is specified, the tests are run
   160      and the help message is not printed."""
   161  
   162      self.TestNonHelpFlag(None)
   163  
   164    def testRunsTestsWithGtestInternalFlag(self):
   165      """Verifies that the tests are run and no help message is printed when
   166      a flag starting with Google Test prefix and 'internal_' is supplied."""
   167  
   168      self.TestNonHelpFlag(INTERNAL_FLAG_FOR_TESTING)
   169  
   170  
   171  if __name__ == '__main__':
   172    gtest_test_utils.Main()