Beispiel #1
0
def Run(command):
    """Runs a command; returns True/False if its exit code is/isn't 0."""

    print('Running "%s". . .' % ' '.join(command))
    p = gtest_test_utils.Subprocess(command)
    return p.exited and p.exit_code == 0
def RunAndReturnOutput(args=None):
    """Runs the test program and returns its output."""

    return gtest_test_utils.Subprocess([COMMAND] + (args or []),
                                       env=environ).output
IS_WINDOWS = os.name == 'nt'

PROGRAM_PATH = gtest_test_utils.GetTestExecutablePath('gtest_help_test_')
FLAG_PREFIX = '--gtest_'
DEATH_TEST_STYLE_FLAG = FLAG_PREFIX + 'death_test_style'
STREAM_RESULT_TO_FLAG = FLAG_PREFIX + 'stream_result_to'
UNKNOWN_FLAG = FLAG_PREFIX + 'unknown_flag_for_testing'
LIST_TESTS_FLAG = FLAG_PREFIX + 'list_tests'
INCORRECT_FLAG_VARIANTS = [
    re.sub('^--', '-', LIST_TESTS_FLAG),
    re.sub('^--', '/', LIST_TESTS_FLAG),
    re.sub('_', '-', LIST_TESTS_FLAG)
]
INTERNAL_FLAG_FOR_TESTING = FLAG_PREFIX + 'internal_flag_for_testing'

SUPPORTS_DEATH_TESTS = "DeathTest" in gtest_test_utils.Subprocess(
    [PROGRAM_PATH, LIST_TESTS_FLAG]).output

# The help message must match this regex.
HELP_REGEX = re.compile(
    FLAG_PREFIX + r'list_tests.*' + FLAG_PREFIX + r'filter=.*' + FLAG_PREFIX +
    r'also_run_disabled_tests.*' + FLAG_PREFIX + r'repeat=.*' + FLAG_PREFIX +
    r'shuffle.*' + FLAG_PREFIX + r'random_seed=.*' + FLAG_PREFIX +
    r'color=.*' + FLAG_PREFIX + r'print_time.*' + FLAG_PREFIX + r'output=.*' +
    FLAG_PREFIX + r'break_on_failure.*' + FLAG_PREFIX + r'throw_on_failure.*' +
    FLAG_PREFIX + r'catch_exceptions=0.*', re.DOTALL)


def RunWithFlag(flag):
    """Runs gtest_help_test_ with the given flag.

  Returns:
Beispiel #4
0
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
import os
import re
import sets
import sys

import gtest_test_utils

# Constants.

# Checks if this platform can pass empty environment variables to child
# processes.  We set an env variable to an empty string and invoke a python
# script in a subprocess to print whether the variable is STILL in
# os.environ.  We then use 'eval' to parse the child's output so that an
# exception is thrown if the input is anything other than 'True' nor 'False'.
os.environ['EMPTY_VAR'] = ''
child = gtest_test_utils.Subprocess(
    [sys.executable, '-c', 'import os; print \'EMPTY_VAR\' in os.environ'])
CAN_PASS_EMPTY_ENV = eval(child.output)

# Check if this platform can unset environment variables in child processes.
# We set an env variable to a non-empty string, unset it, and invoke
# a python script in a subprocess to print whether the variable
# is NO LONGER in os.environ.
# We use 'eval' to parse the child's output so that an exception
# is thrown if the input is neither 'True' nor 'False'.
os.environ['UNSET_VAR'] = 'X'
del os.environ['UNSET_VAR']
child = gtest_test_utils.Subprocess(
    [sys.executable, '-c', 'import os; print \'UNSET_VAR\' not in os.environ'])
CAN_UNSET_ENV = eval(child.output)

# Checks if we should test with an empty filter. This doesn't
}

EXPECTED_EMPTY = {
    u'tests': 0,
    u'failures': 0,
    u'disabled': 0,
    u'errors': 0,
    u'time': u'*',
    u'timestamp': u'*',
    u'name': u'AllTests',
    u'testsuites': [],
}

GTEST_PROGRAM_PATH = gtest_test_utils.GetTestExecutablePath(GTEST_PROGRAM_NAME)

SUPPORTS_TYPED_TESTS = 'TypedTest' in gtest_test_utils.Subprocess(
    [GTEST_PROGRAM_PATH, GTEST_LIST_TESTS_FLAG], capture_stderr=False).output


class GTestJsonOutputUnitTest(gtest_test_utils.TestCase):
    """Unit test for Google Test's JSON output functionality.
    """

    # This test currently breaks on platforms that do not support typed and
    # type-parameterized tests, so we don't run it under them.
    if SUPPORTS_TYPED_TESTS:

        def testNonEmptyJsonOutput(self):
            """Verifies JSON output for a Google Test binary with non-empty output.

            Runs a test program that generates a non-empty JSON output, and
            tests that the JSON output is expected.
Beispiel #7
0
FLAG_PREFIX = '--gtest_'
LIST_TESTS_FLAG = FLAG_PREFIX + 'list_tests'
NO_CATCH_EXCEPTIONS_FLAG = FLAG_PREFIX + 'catch_exceptions=0'
FILTER_FLAG = FLAG_PREFIX + 'filter'

# Path to the gtest_catch_exceptions_ex_test_ binary, compiled with
# exceptions enabled.
EX_EXE_PATH = gtest_test_utils.GetTestExecutablePath(
    'gtest_catch_exceptions_ex_test_')

# Path to the gtest_catch_exceptions_test_ binary, compiled with
# exceptions disabled.
EXE_PATH = gtest_test_utils.GetTestExecutablePath(
    'gtest_catch_exceptions_no_ex_test_')

TEST_LIST = gtest_test_utils.Subprocess([EXE_PATH, LIST_TESTS_FLAG]).output

