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()