tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

googletest-json-outfiles-test.py (5663B)


      1 #!/usr/bin/env python
      2 # Copyright 2018, Google Inc.
      3 # All rights reserved.
      4 #
      5 # Redistribution and use in source and binary forms, with or without
      6 # modification, are permitted provided that the following conditions are
      7 # met:
      8 #
      9 #     * Redistributions of source code must retain the above copyright
     10 # notice, this list of conditions and the following disclaimer.
     11 #     * Redistributions in binary form must reproduce the above
     12 # copyright notice, this list of conditions and the following disclaimer
     13 # in the documentation and/or other materials provided with the
     14 # distribution.
     15 #     * Neither the name of Google Inc. nor the names of its
     16 # contributors may be used to endorse or promote products derived from
     17 # this software without specific prior written permission.
     18 #
     19 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     20 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     21 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     22 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     23 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     24 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     25 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     26 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     27 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     28 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     29 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     30 
     31 """Unit test for the gtest_json_output module."""
     32 
     33 import json
     34 import os
     35 import gtest_json_test_utils
     36 import gtest_test_utils
     37 
     38 GTEST_OUTPUT_SUBDIR = 'json_outfiles'
     39 GTEST_OUTPUT_1_TEST = 'gtest_xml_outfile1_test_'
     40 GTEST_OUTPUT_2_TEST = 'gtest_xml_outfile2_test_'
     41 
     42 EXPECTED_1 = {
     43    u'tests':
     44        1,
     45    u'failures':
     46        0,
     47    u'disabled':
     48        0,
     49    u'errors':
     50        0,
     51    u'time':
     52        u'*',
     53    u'timestamp':
     54        u'*',
     55    u'name':
     56        u'AllTests',
     57    u'testsuites': [{
     58        u'name':
     59            u'PropertyOne',
     60        u'tests':
     61            1,
     62        u'failures':
     63            0,
     64        u'disabled':
     65            0,
     66        u'errors':
     67            0,
     68        u'time':
     69            u'*',
     70        u'timestamp':
     71            u'*',
     72        u'testsuite': [{
     73            u'name': u'TestSomeProperties',
     74            u'status': u'RUN',
     75            u'result': u'COMPLETED',
     76            u'time': u'*',
     77            u'timestamp': u'*',
     78            u'classname': u'PropertyOne',
     79            u'SetUpProp': u'1',
     80            u'TestSomeProperty': u'1',
     81            u'TearDownProp': u'1',
     82        }],
     83    }],
     84 }
     85 
     86 EXPECTED_2 = {
     87    u'tests':
     88        1,
     89    u'failures':
     90        0,
     91    u'disabled':
     92        0,
     93    u'errors':
     94        0,
     95    u'time':
     96        u'*',
     97    u'timestamp':
     98        u'*',
     99    u'name':
    100        u'AllTests',
    101    u'testsuites': [{
    102        u'name':
    103            u'PropertyTwo',
    104        u'tests':
    105            1,
    106        u'failures':
    107            0,
    108        u'disabled':
    109            0,
    110        u'errors':
    111            0,
    112        u'time':
    113            u'*',
    114        u'timestamp':
    115            u'*',
    116        u'testsuite': [{
    117            u'name': u'TestSomeProperties',
    118            u'status': u'RUN',
    119            u'result': u'COMPLETED',
    120            u'timestamp': u'*',
    121            u'time': u'*',
    122            u'classname': u'PropertyTwo',
    123            u'SetUpProp': u'2',
    124            u'TestSomeProperty': u'2',
    125            u'TearDownProp': u'2',
    126        }],
    127    }],
    128 }
    129 
    130 
    131 class GTestJsonOutFilesTest(gtest_test_utils.TestCase):
    132  """Unit test for Google Test's JSON output functionality."""
    133 
    134  def setUp(self):
    135    # We want the trailing '/' that the last "" provides in os.path.join, for
    136    # telling Google Test to create an output directory instead of a single file
    137    # for xml output.
    138    self.output_dir_ = os.path.join(gtest_test_utils.GetTempDir(),
    139                                    GTEST_OUTPUT_SUBDIR, '')
    140    self.DeleteFilesAndDir()
    141 
    142  def tearDown(self):
    143    self.DeleteFilesAndDir()
    144 
    145  def DeleteFilesAndDir(self):
    146    try:
    147      os.remove(os.path.join(self.output_dir_, GTEST_OUTPUT_1_TEST + '.json'))
    148    except os.error:
    149      pass
    150    try:
    151      os.remove(os.path.join(self.output_dir_, GTEST_OUTPUT_2_TEST + '.json'))
    152    except os.error:
    153      pass
    154    try:
    155      os.rmdir(self.output_dir_)
    156    except os.error:
    157      pass
    158 
    159  def testOutfile1(self):
    160    self._TestOutFile(GTEST_OUTPUT_1_TEST, EXPECTED_1)
    161 
    162  def testOutfile2(self):
    163    self._TestOutFile(GTEST_OUTPUT_2_TEST, EXPECTED_2)
    164 
    165  def _TestOutFile(self, test_name, expected):
    166    gtest_prog_path = gtest_test_utils.GetTestExecutablePath(test_name)
    167    command = [gtest_prog_path, '--gtest_output=json:%s' % self.output_dir_]
    168    p = gtest_test_utils.Subprocess(command,
    169                                    working_dir=gtest_test_utils.GetTempDir())
    170    self.assert_(p.exited)
    171    self.assertEquals(0, p.exit_code)
    172 
    173    output_file_name1 = test_name + '.json'
    174    output_file1 = os.path.join(self.output_dir_, output_file_name1)
    175    output_file_name2 = 'lt-' + output_file_name1
    176    output_file2 = os.path.join(self.output_dir_, output_file_name2)
    177    self.assert_(os.path.isfile(output_file1) or os.path.isfile(output_file2),
    178                 output_file1)
    179 
    180    if os.path.isfile(output_file1):
    181      with open(output_file1) as f:
    182        actual = json.load(f)
    183    else:
    184      with open(output_file2) as f:
    185        actual = json.load(f)
    186    self.assertEqual(expected, gtest_json_test_utils.normalize(actual))
    187 
    188 
    189 if __name__ == '__main__':
    190  os.environ['GTEST_STACK_TRACE_DEPTH'] = '0'
    191  gtest_test_utils.Main()