Index: build/android/pylib/gtest/test_runner.py |
diff --git a/build/android/pylib/gtest/test_runner.py b/build/android/pylib/gtest/test_runner.py |
index 4e989ba4382f3b020e4bbd81539000275036e85f..4efb9ae33a46345bc60e8492a1c4dc01534918a6 100644 |
--- a/build/android/pylib/gtest/test_runner.py |
+++ b/build/android/pylib/gtest/test_runner.py |
@@ -2,15 +2,11 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
-import glob |
import logging |
import os |
-import sys |
from pylib import android_commands |
-from pylib import cmd_helper |
from pylib import constants |
-from pylib import perf_tests_helper |
from pylib.android_commands import errors |
from pylib.base import base_test_result |
from pylib.base import base_test_runner |
@@ -19,109 +15,22 @@ from pylib.utils import run_tests_helper |
import test_package_apk |
import test_package_executable |
-sys.path.insert( |
- 0, os.path.join(constants.DIR_SOURCE_ROOT, 'tools', 'swarm_client')) |
-import run_isolated |
- |
-_ISOLATE_FILE_PATHS = { |
- #'base_unittests': 'base/base_unittests.isolate', |
- #'net_unittests': 'net/net_unittests.isolate', |
- #'unit_tests': 'chrome/unit_tests.isolate', |
- #'content_browsertests': 'content/content_browsertests.isolate', |
- #'content_unittests': 'content/content_unittests.isolate', |
- } |
-_ISOLATE_SCRIPT = os.path.join( |
- constants.DIR_SOURCE_ROOT, 'tools', 'swarm_client', 'isolate.py') |
- |
- |
-def _GetDataFilesForTestSuite(product_dir, test_suite_basename): |
+# We're moving to using isolate files instead of harcoding |
+# dependencies here. Look at the TODO in dispatch.py. |
+def _GetDataFilesForTestSuite(test_suite_basename): |
"""Returns a list of data files/dirs needed by the test suite. |
Args: |
- product_dir: Absolute path to product directory (e.g. /../out/Debug). |
test_suite_basename: The test suite basename (e.g. base_unittests). |
Returns: |
A list of test file and directory paths. |
""" |
- # TODO(frankf): *.isolated should be generated by gyp using foo_tests_run |
- # targets. This is a stop-gap solution as currently there are no such |
- # targets for content_unittests and content_browsertests. |
- isolate_rel_path = _ISOLATE_FILE_PATHS.get(test_suite_basename) |
- if isolate_rel_path: |
- isolate_abs_path = os.path.join(constants.DIR_SOURCE_ROOT, isolate_rel_path) |
- isolated_abs_path = os.path.join( |
- product_dir, '%s.isolated' % test_suite_basename) |
- assert os.path.exists(isolate_abs_path) |
- isolate_cmd = [ |
- 'python', _ISOLATE_SCRIPT, |
- 'check', |
- '--isolate=%s' % isolate_abs_path, |
- '--isolated=%s' % isolated_abs_path, |
- '-V', 'PRODUCT_DIR=%s' % product_dir, |
- '-V', 'OS=android', |
- '--outdir=%s' % product_dir, |
- ] |
- assert not cmd_helper.RunCmd(isolate_cmd) |
- with open(isolated_abs_path) as f: |
- isolated_content = run_isolated.load_isolated(f.read(), |
- os_flavor='android') |
- assert isolated_content['os'] == 'android' |
- return isolated_content['files'].keys() |
- |
- logging.info('Did not find an isolate file for the test suite.') |
# Ideally, we'd just push all test data. However, it has >100MB, and a lot |
# of the files are not relevant (some are used for browser_tests, others for |
# features not supported, etc..). |
- if test_suite_basename == 'base_unittests': |
- return [ |
- 'base/test/data/', |
- ] |
- elif test_suite_basename == 'unit_tests': |
- test_files = [ |
- 'base/test/data/', |
- 'chrome/test/data/download-test1.lib', |
- 'chrome/test/data/extensions/bad_magic.crx', |
- 'chrome/test/data/extensions/good.crx', |
- 'chrome/test/data/extensions/icon1.png', |
- 'chrome/test/data/extensions/icon2.png', |
- 'chrome/test/data/extensions/icon3.png', |
- 'chrome/test/data/extensions/allow_silent_upgrade/', |
- 'chrome/test/data/extensions/app/', |
- 'chrome/test/data/extensions/bad/', |
- 'chrome/test/data/extensions/effective_host_permissions/', |
- 'chrome/test/data/extensions/empty_manifest/', |
- 'chrome/test/data/extensions/good/Extensions/', |
- 'chrome/test/data/extensions/manifest_tests/', |
- 'chrome/test/data/extensions/page_action/', |
- 'chrome/test/data/extensions/permissions/', |
- 'chrome/test/data/extensions/script_and_capture/', |
- 'chrome/test/data/extensions/unpacker/', |
- 'chrome/test/data/bookmarks/', |
- 'chrome/test/data/components/', |
- 'chrome/test/data/extensions/json_schema_test.js', |
- 'chrome/test/data/History/', |
- 'chrome/test/data/json_schema_validator/', |
- 'chrome/test/data/pref_service/', |
- 'chrome/test/data/simple_open_search.xml', |
- 'chrome/test/data/top_sites/', |
- 'chrome/test/data/web_app_info/', |
- 'chrome/test/data/webui/', |
- 'chrome/third_party/mock4js/', |
- 'components/test/data/web_database', |
- 'net/data/ssl/certificates', |
- 'third_party/accessibility-developer-tools/gen/axs_testing.js', |
- 'third_party/zlib/google/test/data', |
- ] |
- # The following are spell check data. Now only list the data under |
- # third_party/hunspell_dictionaries which are used by unit tests. |
- old_cwd = os.getcwd() |
- os.chdir(constants.DIR_SOURCE_ROOT) |
- test_files += glob.glob('third_party/hunspell_dictionaries/*.bdic') |
- os.chdir(old_cwd) |
- return test_files |
- elif test_suite_basename == 'media_unittests': |
+ if test_suite_basename == 'media_unittests': |
return [ |
'media/test/data', |
] |
@@ -257,17 +166,19 @@ class TestRunner(base_test_runner.BaseTestRunner): |
test_apk_package_name: Apk package name for tests running in APKs. |
test_activity_name: Test activity to invoke for APK tests. |
command_line_file: Filename to use to pass arguments to tests. |
+ deps_dir: The path to the dependency dir on the host to push to the device. |
""" |
def __init__(self, device, test_suite, test_arguments, timeout, |
cleanup_test_files, tool_name, build_type, |
in_webkit_checkout, push_deps, test_apk_package_name=None, |
- test_activity_name=None, command_line_file=None): |
+ test_activity_name=None, command_line_file=None, deps_dir=None): |
super(TestRunner, self).__init__(device, tool_name, build_type, push_deps) |
self._running_on_emulator = self.device.startswith('emulator') |
self._test_arguments = test_arguments |
self.in_webkit_checkout = in_webkit_checkout |
self._cleanup_test_files = cleanup_test_files |
+ self._deps_dir = deps_dir |
logging.warning('Test suite: ' + test_suite) |
if os.path.splitext(test_suite)[1] == '.apk': |
@@ -301,16 +212,25 @@ class TestRunner(base_test_runner.BaseTestRunner): |
#override |
def PushDataDeps(self): |
+ self.adb.WaitForSdCardReady(20) |
self.test_package.PushDataAndPakFiles() |
self.tool.CopyFiles() |
- test_data = _GetDataFilesForTestSuite(self.test_package.test_suite_dirname, |
- self.test_package.test_suite_basename) |
- if test_data: |
- # Make sure SD card is ready. |
- self.adb.WaitForSdCardReady(20) |
- self.CopyTestData(test_data, self.adb.GetExternalStorage()) |
if self.test_package.test_suite_basename == 'webkit_unit_tests': |
self.PushWebKitUnitTestsData() |
+ return |
+ |
+ if not self._deps_dir: |
+ logging.info('Did not find an isolate file for the test suite.') |
+ for p in _GetDataFilesForTestSuite(self.test_package.test_suite_basename): |
+ self.adb.PushIfNeeded( |
+ os.path.join(constants.DIR_SOURCE_ROOT, p), |
+ os.path.join(self.adb.GetExternalStorage(), p)) |
+ return |
+ |
+ for p in os.listdir(self._deps_dir): |
+ self.adb.PushIfNeeded( |
+ os.path.join(self._deps_dir, p), |
+ os.path.join(self.adb.GetExternalStorage(), p)) |
def PushWebKitUnitTestsData(self): |
"""Pushes the webkit_unit_tests data files to the device. |
@@ -328,6 +248,11 @@ class TestRunner(base_test_runner.BaseTestRunner): |
os.path.join( |
self.adb.GetExternalStorage(), |
'third_party/WebKit/Source/WebKit/chromium/tests/data')) |
+ self.adb.PushIfNeeded( |
+ os.path.join(constants.DIR_SOURCE_ROOT, |
+ 'third_party/hyphen/hyph_en_US.dic'), |
+ os.path.join(self.adb.GetExternalStorage(), |
+ 'third_party/hyphen/hyph_en_US.dic')) |
# TODO(craigdh): There is no reason for this to be part of TestRunner. |
def GetDisabledTests(self): |