diff options
author | 2017-02-07 17:24:04 +0000 | |
---|---|---|
committer | 2017-02-07 18:27:34 +0000 | |
commit | 65fde000e1a31b569a43103fbb531e2b2cc30b18 (patch) | |
tree | ddcaf3cb6482e7b2f58c8649058477cfc78c3a36 /src/test/java/com/google/devtools | |
parent | 5eb3ef9618c0737b5541a2563c18957908618b4d (diff) |
Allow aspects to adveritise providers they provide.
--
PiperOrigin-RevId: 146794883
MOS_MIGRATED_REVID=146794883
Diffstat (limited to 'src/test/java/com/google/devtools')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java | 25 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java | 50 |
2 files changed, 75 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java index c3748fea6d..76d24e09d4 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java @@ -684,4 +684,29 @@ public class AspectTest extends AnalysisTestCase { .containsExactly( "aspect //a:a", "aspect //a:b", "aspect //a:c", "aspect //a:tool", "rule //a:x"); } + + @Test + public void aspectTruthInAdvertisement() throws Exception { + reporter.removeHandler(failFastHandler); // expect errors + setRulesAvailableInTests( + new TestAspects.BaseRule(), + new TestAspects.SimpleRule(), + new TestAspects.FalseAdvertisementAspectRule()); + pkg( + "a", + "simple(name = 's')", + "false_advertisement_aspect(name = 'x', deps = [':s'])" + ); + try { + update("//a:x"); + } catch (ViewCreationFailedException e) { + // expected. + } + assertContainsEvent( + "Aspect 'FalseAdvertisementAspect', applied to '//a:s'," + + " does not provide advertised provider 'RequiredProvider'"); + assertContainsEvent( + "Aspect 'FalseAdvertisementAspect', applied to '//a:s'," + + " does not provide advertised provider 'advertised_provider'"); + } } diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java b/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java index 3a74a5926b..0566c43c36 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java @@ -61,6 +61,7 @@ import com.google.devtools.build.lib.packages.NativeAspectClass; import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClass.Builder; +import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier; import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.syntax.Type; import com.google.devtools.build.lib.util.FileTypeSet; @@ -442,6 +443,33 @@ public class TestAspects { .build(); /** + * An aspect that advertises but fails to provide providers. + */ + public static class FalseAdvertisementAspect extends NativeAspectClass + implements ConfiguredAspectFactory { + + @Override + public AspectDefinition getDefinition(AspectParameters aspectParameters) { + return FALSE_ADVERTISEMENT_DEFINITION; + } + + @Override + public ConfiguredAspect create(ConfiguredTarget base, RuleContext context, + AspectParameters parameters) throws InterruptedException { + return new ConfiguredAspect.Builder(this, parameters, context).build(); + } + } + public static final FalseAdvertisementAspect FALSE_ADVERTISEMENT_ASPECT + = new FalseAdvertisementAspect(); + private static final AspectDefinition FALSE_ADVERTISEMENT_DEFINITION = + new AspectDefinition.Builder(FALSE_ADVERTISEMENT_ASPECT) + .advertiseProvider(RequiredProvider.class) + .advertiseProvider( + ImmutableList.of(SkylarkProviderIdentifier.forLegacy("advertised_provider"))) + .build(); + + + /** * A common base rule for mock rules in this class to reduce boilerplate. * * <p>It has a few common attributes because internal Blaze machinery assumes the presence of @@ -967,6 +995,28 @@ public class TestAspects { } /** + * Rule with {@link FalseAdvertisementAspect} + */ + public static final class FalseAdvertisementAspectRule implements RuleDefinition { + + @Override + public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) { + return builder + .add(attr("deps", LABEL_LIST).allowedFileTypes().aspect(FALSE_ADVERTISEMENT_ASPECT)) + .build(); + } + + @Override + public Metadata getMetadata() { + return RuleDefinition.Metadata.builder() + .name("false_advertisement_aspect") + .factoryClass(DummyRuleFactory.class) + .ancestors(BaseRule.class) + .build(); + } + } + + /** * Rule with rule class configuration transition. */ public static class RuleClassTransitionRule implements RuleDefinition { |