Skip to content

Commit a148a3a

Browse files
authored
Allow per-target java runtime selection for scala_junit_tests (#1373)
* Add runtime_jdk attr to scala_junit_tests; allow specific java toolchain to be used to run tests * runtime_jdk should only take in java runtime to respect older Bazel versions
1 parent a2b971d commit a148a3a

File tree

5 files changed

+56
-1
lines changed

5 files changed

+56
-1
lines changed

scala/private/phases/phase_default_info.bzl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,18 @@
44
# DOCUMENT THIS
55
#
66

7+
load("@io_bazel_rules_scala//scala/private:rule_impls.bzl", "specified_java_runtime")
8+
79
def phase_default_info(ctx, p):
810
executable = None
911
files = []
1012
direct = None
1113
runfiles = []
1214

15+
java_runtime = specified_java_runtime(ctx)
16+
if java_runtime:
17+
runfiles.append(java_runtime.files)
18+
1319
phase_names = dir(p)
1420
phase_names.remove("to_json")
1521
phase_names.remove("to_proto")

scala/private/rule_impls.bzl

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,20 @@ def compile_java(ctx, source_jars, source_files, output, extra_javac_opts, provi
166166
def runfiles_root(ctx):
167167
return "${TEST_SRCDIR}/%s" % ctx.workspace_name
168168

169+
def specified_java_runtime(ctx, default_runtime = None):
170+
use_specified_java = "runtime_jdk" in dir(ctx.attr)
171+
if use_specified_java:
172+
return ctx.attr.runtime_jdk[java_common.JavaRuntimeInfo]
173+
return default_runtime
174+
169175
def java_bin(ctx):
170-
java_path = str(ctx.attr._java_runtime[java_common.JavaRuntimeInfo].java_executable_runfiles_path)
176+
java_runtime = specified_java_runtime(
177+
ctx,
178+
default_runtime = ctx.attr._java_runtime[java_common.JavaRuntimeInfo],
179+
)
180+
181+
java_path = str(java_runtime.java_executable_exec_path)
182+
171183
if paths.is_absolute(java_path):
172184
javabin = java_path
173185
else:

scala/private/rules/scala_junit_test.bzl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ _scala_junit_test_attrs = {
7171
mandatory = False,
7272
),
7373
"jvm_flags": attr.string_list(),
74+
"runtime_jdk": attr.label(
75+
default = Label("@bazel_tools//tools/jdk:current_java_runtime"),
76+
providers = [java_common.JavaRuntimeInfo],
77+
),
7478
"_junit_classpath": attr.label(
7579
default = Label("@io_bazel_rules_scala//testing/toolchain:junit_classpath"),
7680
),

test/BUILD

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -751,6 +751,23 @@ scala_junit_test(
751751
runtime_deps = [":JunitMixedSeparateTarget"],
752752
)
753753

754+
scala_library(
755+
name = "JunitRuntimePlatform",
756+
srcs = [
757+
"src/main/scala/scalarules/test/junit/runtime_platform/JunitRuntimePlatformTest.java",
758+
],
759+
deps = ["@io_bazel_rules_scala_junit_junit"],
760+
)
761+
762+
scala_junit_test(
763+
name = "JunitRuntimePlatform_test_runner",
764+
size = "small",
765+
runtime_jdk = "@bazel_tools//tools/jdk:remote_jdk11",
766+
suffixes = ["Test"],
767+
tests_from = [":JunitRuntimePlatform"],
768+
runtime_deps = [":JunitRuntimePlatform"],
769+
)
770+
754771
py_binary(
755772
name = "py_resource_binary",
756773
srcs = ["py_resource.py"],
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package scalarules.test.junit.runtime_platform;
2+
3+
import org.junit.Assert;
4+
import org.junit.Test;
5+
6+
public class JunitRuntimePlatformTest {
7+
8+
@Test
9+
public void someTest() {
10+
String expectedMajorVersion = "11";
11+
String version = System.getProperty("java.version");
12+
boolean majorVersionMatches = version.startsWith(expectedMajorVersion + ".");
13+
String failureMsg = "Expected major version of " + expectedMajorVersion + " but got version: " + version;
14+
Assert.assertTrue(failureMsg, majorVersionMatches);
15+
}
16+
}

0 commit comments

Comments
 (0)