diff options
author | 2018-04-27 13:04:59 -0700 | |
---|---|---|
committer | 2018-04-27 13:07:03 -0700 | |
commit | aab9868f535e3a08e272570fed5fec3c51cd384b (patch) | |
tree | 4e1742d8aad4495b9c25b8c80addfd2aae2e1d93 /src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java | |
parent | 758287532e338401146a8bb447161711b4b939c0 (diff) |
Allow skylark rule definitions to advertise providers that targets of the rule must propagate
This allows native aspects which specifically require advertised providers to be applied to skylark rules.
Implementation to allow aspects to explicitly declare provider requirements will come later.
RELNOTES: Skylark rule definitions may advertise providers that targets of the rule must propagate.
PiperOrigin-RevId: 194581466
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java index 29db32ad0c..88d1babc68 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java @@ -884,6 +884,59 @@ public class BazelJ2ObjcLibraryTest extends J2ObjcLibraryTest { "java/com/google/dummy/_j2objc/dummy/java/com/google/dummy/dummy.m")); } + // Tests that a j2objc library can acquire java library information from a skylark rule target. + @Test + public void testJ2ObjcLibraryDepThroughSkylarkRule() throws Exception { + scratch.file("examples/inner.java"); + scratch.file("examples/outer.java"); + scratch.file( + "examples/fake_rule.bzl", + "def _fake_rule_impl(ctx):", + " myProvider = ctx.attr.deps[0][JavaInfo]", + " return struct(providers = [myProvider])", + "", + "fake_rule = rule(", + " implementation = _fake_rule_impl,", + " attrs = {'deps': attr.label_list()},", + " provides = [JavaInfo],", + ")"); + scratch.file( + "examples/BUILD", + "package(default_visibility=['//visibility:public'])", + "load('//examples:fake_rule.bzl', 'fake_rule')", + "java_library(", + " name = 'inner',", + " srcs = ['inner.java'])", + "", + "fake_rule(", + " name = 'propagator',", + " deps = [':inner'])", + "", + "java_library(", + " name = 'outer',", + " srcs = ['outer.java'],", + " deps = [':propagator'])", + "", + "j2objc_library(", + " name = 'transpile',", + " deps = [", + " ':outer',", + " ])", + "", + "objc_library(", + " name = 'lib',", + " srcs = ['lib.m'],", + " deps = [':transpile'])"); + + ConfiguredTarget objcTarget = getConfiguredTarget("//examples:lib"); + + ObjcProvider provider = objcTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR); + + // The only way that //examples:lib can see inner's archive is through the skylark rule. + assertThat(Artifact.toRootRelativePaths(provider.get(ObjcProvider.LIBRARY))) + .contains("examples/libinner_j2objc.a"); + } + @Test public void testJ2ObjcTranspiledHeaderInCompilationAction() throws Exception { scratch.file("app/lib.m"); |