diff options
Diffstat (limited to 'src/test/java')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java | 30 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java | 85 |
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 { |