Example #1
0
 def setUp(self):
     # We want the trailing '/' that the last "" provides in os.path.join, for
     # telling Google Test to create an output directory instead of a single file
     # for xml output.
     self.output_dir_ = os.path.join(gtest_test_utils.GetTempDir(),
                                     GTEST_OUTPUT_SUBDIR, "")
     self.DeleteFilesAndDir()
    def _TestOutFile(self, test_name, expected):
        gtest_prog_path = gtest_test_utils.GetTestExecutablePath(test_name)
        command = [
            gtest_prog_path,
            '--gtest_output=json:%s' % self.output_dir_
        ]
        p = gtest_test_utils.Subprocess(
            command, working_dir=gtest_test_utils.GetTempDir())
        self.assert_(p.exited)
        self.assertEquals(0, p.exit_code)

        output_file_name1 = test_name + '.json'
        output_file1 = os.path.join(self.output_dir_, output_file_name1)
        output_file_name2 = 'lt-' + output_file_name1
        output_file2 = os.path.join(self.output_dir_, output_file_name2)
        self.assert_(
            os.path.isfile(output_file1) or os.path.isfile(output_file2),
            output_file1)

        if os.path.isfile(output_file1):
            with open(output_file1) as f:
                actual = json.load(f)
        else:
            with open(output_file2) as f:
                actual = json.load(f)
        self.assertEqual(expected, gtest_json_test_utils.normalize(actual))
Example #3
0
    def _TestOutFile(self, test_name, expected_xml):
        gtest_prog_path = gtest_test_utils.GetTestExecutablePath(test_name)
        command = [gtest_prog_path, "--gtest_output=xml:%s" % self.output_dir_]
        p = gtest_test_utils.Subprocess(
            command, working_dir=gtest_test_utils.GetTempDir())
        self.assert_(p.exited)
        self.assertEquals(0, p.exit_code)

        output_file_name1 = test_name + ".xml"
        output_file1 = os.path.join(self.output_dir_, output_file_name1)
        output_file_name2 = 'lt-' + output_file_name1
        output_file2 = os.path.join(self.output_dir_, output_file_name2)
        self.assert_(
            os.path.isfile(output_file1) or os.path.isfile(output_file2),
            output_file1)

        expected = minidom.parseString(expected_xml)
        if os.path.isfile(output_file1):
            actual = minidom.parse(output_file1)
        else:
            actual = minidom.parse(output_file2)
        self.NormalizeXml(actual.documentElement)
        self.AssertEquivalentNodes(expected.documentElement,
                                   actual.documentElement)
        expected.unlink()
        actual.unlink()
    def testSuppressedJsonOutput(self):
        """Verifies that no JSON output is generated.

        Tests that no JSON file is generated if the default JSON listener is
        shut down before RUN_ALL_TESTS is invoked.
        """

        json_path = os.path.join(gtest_test_utils.GetTempDir(),
                                 GTEST_PROGRAM_NAME + 'out.json')
        if os.path.isfile(json_path):
            os.remove(json_path)

        command = [
            GTEST_PROGRAM_PATH,
            '%s=json:%s' % (GTEST_OUTPUT_FLAG, json_path), '--shut_down_xml'
        ]
        p = gtest_test_utils.Subprocess(command)
        if p.terminated_by_signal:
            # p.signal is available only if p.terminated_by_signal is True.
            self.assertFalse(
                p.terminated_by_signal,
                '%s was killed by signal %d' % (GTEST_PROGRAM_NAME, p.signal))
        else:
            self.assert_(p.exited)
            self.assertEquals(
                1, p.exit_code,
                "'%s' exited with code %s, which doesn't match "
                'the expected exit code %s.' % (command, p.exit_code, 1))

        self.assert_(not os.path.isfile(json_path))
