blob: 046bd6fa17c8f2c8221f91b267938ba05c5740fa [file] [log] [blame] [edit]
# Copyright (C) 2023 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
load(":library.bzl", "java_library")
ActionArgsInfo = provider(
fields = {
"argv_map": "A dict with compile action arguments keyed by the target label",
},
)
def _library_compile_actions_aspect_impl(target, ctx):
argv_map = {}
if ctx.rule.kind == "java_library_sdk_transition":
if len(ctx.rule.attr.exports) > 1:
fail("multiple exports is not supported.")
for export in ctx.rule.attr.exports:
label_name = export.label.name
action = export[ActionArgsInfo].argv_map.get(label_name, None)
if action:
argv_map[target.label.name] = action
else:
argv = []
for action in target.actions:
if action.mnemonic == "Javac":
argv.extend(action.argv)
argv_map[target.label.name] = argv
return ActionArgsInfo(
argv_map = argv_map,
)
library_compile_actions_aspect = aspect(
implementation = _library_compile_actions_aspect_impl,
attr_aspects = ["exports"],
)
def _compile_test_impl(ctx):
env = analysistest.begin(ctx)
if len(ctx.attr.args_to_check) == 0:
return analysistest.end(env)
target = analysistest.target_under_test(env)
argv = target[ActionArgsInfo].argv_map[target.label.name]
expected_args = ctx.attr.args_to_check
first_arg = expected_args[0]
for (i, arg) in enumerate(argv):
if arg == first_arg:
asserts.true(env, len(argv) >= i + len(expected_args), "expected enough at least %d args based on # of expected args (%d), got %d" % (i + len(expected_args), len(expected_args), len(argv)))
asserts.equals(env, expected_args, argv[i:i + len(expected_args)])
break
return analysistest.end(env)
java_library_compile_test = analysistest.make(
_compile_test_impl,
attrs = {
"args_to_check": attr.string_list(),
},
extra_target_under_test_aspects = [library_compile_actions_aspect],
)
def _host_java_library_has_correct_java_version():
basename = "host_java_library_has_correct_java_version"
test_name = basename + "_test"
java_library(
name = basename,
srcs = ["foo.java"],
sdk_version = "21",
java_version = "1.7",
tags = ["manual"],
)
java_library_compile_test(
name = test_name,
target_under_test = basename,
args_to_check = [
"-source",
"7",
"-target",
"7",
],
)
return test_name
def java_library_test_suite(name):
native.test_suite(
name = name,
tests = [
_host_java_library_has_correct_java_version(),
],
)