aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java
diff options
context:
space:
mode:
authorGravatar Dmitry Lomov <dslomov@google.com>2017-01-17 10:25:28 +0000
committerGravatar Vladimir Moskva <vladmos@google.com>2017-01-17 12:15:42 +0000
commitf868b3e0a43be9f4466f119f13c41c906d54f004 (patch)
treedc4b8988ee4cff4827fec789e5dba8a4448d5845 /src/test/java
parentd747d522128e2dd0fff204d0ecbf36dcf0a439c8 (diff)
Add ability to specify required aspect providers for aspects.
It is just a specification yet, it does nothing. -- PiperOrigin-RevId: 144687428 MOS_MIGRATED_REVID=144687428
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java30
-rw-r--r--src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java85
2 files changed, 115 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java
index 5919fc2c0f..f522433a79 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java
@@ -169,6 +169,11 @@ public class AspectDefinitionTest {
.build();
assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(expectedFailSet))
.isFalse();
+
+ assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(AdvertisedProviderSet.ANY))
+ .isTrue();
+ assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(AdvertisedProviderSet.EMPTY))
+ .isFalse();
}
@Test
@@ -196,9 +201,34 @@ public class AspectDefinitionTest {
.addNative(Float.class)
.build();
+ assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(AdvertisedProviderSet.ANY))
+ .isTrue();
assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(expectedOkSet1)).isTrue();
assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(expectedOkSet2)).isTrue();
assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(expectedFailSet)).isFalse();
+ assertThat(requiresProviders.getRequiredProviders().isSatisfiedBy(AdvertisedProviderSet.EMPTY))
+ .isFalse();
+
+ }
+
+ @Test
+ public void testRequireAspectClass_DefaultAcceptsNothing() {
+ AspectDefinition noAspects = new AspectDefinition.Builder(TEST_ASPECT_CLASS)
+ .build();
+
+ AdvertisedProviderSet expectedFailSet =
+ AdvertisedProviderSet.builder()
+ .addNative(Float.class)
+ .build();
+
+ assertThat(noAspects.getRequiredProvidersForAspects().isSatisfiedBy(AdvertisedProviderSet.ANY))
+ .isFalse();
+ assertThat(noAspects.getRequiredProvidersForAspects()
+ .isSatisfiedBy(AdvertisedProviderSet.EMPTY))
+ .isFalse();
+
+ assertThat(noAspects.getRequiredProvidersForAspects().isSatisfiedBy(expectedFailSet))
+ .isFalse();
}
@Test
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 da072b93ec..cccb746882 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
@@ -26,12 +26,14 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.packages.AdvertisedProviderSet;
import com.google.devtools.build.lib.packages.AspectParameters;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition;
import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.ImplicitOutputsFunction;
import com.google.devtools.build.lib.packages.PredicateWithMessage;
+import com.google.devtools.build.lib.packages.RequiredProviders;
import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
import com.google.devtools.build.lib.packages.SkylarkAspect;
@@ -1111,6 +1113,89 @@ public class SkylarkRuleClassFunctionsTest extends SkylarkTestCase {
)).containsExactly(myAspect.getAspectClass());
}
+ @Test
+ public void aspectRequiredAspectProvidersSingle() throws Exception {
+ evalAndExport(
+ "def _impl(target, ctx):",
+ " pass",
+ "my_aspect = aspect(_impl, required_aspect_providers=['java', 'cc'])"
+ );
+ SkylarkAspect myAspect = (SkylarkAspect) lookup("my_aspect");
+ RequiredProviders requiredProviders = myAspect.getDefinition(AspectParameters.EMPTY)
+ .getRequiredProvidersForAspects();
+ assertThat(requiredProviders.isSatisfiedBy(AdvertisedProviderSet.ANY)).isTrue();
+ assertThat(requiredProviders.isSatisfiedBy(AdvertisedProviderSet.EMPTY)).isFalse();
+ assertThat(requiredProviders.isSatisfiedBy(
+ AdvertisedProviderSet.builder()
+ .addSkylark("cc")
+ .addSkylark("java")
+ .build()))
+ .isTrue();
+ assertThat(requiredProviders.isSatisfiedBy(
+ AdvertisedProviderSet.builder()
+ .addSkylark("cc")
+ .build()))
+ .isFalse();
+ }
+
+ @Test
+ public void aspectRequiredAspectProvidersAlternatives() throws Exception {
+ evalAndExport(
+ "def _impl(target, ctx):",
+ " pass",
+ "my_aspect = aspect(_impl, required_aspect_providers=[['java'], ['cc']])"
+ );
+ SkylarkAspect myAspect = (SkylarkAspect) lookup("my_aspect");
+ RequiredProviders requiredProviders = myAspect.getDefinition(AspectParameters.EMPTY)
+ .getRequiredProvidersForAspects();
+ assertThat(requiredProviders.isSatisfiedBy(AdvertisedProviderSet.ANY)).isTrue();
+ assertThat(requiredProviders.isSatisfiedBy(AdvertisedProviderSet.EMPTY)).isFalse();
+ assertThat(requiredProviders.isSatisfiedBy(
+ AdvertisedProviderSet.builder()
+ .addSkylark("java")
+ .build()))
+ .isTrue();
+ assertThat(requiredProviders.isSatisfiedBy(
+ AdvertisedProviderSet.builder()
+ .addSkylark("cc")
+ .build()))
+ .isTrue();
+ assertThat(requiredProviders.isSatisfiedBy(
+ AdvertisedProviderSet.builder()
+ .addSkylark("prolog")
+ .build()))
+ .isFalse();
+ }
+
+ @Test
+ public void aspectRequiredAspectProvidersEmpty() throws Exception {
+ evalAndExport(
+ "def _impl(target, ctx):",
+ " pass",
+ "my_aspect = aspect(_impl, required_aspect_providers=[])"
+ );
+ SkylarkAspect myAspect = (SkylarkAspect) lookup("my_aspect");
+ RequiredProviders requiredProviders = myAspect.getDefinition(AspectParameters.EMPTY)
+ .getRequiredProvidersForAspects();
+ assertThat(requiredProviders.isSatisfiedBy(AdvertisedProviderSet.ANY)).isFalse();
+ assertThat(requiredProviders.isSatisfiedBy(AdvertisedProviderSet.EMPTY)).isFalse();
+ }
+
+ @Test
+ public void aspectRequiredAspectProvidersDefault() throws Exception {
+ evalAndExport(
+ "def _impl(target, ctx):",
+ " pass",
+ "my_aspect = aspect(_impl)"
+ );
+ SkylarkAspect myAspect = (SkylarkAspect) lookup("my_aspect");
+ RequiredProviders requiredProviders = myAspect.getDefinition(AspectParameters.EMPTY)
+ .getRequiredProvidersForAspects();
+ assertThat(requiredProviders.isSatisfiedBy(AdvertisedProviderSet.ANY)).isFalse();
+ assertThat(requiredProviders.isSatisfiedBy(AdvertisedProviderSet.EMPTY)).isFalse();
+ }
+
+
@Test
public void starTheOnlyAspectArg() throws Exception {