aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/packages
diff options
context:
space:
mode:
authorGravatar dslomov <dslomov@google.com>2017-07-31 19:23:52 +0200
committerGravatar Dmitry Lomov <dslomov@google.com>2017-07-31 20:20:46 +0200
commitc32e1b1efcd703b3780de47fba62974123593d71 (patch)
tree78f4968a6cce9ff56831f7344f65923e43904768 /src/test/java/com/google/devtools/build/lib/packages
parent52f11c6d3c2052a57db76957909f3c89a26eb251 (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/lib/packages')
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/RequiredProvidersTest.java54
1 files changed, 46 insertions, 8 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;
}
}