From c32e1b1efcd703b3780de47fba62974123593d71 Mon Sep 17 00:00:00 2001 From: dslomov Date: Mon, 31 Jul 2017 19:23:52 +0200 Subject: Use RequiredProviders to validate rule prerequisites in RuleContext. We now use a unified way to check provider requirements everywhere. RELNOTES: None. PiperOrigin-RevId: 163710961 --- .../build/lib/packages/RequiredProvidersTest.java | 54 ++++++++++++++++++---- 1 file changed, 46 insertions(+), 8 deletions(-) (limited to 'src/test/java/com/google/devtools/build/lib/packages') 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.>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.>of(P1.class), ImmutableSet.>of(P2.class) )).isTrue(); @@ -131,6 +138,7 @@ public class RequiredProvidersTest { AdvertisedProviderSet.builder() .addNative(P3.class) .build(), + "P1 or P2", ImmutableSet.>of(P1.class), ImmutableSet.>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>... 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... 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; } } -- cgit v1.2.3