]>
Commit | Line | Data |
---|---|---|
31f18b77 | 1 | #!/usr/bin/env python |
1e59de90 | 2 | # Copyright 2018, Google Inc. |
31f18b77 FG |
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 | ||
1e59de90 | 31 | """Unit test for the gtest_json_output module.""" |
31f18b77 | 32 | |
1e59de90 | 33 | import json |
31f18b77 | 34 | import os |
1e59de90 | 35 | import gtest_json_test_utils |
31f18b77 | 36 | import gtest_test_utils |
31f18b77 | 37 | |
1e59de90 TL |
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.""" | |
31f18b77 FG |
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(), | |
1e59de90 | 139 | GTEST_OUTPUT_SUBDIR, '') |
31f18b77 FG |
140 | self.DeleteFilesAndDir() |
141 | ||
142 | def tearDown(self): | |
143 | self.DeleteFilesAndDir() | |
144 | ||
145 | def DeleteFilesAndDir(self): | |
146 | try: | |
1e59de90 | 147 | os.remove(os.path.join(self.output_dir_, GTEST_OUTPUT_1_TEST + '.json')) |
31f18b77 FG |
148 | except os.error: |
149 | pass | |
150 | try: | |
1e59de90 | 151 | os.remove(os.path.join(self.output_dir_, GTEST_OUTPUT_2_TEST + '.json')) |
31f18b77 FG |
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): | |
1e59de90 | 160 | self._TestOutFile(GTEST_OUTPUT_1_TEST, EXPECTED_1) |
31f18b77 FG |
161 | |
162 | def testOutfile2(self): | |
1e59de90 | 163 | self._TestOutFile(GTEST_OUTPUT_2_TEST, EXPECTED_2) |
31f18b77 | 164 | |
1e59de90 | 165 | def _TestOutFile(self, test_name, expected): |
31f18b77 | 166 | gtest_prog_path = gtest_test_utils.GetTestExecutablePath(test_name) |
1e59de90 | 167 | command = [gtest_prog_path, '--gtest_output=json:%s' % self.output_dir_] |
31f18b77 FG |
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 | ||
1e59de90 | 173 | output_file_name1 = test_name + '.json' |
31f18b77 FG |
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 | ||
31f18b77 | 180 | if os.path.isfile(output_file1): |
1e59de90 TL |
181 | with open(output_file1) as f: |
182 | actual = json.load(f) | |
31f18b77 | 183 | else: |
1e59de90 TL |
184 | with open(output_file2) as f: |
185 | actual = json.load(f) | |
186 | self.assertEqual(expected, gtest_json_test_utils.normalize(actual)) | |
31f18b77 FG |
187 | |
188 | ||
1e59de90 TL |
189 | if __name__ == '__main__': |
190 | os.environ['GTEST_STACK_TRACE_DEPTH'] = '0' | |
31f18b77 | 191 | gtest_test_utils.Main() |