tesseract v5.3.3.20231005
googletest-json-outfiles-test.py
Go to the documentation of this file.
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
33import json
34import os
35import gtest_json_test_utils
36import gtest_test_utils
37
38GTEST_OUTPUT_SUBDIR = 'json_outfiles'
39GTEST_OUTPUT_1_TEST = 'gtest_xml_outfile1_test_'
40GTEST_OUTPUT_2_TEST = 'gtest_xml_outfile2_test_'
41
42EXPECTED_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
86EXPECTED_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
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.
139 GTEST_OUTPUT_SUBDIR, '')
140 self.DeleteFilesAndDir()
141
142 def tearDown(self):
143 self.DeleteFilesAndDir()
144
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
189if __name__ == '__main__':
190 os.environ['GTEST_STACK_TRACE_DEPTH'] = '0'
def GetTestExecutablePath(executable_name, build_dir=None)