aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar Dmitry Lomov <dslomov@google.com>2017-02-07 17:24:04 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2017-02-07 18:27:34 +0000
commit65fde000e1a31b569a43103fbb531e2b2cc30b18 (patch)
treeddcaf3cb6482e7b2f58c8649058477cfc78c3a36 /src/test/java/com/google/devtools
parent5eb3ef9618c0737b5541a2563c18957908618b4d (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.java25
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java50
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 {