blob: ea6d2e4ad871a83f4043eab58ddb31226774cab8 [file] [log] [blame]
# Copyright 2017 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import os
import mock
import shutil
import sys
import tempfile
from future.tests.base import unittest
from mobly.base_instrumentation_test import _InstrumentationBlock
from mobly.base_instrumentation_test import _InstrumentationKnownStatusKeys
from mobly.base_instrumentation_test import _InstrumentationStructurePrefixes
from mobly.base_instrumentation_test import BaseInstrumentationTestClass
from mobly import config_parser
from mobly import signals
from mobly.controllers import android_device
from mobly.controllers.android_device_lib import adb
from tests.lib import mock_instrumentation_test
# A random prefix to test that prefixes are added properly.
MOCK_PREFIX = 'my_prefix'
# A mock name for the instrumentation test subclass.
MOCK_INSTRUMENTATION_TEST_CLASS_NAME = 'MockInstrumentationTest'
MOCK_EMPTY_INSTRUMENTATION_TEST = """\
INSTRUMENTATION_RESULT: stream=
Time: 0.001
OK (0 tests)
INSTRUMENTATION_CODE: -1
"""
class InstrumentationResult(object):
def __init__(self):
self.error = None
self.completed_and_passed = False
self.executed = []
self.skipped = []
class BaseInstrumentationTestTest(unittest.TestCase):
def setUp(self):
self.tmp_dir = tempfile.mkdtemp()
def tearDown(self):
shutil.rmtree(self.tmp_dir)
def assert_parse_instrumentation_options(self, user_params,
expected_instrumentation_options):
mit = mock_instrumentation_test.MockInstrumentationTest(
self.tmp_dir, user_params)
instrumentation_options = mit.parse_instrumentation_options(
mit.user_params)
self.assertEqual(instrumentation_options,
expected_instrumentation_options)
def test_parse_instrumentation_options_with_no_user_params(self):
self.assert_parse_instrumentation_options({}, {})
def test_parse_instrumentation_options_with_no_instrumentation_params(
self):
self.assert_parse_instrumentation_options(
{
'param1': 'val1',
'param2': 'val2',
},
{},
)
def test_parse_instrumentation_options_with_only_instrumentation_params(
self):
self.assert_parse_instrumentation_options(
{
'instrumentation_option_key1': 'value1',
'instrumentation_option_key2': 'value2',
},
{'key1': 'value1',
'key2': 'value2'},
)
def test_parse_instrumentation_options_with_mixed_user_params(self):
self.assert_parse_instrumentation_options(
{
'param1': 'val1',
'param2': 'val2',
'instrumentation_option_key1': 'value1',
'instrumentation_option_key2': 'value2',
},
{'key1': 'value1',
'key2': 'value2'},
)
def run_instrumentation_test(self, instrumentation_output, prefix=None):
mit = mock_instrumentation_test.MockInstrumentationTest(self.tmp_dir)
result = InstrumentationResult()
try:
result.completed_and_passed = mit.run_mock_instrumentation_test(
instrumentation_output, prefix=prefix)
except signals.TestError as e:
result.error = e
result.executed = mit.results.executed
result.skipped = mit.results.skipped
return result
def assert_equal_test(self, actual_test, expected_test):
(expected_test_name, expected_signal) = expected_test
self.assertEqual(actual_test.test_class,
MOCK_INSTRUMENTATION_TEST_CLASS_NAME)
self.assertEqual(actual_test.test_name, expected_test_name)
self.assertIsInstance(actual_test.termination_signal.exception,
expected_signal)
def convert_to_raw_output(self, test_output):
"""Converts code-based strings into adb output strings.
In python3, adb returns 'utf-8' encoded byte arrays, which do not work
correctly with code-based unicode strings, so to simulate that, the raw
instrumentation output should be converted accordingly.
"""
if sys.version_info >= (3, 0):
return bytes(test_output, 'utf-8')
else:
return bytes(test_output)
def assert_run_instrumentation_test(self,
instrumentation_output,
expected_executed=[],
expected_skipped=[],
expected_completed_and_passed=False,
expected_has_error=False,
prefix=None,
expected_executed_times=[]):
result = self.run_instrumentation_test(
self.convert_to_raw_output(instrumentation_output), prefix=prefix)
if expected_has_error:
self.assertIsInstance(result.error, signals.TestError)
else:
self.assertIsNone(result.error)
self.assertEqual(result.completed_and_passed,
expected_completed_and_passed)
self.assertEqual(len(result.executed), len(expected_executed))
for actual_test, expected_test in zip(result.executed,
expected_executed):
self.assert_equal_test(actual_test, expected_test)
self.assertEqual(len(result.skipped), len(expected_skipped))
for actual_test, expected_test in zip(result.skipped,
expected_skipped):
self.assert_equal_test(actual_test, expected_test)
if expected_executed_times:
for actual_test, expected_time in zip(result.executed,
expected_executed_times):
(expected_begin_time, expected_end_time) = expected_time
self.assertEqual(actual_test.begin_time, expected_begin_time)
self.assertEqual(actual_test.end_time, expected_end_time)
def test_run_instrumentation_test_with_invalid_syntax(self):
instrumentation_output = """\
usage: am [subcommand] [options]
usage: am start [-D] [-N] [-W] [-P <FILE>] [--start-profiler <FILE>]
[--sampling INTERVAL] [-R COUNT] [-S]
am start: start an Activity. Options are:
-D: enable debugging
am startservice: start a Service. Options are:
--user <USER_ID> | current: Specify which user to run as; if not
specified then run as the current user.
am task lock: bring <TASK_ID> to the front and don't allow other tasks to run.
<INTENT> specifications include these flags and arguments:
[-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>]
[-c <CATEGORY> [-c <CATEGORY>] ...]
Error: Bad component name: /
"""
self.assert_run_instrumentation_test(
instrumentation_output, expected_has_error=True)
def test_run_instrumentation_test_with_no_output(self):
instrumentation_output = """\
"""
self.assert_run_instrumentation_test(
instrumentation_output, expected_has_error=True)
def test_run_instrumentation_test_with_missing_test_package(self):
instrumentation_output = """\
android.util.AndroidException: INSTRUMENTATION_FAILED: com.my.package.test/com.my.package.test.runner.MyRunner
at com.android.commands.am.Am.runInstrument(Am.java:897)
at com.android.commands.am.Am.onRun(Am.java:405)
at com.android.internal.os.BaseCommand.run(BaseCommand.java:51)
at com.android.commands.am.Am.main(Am.java:124)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:262)
INSTRUMENTATION_STATUS: id=ActivityManagerService
INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{com.my.package.test/com.my.package.test.runner.MyRunner}
INSTRUMENTATION_STATUS_CODE: -1"""
self.assert_run_instrumentation_test(
instrumentation_output, expected_has_error=True)
def test_run_instrumentation_test_with_missing_runner(self):
instrumentation_output = """\
android.util.AndroidException: INSTRUMENTATION_FAILED: com.my.package.test/com.my.package.test.runner
INSTRUMENTATION_STATUS: id=ActivityManagerService
INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{com.my.package.test/com.my.package.test.runner}
INSTRUMENTATION_STATUS_CODE: -1
at com.android.commands.am.Am.runInstrument(Am.java:897)
at com.android.commands.am.Am.onRun(Am.java:405)
at com.android.internal.os.BaseCommand.run(BaseCommand.java:51)
at com.android.commands.am.Am.main(Am.java:124)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:262)"""
self.assert_run_instrumentation_test(
instrumentation_output, expected_has_error=True)
def test_run_instrumentation_test_with_no_tests(self):
instrumentation_output = MOCK_EMPTY_INSTRUMENTATION_TEST
self.assert_run_instrumentation_test(
instrumentation_output, expected_completed_and_passed=True)
@unittest.skipUnless(
sys.version_info >= (3, 0),
'Only python3 displays different string types differently.')
@mock.patch('logging.info')
def test_run_instrumentation_test_logs_correctly(self, mock_info_logger):
instrumentation_output = MOCK_EMPTY_INSTRUMENTATION_TEST
self.assert_run_instrumentation_test(
instrumentation_output, expected_completed_and_passed=True)
for mock_call in mock_info_logger.mock_calls:
logged_format = mock_call[1][0]
self.assertIsInstance(logged_format, str)
@mock.patch('mobly.utils.get_current_epoch_time')
def test_run_instrumentation_test_with_passing_test(self, mock_get_time):
instrumentation_output = """\
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
com.my.package.test.BasicTest:
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: test=basicTest
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: test=basicTest
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_RESULT: stream=
Time: 0.214
OK (1 test)
INSTRUMENTATION_CODE: -1
"""
expected_executed = [
('com.my.package.test.BasicTest#basicTest', signals.TestPass),
]
mock_get_time.side_effect = [13, 51]
self.assert_run_instrumentation_test(
instrumentation_output,
expected_executed=expected_executed,
expected_completed_and_passed=True,
expected_executed_times=[(13, 51)])
def test_run_instrumentation_test_with_random_whitespace(self):
instrumentation_output = """\
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
com.my.package.test.BasicTest:
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: test=basicTest
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: test=basicTest
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_RESULT: stream=
Time: 0.214
OK (1 test)
INSTRUMENTATION_CODE: -1
"""
expected_executed = [
('com.my.package.test.BasicTest#basicTest', signals.TestPass),
]
self.assert_run_instrumentation_test(
instrumentation_output,
expected_executed=expected_executed,
expected_completed_and_passed=True)
def test_run_instrumentation_test_with_prefix_test(self):
instrumentation_output = """\
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
com.my.package.test.BasicTest:
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: test=basicTest
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: test=basicTest
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_RESULT: stream=
Time: 0.214
OK (1 test)
INSTRUMENTATION_CODE: -1
"""
expected_executed = [
('%s.com.my.package.test.BasicTest#basicTest' % MOCK_PREFIX,
signals.TestPass),
]
self.assert_run_instrumentation_test(
instrumentation_output,
expected_executed=expected_executed,
expected_completed_and_passed=True,
prefix=MOCK_PREFIX)
def test_run_instrumentation_test_with_failing_test(self):
instrumentation_output = """\
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
com.my.package.test.BasicTest:
INSTRUMENTATION_STATUS: test=failingTest
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stack=java.lang.UnsupportedOperationException: dummy failing test
at com.my.package.test.BasicTest.failingTest(BasicTest.java:38)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:57)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:59)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80)
at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61)
at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:433)
at com.my.package.test.BaseTest$3.evaluate(BaseTest.java:96)
at com.my.package.test.BaseTest$4.evaluate(BaseTest.java:109)
at com.my.package.test.BaseTest$2.evaluate(BaseTest.java:77)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:81)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:327)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:84)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:99)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
at com.my.package.test.BaseRunner.runTests(BaseRunner.java:344)
at com.my.package.test.BaseRunner.onStart(BaseRunner.java:330)
at com.my.package.test.runner.MyRunner.onStart(MyRunner.java:253)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074)
INSTRUMENTATION_STATUS: stream=
Error in failingTest(com.my.package.test.BasicTest):
java.lang.UnsupportedOperationException: dummy failing test
at com.my.package.test.BasicTest.failingTest(BasicTest.java:38)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:57)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:59)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80)
at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61)
at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:433)
at com.my.package.test.BaseTest$3.evaluate(BaseTest.java:96)
at com.my.package.test.BaseTest$4.evaluate(BaseTest.java:109)
at com.my.package.test.BaseTest$2.evaluate(BaseTest.java:77)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:81)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:327)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:84)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:99)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
at com.my.package.test.BaseRunner.runTests(BaseRunner.java:344)
at com.my.package.test.BaseRunner.onStart(BaseRunner.java:330)
at com.my.package.test.runner.MyRunner.onStart(MyRunner.java:253)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074)
INSTRUMENTATION_STATUS: test=failingTest
INSTRUMENTATION_STATUS_CODE: -2
INSTRUMENTATION_RESULT: stream=
Time: 1.92
There was 1 failure:
1) failingTest(com.my.package.test.BasicTest)
java.lang.UnsupportedOperationException: dummy failing test
at com.my.package.test.BasicTest.failingTest(BasicTest.java:38)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:57)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:59)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80)
at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61)
at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:433)
at com.my.package.test.BaseTest$3.evaluate(BaseTest.java:96)
at com.my.package.test.BaseTest$4.evaluate(BaseTest.java:109)
at com.my.package.test.BaseTest$2.evaluate(BaseTest.java:77)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:81)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:327)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:84)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:99)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
at com.my.package.test.BaseRunner.runTests(BaseRunner.java:344)
at com.my.package.test.BaseRunner.onStart(BaseRunner.java:330)
at com.my.package.test.runner.MyRunner.onStart(MyRunner.java:253)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074)
FAILURES!!!
Tests run: 1, Failures: 1
INSTRUMENTATION_CODE: -1"""
expected_executed = [
('com.my.package.test.BasicTest#failingTest', signals.TestFailure),
]
self.assert_run_instrumentation_test(
instrumentation_output, expected_executed=expected_executed)
def test_run_instrumentation_test_with_assumption_failure_test(self):
instrumentation_output = """\
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
com.my.package.test.BasicTest:
INSTRUMENTATION_STATUS: test=assumptionFailureTest
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stack=org.junit.AssumptionViolatedException: Assumption failure reason
at org.junit.Assume.assumeTrue(Assume.java:59)
at org.junit.Assume.assumeFalse(Assume.java:66)
at com.my.package.test.BasicTest.assumptionFailureTest(BasicTest.java:63)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:57)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:59)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80)
at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61)
at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:433)
at com.my.package.test.MyBaseTest$3.evaluate(MyBaseTest.java:96)
at com.my.package.test.MyBaseTest$4.evaluate(MyBaseTest.java:109)
at com.my.package.test.MyBaseTest$2.evaluate(MyBaseTest.java:77)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:81)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:327)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:84)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:99)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
at com.my.package.test.runner.BaseRunner.runTests(BaseRunner.java:344)
at com.my.package.test.runner.BaseRunner.onStart(BaseRunner.java:330)
at com.my.package.test.runner.BaseRunner.onStart(BaseRunner.java:253)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074)
INSTRUMENTATION_STATUS: stream=
com.my.package.test.BasicTest:
INSTRUMENTATION_STATUS: test=assumptionFailureTest
INSTRUMENTATION_STATUS_CODE: -4
INSTRUMENTATION_RESULT: stream=
Time: 3.139
OK (1 test)
INSTRUMENTATION_CODE: -1"""
expected_skipped = [
('com.my.package.test.BasicTest#assumptionFailureTest',
signals.TestSkip),
]
self.assert_run_instrumentation_test(
instrumentation_output,
expected_skipped=expected_skipped,
expected_completed_and_passed=True)
def test_run_instrumentation_test_with_ignored_test(self):
instrumentation_output = """\
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
com.my.package.test.BasicTest:
INSTRUMENTATION_STATUS: test=ignoredTest
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
com.my.package.test.BasicTest:
INSTRUMENTATION_STATUS: test=ignoredTest
INSTRUMENTATION_STATUS_CODE: -3
INSTRUMENTATION_RESULT: stream=
Time: 0.007
OK (0 tests)
INSTRUMENTATION_CODE: -1"""
expected_skipped = [
('com.my.package.test.BasicTest#ignoredTest', signals.TestSkip),
]
self.assert_run_instrumentation_test(
instrumentation_output,
expected_skipped=expected_skipped,
expected_completed_and_passed=True)
@mock.patch('mobly.utils.get_current_epoch_time')
def test_run_instrumentation_test_with_crashed_test(self, mock_get_time):
instrumentation_output = """\
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
com.my.package.test.BasicTest:
INSTRUMENTATION_STATUS: test=crashTest
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_RESULT: shortMsg=Process crashed.
INSTRUMENTATION_CODE: 0"""
expected_executed = [
('com.my.package.test.BasicTest#crashTest', signals.TestError),
]
mock_get_time.side_effect = [67, 942]
self.assert_run_instrumentation_test(
instrumentation_output,
expected_executed=expected_executed,
expected_has_error=True,
expected_executed_times=[(67, 942)])
@mock.patch('mobly.utils.get_current_epoch_time')
def test_run_instrumentation_test_with_crashing_test(self, mock_get_time):
instrumentation_output = """\
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=2
INSTRUMENTATION_STATUS: stream=
com.my.package.test.BasicTest:
INSTRUMENTATION_STATUS: test=crashAndRecover1Test
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=2
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=2
INSTRUMENTATION_STATUS: stream=
com.my.package.test.BasicTest:
INSTRUMENTATION_STATUS: test=crashAndRecover2Test
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_RESULT: stream=
Time: 6.342
OK (2 tests)
INSTRUMENTATION_CODE: -1"""
expected_executed = [
('com.my.package.test.BasicTest#crashAndRecover1Test',
signals.TestError),
('com.my.package.test.BasicTest#crashAndRecover2Test',
signals.TestError),
]
mock_get_time.side_effect = [16, 412, 4143, 6547]
# TODO(winterfrosts): Fix this issue with overlapping timing
self.assert_run_instrumentation_test(
instrumentation_output,
expected_executed=expected_executed,
expected_completed_and_passed=True,
expected_executed_times=[(16, 4143), (412, 6547)])
def test_run_instrumentation_test_with_runner_setup_crash(self):
instrumentation_output = """\
INSTRUMENTATION_RESULT: shortMsg=Process crashed.
INSTRUMENTATION_CODE: 0"""
self.assert_run_instrumentation_test(
instrumentation_output, expected_has_error=True)
def test_run_instrumentation_test_with_runner_teardown_crash(self):
instrumentation_output = """\
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
com.my.package.test.BasicTest:
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: test=basicTest
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: test=basicTest
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_RESULT: shortMsg=Process crashed.
INSTRUMENTATION_CODE: 0
"""
expected_executed = [
('com.my.package.test.BasicTest#basicTest', signals.TestPass),
]
self.assert_run_instrumentation_test(
instrumentation_output,
expected_executed=expected_executed,
expected_has_error=True)
@mock.patch('mobly.utils.get_current_epoch_time')
def test_run_instrumentation_test_with_multiple_tests(self, mock_get_time):
instrumentation_output = """\
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=4
INSTRUMENTATION_STATUS: stream=
com.my.package.test.BasicTest:
INSTRUMENTATION_STATUS: test=failingTest
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=4
INSTRUMENTATION_STATUS: stack=java.lang.UnsupportedOperationException: dummy failing test
at com.my.package.test.BasicTest.failingTest(BasicTest.java:40)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:57)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:59)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80)
at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61)
at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:433)
at com.my.package.test.BaseTest$3.evaluate(BaseTest.java:96)
at com.my.package.test.BaseTest$4.evaluate(BaseTest.java:109)
at com.my.package.test.BaseTest$2.evaluate(BaseTest.java:77)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:81)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:327)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:84)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:99)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
at com.my.package.test.BaseRunner.runTests(BaseRunner.java:344)
at com.my.package.test.BaseRunner.onStart(BaseRunner.java:330)
at com.my.package.test.runner.MyRunner.onStart(MyRunner.java:253)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074)
INSTRUMENTATION_STATUS: stream=
Error in failingTest(com.my.package.test.BasicTest):
java.lang.UnsupportedOperationException: dummy failing test
at com.my.package.test.BasicTest.failingTest(BasicTest.java:40)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:57)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:59)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80)
at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61)
at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:433)
at com.my.package.test.BaseTest$3.evaluate(BaseTest.java:96)
at com.my.package.test.BaseTest$4.evaluate(BaseTest.java:109)
at com.my.package.test.BaseTest$2.evaluate(BaseTest.java:77)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:81)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:327)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:84)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:99)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
at com.my.package.test.BaseRunner.runTests(BaseRunner.java:344)
at com.my.package.test.BaseRunner.onStart(BaseRunner.java:330)
at com.my.package.test.runner.MyRunner.onStart(MyRunner.java:253)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074)
INSTRUMENTATION_STATUS: test=failingTest
INSTRUMENTATION_STATUS_CODE: -2
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=2
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=4
INSTRUMENTATION_STATUS: stream=
INSTRUMENTATION_STATUS: test=assumptionFailureTest
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=2
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=4
INSTRUMENTATION_STATUS: stack=org.junit.AssumptionViolatedException: Assumption failure reason
at org.junit.Assume.assumeTrue(Assume.java:59)
at com.my.package.test.BasicTest.assumptionFailureTest(BasicTest.java:61)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:57)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:59)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80)
at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61)
at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:433)
at com.my.package.test.BaseTest$3.evaluate(BaseTest.java:96)
at com.my.package.test.BaseTest$4.evaluate(BaseTest.java:109)
at com.my.package.test.BaseTest$2.evaluate(BaseTest.java:77)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:81)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:327)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:84)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:99)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
at com.my.package.test.BaseRunner.runTests(BaseRunner.java:344)
at com.my.package.test.BaseRunner.onStart(BaseRunner.java:330)
at com.my.package.test.runner.MyRunner.onStart(MyRunner.java:253)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074)
INSTRUMENTATION_STATUS: stream=
INSTRUMENTATION_STATUS: test=assumptionFailureTest
INSTRUMENTATION_STATUS_CODE: -4
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=3
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=4
INSTRUMENTATION_STATUS: stream=
INSTRUMENTATION_STATUS: test=ignoredTest
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=3
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=4
INSTRUMENTATION_STATUS: stream=
INSTRUMENTATION_STATUS: test=ignoredTest
INSTRUMENTATION_STATUS_CODE: -3
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=4
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=4
INSTRUMENTATION_STATUS: stream=
INSTRUMENTATION_STATUS: test=passingTest
INSTRUMENTATION_STATUS_CODE: 1
INSTRUMENTATION_STATUS: class=com.my.package.test.BasicTest
INSTRUMENTATION_STATUS: current=4
INSTRUMENTATION_STATUS: id=AndroidJUnitRunner
INSTRUMENTATION_STATUS: numtests=4
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: test=passingTest
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_RESULT: stream=
Time: 4.131
There was 1 failure:
1) failingTest(com.my.package.test.BasicTest)
java.lang.UnsupportedOperationException: dummy failing test
at com.my.package.test.BasicTest.failingTest(BasicTest.java:40)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:57)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:59)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80)
at androidx.test.internal.runner.junit4.statement.RunAfters.evaluate(RunAfters.java:61)
at androidx.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:433)
at com.my.package.test.BaseTest$3.evaluate(BaseTest.java:96)
at com.my.package.test.BaseTest$4.evaluate(BaseTest.java:109)
at com.my.package.test.BaseTest$2.evaluate(BaseTest.java:77)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:81)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:327)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:84)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at androidx.test.runner.AndroidJUnit4.run(AndroidJUnit4.java:99)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:292)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:73)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:290)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:60)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:270)
at org.junit.runners.ParentRunner.run(ParentRunner.java:370)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at androidx.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
at com.my.package.test.BaseRunner.runTests(BaseRunner.java:344)
at com.my.package.test.BaseRunner.onStart(BaseRunner.java:330)
at com.my.package.test.runner.MyRunner.onStart(MyRunner.java:253)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2074)
FAILURES!!!
Tests run: 3, Failures: 1
INSTRUMENTATION_CODE: -1"""
expected_executed = [
('com.my.package.test.BasicTest#failingTest', signals.TestFailure),
('com.my.package.test.BasicTest#passingTest', signals.TestPass),
]
expected_skipped = [
('com.my.package.test.BasicTest#assumptionFailureTest',
signals.TestSkip),
('com.my.package.test.BasicTest#ignoredTest', signals.TestSkip),
]
mock_get_time.side_effect = [54, 64, -1, -1, -1, -1, 89, 94]
self.assert_run_instrumentation_test(
instrumentation_output,
expected_executed=expected_executed,
expected_skipped=expected_skipped,
expected_executed_times=[(54, 64), (89, 94)])
def test__Instrumentation_block_set_key_on_multiple_equals_sign(self):
value = "blah=blah, blah2=blah2, blah=2=1=2"
parsed_line = "INSTRUMENTATION_STATUS: stack=%s" % value
block = _InstrumentationBlock()
block.set_key(_InstrumentationStructurePrefixes.STATUS, parsed_line)
self.assertIn(value,
block.known_keys[_InstrumentationKnownStatusKeys.STACK])
if __name__ == '__main__':
unittest.main()