Skip to content

Commit f31c1a8

Browse files
author
Googler
committed
Starlarkify JavaToolchainTest.javac_getsOptionsFromToolchain()
PiperOrigin-RevId: 874081635 Change-Id: Ie56e4c40878e781e130a229b60bf2e7bdf0386c3
1 parent ddcdff8 commit f31c1a8

2 files changed

Lines changed: 98 additions & 14 deletions

File tree

test/java/testutil/javac_action_subject.bzl

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ load("@rules_testing//lib:truth.bzl", "subjects", "truth")
44
load("@rules_testing//lib:util.bzl", "TestingAspectInfo")
55

66
def _new_javac_action_subject(env, target, output):
7-
action = env.expect.that_target(target).action_generating(output).actual
7+
action_subject = env.expect.that_target(target).action_generating(output)
88
self = struct(
9-
actual = action,
10-
parsed_flags = _parse_flags(action.argv),
9+
actual = action_subject.actual,
10+
parsed_flags = _parse_flags(action_subject.actual.argv),
1111
meta = truth.expect(env).meta.derive(
1212
"Javac",
1313
format_str_kwargs = {
@@ -17,8 +17,15 @@ def _new_javac_action_subject(env, target, output):
1717
},
1818
),
1919
)
20+
2021
public = struct(
21-
direct_dependencies = lambda: subjects.collection(self.parsed_flags["--direct_dependencies"], self.meta.derive("--direct_dependencies"), format = True),
22+
direct_dependencies = lambda: _create_subject_for_flag("--direct_dependencies", self.parsed_flags, self.meta),
23+
source = lambda: _create_subject_for_flag("-source", self.parsed_flags, self.meta),
24+
target = lambda: _create_subject_for_flag("-target", self.parsed_flags, self.meta),
25+
xmaxerrs = lambda: _create_subject_for_flag("-Xmaxerrs", self.parsed_flags, self.meta),
26+
jar = lambda: _create_subject_for_flag("-jar", self.parsed_flags, self.meta),
27+
inputs = action_subject.inputs,
28+
argv = action_subject.argv,
2229
)
2330
return public
2431

@@ -43,6 +50,10 @@ def _parse_flags(argv):
4350

4451
return flag_values
4552

