From 81d3c3eccdc92d2c047b7c066ff6d7acdc33c113 Mon Sep 17 00:00:00 2001 From: Dmitry Lomov Date: Wed, 22 Mar 2017 12:58:06 +0000 Subject: Fix dir() on Targets with aspects applied. -- PiperOrigin-RevId: 150869561 MOS_MIGRATED_REVID=150869561 --- .../build/lib/skylark/SkylarkAspectsTest.java | 44 +++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) (limited to 'src/test/java') 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 b5e951b68b..976c268e97 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 @@ -35,6 +35,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.packages.AspectDefinition; import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition; import com.google.devtools.build.lib.packages.ClassObjectConstructor.Key; +import com.google.devtools.build.lib.packages.SkylarkClassObject; import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor.SkylarkKey; import com.google.devtools.build.lib.rules.cpp.CppConfiguration; import com.google.devtools.build.lib.rules.java.Jvm; @@ -356,6 +357,47 @@ public class SkylarkAspectsTest extends AnalysisTestCase { .containsExactly("stl", "xxx", "yyy"); } + @Test + public void aspectsDirOnMergedTargets() throws Exception { + scratch.file( + "test/aspect.bzl", + "def _impl(target, ctx):", + " return struct(aspect_provider = 'data')", + "", + "p = provider()", + "MyAspect = aspect(implementation=_impl)", + "def _rule_impl(ctx):", + " if ctx.attr.dep:", + " return [p(dir = dir(ctx.attr.dep))]", + " return [p()]", + "", + "my_rule = rule(implementation = _rule_impl,", + " attrs = { 'dep' : attr.label(aspects = [MyAspect]) },", + ")"); + SkylarkKey providerKey = new SkylarkKey(Label.parseAbsoluteUnchecked("//test:aspect.bzl"), "p"); + scratch.file( + "test/BUILD", + "load('/test/aspect', 'my_rule')", + "my_rule(name = 'xxx',)", + "my_rule(name = 'yyy', dep = ':xxx')"); + AnalysisResult analysisResult = update("//test:yyy"); + ConfiguredTarget target = Iterables.getOnlyElement(analysisResult.getTargetsToBuild()); + SkylarkProviders skylarkProviders = target.getProvider(SkylarkProviders.class); + assertThat(skylarkProviders).isNotNull(); + + SkylarkClassObject names = skylarkProviders.getDeclaredProvider(providerKey); + assertThat((Iterable) names.getValue("dir")) + .containsExactly( + "aspect_provider", + "data_runfiles", + "default_runfiles", + "files", + "files_to_run", + "label", + "output_group", + "output_groups"); + } + @Test public void aspectWithOutputGroups() throws Exception { scratch.file( @@ -1968,7 +2010,7 @@ public class SkylarkAspectsTest extends AnalysisTestCase { + "(when propagating from //test:r2 to //test:r1 via attribute dep)"); } - + /** SkylarkAspectTest with "keep going" flag */ @RunWith(JUnit4.class) public static final class WithKeepGoing extends SkylarkAspectsTest { @Override -- cgit v1.2.3