Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: build/android/pylib/instrumentation/test_runner_test.py

Issue 794923003: [Android] Implement instrumentation tests in platform mode. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright 2014 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6
7 """Unit tests for instrumentation.TestRunner."""
8
9 # pylint: disable=W0212
10
11 import os
12 import sys
13 import unittest
14
15 from pylib import constants
16 from pylib.base import base_test_result
17 from pylib.instrumentation import test_runner
18
19 sys.path.append(os.path.join(
20 constants.DIR_SOURCE_ROOT, 'third_party', 'pymock'))
21 import mock # pylint: disable=F0401
22
23
24 class InstrumentationTestRunnerTest(unittest.TestCase):
25
26 def setUp(self):
27 options = mock.Mock()
28 options.tool = ''
29 package = mock.Mock()
30 self.instance = test_runner.TestRunner(
31 options, '123456789abcdef0', 0, package)
32
33 def testParseAmInstrumentRawOutput_nothing(self):
34 code, result, statuses = (
35 test_runner.TestRunner._ParseAmInstrumentRawOutput(['']))
36 self.assertEqual(None, code)
37 self.assertEqual([], result)
38 self.assertEqual([], statuses)
39
40 def testParseAmInstrumentRawOutput_noMatchingStarts(self):
41 raw_output = [
42 '',
43 'this.is.a.test.package.TestClass:.',
44 'Test result for =.',
45 'Time: 1.234',
46 '',
47 'OK (1 test)',
48 ]
49
50 code, result, statuses = (
51 test_runner.TestRunner._ParseAmInstrumentRawOutput(raw_output))
52 self.assertEqual(None, code)
53 self.assertEqual([], result)
54 self.assertEqual([], statuses)
55
56 def testParseAmInstrumentRawOutput_resultAndCode(self):
57 raw_output = [
58 'INSTRUMENTATION_RESULT: foo',
59 'bar',
60 'INSTRUMENTATION_CODE: -1',
61 ]
62
63 code, result, _ = (
64 test_runner.TestRunner._ParseAmInstrumentRawOutput(raw_output))
65 self.assertEqual(-1, code)
66 self.assertEqual(['foo', 'bar'], result)
67
68 def testParseAmInstrumentRawOutput_oneStatus(self):
69 raw_output = [
70 'INSTRUMENTATION_STATUS: foo=1',
71 'INSTRUMENTATION_STATUS: bar=hello',
72 'INSTRUMENTATION_STATUS: world=false',
73 'INSTRUMENTATION_STATUS: class=this.is.a.test.package.TestClass',
74 'INSTRUMENTATION_STATUS: test=testMethod',
75 'INSTRUMENTATION_STATUS_CODE: 0',
76 ]
77
78 _, _, statuses = (
79 test_runner.TestRunner._ParseAmInstrumentRawOutput(raw_output))
80
81 expected = [
82 (0, {
83 'foo': ['1'],
84 'bar': ['hello'],
85 'world': ['false'],
86 'class': ['this.is.a.test.package.TestClass'],
87 'test': ['testMethod'],
88 })
89 ]
90 self.assertEqual(expected, statuses)
91
92 def testParseAmInstrumentRawOutput_multiStatus(self):
93 raw_output = [
94 'INSTRUMENTATION_STATUS: class=foo',
95 'INSTRUMENTATION_STATUS: test=bar',
96 'INSTRUMENTATION_STATUS_CODE: 1',
97 'INSTRUMENTATION_STATUS: test_skipped=true',
98 'INSTRUMENTATION_STATUS_CODE: 0',
99 'INSTRUMENTATION_STATUS: class=hello',
100 'INSTRUMENTATION_STATUS: test=world',
101 'INSTRUMENTATION_STATUS: stack=',
102 'foo/bar.py (27)',
103 'hello/world.py (42)',
104 'test/file.py (1)',
105 'INSTRUMENTATION_STATUS_CODE: -1',
106 ]
107
108 _, _, statuses = (
109 test_runner.TestRunner._ParseAmInstrumentRawOutput(raw_output))
110
111 expected = [
112 (1, {'class': ['foo'], 'test': ['bar'],}),
113 (0, {'test_skipped': ['true']}),
114 (-1, {
115 'class': ['hello'],
116 'test': ['world'],
117 'stack': ['', 'foo/bar.py (27)', 'hello/world.py (42)',
118 'test/file.py (1)'],
119 }),
120 ]
121 self.assertEqual(expected, statuses)
122
123 def testParseAmInstrumentRawOutput_statusResultAndCode(self):
124 raw_output = [
125 'INSTRUMENTATION_STATUS: class=foo',
126 'INSTRUMENTATION_STATUS: test=bar',
127 'INSTRUMENTATION_STATUS_CODE: 1',
128 'INSTRUMENTATION_RESULT: hello',
129 'world',
130 '',
131 '',
132 'INSTRUMENTATION_CODE: 0',
133 ]
134
135 code, result, statuses = (
136 test_runner.TestRunner._ParseAmInstrumentRawOutput(raw_output))
137
138 self.assertEqual(0, code)
139 self.assertEqual(['hello', 'world', '', ''], result)
140 self.assertEqual([(1, {'class': ['foo'], 'test': ['bar']})], statuses)
141
142 def testGenerateTestResult_noStatus(self):
143 result = self.instance._GenerateTestResult(
144 'test.package.TestClass#testMethod', [], 0, 1000)
145 self.assertEqual('test.package.TestClass#testMethod', result.GetName())
146 self.assertEqual(base_test_result.ResultType.UNKNOWN, result.GetType())
147 self.assertEqual('', result.GetLog())
148 self.assertEqual(1000, result.GetDuration())
149
150 def testGenerateTestResult_testPassed(self):
151 statuses = [
152 (1, {
153 'class': ['test.package.TestClass'],
154 'test': ['testMethod'],
155 }),
156 (0, {
157 'class': ['test.package.TestClass'],
158 'test': ['testMethod'],
159 }),
160 ]
161 result = self.instance._GenerateTestResult(
162 'test.package.TestClass#testMethod', statuses, 0, 1000)
163 self.assertEqual(base_test_result.ResultType.PASS, result.GetType())
164
165 def testGenerateTestResult_testSkipped_first(self):
166 statuses = [
167 (0, {
168 'test_skipped': ['true'],
169 }),
170 (1, {
171 'class': ['test.package.TestClass'],
172 'test': ['testMethod'],
173 }),
174 (0, {
175 'class': ['test.package.TestClass'],
176 'test': ['testMethod'],
177 }),
178 ]
179 result = self.instance._GenerateTestResult(
180 'test.package.TestClass#testMethod', statuses, 0, 1000)
181 self.assertEqual(base_test_result.ResultType.SKIP, result.GetType())
182
183 def testGenerateTestResult_testSkipped_last(self):
184 statuses = [
185 (1, {
186 'class': ['test.package.TestClass'],
187 'test': ['testMethod'],
188 }),
189 (0, {
190 'class': ['test.package.TestClass'],
191 'test': ['testMethod'],
192 }),
193 (0, {
194 'test_skipped': ['true'],
195 }),
196 ]
197 result = self.instance._GenerateTestResult(
198 'test.package.TestClass#testMethod', statuses, 0, 1000)
199 self.assertEqual(base_test_result.ResultType.SKIP, result.GetType())
200
201 def testGenerateTestResult_testSkipped_false(self):
202 statuses = [
203 (0, {
204 'test_skipped': ['false'],
205 }),
206 (1, {
207 'class': ['test.package.TestClass'],
208 'test': ['testMethod'],
209 }),
210 (0, {
211 'class': ['test.package.TestClass'],
212 'test': ['testMethod'],
213 }),
214 ]
215 result = self.instance._GenerateTestResult(
216 'test.package.TestClass#testMethod', statuses, 0, 1000)
217 self.assertEqual(base_test_result.ResultType.PASS, result.GetType())
218
219 def testGenerateTestResult_testFailed(self):
220 statuses = [
221 (1, {
222 'class': ['test.package.TestClass'],
223 'test': ['testMethod'],
224 }),
225 (-2, {
226 'class': ['test.package.TestClass'],
227 'test': ['testMethod'],
228 }),
229 ]
230 self.instance.device.old_interface.DismissCrashDialogIfNeeded = mock.Mock(
231 return_value=None)
232 result = self.instance._GenerateTestResult(
233 'test.package.TestClass#testMethod', statuses, 0, 1000)
234 self.assertEqual(base_test_result.ResultType.FAIL, result.GetType())
235
236 def testGenerateTestResult_testCrashed(self):
237 self.instance.test_pkg.GetPackageName = mock.Mock(
238 return_value='generate.test.result.test.package')
239 self.instance.device.old_interface.DismissCrashDialogIfNeeded = mock.Mock(
240 return_value='generate.test.result.test.package')
241 statuses = [
242 (1, {
243 'class': ['test.package.TestClass'],
244 'test': ['testMethod'],
245 }),
246 (-1, {
247 'class': ['test.package.TestClass'],
248 'test': ['testMethod'],
249 'stack': ['', 'foo/bar.py (27)', 'hello/world.py (42)'],
250 }),
251 ]
252 result = self.instance._GenerateTestResult(
253 'test.package.TestClass#testMethod', statuses, 0, 1000)
254 self.assertEqual(base_test_result.ResultType.CRASH, result.GetType())
255 self.assertEqual('\nfoo/bar.py (27)\nhello/world.py (42)', result.GetLog())
256
257 def test_RunTest_verifyAdbShellCommand(self):
258 self.instance.options.test_runner = 'MyTestRunner'
259 self.instance.device.StartInstrumentation = mock.Mock()
260 self.instance.test_pkg.GetPackageName = mock.Mock(
261 return_value='test.package')
262 self.instance._GetInstrumentationArgs = mock.Mock(
263 return_value={'test_arg_key': 'test_arg_value'})
264 self.instance._RunTest('test.package.TestClass#testMethod', 100)
265 self.instance.device.StartInstrumentation.assert_called_with(
266 'test.package/MyTestRunner', raw=True,
267 extras={
268 'test_arg_key': 'test_arg_value',
269 'class': 'test.package.TestClass#testMethod'
270 },
271 timeout=100, retries=0)
272
273 if __name__ == '__main__':
274 unittest.main(verbosity=2)
275
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698