More tests
diff --git a/src/test/starlark/rules/arrangement.bzl b/src/test/starlark/rules/arrangement.bzl index eeb7532..19b8196 100644 --- a/src/test/starlark/rules/arrangement.bzl +++ b/src/test/starlark/rules/arrangement.bzl
@@ -1,9 +1,20 @@ load("//kotlin:jvm.bzl", "kt_jvm_import", "kt_jvm_library") -def arrange(test): - dependency_a_trans_dep_jar = test.artifact( - name = "dependency_a_trans_dep.abi.jar", - ) +def arrange(test, transitive_dep = None): + dependency_a_trans_dep_jar = transitive_dep + if dependency_a_trans_dep_jar == None: + dependency_a_trans_dep_jar = test.artifact( + name = "dependency_a_trans_dep.abi.jar", + ) + dependency_a_trans_dep = test.have( + kt_jvm_import, + name = "dependency_a_dep_jar_import", + jars = [ + dependency_a_trans_dep_jar, + ], + ) + else: + dependency_a_trans_dep = dependency_a_trans_dep_jar dependency_a = test.have( kt_jvm_library, @@ -14,13 +25,7 @@ ), ], deps = [ - test.have( - kt_jvm_import, - name = "dependency_a_dep_jar_import", - jars = [ - dependency_a_trans_dep_jar, - ], - ), + dependency_a_trans_dep, ], )
diff --git a/src/test/starlark/rules/experimental_prune_transitive_deps_tests.bzl b/src/test/starlark/rules/experimental_prune_transitive_deps_tests.bzl index 618829a..bc441f5 100644 --- a/src/test/starlark/rules/experimental_prune_transitive_deps_tests.bzl +++ b/src/test/starlark/rules/experimental_prune_transitive_deps_tests.bzl
@@ -4,6 +4,10 @@ load(":arrangement.bzl", "arrange") load(":util.bzl", "abi_jar_of", "basename_of", "values_for_flag_of") +_MAVEN_COMPILE_JAR_BASENAME = "header_javax.inject-1.jar" +_MAVEN_REPOSITORY_NAME = "rules_jvm_external++maven+kotlin_rules_maven" +_MAVEN_TRANSITIVE_DEP = Label("@kotlin_rules_maven//:javax_inject_javax_inject") + def _classpath_assertions_(env, target): action = env.expect.that_target(target).action_named(env.ctx.attr.on_action_mnemonic) @@ -20,10 +24,14 @@ action.inputs().contains_at_least_predicates(want_input_matchers) # For classpath (string paths), use str_endswith matcher to match by basename - want_classpath_basenames = [abi_jar_of(f.basename) for f in env.ctx.files.want_classpath if not f.basename.endswith("jdeps")] + want_classpath_basenames = [ + abi_jar_of(f.basename) + for f in env.ctx.files.want_classpath + if not f.basename.endswith("jdeps") + ] + env.ctx.attr.want_classpath_basenames values_for_flag_of(action, "--classpath").transform(desc = "basenames", map_each = basename_of).contains_at_least(want_classpath_basenames) - not_want_basenames = [f.basename for f in env.ctx.files.not_want_classpath] + not_want_basenames = [f.basename for f in env.ctx.files.not_want_classpath] + env.ctx.attr.not_want_classpath_basenames values_for_flag_of(action, "--classpath").transform(desc = "basenames", map_each = basename_of).contains_none_of(not_want_basenames) def _test_classpath_experimental_prune_transitive_deps_False(test): @@ -35,15 +43,18 @@ target = main_target_library, config_settings = { str(Label("@rules_kotlin//kotlin/settings:experimental_prune_transitive_deps")): False, + str(Label("@rules_kotlin//kotlin/settings:experimental_prune_transitive_deps_keep_transitive_repositories")): [], str(Label("@rules_kotlin//kotlin/settings:experimental_strict_associate_dependencies")): False, }, attr_values = { "not_want_classpath": [], + "not_want_classpath_basenames": [], "on_action_mnemonic": "KotlinCompile", "want_classpath": [ dependency_a, dependency_a_trans_dep_jar, ], + "want_classpath_basenames": [], "want_direct_dependencies": [ dependency_a, dependency_a_trans_dep_jar, @@ -55,8 +66,10 @@ }, attrs = { "not_want_classpath": attr.label_list(providers = [DefaultInfo], allow_files = True), + "not_want_classpath_basenames": attr.string_list(), "on_action_mnemonic": attr.string(), "want_classpath": attr.label_list(providers = [DefaultInfo], allow_files = True), + "want_classpath_basenames": attr.string_list(), "want_direct_dependencies": attr.label_list(providers = [DefaultInfo], allow_files = True), "want_inputs": attr.label_list(providers = [DefaultInfo], allow_files = True), }, @@ -71,16 +84,59 @@ target = main_target_library, config_settings = { str(Label("@rules_kotlin//kotlin/settings:experimental_prune_transitive_deps")): True, + str(Label("@rules_kotlin//kotlin/settings:experimental_prune_transitive_deps_keep_transitive_repositories")): [], str(Label("@rules_kotlin//kotlin/settings:experimental_strict_associate_dependencies")): False, }, attr_values = { "not_want_classpath": [ dependency_a_trans_dep_jar, ], + "not_want_classpath_basenames": [], "on_action_mnemonic": "KotlinCompile", "want_classpath": [ dependency_a, ], + "want_classpath_basenames": [], + "want_direct_dependencies": [ + dependency_a, + ], + "want_inputs": [ + dependency_a, + ], + }, + attrs = { + "not_want_classpath": attr.label_list(providers = [DefaultInfo], allow_files = True), + "not_want_classpath_basenames": attr.string_list(), + "on_action_mnemonic": attr.string(), + "want_classpath": attr.label_list(providers = [DefaultInfo], allow_files = True), + "want_classpath_basenames": attr.string_list(), + "want_direct_dependencies": attr.label_list(providers = [DefaultInfo], allow_files = True), + "want_inputs": attr.label_list(providers = [DefaultInfo], allow_files = True), + }, + ) + +def _test_classpath_experimental_prune_transitive_deps_keep_maven_repository(test): + (_, dependency_a, main_target_library) = arrange(test, transitive_dep = _MAVEN_TRANSITIVE_DEP) + + analysis_test( + name = test.name, + impl = _classpath_assertions_, + target = main_target_library, + config_settings = { + str(Label("@rules_kotlin//kotlin/settings:experimental_prune_transitive_deps")): True, + str(Label("@rules_kotlin//kotlin/settings:experimental_prune_transitive_deps_keep_transitive_repositories")): [_MAVEN_REPOSITORY_NAME], + str(Label("@rules_kotlin//kotlin/settings:experimental_strict_associate_dependencies")): False, + }, + attr_values = { + "not_want_classpath": [], + "not_want_classpath_basenames": [], + "on_action_mnemonic": "KotlinCompile", + "want_classpath": [ + dependency_a, + ], + "want_classpath_basenames": [ + _MAVEN_COMPILE_JAR_BASENAME, + ], "want_direct_dependencies": [ dependency_a, ], @@ -90,8 +146,50 @@ }, attrs = { "not_want_classpath": attr.label_list(providers = [DefaultInfo], allow_files = True), + "not_want_classpath_basenames": attr.string_list(), "on_action_mnemonic": attr.string(), "want_classpath": attr.label_list(providers = [DefaultInfo], allow_files = True), + "want_classpath_basenames": attr.string_list(), + "want_direct_dependencies": attr.label_list(providers = [DefaultInfo], allow_files = True), + "want_inputs": attr.label_list(providers = [DefaultInfo], allow_files = True), + }, + ) + +def _test_classpath_experimental_prune_transitive_deps_prune_unmatched_maven_repository(test): + (_, dependency_a, main_target_library) = arrange(test, transitive_dep = _MAVEN_TRANSITIVE_DEP) + + analysis_test( + name = test.name, + impl = _classpath_assertions_, + target = main_target_library, + config_settings = { + str(Label("@rules_kotlin//kotlin/settings:experimental_prune_transitive_deps")): True, + str(Label("@rules_kotlin//kotlin/settings:experimental_prune_transitive_deps_keep_transitive_repositories")): ["other_maven_repository"], + str(Label("@rules_kotlin//kotlin/settings:experimental_strict_associate_dependencies")): False, + }, + attr_values = { + "not_want_classpath": [], + "not_want_classpath_basenames": [ + _MAVEN_COMPILE_JAR_BASENAME, + ], + "on_action_mnemonic": "KotlinCompile", + "want_classpath": [ + dependency_a, + ], + "want_classpath_basenames": [], + "want_direct_dependencies": [ + dependency_a, + ], + "want_inputs": [ + dependency_a, + ], + }, + attrs = { + "not_want_classpath": attr.label_list(providers = [DefaultInfo], allow_files = True), + "not_want_classpath_basenames": attr.string_list(), + "on_action_mnemonic": attr.string(), + "want_classpath": attr.label_list(providers = [DefaultInfo], allow_files = True), + "want_classpath_basenames": attr.string_list(), "want_direct_dependencies": attr.label_list(providers = [DefaultInfo], allow_files = True), "want_inputs": attr.label_list(providers = [DefaultInfo], allow_files = True), }, @@ -101,5 +199,7 @@ suite( name, enabled = _test_classpath_experimental_prune_transitive_deps_True, + enabled_keep_maven_repository = _test_classpath_experimental_prune_transitive_deps_keep_maven_repository, + enabled_prune_unmatched_maven_repository = _test_classpath_experimental_prune_transitive_deps_prune_unmatched_maven_repository, disabled = _test_classpath_experimental_prune_transitive_deps_False, )