diff options
author | 2015-11-26 10:49:16 +0000 | |
---|---|---|
committer | 2015-11-26 13:19:53 +0000 | |
commit | 5a8f1c0b1a7a791092f8d274d9f16bae5396bc9c (patch) | |
tree | 6904371344f5aebaf038977051a25946a8314316 /src/test/java/com/google/devtools/build/lib/skylark | |
parent | 1f02a434a42cb7ce2cbdad8592709ad518772eb7 (diff) |
Implement Skylark aspects originating from Skylark rules.
--
MOS_MIGRATED_REVID=108777120
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/skylark')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java | 74 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java | 24 |
2 files changed, 98 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java index b12ccd04a6..b3b6bc99ba 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java @@ -141,6 +141,80 @@ public class SkylarkAspectsTest extends BuildViewTestCase { .containsExactly("//test:xxx", "//test:yyy"); } + + public void testAspectsFromSkylarkRules() throws Exception { + scratch.file( + "test/aspect.bzl", + "def _impl(target, ctx):", + " s = set([target.label])", + " for i in ctx.attr.deps:", + " s += i.target_labels", + " return struct(target_labels = s)", + "def _rule_impl(ctx):", + " s = set([])", + " for i in ctx.attr.attr:", + " s += i.target_labels", + " return struct(rule_deps = s)", + "", + "MyAspect = aspect(", + " implementation=_impl,", + " attr_aspects=['deps'],", + ")", + "my_rule = rule(", + " implementation=_rule_impl,", + " attrs = { 'attr' : ", + " attr.label_list(mandatory=True, allow_files=True, aspects = [MyAspect]) },", + ")"); + + scratch.file( + "test/BUILD", + "load('/test/aspect', 'my_rule')", + "java_library(", + " name = 'yyy',", + ")", + "my_rule(", + " name = 'xxx',", + " attr = [':yyy'],", + ")"); + + AnalysisResult analysisResult = + update( + ImmutableList.of("//test:xxx"), + ImmutableList.<String>of(), + false, + LOADING_PHASE_THREADS, + true, + new EventBus()); + assertThat( + transform( + analysisResult.getTargetsToBuild(), + new Function<ConfiguredTarget, String>() { + @Nullable + @Override + public String apply(ConfiguredTarget configuredTarget) { + return configuredTarget.getLabel().toString(); + } + })) + .containsExactly("//test:xxx"); + ConfiguredTarget target = analysisResult.getTargetsToBuild().iterator().next(); + SkylarkProviders skylarkProviders = target.getProvider(SkylarkProviders.class); + assertThat(skylarkProviders).isNotNull(); + Object names = skylarkProviders.getValue("rule_deps"); + assertThat(names).isInstanceOf(SkylarkNestedSet.class); + assertThat( + transform( + (SkylarkNestedSet) names, + new Function<Object, String>() { + @Nullable + @Override + public String apply(Object o) { + assertThat(o).isInstanceOf(Label.class); + return o.toString(); + } + })) + .containsExactly("//test:yyy"); + } + public void testAspectFailingExecution() throws Exception { scratch.file( "test/aspect.bzl", diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java index bca93ac205..83ea26a7f6 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java @@ -178,6 +178,30 @@ public class SkylarkRuleClassFunctionsTest extends SkylarkTestCase { } @Test + public void testLabelListWithAspects() throws Exception { + SkylarkAttr.Descriptor attr = + (SkylarkAttr.Descriptor) evalRuleClassCode( + "def _impl(target, ctx):", + " pass", + "my_aspect = aspect(implementation = _impl)", + "attr.label_list(aspects = [my_aspect])"); + Object aspect = ev.lookup("my_aspect"); + assertThat(aspect).isNotNull(); + assertThat(attr.getAspects()).containsExactly(aspect); + } + + @Test + public void testLabelListWithAspectsError() throws Exception { + checkErrorContains( + "Expected a list of aspects for 'aspects'", + "def _impl(target, ctx):", + " pass", + "my_aspect = aspect(implementation = _impl)", + "attr.label_list(aspects = [my_aspect, 123])" + ); + } + + @Test public void testNonLabelAttrWithProviders() throws Exception { checkErrorContains( "unexpected keyword 'providers' in call to string", "attr.string(providers = ['a'])"); |