53+
def _create_subject_for_flag(flag_name, parsed_flags, meta):
54+
"""Helper to create a collection subject for a given flag."""
55+
return subjects.collection(parsed_flags[flag_name], meta.derive(flag_name), format = True)
56+
4657
javac_action_subject = struct(
4758
of = _new_javac_action_subject,
4859
parse_flags = _parse_flags, # exposed for testing this method itself

test/java/toolchains/java_toolchain_tests.bzl

Lines changed: 83 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,100 @@
22

33
load("@rules_testing//lib:analysis_test.bzl", "analysis_test", "test_suite")
44
load("@rules_testing//lib:util.bzl", "util")
5+
load("//java:java_library.bzl", "java_library")
6+
load("//java/common:java_semantics.bzl", "semantics")
57
load("//java/toolchains:java_runtime.bzl", "java_runtime")
68
load("//java/toolchains:java_toolchain.bzl", "java_toolchain")
79
load("//test/java/testutil:java_toolchain_info_subject.bzl", "java_toolchain_info_subject")
10+
load("//test/java/testutil:javac_action_subject.bzl", "javac_action_subject")
811

912
def _declare_java_toolchain(*, name, **kwargs):
10-
if "java_runtime" not in kwargs:
11-
kwargs["java_runtime"] = name + "/runtime"
12-
java_runtime(name = name + "/runtime")
13+
java_runtime_name = name + "/runtime"
14+
java_runtime(name = java_runtime_name)
15+
toolchain_attrs = {
16+
"source_version": "6",
17+
"target_version": "6",
18+
"bootclasspath": ["rt.jar"],
19+
"xlint": ["toto"],
20+
"javacopts": ["-Xmaxerrs 500"],
21+
"compatible_javacopts": {
22+
"android": ["-XDandroidCompatible"],
23+
"testonly": ["-XDtestOnly"],
24+
"public_visibility": ["-XDpublicVisibility"],
25+
},
26+
"tools": [":javac_canary.jar"],
27+
"javabuilder": ":JavaBuilder_deploy.jar",
28+
"header_compiler": ":turbine_canary_deploy.jar",
29+
"header_compiler_direct": ":turbine_direct",
30+
"singlejar": "singlejar",
31+
"ijar": "ijar",
32+
"genclass": "GenClass_deploy.jar",
33+
"timezone_data": "tzdata.jar",
34+
"header_compiler_builtin_processors": ["BuiltinProc1", "BuiltinProc2"],
35+
"reduced_classpath_incompatible_processors": [
36+
"IncompatibleProc1",
37+
"IncompatibleProc2",
38+
],
39+
"java_runtime": java_runtime_name,
40+
}
41+
toolchain_attrs.update(kwargs)
1342
util.helper_target(
1443
java_toolchain,
44+
name = name + "/java_toolchain",
45+
**toolchain_attrs
46+
)
47+
util.helper_target(
48+
native.toolchain,
49+
name = name + "/toolchain",
50+
toolchain = name + "/java_toolchain",
51+
toolchain_type = semantics.JAVA_TOOLCHAIN_TYPE,
52+
)
53+
54+
def _test_javac_gets_options(name):
55+
_declare_java_toolchain(name = name)
56+
util.helper_target(
57+
java_library,
58+
name = name + "/b",
59+
srcs = ["b.java"],
60+
)
61+
util.helper_target(
62+
java_library,
63+
name = name + "/a",
64+
srcs = ["a.java"],
65+
deps = [Label(name + "/b")],
66+
)
67+
68+
analysis_test(
1569
name = name,
16-
genclass = kwargs.get("genclass", "default_genclass.jar"),
17-
jacocorunner = kwargs.get("jacocorunner", None),
18-
javabuilder = kwargs.get("javabuilder", "default_javabuilder.jar"),
19-
java_runtime = kwargs["java_runtime"],
20-
ijar = kwargs.get("ijar", "default_ijar.jar"),
21-
singlejar = kwargs.get("singlejar", "default_singlejar.jar"),
70+
impl = _test_javac_gets_options_impl,
71+
targets = {
72+
"a": name + "/a",
73+
"b": name + "/b",
74+
},
75+
config_settings = {
76+
"//command_line_option:java_header_compilation": "true",
77+
"//command_line_option:extra_toolchains": [Label(name + "/toolchain")],
78+
},
2279
)
2380

81+
def _test_javac_gets_options_impl(env, targets):
82+
assert_javac_action = javac_action_subject.of(env, targets.a, "{package}/lib{name}.jar")
83+
assert_javac_action.source().contains_exactly(["6"])
84+
assert_javac_action.target().contains_exactly(["6"])
85+
assert_javac_action.xmaxerrs().contains_exactly(["500"])
86+
assert_javac_action.jar().contains_exactly(["{package}/JavaBuilder_deploy.jar"])
87+
assert_javac_action.inputs().contains("{package}/rt.jar")
88+
89+
assert_argv = assert_javac_action.argv()
90+
assert_argv.contains("-Xlint:toto")
91+
assert_argv.not_contains("-g")
92+
93+
assert_header_action = javac_action_subject.of(env, targets.b, "{package}/lib{name}-hjar.jar")
94+
assert_header_action.argv().contains("{package}/turbine_direct")
95+
2496
def _test_jacocorunner(name):
2597
_declare_java_toolchain(
26-
name = name + "/java_toolchain",
98+
name = name,
2799
jacocorunner = "myjacocorunner.jar",
28100
)
29101

@@ -43,5 +115,6 @@ def java_toolchain_tests(name):
43115
name = name,
44116
tests = [
45117
_test_jacocorunner,
118+
_test_javac_gets_options,
46119
],
47120
)

0 commit comments

Comments
 (0)