SUPPORTS_SEH_EXCEPTIONS = 'ThrowsSehException' in TEST_LIST

if SUPPORTS_SEH_EXCEPTIONS:
    BINARY_OUTPUT = gtest_test_utils.Subprocess([EXE_PATH]).output

EX_BINARY_OUTPUT = gtest_test_utils.Subprocess([EX_EXE_PATH]).output

# The tests.
if SUPPORTS_SEH_EXCEPTIONS:
    # pylint:disable-msg=C6302
    class CatchSehExceptionsTest(gtest_test_utils.TestCase):
        """Tests exception-catching behavior."""
        def TestSehExceptions(self, test_output):
            self.assert_('SEH exception with code 0x2a thrown '
# 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.
"""Tests Google Test's unittest skip in environment setup  behavior.

This script invokes gtest_skip_in_environment_setup_test_ and verifies its
output.
"""

import gtest_test_utils

# Path to the gtest_skip_in_environment_setup_test binary
EXE_PATH = gtest_test_utils.GetTestExecutablePath(
    'gtest_skip_in_environment_setup_test')

OUTPUT = gtest_test_utils.Subprocess([EXE_PATH]).output


# Test.
class SkipEntireEnvironmentTest(gtest_test_utils.TestCase):
    def testSkipEntireEnvironmentTest(self):
        self.assertIn('Skipping the entire environment', OUTPUT)
        self.assertNotIn('FAILED', OUTPUT)


if __name__ == '__main__':
    gtest_test_utils.Main()
Beispiel #9
0
import os
import re
import sets
import sys

import gtest_test_utils

# Constants.

# Checks if this platform can pass empty environment variables to child
# processes.  We set an env variable to an empty string and invoke a python
# script in a subprocess to print whether the variable is STILL in
# os.environ.  We then use 'eval' to parse the child's output so that an
# exception is thrown if the input is anything other than 'True' nor 'False'.
os.environ['EMPTY_VAR'] = ''
child = gtest_test_utils.Subprocess(
    [sys.executable, '-c', 'import os; print \'EMPTY_VAR\' in os.environ'])
CAN_PASS_EMPTY_ENV = eval(child.output)

# Check if this platform can unset environment variables in child processes.
# We set an env variable to a non-empty string, unset it, and invoke
# a python script in a subprocess to print whether the variable
# is NO LONGER in os.environ.
# We use 'eval' to parse the child's output so that an exception
# is thrown if the input is neither 'True' nor 'False'.
os.environ['UNSET_VAR'] = 'X'
del os.environ['UNSET_VAR']
child = gtest_test_utils.Subprocess(
    [sys.executable, '-c', 'import os; print \'UNSET_VAR\' not in os.environ'])
CAN_UNSET_ENV = eval(child.output)

# Checks if we should test with an empty filter. This doesn't
Beispiel #10
0
class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase):
    """
  Unit unit_testing for Google Test's XML output functionality.
  """

    # This unit_testing currently breaks on platforms that do not support typed and
    # type-parameterized tests, so we don't run it under them.
    if SUPPORTS_TYPED_TESTS:

        def testNonEmptyXmlOutput(self):
            """
      Runs a unit_testing program that generates a non-empty XML output, and
      tests that the XML output is expected.
      """
            self._TestXmlOutput(GTEST_PROGRAM_NAME, EXPECTED_NON_EMPTY_XML, 1)

    def testEmptyXmlOutput(self):
        """Verifies XML output for a Google Test binary without actual tests.

    Runs a unit_testing program that generates an empty XML output, and
    tests that the XML output is expected.
    """

        self._TestXmlOutput('gtest_no_test_unittest', EXPECTED_EMPTY_XML, 0)

    def testTimestampValue(self):
        """Checks whether the timestamp attribute in the XML output is valid.

    Runs a unit_testing program that generates an empty XML output, and checks if
    the timestamp attribute in the testsuites tag is valid.
    """
        actual = self._GetXmlOutput('gtest_no_test_unittest', [], {}, 0)
        date_time_str = actual.documentElement.getAttributeNode(
            'timestamp').value
        # datetime.strptime() is only available in Python 2.5+ so we have to
        # parse the expected datetime manually.
        match = re.match(r'(\d+)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)',
                         date_time_str)
        self.assertTrue(
            re.match,
            'XML datettime string %s has incorrect format' % date_time_str)
        date_time_from_xml = datetime.datetime(year=int(match.group(1)),
                                               month=int(match.group(2)),
                                               day=int(match.group(3)),
                                               hour=int(match.group(4)),
                                               minute=int(match.group(5)),
                                               second=int(match.group(6)))

        time_delta = abs(datetime.datetime.now() - date_time_from_xml)
        # timestamp value should be near the current local time
        self.assertTrue(time_delta < datetime.timedelta(seconds=600),
                        'time_delta is %s' % time_delta)
        actual.unlink()

    def testDefaultOutputFile(self):
        """
    Confirms that Google Test produces an XML output file with the expected
    default name if no name is explicitly specified.
    """
        output_file = os.path.join(gtest_test_utils.GetTempDir(),
                                   GTEST_DEFAULT_OUTPUT_FILE)
        gtest_prog_path = gtest_test_utils.GetTestExecutablePath(
            'gtest_no_test_unittest')
        try:
            os.remove(output_file)
        except OSError, e:
            if e.errno != errno.ENOENT:
                raise

        p = gtest_test_utils.Subprocess(
            [gtest_prog_path, '%s=xml' % GTEST_OUTPUT_FLAG],
            working_dir=gtest_test_utils.GetTempDir())
        self.assert_(p.exited)
        self.assertEquals(0, p.exit_code)
        self.assert_(os.path.isfile(output_file))