aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build
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
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')
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/RequiredProvidersTest.java54
-rw-r--r--src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java42
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) {