Blame googletest/test/gtest_help_test.py

Packit bd1cd8
#!/usr/bin/env python
Packit bd1cd8
#
Packit bd1cd8
# Copyright 2009, Google Inc.
Packit bd1cd8
# All rights reserved.
Packit bd1cd8
#
Packit bd1cd8
# Redistribution and use in source and binary forms, with or without
Packit bd1cd8
# modification, are permitted provided that the following conditions are
Packit bd1cd8
# met:
Packit bd1cd8
#
Packit bd1cd8
#     * Redistributions of source code must retain the above copyright
Packit bd1cd8
# notice, this list of conditions and the following disclaimer.
Packit bd1cd8
#     * Redistributions in binary form must reproduce the above
Packit bd1cd8
# copyright notice, this list of conditions and the following disclaimer
Packit bd1cd8
# in the documentation and/or other materials provided with the
Packit bd1cd8
# distribution.
Packit bd1cd8
#     * Neither the name of Google Inc. nor the names of its
Packit bd1cd8
# contributors may be used to endorse or promote products derived from
Packit bd1cd8
# this software without specific prior written permission.
Packit bd1cd8
#
Packit bd1cd8
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
Packit bd1cd8
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
Packit bd1cd8
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
Packit bd1cd8
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
Packit bd1cd8
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
Packit bd1cd8
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
Packit bd1cd8
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
Packit bd1cd8
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
Packit bd1cd8
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Packit bd1cd8
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Packit bd1cd8
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit bd1cd8
Packit bd1cd8
"""Tests the --help flag of Google C++ Testing Framework.
Packit bd1cd8
Packit bd1cd8
SYNOPSIS
Packit bd1cd8
       gtest_help_test.py --build_dir=BUILD/DIR
Packit bd1cd8
         # where BUILD/DIR contains the built gtest_help_test_ file.
Packit bd1cd8
       gtest_help_test.py
Packit bd1cd8
"""
Packit bd1cd8
Packit bd1cd8
__author__ = 'wan@google.com (Zhanyong Wan)'
Packit bd1cd8
Packit bd1cd8
import os
Packit bd1cd8
import re
Packit bd1cd8
import gtest_test_utils
Packit bd1cd8
Packit bd1cd8
Packit bd1cd8
IS_LINUX = os.name == 'posix' and os.uname()[0] == 'Linux'
Packit bd1cd8
IS_WINDOWS = os.name == 'nt'
Packit bd1cd8
Packit bd1cd8
PROGRAM_PATH = gtest_test_utils.GetTestExecutablePath('gtest_help_test_')
Packit bd1cd8
FLAG_PREFIX = '--gtest_'
Packit bd1cd8
DEATH_TEST_STYLE_FLAG = FLAG_PREFIX + 'death_test_style'
Packit bd1cd8
STREAM_RESULT_TO_FLAG = FLAG_PREFIX + 'stream_result_to'
Packit bd1cd8
UNKNOWN_FLAG = FLAG_PREFIX + 'unknown_flag_for_testing'
Packit bd1cd8
LIST_TESTS_FLAG = FLAG_PREFIX + 'list_tests'
Packit bd1cd8
INCORRECT_FLAG_VARIANTS = [re.sub('^--', '-', LIST_TESTS_FLAG),
Packit bd1cd8
                           re.sub('^--', '/', LIST_TESTS_FLAG),
Packit bd1cd8
                           re.sub('_', '-', LIST_TESTS_FLAG)]
Packit bd1cd8
INTERNAL_FLAG_FOR_TESTING = FLAG_PREFIX + 'internal_flag_for_testing'
Packit bd1cd8
Packit bd1cd8
SUPPORTS_DEATH_TESTS = "DeathTest" in gtest_test_utils.Subprocess(
Packit bd1cd8
    [PROGRAM_PATH, LIST_TESTS_FLAG]).output
Packit bd1cd8
Packit bd1cd8
# The help message must match this regex.
Packit bd1cd8
HELP_REGEX = re.compile(
Packit bd1cd8
    FLAG_PREFIX + r'list_tests.*' +
Packit bd1cd8
    FLAG_PREFIX + r'filter=.*' +
Packit bd1cd8
    FLAG_PREFIX + r'also_run_disabled_tests.*' +
Packit bd1cd8
    FLAG_PREFIX + r'repeat=.*' +
Packit bd1cd8
    FLAG_PREFIX + r'shuffle.*' +
Packit bd1cd8
    FLAG_PREFIX + r'random_seed=.*' +
Packit bd1cd8
    FLAG_PREFIX + r'color=.*' +
Packit bd1cd8
    FLAG_PREFIX + r'print_time.*' +
Packit bd1cd8
    FLAG_PREFIX + r'output=.*' +
Packit bd1cd8
    FLAG_PREFIX + r'break_on_failure.*' +
Packit bd1cd8
    FLAG_PREFIX + r'throw_on_failure.*' +
Packit bd1cd8
    FLAG_PREFIX + r'catch_exceptions=0.*',
Packit bd1cd8
    re.DOTALL)
