blob: 976bb0822a65ceb47e37ef092e9efb8ea00bf6b2 [file]
"""Tests for the java_toolchain rule"""
load("@rules_testing//lib:analysis_test.bzl", "analysis_test", "test_suite")
load("@rules_testing//lib:util.bzl", "util")
load("//java:java_library.bzl", "java_library")
load("//java/common:java_semantics.bzl", "semantics")
load("//java/toolchains:java_runtime.bzl", "java_runtime")
load("//java/toolchains:java_toolchain.bzl", "java_toolchain")
load("//test/java/testutil:java_toolchain_info_subject.bzl", "java_toolchain_info_subject")
load("//test/java/testutil:javac_action_subject.bzl", "javac_action_subject")
def _declare_java_toolchain(*, name, **kwargs):
java_runtime_name = name + "/runtime"
java_runtime(name = java_runtime_name)
toolchain_attrs = {
"source_version": "6",
"target_version": "6",
"bootclasspath": ["rt.jar"],
"xlint": ["toto"],
"javacopts": ["-Xmaxerrs 500"],
"compatible_javacopts": {
"android": ["-XDandroidCompatible"],
"testonly": ["-XDtestOnly"],
"public_visibility": ["-XDpublicVisibility"],
},
"tools": [":javac_canary.jar"],
"javabuilder": ":JavaBuilder_deploy.jar",
"header_compiler": ":turbine_canary_deploy.jar",
"header_compiler_direct": ":turbine_direct",
"singlejar": "singlejar",
"ijar": "ijar",
"genclass": "GenClass_deploy.jar",
"timezone_data": "tzdata.jar",
"header_compiler_builtin_processors": ["BuiltinProc1", "BuiltinProc2"],
"reduced_classpath_incompatible_processors": [
"IncompatibleProc1",
"IncompatibleProc2",
],
"java_runtime": java_runtime_name,
}
toolchain_attrs.update(kwargs)
util.helper_target(
java_toolchain,
name = name + "/java_toolchain",
**toolchain_attrs
)
util.helper_target(
native.toolchain,
name = name + "/toolchain",
toolchain = name + "/java_toolchain",
toolchain_type = semantics.JAVA_TOOLCHAIN_TYPE,
)
def _test_javac_gets_options(name):
_declare_java_toolchain(name = name)
util.helper_target(
java_library,
name = name + "/b",
srcs = ["b.java"],
)
util.helper_target(
java_library,
name = name + "/a",
srcs = ["a.java"],
deps = [Label(name + "/b")],
)
analysis_test(
name = name,
impl = _test_javac_gets_options_impl,
targets = {
"a": name + "/a",
"b": name + "/b",
},
config_settings = {
"//command_line_option:java_header_compilation": "true",
"//command_line_option:extra_toolchains": [Label(name + "/toolchain")],
},
)
def _test_javac_gets_options_impl(env, targets):
assert_javac_action = javac_action_subject.of(env, targets.a, "{package}/lib{name}.jar")
assert_javac_action.source().contains_exactly(["6"])
assert_javac_action.target().contains_exactly(["6"])
assert_javac_action.xmaxerrs().contains_exactly(["500"])
assert_javac_action.jar().contains_exactly(["{package}/JavaBuilder_deploy.jar"])
assert_javac_action.inputs().contains("{package}/rt.jar")
assert_argv = assert_javac_action.argv()
assert_argv.contains("-Xlint:toto")
assert_argv.not_contains("-g")
assert_header_action = javac_action_subject.of(env, targets.b, "{package}/lib{name}-hjar.jar")
assert_header_action.argv().contains("{package}/turbine_direct")
def _test_jacocorunner(name):
_declare_java_toolchain(
name = name,
jacocorunner = "myjacocorunner.jar",
)
analysis_test(
name = name,
impl = _test_jacocorunner_impl,
target = name + "/java_toolchain",
)
def _test_jacocorunner_impl(env, target):
assert_toolchain = java_toolchain_info_subject.from_target(env, target)
assert_toolchain.jacocorunner().short_path_equals("{package}/myjacocorunner.jar")
def java_toolchain_tests(name):
test_suite(
name = name,
tests = [
_test_jacocorunner,
_test_javac_gets_options,
],
)