diff options
author | dslomov <dslomov@google.com> | 2017-07-31 19:23:52 +0200 |
---|---|---|
committer | Dmitry Lomov <dslomov@google.com> | 2017-07-31 20:20:46 +0200 |
commit | c32e1b1efcd703b3780de47fba62974123593d71 (patch) | |
tree | 78f4968a6cce9ff56831f7344f65923e43904768 /src/test/java/com/google/devtools/build | |
parent | 52f11c6d3c2052a57db76957909f3c89a26eb251 (diff) |
Use RequiredProviders to validate rule prerequisites in RuleContext.
We now use a unified way to check provider requirements everywhere.
RELNOTES: None.
PiperOrigin-RevId: 163710961
Diffstat (limited to 'src/test/java/com/google/devtools/build')
3 files changed, 79 insertions, 19 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/packages/RequiredProvidersTest.java b/src/test/java/com/google/devtools/build/lib/packages/RequiredProvidersTest.java index 03cc956b71..05ba757976 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/RequiredProvidersTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/RequiredProvidersTest.java @@ -16,7 +16,6 @@ package com.google.devtools.build.lib.packages; import static com.google.common.truth.Truth.assertThat; -import com.google.common.base.Predicates; import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; @@ -31,6 +30,9 @@ import org.junit.runners.JUnit4; */ @RunWith(JUnit4.class) public class RequiredProvidersTest { + + private static final String NO_PROVIDERS_REQUIRED = "no providers required"; + private static final class P1 {} private static final class P2 {} private static final class P3 {} @@ -60,8 +62,8 @@ public class RequiredProvidersTest { boolean result = requiredProviders.isSatisfiedBy(providers); assertThat(requiredProviders.isSatisfiedBy( - Predicates.in(providers.getNativeProviders()), - Predicates.in(providers.getSkylarkProviders()) + providers.getNativeProviders()::contains, + providers.getSkylarkProviders()::contains )).isEqualTo(result); return result; } @@ -108,7 +110,11 @@ public class RequiredProvidersTest { .addNative(P1.class) .addNative(P2.class) .build(); - assertThat(validateNative(providerSet, ImmutableSet.<Class<?>>of(P1.class, P2.class))) + assertThat( + validateNative( + providerSet, + NO_PROVIDERS_REQUIRED, + ImmutableSet.of(P1.class, P2.class))) .isTrue(); } @@ -119,6 +125,7 @@ public class RequiredProvidersTest { AdvertisedProviderSet.builder() .addNative(P1.class) .build(), + NO_PROVIDERS_REQUIRED, ImmutableSet.<Class<?>>of(P1.class), ImmutableSet.<Class<?>>of(P2.class) )).isTrue(); @@ -131,6 +138,7 @@ public class RequiredProvidersTest { AdvertisedProviderSet.builder() .addNative(P3.class) .build(), + "P1 or P2", ImmutableSet.<Class<?>>of(P1.class), ImmutableSet.<Class<?>>of(P2.class) )).isFalse(); @@ -144,6 +152,7 @@ public class RequiredProvidersTest { .addSkylark(ID_SKYLARK) .build(); assertThat(validateSkylark(providerSet, + NO_PROVIDERS_REQUIRED, ImmutableSet.of( ID_LEGACY, ID_SKYLARK, ID_NATIVE))) .isTrue(); @@ -156,6 +165,7 @@ public class RequiredProvidersTest { AdvertisedProviderSet.builder() .addSkylark(ID_LEGACY) .build(), + NO_PROVIDERS_REQUIRED, ImmutableSet.of(ID_LEGACY), ImmutableSet.of(ID_NATIVE) )).isTrue(); @@ -168,13 +178,29 @@ public class RequiredProvidersTest { AdvertisedProviderSet.builder() .addSkylark(ID_SKYLARK) .build(), + "'p_legacy' or 'p_native'", ImmutableSet.of(ID_LEGACY), ImmutableSet.of(ID_NATIVE) )).isFalse(); } + @Test + public void checkDescriptions() { + assertThat(RequiredProviders.acceptAnyBuilder().build().getDescription()) + .isEqualTo("no providers required"); + assertThat(RequiredProviders.acceptNoneBuilder().build().getDescription()) + .isEqualTo("no providers accepted"); + assertThat(RequiredProviders.acceptAnyBuilder() + .addSkylarkSet(ImmutableSet.of(ID_LEGACY, ID_SKYLARK)) + .addSkylarkSet(ImmutableSet.of(ID_SKYLARK)) + .addNativeSet(ImmutableSet.of(P1.class, P2.class)) + .build().getDescription()) + .isEqualTo("[P1, P2] or ['p_legacy', 'p_skylark'] or 'p_skylark'"); + } + @SafeVarargs private static boolean validateNative(AdvertisedProviderSet providerSet, + String missing, ImmutableSet<Class<?>>... sets) { Builder anyBuilder = RequiredProviders.acceptAnyBuilder(); Builder noneBuilder = RequiredProviders.acceptNoneBuilder(); @@ -182,14 +208,20 @@ public class RequiredProvidersTest { anyBuilder.addNativeSet(set); noneBuilder.addNativeSet(set); } - boolean result = satisfies(providerSet, anyBuilder.build()); - assertThat(satisfies(providerSet, noneBuilder.build())).isEqualTo(result); + RequiredProviders rpStartingFromAny = anyBuilder.build(); + boolean result = satisfies(providerSet, rpStartingFromAny); + assertThat(rpStartingFromAny.getMissing(providerSet).getDescription()).isEqualTo(missing); + + RequiredProviders rpStaringFromNone = noneBuilder.build(); + assertThat(satisfies(providerSet, rpStaringFromNone)).isEqualTo(result); + assertThat(rpStaringFromNone.getMissing(providerSet).getDescription()).isEqualTo(missing); return result; } @SafeVarargs private static boolean validateSkylark( AdvertisedProviderSet providerSet, + String missing, ImmutableSet<SkylarkProviderIdentifier>... sets) { Builder anyBuilder = RequiredProviders.acceptAnyBuilder(); Builder noneBuilder = RequiredProviders.acceptNoneBuilder(); @@ -197,8 +229,14 @@ public class RequiredProvidersTest { anyBuilder.addSkylarkSet(set); noneBuilder.addSkylarkSet(set); } - boolean result = satisfies(providerSet, anyBuilder.build()); - assertThat(satisfies(providerSet, noneBuilder.build())).isEqualTo(result); + + RequiredProviders rpStartingFromAny = anyBuilder.build(); + boolean result = satisfies(providerSet, rpStartingFromAny); + assertThat(rpStartingFromAny.getMissing(providerSet).getDescription()).isEqualTo(missing); + + RequiredProviders rpStaringFromNone = noneBuilder.build(); + assertThat(satisfies(providerSet, rpStaringFromNone)).isEqualTo(result); + assertThat(rpStaringFromNone.getMissing(providerSet).getDescription()).isEqualTo(missing); return result; } } diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java index 08b9ccdf39..6db90093bd 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java @@ -711,7 +711,7 @@ public class SkylarkIntegrationTest extends BuildViewTestCase { "main_rule = rule(implementation = rule_impl, attrs = {", " 'deps': attr.label_list(providers = [", " 'files', 'data_runfiles', 'default_runfiles',", - " 'files_to_run', 'label', 'output_groups',", + " 'files_to_run', 'output_groups',", " ])", "})"); scratch.file( 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 b3d614816d..9c20c6bd02 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 @@ -249,19 +249,44 @@ public class SkylarkRuleClassFunctionsTest extends SkylarkTestCase { buildAttribute("a1", "b = provider()", "attr.label_list(allow_files = True, providers = ['a', b])"); - assertThat(attr.getMandatoryProvidersList()) - .containsExactly(ImmutableSet.of(legacy("a"), declared("b"))); + assertThat(attr.getRequiredProviders().isSatisfiedBy(set(legacy("a"), declared("b")))) + .isTrue(); + assertThat(attr.getRequiredProviders().isSatisfiedBy(set(legacy("a")))) + .isFalse(); + } @Test + public void testAttrWithProvidersOneEmpty() throws Exception { + Attribute attr = + buildAttribute("a1", + "b = provider()", + "attr.label_list(allow_files = True, providers = [['a', b],[]])"); + assertThat(attr.getRequiredProviders().acceptsAny()).isTrue(); + } + + + @Test public void testAttrWithProvidersList() throws Exception { Attribute attr = buildAttribute("a1", "b = provider()", "attr.label_list(allow_files = True, providers = [['a', b], ['c']])"); - assertThat(attr.getMandatoryProvidersList()).containsExactly( - ImmutableSet.of(legacy("a"), declared("b")), - ImmutableSet.of(legacy("c"))); + assertThat(attr.getRequiredProviders().isSatisfiedBy(set(legacy("a"), declared("b")))) + .isTrue(); + assertThat(attr.getRequiredProviders().isSatisfiedBy(set(legacy("c")))) + .isTrue(); + assertThat(attr.getRequiredProviders().isSatisfiedBy(set(legacy("a")))) + .isFalse(); + + } + + private static AdvertisedProviderSet set(SkylarkProviderIdentifier ...ids) { + AdvertisedProviderSet.Builder builder = AdvertisedProviderSet.builder(); + for (SkylarkProviderIdentifier id : ids) { + builder.addSkylark(id); + } + return builder.build(); } private void checkAttributeError(String expectedMessage, String... lines) throws Exception { @@ -425,11 +450,8 @@ public class SkylarkRuleClassFunctionsTest extends SkylarkTestCase { private static final RuleClass.ConfiguredTargetFactory<Object, Object> DUMMY_CONFIGURED_TARGET_FACTORY = - new RuleClass.ConfiguredTargetFactory<Object, Object>() { - @Override - public Object create(Object ruleContext) throws InterruptedException { - throw new IllegalStateException(); - } + ruleContext -> { + throw new IllegalStateException(); }; private RuleClass ruleClass(String name) { |