1# Copyright 2017 Google Inc. 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15import shutil 16import tempfile 17import unittest 18from unittest import mock 19 20from mobly import signals 21from mobly.base_instrumentation_test import _InstrumentationBlock 22from mobly.base_instrumentation_test import _InstrumentationKnownStatusKeys 23from mobly.base_instrumentation_test import _InstrumentationStructurePrefixes 24from tests.lib import mock_instrumentation_test 25 26# A random prefix to test that prefixes are added properly. 27MOCK_PREFIX = 'my_prefix' 28# A mock name for the instrumentation test subclass. 29MOCK_INSTRUMENTATION_TEST_CLASS_NAME = 'MockInstrumentationTest' 30 31MOCK_EMPTY_INSTRUMENTATION_TEST = """\ 32INSTRUMENTATION_RESULT: stream= 33 34Time: 0.001 35 36OK (0 tests) 37 38 39INSTRUMENTATION_CODE: -1 40""" 41 42 43class InstrumentationResult: 44 45 def __init__(self): 46 self.error = None 47 self.completed_and_passed = False 48 self.executed = [] 49 self.skipped = [] 50 51 52class BaseInstrumentationTestTest(unittest.TestCase): 53 54 def setUp(self): 55 self.tmp_dir = tempfile.mkdtemp() 56 57 def tearDown(self): 58 shutil.rmtree(self.tmp_dir) 59 60 def assert_parse_instrumentation_options( 61 self, user_params, expected_instrumentation_options 62 ): 63 mit = mock_instrumentation_test.MockInstrumentationTest( 64 self.tmp_dir, user_params 65 ) 66 instrumentation_options = mit.parse_instrumentation_options(mit.user_params) 67 self.assertEqual(instrumentation_options, expected_instrumentation_options) 68 69 def test_parse_instrumentation_options_with_no_user_params(self): 70 self.assert_parse_instrumentation_options({}, {}) 71 72 def test_parse_instrumentation_options_with_no_instrumentation_params(self): 73 self.assert_parse_instrumentation_options( 74 { 75 'param1': 'val1', 76 'param2': 'val2', 77 }, 78 {}, 79 ) 80 81 def test_parse_instrumentation_options_with_only_instrumentation_params(self): 82 self.assert_parse_instrumentation_options( 83 { 84 'instrumentation_option_key1': 'value1', 85 'instrumentation_option_key2': 'value2', 86 }, 87 {'key1': 'value1', 'key2': 'value2'}, 88 ) 89 90 def test_parse_instrumentation_options_with_mixed_user_params(self): 91 self.assert_parse_instrumentation_options( 92 { 93 'param1': 'val1', 94 'param2': 'val2', 95 'instrumentation_option_key1': 'value1', 96 'instrumentation_option_key2': 'value2', 97 }, 98 {'key1': 'value1', 'key2': 'value2'}, 99 ) 100 101 def run_instrumentation_test(self, instrumentation_output, prefix=None): 102 mit = mock_instrumentation_test.MockInstrumentationTest(self.tmp_dir) 103 result = InstrumentationResult() 104 try: 105 result.completed_and_passed = mit.run_mock_instrumentation_test( 106 instrumentation_output, prefix=prefix 107 ) 108 except signals.TestError as e: 109 result.error = e 110 result.executed = mit.results.executed 111 result.skipped = mit.results.skipped 112 return result 113 114 def assert_equal_test(self, actual_test, expected_test): 115 (expected_test_name, expected_signal) = expected_test 116 self.assertEqual( 117 actual_test.test_class, MOCK_INSTRUMENTATION_TEST_CLASS_NAME 118 ) 119 self.assertEqual(actual_test.test_name, expected_test_name) 120 self.assertIsInstance( 121 actual_test.termination_signal.exception, expected_signal 122 ) 123 124 def assert_run_instrumentation_test( 125 self, 126 instrumentation_output, 127 expected_executed=[], 128 expected_skipped=[], 129 expected_completed_and_passed=False, 130 expected_has_error=False, 131 prefix=None, 132 expected_executed_times=[], 133 ): 134 result = self.run_instrumentation_test( 135 bytes(instrumentation_output, 'utf-8'), prefix=prefix 136 ) 137 if expected_has_error: 138 self.assertIsInstance(result.error, signals.TestError) 139 else: 140 self.assertIsNone(result.error) 141 self.assertEqual( 142 result.completed_and_passed, expected_completed_and_passed 143 ) 144 self.assertEqual(len(result.executed), len(expected_executed)) 145 for actual_test, expected_test in zip(result.executed, expected_executed): 146 self.assert_equal_test(actual_test, expected_test) 147 self.assertEqual(len(result.skipped), len(expected_skipped)) 148 for actual_test, expected_test in zip(result.skipped, expected_skipped): 149 self.assert_equal_test(actual_test, expected_test) 150 if expected_executed_times: 151 for actual_test, expected_time in zip( 152 result.executed, expected_executed_times 153 ): 154 (expected_begin_time, expected_end_time) = expected_time 155 self.assertEqual(actual_test.begin_time, expected_begin_time) 156 self.assertEqual(actual_test.end_time, expected_end_time) 157 158 def test_run_instrumentation_test_with_invalid_syntax(self): 159 instrumentation_output = """\ 160usage: am [subcommand] [options] 161usage: am start [-D] [-N] [-W] [-P <FILE>] [--start-profiler <FILE>] 162 [--sampling INTERVAL] [-R COUNT] [-S] 163 164am start: start an Activity. Options are: 165 -D: enable debugging 166 167am startservice: start a Service. Options are: 168 --user <USER_ID> | current: Specify which user to run as; if not 169 specified then run as the current user. 170 171am task lock: bring <TASK_ID> to the front and don't allow other tasks to run. 172 173<INTENT> specifications include these flags and arguments: 174 [-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>] 175 [-c <CATEGORY> [-c <CATEGORY>] ...] 176 177Error: Bad component name: / 178""" 179 self.assert_run_instrumentation_test( 180 instrumentation_output, expected_has_error=True 181 ) 182 183 def test_run_instrumentation_test_with_no_output(self): 184 instrumentation_output = """\ 185""" 186 self.assert_run_instrumentation_test( 187 instrumentation_output, expected_has_error=True 188 ) 189 190 def test_run_instrumentation_test_with_missing_test_package(self): 191 instrumentation_output = """\ 192android.util.AndroidException: INSTRUMENTATION_FAILED: com.my.package.test/com.my.package.test.runner.MyRunner 193 at com.android.commands.am.Am.runInstrument(Am.java:897) 194 at com.android.commands.am.Am.onRun(Am.java:405) 195 at com.android.internal.os.BaseCommand.run(BaseCommand.java:51) 196 at com.android.commands.am.Am.main(Am.java:124) 197 at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method) 198 at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:262) 199INSTRUMENTATION_STATUS: id=ActivityManagerService 200INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{com.my.package.test/com.my.package.test.runner.MyRunner} 201INSTRUMENTATION_STATUS_CODE: -1""" 202 self.assert_run_instrumentation_test( 203 instrumentation_output, expected_has_error=True 204 ) 205 206 def test_run_instrumentation_test_with_missing_runner(self): 207 instrumentation_output = """\ 208android.util.AndroidException: INSTRUMENTATION_FAILED: com.my.package.test/com.my.package.test.runner 209INSTRUMENTATION_STATUS: id=ActivityManagerService 210INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{com.my.package.test/com.my.package.test.runner} 211INSTRUMENTATION_STATUS_CODE: -1 212 at com.android.commands.am.Am.runInstrument(Am.java:897) 213 at com.android.commands.am.Am.onRun(Am.java:405) 214 at com.android.internal.os.BaseCommand.run(BaseCommand.java:51) 215 at com.android.commands.am.Am.main(Am.java:124) 216 at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method) 217 at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:262)""" 218 self.assert_run_instrumentation_test( 219 instrumentation_output, expected_has_error=True 220 ) 221 222 def test_run_instrumentation_test_with_no_tests(self): 223 instrumentation_output = MOCK_EMPTY_INSTRUMENTATION_TEST 224 self.assert_run_instrumentation_test( 225 instrumentation_output, expected_completed_and_passed=True 226 ) 227 228 @mock.patch('logging.info') 229 def test_run_instrumentation_test_logs_correctly(self, mock_info_logger): 230 instrumentation_output = MOCK_EMPTY_INSTRUMENTATION_TEST 231 self.assert_run_instrumentation_test( 232 instrumentation_output, expected_completed_and_passed=True 233 ) 234 for mock_call in mock_info_logger.mock_calls: 235 logged_format = mock_call[1][0] 236 self.assertIsInstance(logged_format, str) 237 238 @mock.patch('mobly.utils.get_current_epoch_time') 239 def test_run_instrumentation_test_with_passing_test(self, mock_get_time): 240 instrumentation_output = """\ 241INSTRUMENTATION_STATUS: numtests=1 242INSTRUMENTATION_STATUS: stream= 243com.my.package.test.BasicTest: 244INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 245INSTRUMENTATION_STATUS: test=basicTest 246INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 247INSTRUMENTATION_STATUS: current=1 248INSTRUMENTATION_STATUS_CODE: 1 249INSTRUMENTATION_STATUS: numtests=1 250INSTRUMENTATION_STATUS: stream=. 251INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 252INSTRUMENTATION_STATUS: test=basicTest 253INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 254INSTRUMENTATION_STATUS: current=1 255INSTRUMENTATION_STATUS_CODE: 0 256INSTRUMENTATION_RESULT: stream= 257 258Time: 0.214 259 260OK (1 test) 261 262 263INSTRUMENTATION_CODE: -1 264""" 265 expected_executed = [ 266 ('com.my.package.test.BasicTest#basicTest', signals.TestPass), 267 ] 268 mock_get_time.side_effect = [13, 51] 269 self.assert_run_instrumentation_test( 270 instrumentation_output, 271 expected_executed=expected_executed, 272 expected_completed_and_passed=True, 273 expected_executed_times=[(13, 51)], 274 ) 275 276 def test_run_instrumentation_test_with_random_whitespace(self): 277 instrumentation_output = """\ 278 279INSTRUMENTATION_STATUS: numtests=1 280 281INSTRUMENTATION_STATUS: stream= 282 283com.my.package.test.BasicTest: 284 285INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 286 287INSTRUMENTATION_STATUS: test=basicTest 288 289INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 290 291INSTRUMENTATION_STATUS: current=1 292 293INSTRUMENTATION_STATUS_CODE: 1 294 295INSTRUMENTATION_STATUS: numtests=1 296 297INSTRUMENTATION_STATUS: stream=. 298 299INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 300 301INSTRUMENTATION_STATUS: test=basicTest 302 303INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 304 305INSTRUMENTATION_STATUS: current=1 306 307INSTRUMENTATION_STATUS_CODE: 0 308 309INSTRUMENTATION_RESULT: stream= 310 311 312Time: 0.214 313 314 315OK (1 test) 316 317 318 319 320INSTRUMENTATION_CODE: -1 321 322""" 323 expected_executed = [ 324 ('com.my.package.test.BasicTest#basicTest', signals.TestPass), 325 ] 326 self.assert_run_instrumentation_test( 327 instrumentation_output, 328 expected_executed=expected_executed, 329 expected_completed_and_passed=True, 330 ) 331 332 def test_run_instrumentation_test_with_prefix_test(self): 333 instrumentation_output = """\ 334INSTRUMENTATION_STATUS: numtests=1 335INSTRUMENTATION_STATUS: stream= 336com.my.package.test.BasicTest: 337INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 338INSTRUMENTATION_STATUS: test=basicTest 339INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 340INSTRUMENTATION_STATUS: current=1 341INSTRUMENTATION_STATUS_CODE: 1 342INSTRUMENTATION_STATUS: numtests=1 343INSTRUMENTATION_STATUS: stream=. 344INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 345INSTRUMENTATION_STATUS: test=basicTest 346INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 347INSTRUMENTATION_STATUS: current=1 348INSTRUMENTATION_STATUS_CODE: 0 349INSTRUMENTATION_RESULT: stream= 350 351Time: 0.214 352 353OK (1 test) 354 355 356INSTRUMENTATION_CODE: -1 357""" 358 expected_executed = [ 359 ( 360 '%s.com.my.package.test.BasicTest#basicTest' % MOCK_PREFIX, 361 signals.TestPass, 362 ), 363 ] 364 self.assert_run_instrumentation_test( 365 instrumentation_output, 366 expected_executed=expected_executed, 367 expected_completed_and_passed=True, 368 prefix=MOCK_PREFIX, 369 ) 370 371 def test_run_instrumentation_test_with_failing_test(self): 372 instrumentation_output = """\ 373INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 374INSTRUMENTATION_STATUS: current=1 375INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 376INSTRUMENTATION_STATUS: numtests=1 377INSTRUMENTATION_STATUS: stream= 378com.my.package.test.BasicTest: 379INSTRUMENTATION_STATUS: test=failingTest 380INSTRUMENTATION_STATUS_CODE: 1 381INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 382INSTRUMENTATION_STATUS: current=1 383INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 384INSTRUMENTATION_STATUS: numtests=1 385INSTRUMENTATION_STATUS: stack=java.lang.UnsupportedOperationException: dummy failing test 386 at com.my.package.test.BasicTest.failingTest(BasicTest.java:38) 387 at java.lang.reflect.Method.invoke(Native Method) 388 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:57) 389 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 390 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:59) 391 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 392 at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80) 393 at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61) 394 at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:433) 395 at com.my.package.test.BaseTest$3.evaluate(BaseTest.java:96) 396 at com.my.package.test.BaseTest$4.evaluate(BaseTest.java:109) 397 at com.my.package.test.BaseTest$2.evaluate(BaseTest.java:77) 398 at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) 399 at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) 400 at org.junit.rules.RunRules.evaluate(RunRules.java:20) 401 at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:81) 402 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:327) 403 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:84) 404 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 405 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 406 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 407 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 408 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 409 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 410 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 411 at androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:99) 412 at org.junit.runners.Suite.runChild(Suite.java:128) 413 at org.junit.runners.Suite.runChild(Suite.java:27) 414 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 415 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 416 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 417 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 418 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 419 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 420 at org.junit.runners.Suite.runChild(Suite.java:128) 421 at org.junit.runners.Suite.runChild(Suite.java:27) 422 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 423 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 424 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 425 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 426 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 427 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 428 at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 429 at org.junit.runner.JUnitCore.run(JUnitCore.java:115) 430 at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56) 431 at com.my.package.test.BaseRunner.runTests(BaseRunner.java:344) 432 at com.my.package.test.BaseRunner.onStart(BaseRunner.java:330) 433 at com.my.package.test.runner.MyRunner.onStart(MyRunner.java:253) 434 at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074) 435 436INSTRUMENTATION_STATUS: stream= 437Error in failingTest(com.my.package.test.BasicTest): 438java.lang.UnsupportedOperationException: dummy failing test 439 at com.my.package.test.BasicTest.failingTest(BasicTest.java:38) 440 at java.lang.reflect.Method.invoke(Native Method) 441 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:57) 442 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 443 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:59) 444 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 445 at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80) 446 at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61) 447 at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:433) 448 at com.my.package.test.BaseTest$3.evaluate(BaseTest.java:96) 449 at com.my.package.test.BaseTest$4.evaluate(BaseTest.java:109) 450 at com.my.package.test.BaseTest$2.evaluate(BaseTest.java:77) 451 at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) 452 at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) 453 at org.junit.rules.RunRules.evaluate(RunRules.java:20) 454 at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:81) 455 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:327) 456 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:84) 457 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 458 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 459 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 460 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 461 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 462 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 463 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 464 at androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:99) 465 at org.junit.runners.Suite.runChild(Suite.java:128) 466 at org.junit.runners.Suite.runChild(Suite.java:27) 467 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 468 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 469 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 470 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 471 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 472 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 473 at org.junit.runners.Suite.runChild(Suite.java:128) 474 at org.junit.runners.Suite.runChild(Suite.java:27) 475 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 476 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 477 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 478 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 479 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 480 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 481 at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 482 at org.junit.runner.JUnitCore.run(JUnitCore.java:115) 483 at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56) 484 at com.my.package.test.BaseRunner.runTests(BaseRunner.java:344) 485 at com.my.package.test.BaseRunner.onStart(BaseRunner.java:330) 486 at com.my.package.test.runner.MyRunner.onStart(MyRunner.java:253) 487 at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074) 488 489INSTRUMENTATION_STATUS: test=failingTest 490INSTRUMENTATION_STATUS_CODE: -2 491INSTRUMENTATION_RESULT: stream= 492 493Time: 1.92 494There was 1 failure: 4951) failingTest(com.my.package.test.BasicTest) 496java.lang.UnsupportedOperationException: dummy failing test 497 at com.my.package.test.BasicTest.failingTest(BasicTest.java:38) 498 at java.lang.reflect.Method.invoke(Native Method) 499 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:57) 500 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 501 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:59) 502 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 503 at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80) 504 at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61) 505 at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:433) 506 at com.my.package.test.BaseTest$3.evaluate(BaseTest.java:96) 507 at com.my.package.test.BaseTest$4.evaluate(BaseTest.java:109) 508 at com.my.package.test.BaseTest$2.evaluate(BaseTest.java:77) 509 at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) 510 at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) 511 at org.junit.rules.RunRules.evaluate(RunRules.java:20) 512 at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:81) 513 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:327) 514 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:84) 515 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 516 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 517 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 518 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 519 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 520 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 521 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 522 at androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:99) 523 at org.junit.runners.Suite.runChild(Suite.java:128) 524 at org.junit.runners.Suite.runChild(Suite.java:27) 525 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 526 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 527 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 528 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 529 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 530 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 531 at org.junit.runners.Suite.runChild(Suite.java:128) 532 at org.junit.runners.Suite.runChild(Suite.java:27) 533 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 534 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 535 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 536 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 537 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 538 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 539 at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 540 at org.junit.runner.JUnitCore.run(JUnitCore.java:115) 541 at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56) 542 at com.my.package.test.BaseRunner.runTests(BaseRunner.java:344) 543 at com.my.package.test.BaseRunner.onStart(BaseRunner.java:330) 544 at com.my.package.test.runner.MyRunner.onStart(MyRunner.java:253) 545 at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074) 546 547FAILURES!!! 548Tests run: 1, Failures: 1 549 550 551INSTRUMENTATION_CODE: -1""" 552 expected_executed = [ 553 ('com.my.package.test.BasicTest#failingTest', signals.TestFailure), 554 ] 555 self.assert_run_instrumentation_test( 556 instrumentation_output, expected_executed=expected_executed 557 ) 558 559 def test_run_instrumentation_test_with_assumption_failure_test(self): 560 instrumentation_output = """\ 561INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 562INSTRUMENTATION_STATUS: current=1 563INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 564INSTRUMENTATION_STATUS: numtests=1 565INSTRUMENTATION_STATUS: stream= 566com.my.package.test.BasicTest: 567INSTRUMENTATION_STATUS: test=assumptionFailureTest 568INSTRUMENTATION_STATUS_CODE: 1 569INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 570INSTRUMENTATION_STATUS: current=1 571INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 572INSTRUMENTATION_STATUS: numtests=1 573INSTRUMENTATION_STATUS: stack=org.junit.AssumptionViolatedException: Assumption failure reason 574 at org.junit.Assume.assumeTrue(Assume.java:59) 575 at org.junit.Assume.assumeFalse(Assume.java:66) 576 at com.my.package.test.BasicTest.assumptionFailureTest(BasicTest.java:63) 577 at java.lang.reflect.Method.invoke(Native Method) 578 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:57) 579 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 580 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:59) 581 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 582 at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80) 583 at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61) 584 at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:433) 585 at com.my.package.test.MyBaseTest$3.evaluate(MyBaseTest.java:96) 586 at com.my.package.test.MyBaseTest$4.evaluate(MyBaseTest.java:109) 587 at com.my.package.test.MyBaseTest$2.evaluate(MyBaseTest.java:77) 588 at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) 589 at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) 590 at org.junit.rules.RunRules.evaluate(RunRules.java:20) 591 at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:81) 592 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:327) 593 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:84) 594 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 595 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 596 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 597 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 598 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 599 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 600 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 601 at androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:99) 602 at org.junit.runners.Suite.runChild(Suite.java:128) 603 at org.junit.runners.Suite.runChild(Suite.java:27) 604 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 605 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 606 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 607 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 608 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 609 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 610 at org.junit.runners.Suite.runChild(Suite.java:128) 611 at org.junit.runners.Suite.runChild(Suite.java:27) 612 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 613 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 614 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 615 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 616 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 617 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 618 at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 619 at org.junit.runner.JUnitCore.run(JUnitCore.java:115) 620 at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56) 621 at com.my.package.test.runner.BaseRunner.runTests(BaseRunner.java:344) 622 at com.my.package.test.runner.BaseRunner.onStart(BaseRunner.java:330) 623 at com.my.package.test.runner.BaseRunner.onStart(BaseRunner.java:253) 624 at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074) 625 626INSTRUMENTATION_STATUS: stream= 627com.my.package.test.BasicTest: 628INSTRUMENTATION_STATUS: test=assumptionFailureTest 629INSTRUMENTATION_STATUS_CODE: -4 630INSTRUMENTATION_RESULT: stream= 631 632Time: 3.139 633 634OK (1 test) 635 636 637INSTRUMENTATION_CODE: -1""" 638 expected_skipped = [ 639 ( 640 'com.my.package.test.BasicTest#assumptionFailureTest', 641 signals.TestSkip, 642 ), 643 ] 644 self.assert_run_instrumentation_test( 645 instrumentation_output, 646 expected_skipped=expected_skipped, 647 expected_completed_and_passed=True, 648 ) 649 650 def test_run_instrumentation_test_with_ignored_test(self): 651 instrumentation_output = """\ 652INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 653INSTRUMENTATION_STATUS: current=1 654INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 655INSTRUMENTATION_STATUS: numtests=1 656INSTRUMENTATION_STATUS: stream= 657com.my.package.test.BasicTest: 658INSTRUMENTATION_STATUS: test=ignoredTest 659INSTRUMENTATION_STATUS_CODE: 1 660INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 661INSTRUMENTATION_STATUS: current=1 662INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 663INSTRUMENTATION_STATUS: numtests=1 664INSTRUMENTATION_STATUS: stream= 665com.my.package.test.BasicTest: 666INSTRUMENTATION_STATUS: test=ignoredTest 667INSTRUMENTATION_STATUS_CODE: -3 668INSTRUMENTATION_RESULT: stream= 669 670Time: 0.007 671 672OK (0 tests) 673 674 675INSTRUMENTATION_CODE: -1""" 676 expected_skipped = [ 677 ('com.my.package.test.BasicTest#ignoredTest', signals.TestSkip), 678 ] 679 self.assert_run_instrumentation_test( 680 instrumentation_output, 681 expected_skipped=expected_skipped, 682 expected_completed_and_passed=True, 683 ) 684 685 @mock.patch('mobly.utils.get_current_epoch_time') 686 def test_run_instrumentation_test_with_crashed_test(self, mock_get_time): 687 instrumentation_output = """\ 688INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 689INSTRUMENTATION_STATUS: current=1 690INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 691INSTRUMENTATION_STATUS: numtests=1 692INSTRUMENTATION_STATUS: stream= 693com.my.package.test.BasicTest: 694INSTRUMENTATION_STATUS: test=crashTest 695INSTRUMENTATION_STATUS_CODE: 1 696INSTRUMENTATION_RESULT: shortMsg=Process crashed. 697INSTRUMENTATION_CODE: 0""" 698 expected_executed = [ 699 ('com.my.package.test.BasicTest#crashTest', signals.TestError), 700 ] 701 mock_get_time.side_effect = [67, 942] 702 self.assert_run_instrumentation_test( 703 instrumentation_output, 704 expected_executed=expected_executed, 705 expected_has_error=True, 706 expected_executed_times=[(67, 942)], 707 ) 708 709 @mock.patch('mobly.utils.get_current_epoch_time') 710 def test_run_instrumentation_test_with_crashing_test(self, mock_get_time): 711 instrumentation_output = """\ 712INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 713INSTRUMENTATION_STATUS: current=1 714INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 715INSTRUMENTATION_STATUS: numtests=2 716INSTRUMENTATION_STATUS: stream= 717com.my.package.test.BasicTest: 718INSTRUMENTATION_STATUS: test=crashAndRecover1Test 719INSTRUMENTATION_STATUS_CODE: 1 720INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 721INSTRUMENTATION_STATUS: current=2 722INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 723INSTRUMENTATION_STATUS: numtests=2 724INSTRUMENTATION_STATUS: stream= 725com.my.package.test.BasicTest: 726INSTRUMENTATION_STATUS: test=crashAndRecover2Test 727INSTRUMENTATION_STATUS_CODE: 1 728INSTRUMENTATION_RESULT: stream= 729 730Time: 6.342 731 732OK (2 tests) 733 734 735INSTRUMENTATION_CODE: -1""" 736 expected_executed = [ 737 ( 738 'com.my.package.test.BasicTest#crashAndRecover1Test', 739 signals.TestError, 740 ), 741 ( 742 'com.my.package.test.BasicTest#crashAndRecover2Test', 743 signals.TestError, 744 ), 745 ] 746 mock_get_time.side_effect = [16, 412, 4143, 6547] 747 # TODO(winterfrosts): Fix this issue with overlapping timing 748 self.assert_run_instrumentation_test( 749 instrumentation_output, 750 expected_executed=expected_executed, 751 expected_completed_and_passed=True, 752 expected_executed_times=[(16, 4143), (412, 6547)], 753 ) 754 755 def test_run_instrumentation_test_with_runner_setup_crash(self): 756 instrumentation_output = """\ 757INSTRUMENTATION_RESULT: shortMsg=Process crashed. 758INSTRUMENTATION_CODE: 0""" 759 self.assert_run_instrumentation_test( 760 instrumentation_output, expected_has_error=True 761 ) 762 763 def test_run_instrumentation_test_with_runner_teardown_crash(self): 764 instrumentation_output = """\ 765INSTRUMENTATION_STATUS: numtests=1 766INSTRUMENTATION_STATUS: stream= 767com.my.package.test.BasicTest: 768INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 769INSTRUMENTATION_STATUS: test=basicTest 770INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 771INSTRUMENTATION_STATUS: current=1 772INSTRUMENTATION_STATUS_CODE: 1 773INSTRUMENTATION_STATUS: numtests=1 774INSTRUMENTATION_STATUS: stream=. 775INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 776INSTRUMENTATION_STATUS: test=basicTest 777INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 778INSTRUMENTATION_STATUS: current=1 779INSTRUMENTATION_STATUS_CODE: 0 780INSTRUMENTATION_RESULT: shortMsg=Process crashed. 781INSTRUMENTATION_CODE: 0 782""" 783 expected_executed = [ 784 ('com.my.package.test.BasicTest#basicTest', signals.TestPass), 785 ] 786 self.assert_run_instrumentation_test( 787 instrumentation_output, 788 expected_executed=expected_executed, 789 expected_has_error=True, 790 ) 791 792 @mock.patch('mobly.utils.get_current_epoch_time') 793 def test_run_instrumentation_test_with_multiple_tests(self, mock_get_time): 794 instrumentation_output = """\ 795INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 796INSTRUMENTATION_STATUS: current=1 797INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 798INSTRUMENTATION_STATUS: numtests=4 799INSTRUMENTATION_STATUS: stream= 800com.my.package.test.BasicTest: 801INSTRUMENTATION_STATUS: test=failingTest 802INSTRUMENTATION_STATUS_CODE: 1 803INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 804INSTRUMENTATION_STATUS: current=1 805INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 806INSTRUMENTATION_STATUS: numtests=4 807INSTRUMENTATION_STATUS: stack=java.lang.UnsupportedOperationException: dummy failing test 808 at com.my.package.test.BasicTest.failingTest(BasicTest.java:40) 809 at java.lang.reflect.Method.invoke(Native Method) 810 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:57) 811 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 812 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:59) 813 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 814 at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80) 815 at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61) 816 at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:433) 817 at com.my.package.test.BaseTest$3.evaluate(BaseTest.java:96) 818 at com.my.package.test.BaseTest$4.evaluate(BaseTest.java:109) 819 at com.my.package.test.BaseTest$2.evaluate(BaseTest.java:77) 820 at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) 821 at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) 822 at org.junit.rules.RunRules.evaluate(RunRules.java:20) 823 at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:81) 824 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:327) 825 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:84) 826 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 827 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 828 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 829 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 830 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 831 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 832 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 833 at androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:99) 834 at org.junit.runners.Suite.runChild(Suite.java:128) 835 at org.junit.runners.Suite.runChild(Suite.java:27) 836 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 837 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 838 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 839 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 840 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 841 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 842 at org.junit.runners.Suite.runChild(Suite.java:128) 843 at org.junit.runners.Suite.runChild(Suite.java:27) 844 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 845 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 846 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 847 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 848 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 849 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 850 at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 851 at org.junit.runner.JUnitCore.run(JUnitCore.java:115) 852 at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56) 853 at com.my.package.test.BaseRunner.runTests(BaseRunner.java:344) 854 at com.my.package.test.BaseRunner.onStart(BaseRunner.java:330) 855 at com.my.package.test.runner.MyRunner.onStart(MyRunner.java:253) 856 at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074) 857 858INSTRUMENTATION_STATUS: stream= 859Error in failingTest(com.my.package.test.BasicTest): 860java.lang.UnsupportedOperationException: dummy failing test 861 at com.my.package.test.BasicTest.failingTest(BasicTest.java:40) 862 at java.lang.reflect.Method.invoke(Native Method) 863 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:57) 864 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 865 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:59) 866 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 867 at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80) 868 at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61) 869 at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:433) 870 at com.my.package.test.BaseTest$3.evaluate(BaseTest.java:96) 871 at com.my.package.test.BaseTest$4.evaluate(BaseTest.java:109) 872 at com.my.package.test.BaseTest$2.evaluate(BaseTest.java:77) 873 at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) 874 at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) 875 at org.junit.rules.RunRules.evaluate(RunRules.java:20) 876 at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:81) 877 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:327) 878 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:84) 879 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 880 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 881 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 882 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 883 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 884 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 885 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 886 at androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:99) 887 at org.junit.runners.Suite.runChild(Suite.java:128) 888 at org.junit.runners.Suite.runChild(Suite.java:27) 889 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 890 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 891 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 892 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 893 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 894 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 895 at org.junit.runners.Suite.runChild(Suite.java:128) 896 at org.junit.runners.Suite.runChild(Suite.java:27) 897 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 898 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 899 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 900 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 901 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 902 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 903 at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 904 at org.junit.runner.JUnitCore.run(JUnitCore.java:115) 905 at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56) 906 at com.my.package.test.BaseRunner.runTests(BaseRunner.java:344) 907 at com.my.package.test.BaseRunner.onStart(BaseRunner.java:330) 908 at com.my.package.test.runner.MyRunner.onStart(MyRunner.java:253) 909 at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074) 910 911INSTRUMENTATION_STATUS: test=failingTest 912INSTRUMENTATION_STATUS_CODE: -2 913INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 914INSTRUMENTATION_STATUS: current=2 915INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 916INSTRUMENTATION_STATUS: numtests=4 917INSTRUMENTATION_STATUS: stream= 918INSTRUMENTATION_STATUS: test=assumptionFailureTest 919INSTRUMENTATION_STATUS_CODE: 1 920INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 921INSTRUMENTATION_STATUS: current=2 922INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 923INSTRUMENTATION_STATUS: numtests=4 924INSTRUMENTATION_STATUS: stack=org.junit.AssumptionViolatedException: Assumption failure reason 925 at org.junit.Assume.assumeTrue(Assume.java:59) 926 at com.my.package.test.BasicTest.assumptionFailureTest(BasicTest.java:61) 927 at java.lang.reflect.Method.invoke(Native Method) 928 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:57) 929 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 930 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:59) 931 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 932 at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80) 933 at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61) 934 at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:433) 935 at com.my.package.test.BaseTest$3.evaluate(BaseTest.java:96) 936 at com.my.package.test.BaseTest$4.evaluate(BaseTest.java:109) 937 at com.my.package.test.BaseTest$2.evaluate(BaseTest.java:77) 938 at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) 939 at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) 940 at org.junit.rules.RunRules.evaluate(RunRules.java:20) 941 at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:81) 942 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:327) 943 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:84) 944 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 945 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 946 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 947 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 948 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 949 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 950 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 951 at androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:99) 952 at org.junit.runners.Suite.runChild(Suite.java:128) 953 at org.junit.runners.Suite.runChild(Suite.java:27) 954 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 955 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 956 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 957 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 958 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 959 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 960 at org.junit.runners.Suite.runChild(Suite.java:128) 961 at org.junit.runners.Suite.runChild(Suite.java:27) 962 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 963 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 964 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 965 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 966 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 967 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 968 at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 969 at org.junit.runner.JUnitCore.run(JUnitCore.java:115) 970 at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56) 971 at com.my.package.test.BaseRunner.runTests(BaseRunner.java:344) 972 at com.my.package.test.BaseRunner.onStart(BaseRunner.java:330) 973 at com.my.package.test.runner.MyRunner.onStart(MyRunner.java:253) 974 at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074) 975 976INSTRUMENTATION_STATUS: stream= 977INSTRUMENTATION_STATUS: test=assumptionFailureTest 978INSTRUMENTATION_STATUS_CODE: -4 979INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 980INSTRUMENTATION_STATUS: current=3 981INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 982INSTRUMENTATION_STATUS: numtests=4 983INSTRUMENTATION_STATUS: stream= 984INSTRUMENTATION_STATUS: test=ignoredTest 985INSTRUMENTATION_STATUS_CODE: 1 986INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 987INSTRUMENTATION_STATUS: current=3 988INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 989INSTRUMENTATION_STATUS: numtests=4 990INSTRUMENTATION_STATUS: stream= 991INSTRUMENTATION_STATUS: test=ignoredTest 992INSTRUMENTATION_STATUS_CODE: -3 993INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 994INSTRUMENTATION_STATUS: current=4 995INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 996INSTRUMENTATION_STATUS: numtests=4 997INSTRUMENTATION_STATUS: stream= 998INSTRUMENTATION_STATUS: test=passingTest 999INSTRUMENTATION_STATUS_CODE: 1 1000INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest 1001INSTRUMENTATION_STATUS: current=4 1002INSTRUMENTATION_STATUS: id=AndroidJUnitRunner 1003INSTRUMENTATION_STATUS: numtests=4 1004INSTRUMENTATION_STATUS: stream=. 1005INSTRUMENTATION_STATUS: test=passingTest 1006INSTRUMENTATION_STATUS_CODE: 0 1007INSTRUMENTATION_RESULT: stream= 1008 1009Time: 4.131 1010There was 1 failure: 10111) failingTest(com.my.package.test.BasicTest) 1012java.lang.UnsupportedOperationException: dummy failing test 1013 at com.my.package.test.BasicTest.failingTest(BasicTest.java:40) 1014 at java.lang.reflect.Method.invoke(Native Method) 1015 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:57) 1016 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 1017 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:59) 1018 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 1019 at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80) 1020 at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61) 1021 at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:433) 1022 at com.my.package.test.BaseTest$3.evaluate(BaseTest.java:96) 1023 at com.my.package.test.BaseTest$4.evaluate(BaseTest.java:109) 1024 at com.my.package.test.BaseTest$2.evaluate(BaseTest.java:77) 1025 at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) 1026 at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) 1027 at org.junit.rules.RunRules.evaluate(RunRules.java:20) 1028 at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:81) 1029 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:327) 1030 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:84) 1031 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 1032 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 1033 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 1034 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 1035 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 1036 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 1037 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 1038 at androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:99) 1039 at org.junit.runners.Suite.runChild(Suite.java:128) 1040 at org.junit.runners.Suite.runChild(Suite.java:27) 1041 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 1042 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 1043 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 1044 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 1045 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 1046 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 1047 at org.junit.runners.Suite.runChild(Suite.java:128) 1048 at org.junit.runners.Suite.runChild(Suite.java:27) 1049 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292) 1050 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73) 1051 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290) 1052 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60) 1053 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270) 1054 at org.junit.runners.ParentRunner.run(ParentRunner.java:370) 1055 at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 1056 at org.junit.runner.JUnitCore.run(JUnitCore.java:115) 1057 at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56) 1058 at com.my.package.test.BaseRunner.runTests(BaseRunner.java:344) 1059 at com.my.package.test.BaseRunner.onStart(BaseRunner.java:330) 1060 at com.my.package.test.runner.MyRunner.onStart(MyRunner.java:253) 1061 at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074) 1062 1063FAILURES!!! 1064Tests run: 3, Failures: 1 1065 1066 1067INSTRUMENTATION_CODE: -1""" 1068 expected_executed = [ 1069 ('com.my.package.test.BasicTest#failingTest', signals.TestFailure), 1070 ('com.my.package.test.BasicTest#passingTest', signals.TestPass), 1071 ] 1072 expected_skipped = [ 1073 ( 1074 'com.my.package.test.BasicTest#assumptionFailureTest', 1075 signals.TestSkip, 1076 ), 1077 ('com.my.package.test.BasicTest#ignoredTest', signals.TestSkip), 1078 ] 1079 mock_get_time.side_effect = [54, 64, -1, -1, -1, -1, 89, 94] 1080 self.assert_run_instrumentation_test( 1081 instrumentation_output, 1082 expected_executed=expected_executed, 1083 expected_skipped=expected_skipped, 1084 expected_executed_times=[(54, 64), (89, 94)], 1085 ) 1086 1087 def test__Instrumentation_block_set_key_on_multiple_equals_sign(self): 1088 value = 'blah=blah, blah2=blah2, blah=2=1=2' 1089 parsed_line = 'INSTRUMENTATION_STATUS: stack=%s' % value 1090 block = _InstrumentationBlock() 1091 block.set_key(_InstrumentationStructurePrefixes.STATUS, parsed_line) 1092 self.assertIn( 1093 value, block.known_keys[_InstrumentationKnownStatusKeys.STACK] 1094 ) 1095 1096 1097if __name__ == '__main__': 1098 unittest.main() 1099