aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar dslomov <dslomov@google.com>2017-08-25 09:29:50 +0200
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2017-08-25 12:54:36 +0200
commit0667b83f40e0b86b15c08513052f1e23ca9c149f (patch)
tree2dbb6ae362f692c862491fce6826c0e74d9a4c58 /src/test/java/com/google/devtools/build
parente2bfb4bb4017b9a50b6e00b84d2fc52856323592 (diff)
Implement field declarations for declared providers.
RELNOTES: Skylark providers can specify allowed fields and their documentation. PiperOrigin-RevId: 166446104
Diffstat (limited to 'src/test/java/com/google/devtools/build')
-rw-r--r--src/test/java/com/google/devtools/build/lib/packages/RequiredProvidersTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java84
2 files changed, 85 insertions, 1 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 489303fef3..0cbea6a439 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
@@ -40,7 +40,7 @@ public class RequiredProvidersTest {
private static final Provider P_NATIVE = new NativeProvider<Info>(Info.class, "p_native") {};
private static final SkylarkProvider P_SKYLARK =
- new SkylarkProvider("p_skylark", Location.BUILTIN);
+ new SkylarkProvider("p_skylark", null, Location.BUILTIN);
static {
try {
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 6a7e201827..855162d3a9 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
@@ -42,6 +42,7 @@ 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;
import com.google.devtools.build.lib.packages.SkylarkAspectClass;
+import com.google.devtools.build.lib.packages.SkylarkInfo;
import com.google.devtools.build.lib.packages.SkylarkProvider;
import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier;
import com.google.devtools.build.lib.skyframe.SkylarkImportLookupFunction;
@@ -1466,6 +1467,89 @@ public class SkylarkRuleClassFunctionsTest extends SkylarkTestCase {
assertThat(p1.getKey()).isEqualTo(new SkylarkProvider.SkylarkKey(FAKE_LABEL, "p"));
}
+ @Test
+ public void providerWithFields() throws Exception {
+ evalAndExport(
+ "p = provider(fields = ['x', 'y'])",
+ "p1 = p(x = 1, y = 2)",
+ "x = p1.x",
+ "y = p1.y"
+ );
+ SkylarkProvider p = (SkylarkProvider) lookup("p");
+ SkylarkInfo p1 = (SkylarkInfo) lookup("p1");
+
+
+ assertThat(p1.getProvider()).isEqualTo(p);
+ assertThat(lookup("x")).isEqualTo(1);
+ assertThat(lookup("y")).isEqualTo(2);
+ }
+
+ @Test
+ public void providerWithFieldsDict() throws Exception {
+ evalAndExport(
+ "p = provider(fields = { 'x' : 'I am x', 'y' : 'I am y'})",
+ "p1 = p(x = 1, y = 2)",
+ "x = p1.x",
+ "y = p1.y"
+ );
+ SkylarkProvider p = (SkylarkProvider) lookup("p");
+ SkylarkInfo p1 = (SkylarkInfo) lookup("p1");
+
+
+ assertThat(p1.getProvider()).isEqualTo(p);
+ assertThat(lookup("x")).isEqualTo(1);
+ assertThat(lookup("y")).isEqualTo(2);
+ }
+
+ @Test
+ public void providerWithFieldsOptional() throws Exception {
+ evalAndExport(
+ "p = provider(fields = ['x', 'y'])",
+ "p1 = p(y = 2)",
+ "y = p1.y"
+ );
+ SkylarkProvider p = (SkylarkProvider) lookup("p");
+ SkylarkInfo p1 = (SkylarkInfo) lookup("p1");
+
+
+ assertThat(p1.getProvider()).isEqualTo(p);
+ assertThat(lookup("y")).isEqualTo(2);
+ }
+
+ @Test
+ public void providerWithFieldsOptionalError() throws Exception {
+ ev.setFailFast(false);
+ evalAndExport(
+ "p = provider(fields = ['x', 'y'])",
+ "p1 = p(y = 2)",
+ "x = p1.x"
+ );
+ MoreAsserts.assertContainsEvent(ev.getEventCollector(),
+ " 'p' object has no attribute 'x'");
+ }
+
+ @Test
+ public void providerWithExtraFieldsError() throws Exception {
+ ev.setFailFast(false);
+ evalAndExport(
+ "p = provider(fields = ['x', 'y'])",
+ "p1 = p(x = 1, y = 2, z = 3)"
+ );
+ MoreAsserts.assertContainsEvent(ev.getEventCollector(),
+ "unexpected keyword 'z' in call to p(*, x = ?, y = ?)");
+ }
+
+ @Test
+ public void providerWithEmptyFieldsError() throws Exception {
+ ev.setFailFast(false);
+ evalAndExport(
+ "p = provider(fields = [])",
+ "p1 = p(x = 1, y = 2, z = 3)"
+ );
+ MoreAsserts.assertContainsEvent(ev.getEventCollector(),
+ "unexpected keywords 'x', 'y', 'z' in call to p()");
+ }
+
@Test
public void starTheOnlyAspectArg() throws Exception {