Revert of (Reland) Expose resources in Robolectric/JUnit tests. (patchset #2 id:20001 of https://codereview.chromium.org/2819983002/ )

Reason for revert:
Appears to be breaking chrome_junit_tests: https://build.chromium.org/p/chromium.linux/builders/Android%20Tests/builds/40695

Stack trace from failed tests:
android.content.res.Resources$NotFoundException: Resource ID #0x7f0a0153
	at android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:190)
	at android.content.res.Resources.getDimensionPixelSize(Resources.java:667)
	at org.chromium.chrome.browser.suggestions.TileGroup.<init>(TileGroup.java:192)
	at org.chromium.chrome.browser.suggestions.TileGroupTest.testReceiveNewTilesWithoutChanges(TileGroupTest.java:110)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:52)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.robolectric.RobolectricTestRunner$HelperTestRunner$1.evaluate(RobolectricTestRunner.java:515)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
	at org.junit.rules.RunRules.evaluate(RunRules.java:20)
	at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:316)
	at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:236)
	at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:41)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:176)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.chromium.testing.local.GtestComputer$GtestSuiteRunner.run(GtestComputer.java:46)
	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:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
	at org.chromium.testing.local.JunitTestMain.main(JunitTestMain.java:105)

Original issue's description:
> (Reland) Expose resources in Robolectric/JUnit tests.
>
> Will let people use Android resources in Robolectric tests.
> To use, specify package_name GN variable in junit_binary
> targets with your apps package name.
>
> This change will also (basically) require that you use the
> generated wrappers from out_dir/bin/run_<suite name> to run
> the tests since GN will be generating many arguments to
> pass along to the test runner.
>
> BUG=693573
>
> Review-Url: https://codereview.chromium.org/2819983002
> Cr-Commit-Position: refs/heads/master@{#464973}
> Committed: 30bba37e58

TBR=jbudorick@chromium.org,nyquist@chromium.org,mikecase@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=693573

Review-Url: https://codereview.chromium.org/2824863002
Cr-Original-Commit-Position: refs/heads/master@{#465027}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: 3781c029a68e4ea22f3e36db45a561723b610667
This commit is contained in:
alexmos 2017-04-17 14:30:47 -07:00 коммит произвёл Commit bot
Родитель 3af457013f
Коммит 0cca6c6674
8 изменённых файлов: 18 добавлений и 151 удалений

Просмотреть файл

@ -60,7 +60,6 @@ def main(args):
"the action's first output.")
parser.add_argument('--test-runner-path',
help='Path to test_runner.py (optional).')
# We need to intercept any test runner path arguments and make all
# of the paths relative to the output script directory.
group = parser.add_argument_group('Test runner path arguments.')
@ -79,9 +78,6 @@ def main(args):
group.add_argument('--test-jar')
group.add_argument('--test-apk-incremental-install-script')
group.add_argument('--coverage-dir')
group.add_argument('--android-manifest-path')
group.add_argument('--resource-zips')
group.add_argument('--robolectric-runtime-deps-dir')
args, test_runner_args = parser.parse_known_args(
build_utils.ExpandFileArgs(args))
@ -140,18 +136,6 @@ def main(args):
if args.coverage_dir:
test_runner_path_args.append(
('--coverage-dir', RelativizePathToScript(args.coverage_dir)))
if args.android_manifest_path:
test_runner_path_args.append(
('--android-manifest-path',
RelativizePathToScript(args.android_manifest_path)))
if args.resource_zips:
test_runner_path_args.extend(
('--resource-zip', RelativizePathToScript(r))
for r in build_utils.ParseGnList(args.resource_zips))
if args.robolectric_runtime_deps_dir:
test_runner_path_args.append(
('--robolectric-runtime-deps-dir',
RelativizePathToScript(args.robolectric_runtime_deps_dir)))
with open(args.script_output_path, 'w') as script:
script.write(SCRIPT_TEMPLATE.format(

Просмотреть файл

@ -344,7 +344,6 @@ def main(argv):
'dist_jar': ['build_config'],
'resource_rewriter': ['build_config'],
'group': ['build_config'],
'junit_binary': ['build_config'],
}
required_options = required_options_map.get(options.type)
if not required_options:
@ -541,8 +540,7 @@ def main(argv):
deps_info['owned_resources_dirs'] = list(owned_resource_dirs)
deps_info['owned_resources_zips'] = list(owned_resource_zips)
if options.type in (
'android_resources', 'android_apk', 'junit_binary', 'resource_rewriter'):
if options.type in ('android_resources','android_apk', 'resource_rewriter'):
config['resources'] = {}
config['resources']['dependency_zips'] = [
c['resources_zip'] for c in all_resources_deps]

Просмотреть файл

@ -10,12 +10,8 @@ class JunitTestInstance(test_instance.TestInstance):
def __init__(self, args, _):
super(JunitTestInstance, self).__init__()
self._android_manifest_path = args.android_manifest_path
self._coverage_dir = args.coverage_dir
self._package_filter = args.package_filter
self._package_name = args.package_name
self._resource_zips = args.resource_zips
self._robolectric_runtime_deps_dir = args.robolectric_runtime_deps_dir
self._runner_filter = args.runner_filter
self._test_filter = args.test_filter
self._test_suite = args.test_suite
@ -32,10 +28,6 @@ class JunitTestInstance(test_instance.TestInstance):
def TearDown(self):
pass
@property
def android_manifest_path(self):
return self._android_manifest_path
@property
def coverage_dir(self):
return self._coverage_dir
@ -44,18 +36,6 @@ class JunitTestInstance(test_instance.TestInstance):
def package_filter(self):
return self._package_filter
@property
def package_name(self):
return self._package_name
@property
def resource_zips(self):
return self._resource_zips
@property
def robolectric_runtime_deps_dir(self):
return self._robolectric_runtime_deps_dir
@property
def runner_filter(self):
return self._runner_filter

Просмотреть файл

@ -4,15 +4,13 @@
import json
import os
import zipfile
import tempfile
from devil.utils import cmd_helper
from devil.utils import reraiser_thread
from pylib import constants
from pylib.base import base_test_result
from pylib.base import test_run
from pylib.results import json_results
from py_utils import tempfile_ext
class LocalMachineJunitTestRun(test_run.TestRun):
@ -29,34 +27,14 @@ class LocalMachineJunitTestRun(test_run.TestRun):
#override
def RunTests(self):
with tempfile_ext.NamedTemporaryDirectory() as temp_dir:
json_file_path = os.path.join(temp_dir, 'results.json')
# Extract resources needed for test.
# TODO(mikecase): Investigate saving md5sums of zipfiles, and only
# extract zipfiles when they change.
def extract_resource_zip(resource_zip):
def helper():
extract_dest = os.path.join(
temp_dir, os.path.splitext(os.path.basename(resource_zip))[0])
with zipfile.ZipFile(resource_zip, 'r') as zf:
zf.extractall(extract_dest)
return extract_dest
return helper
resource_dirs = reraiser_thread.RunAsync(
[extract_resource_zip(resource_zip)
for resource_zip in self._test_instance.resource_zips
if os.path.exists(resource_zip)])
java_script = os.path.join(
constants.GetOutDirectory(), 'bin', 'helper',
self._test_instance.suite)
with tempfile.NamedTemporaryFile() as json_file:
java_script = os.path.join(constants.GetOutDirectory(), 'bin', 'helper',
self._test_instance.suite)
command = [java_script]
# Add Jar arguments.
jar_args = ['-test-jars', self._test_instance.suite + '.jar',
'-json-results-file', json_file_path]
'-json-results-file', json_file.name]
if self._test_instance.test_filter:
jar_args.extend(['-gtest-filter', self._test_instance.test_filter])
if self._test_instance.package_filter:
@ -67,22 +45,15 @@ class LocalMachineJunitTestRun(test_run.TestRun):
command.extend(['--jar-args', '"%s"' % ' '.join(jar_args)])
# Add JVM arguments.
jvm_args = ['-Drobolectric.dependency.dir=%s' %
self._test_instance.robolectric_runtime_deps_dir,
'-Ddir.source.root=%s' % constants.DIR_SOURCE_ROOT,]
if self._test_instance.android_manifest_path:
jvm_args += ['-Dchromium.robolectric.manifest=%s' %
self._test_instance.android_manifest_path]
if self._test_instance.package_name:
jvm_args += ['-Dchromium.robolectric.package.name=%s' %
self._test_instance.package_name]
if resource_dirs:
jvm_args += ['-Dchromium.robolectric.resource.dirs=%s' %
':'.join(resource_dirs)]
jvm_args = []
# TODO(mikecase): Add a --robolectric-dep-dir arg to test runner.
# Have this arg set by GN in the generated test runner scripts.
jvm_args += [
'-Drobolectric.dependency.dir=%s' % os.path.join(
constants.GetOutDirectory(), 'lib.java', 'third_party',
'robolectric'),
'-Ddir.source.root=%s' % constants.DIR_SOURCE_ROOT,
]
if self._test_instance.coverage_dir:
if not os.path.exists(self._test_instance.coverage_dir):
os.makedirs(self._test_instance.coverage_dir)
@ -91,14 +62,12 @@ class LocalMachineJunitTestRun(test_run.TestRun):
jvm_args.append('-Demma.coverage.out.file=%s' % os.path.join(
self._test_instance.coverage_dir,
'%s.ec' % self._test_instance.suite))
if jvm_args:
command.extend(['--jvm-args', '"%s"' % ' '.join(jvm_args)])
cmd_helper.RunCmd(command)
with open(json_file_path, 'r') as f:
results_list = json_results.ParseResultsFromJson(
json.loads(f.read()))
results_list = json_results.ParseResultsFromJson(
json.loads(json_file.read()))
test_run_results = base_test_result.TestRunResults()
test_run_results.AddResults(results_list)

Просмотреть файл

@ -469,21 +469,6 @@ def AddJUnitTestOptions(parser):
dest='test_suite', required=True,
help='JUnit test suite to run.')
# These arguments are for Android Robolectric tests.
parser.add_argument(
'--android-manifest-path',
help='Path to Android Manifest to configure Robolectric.')
parser.add_argument(
'--package-name',
help='Default app package name for Robolectric tests.')
parser.add_argument(
'--resource-zip',
action='append', dest='resource_zips', default=[],
help='Path to resource zips to configure Robolectric.')
parser.add_argument(
'--robolectric-runtime-deps-dir',
help='Path to runtime deps for Robolectric.')
def AddLinkerTestOptions(parser):