Example #5
0
    def _TestOutFile(self, test_name, expected_xml):
        gtest_prog_path = gtest_test_utils.GetTestExecutablePath(test_name)
        command = [gtest_prog_path, "--gtest_output=xml:%s" % self.output_dir_]
        p = gtest_test_utils.Subprocess(
            command, working_dir=gtest_test_utils.GetTempDir())
        self.assert_(p.exited)
        self.assertEquals(0, p.exit_code)

        # FIXME: libtool causes the built test binary to be
        #   named lt-gtest_xml_outfiles_test_ instead of
        #   gtest_xml_outfiles_test_.  To account for this possibility, we
        #   allow both names in the following code.  We should remove this
        #   when libtool replacement tool is ready.
        output_file_name1 = test_name + ".xml"
        output_file1 = os.path.join(self.output_dir_, output_file_name1)
        output_file_name2 = 'lt-' + output_file_name1
        output_file2 = os.path.join(self.output_dir_, output_file_name2)
        self.assert_(
            os.path.isfile(output_file1) or os.path.isfile(output_file2),
            output_file1)

        expected = minidom.parseString(expected_xml)
        if os.path.isfile(output_file1):
            actual = minidom.parse(output_file1)
        else:
            actual = minidom.parse(output_file2)
        self.NormalizeXml(actual.documentElement)
        self.AssertEquivalentNodes(expected.documentElement,
                                   actual.documentElement)
        expected.unlink()
        actual.unlink()
  def _TestOutFile(self, test_name, expected):
    gtest_prog_path = gtest_test_utils.GetTestExecutablePath(test_name)
    command = [gtest_prog_path, '--gtest_output=json:%s' % self.output_dir_]
    p = gtest_test_utils.Subprocess(command,
                                    working_dir=gtest_test_utils.GetTempDir())
    self.assert_(p.exited)
    self.assertEquals(0, p.exit_code)

    # FIXME: libtool causes the built test binary to be
    #   named lt-gtest_xml_outfiles_test_ instead of
    #   gtest_xml_outfiles_test_.  To account for this possibility, we
    #   allow both names in the following code.  We should remove this
    #   when libtool replacement tool is ready.
    output_file_name1 = test_name + '.json'
    output_file1 = os.path.join(self.output_dir_, output_file_name1)
    output_file_name2 = 'lt-' + output_file_name1
    output_file2 = os.path.join(self.output_dir_, output_file_name2)
    self.assert_(os.path.isfile(output_file1) or os.path.isfile(output_file2),
                 output_file1)

    if os.path.isfile(output_file1):
      with open(output_file1) as f:
        actual = json.load(f)
    else:
      with open(output_file2) as f:
        actual = json.load(f)
    self.assertEqual(expected, gtest_json_test_utils.normalize(actual))
    def _GetJsonOutput(self, gtest_prog_name, extra_args, expected_exit_code):
        """Returns the JSON output generated by running the program gtest_prog_name.

        Furthermore, the program's exit code must be expected_exit_code.

        Args:
          gtest_prog_name: Google Test binary name.
          extra_args: extra arguments to binary invocation.
          expected_exit_code: program's exit code.
        """
        json_path = os.path.join(gtest_test_utils.GetTempDir(),
                                 gtest_prog_name + 'out.json')
        gtest_prog_path = gtest_test_utils.GetTestExecutablePath(
            gtest_prog_name)

        command = (
            [gtest_prog_path,
             '%s=json:%s' % (GTEST_OUTPUT_FLAG, json_path)] + extra_args)
        p = gtest_test_utils.Subprocess(command)
        if p.terminated_by_signal:
            self.assert_(
                False,
                '%s was killed by signal %d' % (gtest_prog_name, p.signal))
        else:
            self.assert_(p.exited)
            self.assertEquals(
                expected_exit_code, p.exit_code,
                "'%s' exited with code %s, which doesn't match "
                'the expected exit code %s.' %
                (command, p.exit_code, expected_exit_code))
        with open(json_path) as f:
            actual = json.load(f)
        return actual
  def _TestXmlOutput(self, gtest_prog_name, expected_xml, expected_exit_code):
    """
    Asserts that the XML document generated by running the program
    gtest_prog_name matches expected_xml, a string containing another
    XML document.  Furthermore, the program's exit code must be
    expected_exit_code.
    """
    xml_path = os.path.join(gtest_test_utils.GetTempDir(),
                            gtest_prog_name + "out.xml")
    gtest_prog_path = gtest_test_utils.GetTestExecutablePath(gtest_prog_name)

    command = [gtest_prog_path, "%s=xml:%s" % (GTEST_OUTPUT_FLAG, xml_path)]
    p = gtest_test_utils.Subprocess(command)
    if p.terminated_by_signal:
      self.assert_(False,
                   "%s was killed by signal %d" % (gtest_prog_name, p.signal))
    else:
      self.assert_(p.exited)
      self.assertEquals(expected_exit_code, p.exit_code,
                        "'%s' exited with code %s, which doesn't match "
                        "the expected exit code %s."
                        % (command, p.exit_code, expected_exit_code))

    expected = minidom.parseString(expected_xml)
    actual   = minidom.parse(xml_path)
    self.NormalizeXml(actual.documentElement)
    self.AssertEquivalentNodes(expected.documentElement,
                               actual.documentElement)
    expected.unlink()
    actual  .unlink()
    def _GetXmlOutput(self, gtest_prog_name, extra_args, extra_env,
                      expected_exit_code):
        """
    Returns the xml output generated by running the program gtest_prog_name.
    Furthermore, the program's exit code must be expected_exit_code.
    """
        xml_path = os.path.join(gtest_test_utils.GetTempDir(),
                                gtest_prog_name + 'out.xml')
        gtest_prog_path = gtest_test_utils.GetTestExecutablePath(
            gtest_prog_name)

        command = (
            [gtest_prog_path,
             '%s=xml:%s' % (GTEST_OUTPUT_FLAG, xml_path)] + extra_args)
        environ_copy = os.environ.copy()
        if extra_env:
            environ_copy.update(extra_env)
        p = gtest_test_utils.Subprocess(command, env=environ_copy)

        if p.terminated_by_signal:
            self.assert_(
                False,
                '%s was killed by signal %d' % (gtest_prog_name, p.signal))
        else:
            self.assert_(p.exited)
            self.assertEquals(
                expected_exit_code, p.exit_code,
                "'%s' exited with code %s, which doesn't match "
                'the expected exit code %s.' %
                (command, p.exit_code, expected_exit_code))
        actual = minidom.parse(xml_path)
        return actual
    def testSuppressedXmlOutput(self):
        """
    Tests that no XML file is generated if the default XML listener is
    shut down before RUN_ALL_TESTS is invoked.
    """

        xml_path = os.path.join(gtest_test_utils.GetTempDir(),
                                GTEST_PROGRAM_NAME + 'out.xml')
        if os.path.isfile(xml_path):
            os.remove(xml_path)

        command = [
            GTEST_PROGRAM_PATH,
            '%s=xml:%s' % (GTEST_OUTPUT_FLAG, xml_path), '--shut_down_xml'
        ]
        p = gtest_test_utils.Subprocess(command)
        if p.terminated_by_signal:
            self.assert_(
                False,
                '%s was killed by signal %d' % (gtest_prog_name, p.signal))
        else:
            self.assert_(p.exited)
            self.assertEquals(
                1, p.exit_code,
                "'%s' exited with code %s, which doesn't match "
                'the expected exit code %s.' % (command, p.exit_code, 1))

        self.assert_(not os.path.isfile(xml_path))
