| # Copyright 2022 Google LLC. All rights reserved. |
| # |
| # 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. |
| |
| """kt_jvm_library_analysis_test""" |
| |
| load("//:visibility.bzl", "RULES_KOTLIN") |
| load("//kotlin/common/testing:analysis.bzl", "kt_analysis") |
| load("//kotlin/common/testing:asserts.bzl", "kt_asserts") |
| load("@bazel_skylib//lib:sets.bzl", "sets") |
| load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts") |
| |
| visibility(RULES_KOTLIN) |
| |
| kt_jvm_library_analysis_test = analysistest.make( |
| impl = lambda ctx: _kt_jvm_library_analysis_test_impl(ctx), |
| attrs = dict( |
| expected_al_ruleset_names = attr.string_list( |
| doc = "Android Lint rule JARs reported as run on the given target", |
| default = kt_analysis.DEFAULT_LIST, |
| ), |
| expected_compile_jar_names = attr.string_list( |
| doc = "Names of all JavaInfo::compile_jars for the given target", |
| default = kt_analysis.DEFAULT_LIST, |
| ), |
| expected_exported_processor_jar_names = attr.string_list( |
| doc = "Names of all JavaInfo::plugins JARs returned by the given target", |
| default = kt_analysis.DEFAULT_LIST, |
| ), |
| expected_exported_processor_classes = attr.string_list( |
| doc = "Annotation processors reported as to be run on depending targets", |
| ), |
| expected_processor_classes = attr.string_list( |
| doc = "Annotation processors reported as run on the given target", |
| ), |
| expected_kotlinc_plugin_jar_names = attr.string_list( |
| doc = "Names of all -Xplugin= JARs", |
| default = kt_analysis.DEFAULT_LIST, |
| ), |
| expected_friend_jar_names = attr.string_list( |
| doc = "Names of all -Xfriend-paths= JARs", |
| default = kt_analysis.DEFAULT_LIST, |
| ), |
| expected_runfile_names = attr.string_list( |
| doc = "Names of all runfiles", |
| default = kt_analysis.DEFAULT_LIST, |
| ), |
| expect_jdeps = attr.bool(default = True), |
| expect_processor_classpath = attr.bool(), |
| expect_neverlink = attr.bool(), |
| required_mnemonic_counts = attr.string_dict( |
| doc = "Expected mnemonics to expected action count; unlisted mnemonics are ignored", |
| ), |
| ), |
| ) |
| |
| def _kt_jvm_library_analysis_test_impl(ctx): |
| kt_analysis.check_endswith_test(ctx) |
| |
| env = analysistest.begin(ctx) |
| actual = ctx.attr.target_under_test |
| |
| actions = analysistest.target_actions(env) |
| kt_al_action = kt_analysis.get_action(actions, "KtAndroidLint") |
| |
| asserts.true( |
| env, |
| JavaInfo in actual, |
| "kt_jvm_library did not produce JavaInfo provider.", |
| ) |
| asserts.true( |
| env, |
| ProguardSpecProvider in actual, |
| "Expected a ProguardSpecProvider provider.", |
| ) |
| |
| if ctx.attr.expected_runfile_names != kt_analysis.DEFAULT_LIST: |
| asserts.set_equals( |
| env, |
| sets.make(ctx.attr.expected_runfile_names), |
| sets.make([ |
| f.basename |
| for f in actual[DefaultInfo].data_runfiles.files.to_list() |
| ]), |
| ) |
| |
| if ctx.attr.expected_compile_jar_names != kt_analysis.DEFAULT_LIST: |
| asserts.set_equals( |
| env, |
| sets.make(ctx.attr.expected_compile_jar_names), |
| sets.make([f.basename for f in actual[JavaInfo].compile_jars.to_list()]), |
| "kt_jvm_library JavaInfo::compile_jars", |
| ) |
| |
| if ctx.attr.expected_exported_processor_jar_names != kt_analysis.DEFAULT_LIST: |
| asserts.set_equals( |
| env, |
| sets.make(ctx.attr.expected_exported_processor_jar_names), |
| sets.make([f.basename for f in actual[JavaInfo].plugins.processor_jars.to_list()]), |
| ) |
| |
| asserts.set_equals( |
| env, |
| sets.make(ctx.attr.expected_exported_processor_classes), |
| sets.make(actual[JavaInfo].plugins.processor_classes.to_list()), |
| ) |
| |
| kt_2_java_compile = kt_analysis.get_action(actions, "Kt2JavaCompile") |
| |
| if kt_2_java_compile: |
| asserts.true( |
| env, |
| kt_2_java_compile.outputs.to_list()[0].basename.endswith(".jar"), |
| "Expected first output to be a JAR (this affects the param file name).", |
| ) |
| |
| if ctx.attr.expected_friend_jar_names != kt_analysis.DEFAULT_LIST: |
| friend_paths_arg = kt_analysis.get_arg(kt_2_java_compile, "-Xfriend-paths=") |
| kt_asserts.list_matches( |
| env, |
| expected = ["/" + x for x in ctx.attr.expected_friend_jar_names], |
| actual = friend_paths_arg.split(",") if friend_paths_arg else [], |
| matcher = lambda expected, actual: actual.endswith(expected), |
| items_name = "friend JARs", |
| ) |
| |
| if ctx.attr.expected_kotlinc_plugin_jar_names != kt_analysis.DEFAULT_LIST: |
| kt_asserts.list_matches( |
| env, |
| expected = ["/" + x for x in ctx.attr.expected_kotlinc_plugin_jar_names], |
| actual = kt_analysis.get_all_args(kt_2_java_compile, "-Xplugin="), |
| matcher = lambda expected, actual: actual.endswith(expected), |
| items_name = "kotlinc plugin JARs", |
| ) |
| |
| asserts.equals( |
| env, |
| ctx.attr.expect_neverlink, |
| len(actual[JavaInfo].transitive_runtime_jars.to_list()) == 0, |
| "Mismatch: Expected transitive_runtime_jars iff (neverlink == False)", |
| ) |
| |
| kt_asserts.required_mnemonic_counts(env, ctx.attr.required_mnemonic_counts, actions) |
| |
| return analysistest.end(env) |