Просмотреть файл

@ -13,7 +13,6 @@
../../third_party/catapult/common/py_utils/py_utils/cloud_storage_global_lock.py
../../third_party/catapult/common/py_utils/py_utils/contextlib_ext.py
../../third_party/catapult/common/py_utils/py_utils/lock.py
../../third_party/catapult/common/py_utils/py_utils/tempfile_ext.py
../../third_party/catapult/dependency_manager/dependency_manager/__init__.py
../../third_party/catapult/dependency_manager/dependency_manager/archive_info.py
../../third_party/catapult/dependency_manager/dependency_manager/base_config.py

Просмотреть файл

@ -87,7 +87,7 @@ template("write_build_config") {
type == "android_resources" || type == "deps_dex" ||
type == "dist_jar" || type == "android_assets" ||
type == "resource_rewriter" || type == "java_binary" ||
type == "group" || type == "java_prebuilt" || type == "junit_binary")
type == "group" || type == "java_prebuilt")
forward_variables_from(invoker,
[
@ -564,40 +564,10 @@ template("test_runner_script") {
}
} else if (_test_type == "junit") {
assert(defined(invoker.test_suite))
test_runner_args += [
"--test-suite",
invoker.test_suite,
]
if (defined(invoker.android_manifest_path)) {
test_runner_args += [
"--android-manifest-path",
rebase_path(invoker.android_manifest_path, root_build_dir),
]
}
if (defined(invoker.package_name)) {
test_runner_args += [
"--package-name",
invoker.package_name,
]
deps += [ ":${invoker.test_suite}__build_config" ]
_junit_binary_build_config =
"${target_gen_dir}/${invoker.test_suite}.build_config"
_rebased_build_config =
rebase_path("$_junit_binary_build_config", root_build_dir)
test_runner_args += [
"--resource-zips",
"@FileArg($_rebased_build_config:resources:dependency_zips)",
]
}
test_runner_args += [
"--robolectric-runtime-deps-dir",
rebase_path("$root_build_dir/lib.java/third_party/robolectric",
root_build_dir),
]
} else if (_test_type == "linker") {
test_runner_args += [
"--test-apk",

Просмотреть файл

@ -898,7 +898,6 @@ if (enable_java_templates) {
grit_target_name = "${target_name}__grit"
grit_output_dir = "$target_gen_dir/$extra_output_path"
grit(grit_target_name) {
forward_variables_from(invoker, [ "deps" ])
grit_flags = [
@ -1059,27 +1058,11 @@ if (enable_java_templates) {
_java_binary_target_name = "${target_name}__java_binary"
_test_runner_target_name = "${target_name}__test_runner_script"
_build_config = "$target_gen_dir/$target_name.build_config"
_build_config_target_name = "${target_name}__build_config"
write_build_config(_build_config_target_name) {
type = "junit_binary"
build_config = _build_config
if (defined(invoker.deps)) {
possible_config_deps = invoker.deps
}
}
test_runner_script(_test_runner_target_name) {
test_name = invoker.target_name
test_suite = invoker.target_name
test_type = "junit"
ignore_all_data_deps = true
forward_variables_from(invoker,
[
"android_manifest_path",
"package_name",
])
}
java_binary(_java_binary_target_name) {
@ -1099,7 +1082,6 @@ if (enable_java_templates) {
}
group(target_name) {
public_deps = [
":$_build_config_target_name",
":$_java_binary_target_name",
":$_test_runner_target_name",
]