Example #11
0
  def _GetOutput(self, out_format):
    file_path = os.path.join(gtest_test_utils.GetTempDir(),
                             'test_out.' + out_format)
    gtest_prog_path = gtest_test_utils.GetTestExecutablePath(
        'gtest_list_output_unittest_')

    command = ([
        gtest_prog_path,
        '%s=%s:%s' % (GTEST_OUTPUT_FLAG, out_format, file_path),
        '--gtest_list_tests'
    ])
    environ_copy = os.environ.copy()
    p = gtest_test_utils.Subprocess(
        command, env=environ_copy, working_dir=gtest_test_utils.GetTempDir())

    self.assert_(p.exited)
    self.assertEquals(0, p.exit_code)
    with open(file_path) as f:
      result = f.read()
    return result
Example #12
0
    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 as 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))
    def testShardStatusFileIsCreated(self):
        """Tests that the shard file is created if specified in the environment."""

        shard_status_file = os.path.join(gtest_test_utils.GetTempDir(),
                                         'shard_status_file')
        self.assert_(not os.path.exists(shard_status_file))

        extra_env = {SHARD_STATUS_FILE_ENV_VAR: shard_status_file}
        try:
            InvokeWithModifiedEnv(extra_env, RunAndReturnOutput)
        finally:
            self.assert_(os.path.exists(shard_status_file))
            os.remove(shard_status_file)
 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