Packit bd1cd8
Packit bd1cd8
Packit bd1cd8
def RunWithFlag(flag):
Packit bd1cd8
  """Runs gtest_help_test_ with the given flag.
Packit bd1cd8
Packit bd1cd8
  Returns:
Packit bd1cd8
    the exit code and the text output as a tuple.
Packit bd1cd8
  Args:
Packit bd1cd8
    flag: the command-line flag to pass to gtest_help_test_, or None.
Packit bd1cd8
  """
Packit bd1cd8
Packit bd1cd8
  if flag is None:
Packit bd1cd8
    command = [PROGRAM_PATH]
Packit bd1cd8
  else:
Packit bd1cd8
    command = [PROGRAM_PATH, flag]
Packit bd1cd8
  child = gtest_test_utils.Subprocess(command)
Packit bd1cd8
  return child.exit_code, child.output
Packit bd1cd8
Packit bd1cd8
Packit bd1cd8
class GTestHelpTest(gtest_test_utils.TestCase):
Packit bd1cd8
  """Tests the --help flag and its equivalent forms."""
Packit bd1cd8
Packit bd1cd8
  def TestHelpFlag(self, flag):
Packit bd1cd8
    """Verifies correct behavior when help flag is specified.
Packit bd1cd8
Packit bd1cd8
    The right message must be printed and the tests must
Packit bd1cd8
    skipped when the given flag is specified.
Packit bd1cd8
Packit bd1cd8
    Args:
Packit bd1cd8
      flag:  A flag to pass to the binary or None.
Packit bd1cd8
    """
Packit bd1cd8
Packit bd1cd8
    exit_code, output = RunWithFlag(flag)
Packit bd1cd8
    self.assertEquals(0, exit_code)
Packit bd1cd8
    self.assert_(HELP_REGEX.search(output), output)
Packit bd1cd8
Packit bd1cd8
    if IS_LINUX:
Packit bd1cd8
      self.assert_(STREAM_RESULT_TO_FLAG in output, output)
Packit bd1cd8
    else:
Packit bd1cd8
      self.assert_(STREAM_RESULT_TO_FLAG not in output, output)
Packit bd1cd8
Packit bd1cd8
    if SUPPORTS_DEATH_TESTS and not IS_WINDOWS:
Packit bd1cd8
      self.assert_(DEATH_TEST_STYLE_FLAG in output, output)
Packit bd1cd8
    else:
Packit bd1cd8
      self.assert_(DEATH_TEST_STYLE_FLAG not in output, output)
Packit bd1cd8
Packit bd1cd8
  def TestNonHelpFlag(self, flag):
Packit bd1cd8
    """Verifies correct behavior when no help flag is specified.
Packit bd1cd8
Packit bd1cd8
    Verifies that when no help flag is specified, the tests are run
Packit bd1cd8
    and the help message is not printed.
Packit bd1cd8
Packit bd1cd8
    Args:
Packit bd1cd8
      flag:  A flag to pass to the binary or None.
Packit bd1cd8
    """
Packit bd1cd8
Packit bd1cd8
    exit_code, output = RunWithFlag(flag)
Packit bd1cd8
    self.assert_(exit_code != 0)
Packit bd1cd8
    self.assert_(not HELP_REGEX.search(output), output)
Packit bd1cd8
Packit bd1cd8
  def testPrintsHelpWithFullFlag(self):
Packit bd1cd8
    self.TestHelpFlag('--help')
Packit bd1cd8
Packit bd1cd8
  def testPrintsHelpWithShortFlag(self):
Packit bd1cd8
    self.TestHelpFlag('-h')
Packit bd1cd8
Packit bd1cd8
  def testPrintsHelpWithQuestionFlag(self):
Packit bd1cd8
    self.TestHelpFlag('-?')
Packit bd1cd8
Packit bd1cd8
  def testPrintsHelpWithWindowsStyleQuestionFlag(self):
Packit bd1cd8
    self.TestHelpFlag('/?')
Packit bd1cd8
Packit bd1cd8
  def testPrintsHelpWithUnrecognizedGoogleTestFlag(self):
Packit bd1cd8
    self.TestHelpFlag(UNKNOWN_FLAG)
Packit bd1cd8
Packit bd1cd8
  def testPrintsHelpWithIncorrectFlagStyle(self):
Packit bd1cd8
    for incorrect_flag in INCORRECT_FLAG_VARIANTS:
Packit bd1cd8
      self.TestHelpFlag(incorrect_flag)
Packit bd1cd8
Packit bd1cd8
  def testRunsTestsWithoutHelpFlag(self):
Packit bd1cd8
    """Verifies that when no help flag is specified, the tests are run
Packit bd1cd8
    and the help message is not printed."""
Packit bd1cd8
Packit bd1cd8
    self.TestNonHelpFlag(None)
Packit bd1cd8
Packit bd1cd8
  def testRunsTestsWithGtestInternalFlag(self):
Packit bd1cd8
    """Verifies that the tests are run and no help message is printed when
Packit bd1cd8
    a flag starting with Google Test prefix and 'internal_' is supplied."""
Packit bd1cd8
Packit bd1cd8
    self.TestNonHelpFlag(INTERNAL_FLAG_FOR_TESTING)
Packit bd1cd8
Packit bd1cd8
Packit bd1cd8
if __name__ == '__main__':
Packit bd1cd8
  gtest_test_utils.Main()