| Index: build/android/pylib/instrumentation/dispatch.py
|
| diff --git a/build/android/pylib/instrumentation/dispatch.py b/build/android/pylib/instrumentation/dispatch.py
|
| index 43a3ab5a66efc6282505f6124819979e7421a807..8c7e77910133757dc19975366ae72304cebd72b1 100644
|
| --- a/build/android/pylib/instrumentation/dispatch.py
|
| +++ b/build/android/pylib/instrumentation/dispatch.py
|
| @@ -10,12 +10,13 @@ import os
|
| from pylib import android_commands
|
| from pylib.base import shard
|
| from pylib.base import test_result
|
| +from pylib.uiautomator import test_package as uiautomator_package
|
|
|
| -import apk_info
|
| +import test_package
|
| import test_runner
|
|
|
|
|
| -def Dispatch(options, apks):
|
| +def Dispatch(options):
|
| """Dispatches instrumentation tests onto connected device(s).
|
|
|
| If possible, this method will attempt to shard the tests to
|
| @@ -23,7 +24,6 @@ def Dispatch(options, apks):
|
|
|
| Args:
|
| options: Command line options.
|
| - apks: list of APKs to use.
|
|
|
| Returns:
|
| A TestResults object holding the results of the Java tests.
|
| @@ -31,26 +31,33 @@ def Dispatch(options, apks):
|
| Raises:
|
| Exception: when there are no attached devices.
|
| """
|
| - test_apk = apks[0]
|
| + is_uiautomator_test = False
|
| + if hasattr(options, 'uiautomator_jar'):
|
| + test_pkg = uiautomator_package.TestPackage(
|
| + options.uiautomator_jar, options.uiautomator_info_jar)
|
| + is_uiautomator_test = True
|
| + else:
|
| + test_pkg = test_package.TestPackage(options.test_apk_path,
|
| + options.test_apk_jar_path)
|
| # The default annotation for tests which do not have any sizes annotation.
|
| default_size_annotation = 'SmallTest'
|
|
|
| - def _GetTestsMissingAnnotation(test_apk):
|
| + def _GetTestsMissingAnnotation(test_pkg):
|
| test_size_annotations = frozenset(['Smoke', 'SmallTest', 'MediumTest',
|
| 'LargeTest', 'EnormousTest', 'FlakyTest',
|
| 'DisabledTest', 'Manual', 'PerfTest'])
|
| tests_missing_annotations = []
|
| - for test_method in test_apk.GetTestMethods():
|
| - annotations = frozenset(test_apk.GetTestAnnotations(test_method))
|
| + for test_method in test_pkg.GetTestMethods():
|
| + annotations = frozenset(test_pkg.GetTestAnnotations(test_method))
|
| if (annotations.isdisjoint(test_size_annotations) and
|
| - not apk_info.ApkInfo.IsPythonDrivenTest(test_method)):
|
| + not test_pkg.IsPythonDrivenTest(test_method)):
|
| tests_missing_annotations.append(test_method)
|
| return sorted(tests_missing_annotations)
|
|
|
| if options.annotation:
|
| - available_tests = test_apk.GetAnnotatedTests(options.annotation)
|
| + available_tests = test_pkg.GetAnnotatedTests(options.annotation)
|
| if options.annotation.count(default_size_annotation) > 0:
|
| - tests_missing_annotations = _GetTestsMissingAnnotation(test_apk)
|
| + tests_missing_annotations = _GetTestsMissingAnnotation(test_pkg)
|
| if tests_missing_annotations:
|
| logging.warning('The following tests do not contain any annotation. '
|
| 'Assuming "%s":\n%s',
|
| @@ -58,8 +65,8 @@ def Dispatch(options, apks):
|
| '\n'.join(tests_missing_annotations))
|
| available_tests += tests_missing_annotations
|
| else:
|
| - available_tests = [m for m in test_apk.GetTestMethods()
|
| - if not apk_info.ApkInfo.IsPythonDrivenTest(m)]
|
| + available_tests = [m for m in test_pkg.GetTestMethods()
|
| + if not test_pkg.IsPythonDrivenTest(m)]
|
| coverage = os.environ.get('EMMA_INSTRUMENT') == 'true'
|
|
|
| tests = []
|
| @@ -92,7 +99,8 @@ def Dispatch(options, apks):
|
| attached_devices = attached_devices[:1]
|
|
|
| def TestRunnerFactory(device, shard_index):
|
| - return test_runner.TestRunner(options, device, shard_index, False, apks, [])
|
| + return test_runner.TestRunner(
|
| + options, device, shard_index, False, test_pkg, [], is_uiautomator_test)
|
|
|
| return shard.ShardAndRunTests(TestRunnerFactory, attached_devices, tests,
|
| options.build_type)
|
|
|