Example #15
0
    def testShardStatusFileIsCreated(self):
        """Tests that the shard file is created if specified in the environment."""

        shard_status_file = os.path.join(gtest_test_utils.GetTempDir(),
                                         'shard_status_file')
        self.assert_(not os.path.exists(shard_status_file))

        extra_env = {SHARD_STATUS_FILE_ENV_VAR: shard_status_file}
        stdout_file = InvokeWithModifiedEnv(extra_env, os.popen, COMMAND, 'r')
        try:
            stdout_file.readlines()
        finally:
            stdout_file.close()
            self.assert_(os.path.exists(shard_status_file))
            os.remove(shard_status_file)
class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase):
    """
  Unit test for Google Test's XML 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 testNonEmptyXmlOutput(self):
            """
      Runs a test 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):
        """
    Runs a test 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 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))
Example #17
0
class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase):
  """
  Unit test for Google Test's XML output functionality.
  """

  def testNonEmptyXmlOutput(self):
    """
    Runs a test 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):
    """
    Runs a test 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 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))
Example #18
0
def RunAndReturnOutput(test_suite=None, fail_fast=None, run_disabled=False):
  """Runs the test program and returns its output."""

  args = []
  xml_path = os.path.join(gtest_test_utils.GetTempDir(),
                          '.GTestFailFastUnitTest.xml')
  args += ['--gtest_output=xml:' + xml_path]
  if fail_fast is not None:
    if isinstance(fail_fast, str):
      args += ['--%s=%s' % (FAIL_FAST_FLAG, fail_fast)]
    elif fail_fast:
      args += ['--%s' % FAIL_FAST_FLAG]
    else:
      args += ['--no%s' % FAIL_FAST_FLAG]
  if test_suite:
    args += ['--%s=%s.*' % (FILTER_FLAG, test_suite)]
  if run_disabled:
    args += ['--%s' % RUN_DISABLED_FLAG]
  txt_out = gtest_test_utils.Subprocess([COMMAND] + args, env=environ).output
  with open(xml_path) as xml_file:
    return txt_out, xml_file.read()
Example #19
0
  def testShardStatusFileIsCreatedWithListTests(self):
    """Tests that the shard file is created with the "list_tests" flag."""

    shard_status_file = os.path.join(gtest_test_utils.GetTempDir(),
                                     'shard_status_file2')
    self.assert_(not os.path.exists(shard_status_file))

    extra_env = {SHARD_STATUS_FILE_ENV_VAR: shard_status_file}
    try:
      output = InvokeWithModifiedEnv(extra_env,
                                     RunAndReturnOutput,
                                     [LIST_TESTS_FLAG])
    finally:
      # This assertion ensures that Google Test enumerated the tests as
      # opposed to running them.
      self.assert_('[==========]' not in output,
                   'Unexpected output during test enumeration.\n'
                   'Please ensure that LIST_TESTS_FLAG is assigned the\n'
                   'correct flag value for listing Google Test tests.')

      self.assert_(os.path.exists(shard_status_file))
      os.remove(shard_status_file)
Example #20
0
class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase):
    """
  Unit test for Google Test's XML 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 testNonEmptyXmlOutput(self):
            """
      Runs a test 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 test 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 test 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))