?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. #!/usr/bin/env python
  2. #
  3. # Copyright 2006, 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. """Unit test for Google Test's --gtest_list_tests flag.
  32.  
  33. A user can ask Google Test to list all tests by specifying the
  34. --gtest_list_tests flag. If output is requested, via --gtest_output=xml
  35. or --gtest_output=json, the tests are listed, with extra information in the
  36. output file.
  37. This script tests such functionality by invoking gtest_list_output_unittest_
  38. (a program written with Google Test) the command line flags.
  39. """
  40.  
  41. import os
  42. import re
  43. import gtest_test_utils
  44.  
  45. GTEST_LIST_TESTS_FLAG = '--gtest_list_tests'
  46. GTEST_OUTPUT_FLAG = '--gtest_output'
  47.  
  48. EXPECTED_XML = """<\?xml version="1.0" encoding="UTF-8"\?>
  49. <testsuites tests="2" name="AllTests">
  50.  <testsuite name="FooTest" tests="2">
  51.    <testcase name="Test1" file=".*gtest_list_output_unittest_.cc" line="43" />
  52.    <testcase name="Test2" file=".*gtest_list_output_unittest_.cc" line="45" />
  53.  </testsuite>
  54. </testsuites>
  55. """
  56.  
  57. EXPECTED_JSON = """{
  58.  "tests": 2,
  59.  "name": "AllTests",
  60.  "testsuites": \[
  61.    {
  62.      "name": "FooTest",
  63.      "tests": 2,
  64.      "testsuite": \[
  65.        {
  66.          "name": "Test1",
  67.          "file": ".*gtest_list_output_unittest_.cc",
  68.          "line": 43
  69.        },
  70.        {
  71.          "name": "Test2",
  72.          "file": ".*gtest_list_output_unittest_.cc",
  73.          "line": 45
  74.        }
  75.      \]
  76.    }
  77.  \]
  78. }
  79. """
  80.  
  81.  
  82. class GTestListTestsOutputUnitTest(gtest_test_utils.TestCase):
  83.   """Unit test for Google Test's list tests with output to file functionality.
  84.  """
  85.  
  86.   def testXml(self):
  87.     """Verifies XML output for listing tests in a Google Test binary.
  88.  
  89.    Runs a test program that generates an empty XML output, and
  90.    tests that the XML output is expected.
  91.    """
  92.     self._TestOutput('xml', EXPECTED_XML)
  93.  
  94.   def testJSON(self):
  95.     """Verifies XML output for listing tests in a Google Test binary.
  96.  
  97.    Runs a test program that generates an empty XML output, and
  98.    tests that the XML output is expected.
  99.    """
  100.     self._TestOutput('json', EXPECTED_JSON)
  101.  
  102.   def _GetOutput(self, out_format):
  103.     file_path = os.path.join(gtest_test_utils.GetTempDir(),
  104.                              'test_out.' + out_format)
  105.     gtest_prog_path = gtest_test_utils.GetTestExecutablePath(
  106.         'gtest_list_output_unittest_')
  107.  
  108.     command = ([
  109.         gtest_prog_path,
  110.         '%s=%s:%s' % (GTEST_OUTPUT_FLAG, out_format, file_path),
  111.         '--gtest_list_tests'
  112.     ])
  113.     environ_copy = os.environ.copy()
  114.     p = gtest_test_utils.Subprocess(
  115.         command, env=environ_copy, working_dir=gtest_test_utils.GetTempDir())
  116.  
  117.     self.assert_(p.exited)
  118.     self.assertEquals(0, p.exit_code)
  119.     with open(file_path) as f:
  120.       result = f.read()
  121.     return result
  122.  
  123.   def _TestOutput(self, test_format, expected_output):
  124.     actual = self._GetOutput(test_format)
  125.     actual_lines = actual.splitlines()
  126.     expected_lines = expected_output.splitlines()
  127.     line_count = 0
  128.     for actual_line in actual_lines:
  129.       expected_line = expected_lines[line_count]
  130.       expected_line_re = re.compile(expected_line.strip())
  131.       self.assert_(
  132.           expected_line_re.match(actual_line.strip()),
  133.           ('actual output of "%s",\n'
  134.            'which does not match expected regex of "%s"\n'
  135.            'on line %d' % (actual, expected_output, line_count)))
  136.       line_count = line_count + 1
  137.  
  138.  
  139. if __name__ == '__main__':
  140.   os.environ['GTEST_STACK_TRACE_DEPTH'] = '1'
  141.   gtest_test_utils.Main()
  142.