aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2018-04-16 12:58:03 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-16 13:01:41 -0700
commitfcea9dec559bca165c08a36d4c8c8a20c1840755 (patch)
tree41375a79789279315ff08ccc8524f55768f2c887 /src/test
parent65e1fa81add2c40a5434d26c7a46a1ef9b249981 (diff)
Create @SkylarkGlobalLibrary annotation, allowing classes/interfaces with global skylark functions to use @SkylarkCallable instead of @SkylarkSignature.
Also migrate skylark's global "rule" function to @SkylarkCallable, thus demonstrating the new feature. RELNOTES: None. PiperOrigin-RevId: 193085313
Diffstat (limited to 'src/test')
-rw-r--r--src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationTest.java43
-rw-r--r--src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java2
2 files changed, 44 insertions, 1 deletions
diff --git a/src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationTest.java b/src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationTest.java
index 234526b57c..11afbed948 100644
--- a/src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationTest.java
+++ b/src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationTest.java
@@ -28,6 +28,7 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.skylark.util.SkylarkTestCase;
import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkGlobalLibrary;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.syntax.Environment;
import com.google.devtools.build.lib.syntax.SkylarkDict;
@@ -224,6 +225,26 @@ public class SkylarkDocumentationTest extends SkylarkTestCase {
}
}
+ /** MockGlobalLibrary */
+ @SkylarkGlobalLibrary
+ private static class MockGlobalLibrary {
+ @SkylarkCallable(
+ name = "MockGlobalCallable",
+ doc = "GlobalCallable documentation",
+ parameters = {
+ @Param(name = "a", named = false, positional = true),
+ @Param(name = "b", named = true, positional = true),
+ @Param(name = "c", named = true, positional = false),
+ @Param(name = "d", named = true, positional = false, defaultValue = "1"),
+ },
+ extraPositionals = @Param(name = "myArgs"),
+ extraKeywords = @Param(name = "myKwargs")
+ )
+ public Integer test(int a, int b, int c, int d, SkylarkList<?> args, SkylarkDict<?, ?> kwargs) {
+ return 0;
+ }
+ }
+
/** MockClassWithContainerReturnValues */
@SkylarkModule(name = "MockClassWithContainerReturnValues",
doc = "MockClassWithContainerReturnValues")
@@ -348,6 +369,28 @@ public class SkylarkDocumentationTest extends SkylarkTestCase {
}
@Test
+ public void testSkylarkGlobalLibraryCallable() throws Exception {
+ Map<String, SkylarkModuleDoc> modules = SkylarkDocumentationCollector.collectModules();
+ SkylarkModuleDoc topLevel =
+ modules.remove(SkylarkDocumentationCollector.getTopLevelModule().name());
+
+ boolean foundGlobalLibrary = false;
+ for (SkylarkMethodDoc methodDoc : topLevel.getMethods()) {
+ if (methodDoc.getName().equals("MockGlobalCallable")) {
+ assertThat(methodDoc.getDocumentation()).isEqualTo("GlobalCallable documentation");
+ assertThat(methodDoc.getSignature())
+ .isEqualTo(
+ "<a class=\"anchor\" href=\"int.html\">int</a> "
+ + "MockGlobalCallable(a, b, *, c, d=1, *myArgs, **myKwargs)");
+ foundGlobalLibrary = true;
+ break;
+ }
+ }
+ assertThat(foundGlobalLibrary).isTrue();
+ }
+
+
+ @Test
public void testSkylarkCallableOverriding() throws Exception {
Map<String, SkylarkModuleDoc> objects = collect(MockClassE.class);
assertThat(objects).hasSize(1);
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 307139fe78..272bfac48c 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
@@ -737,7 +737,7 @@ public class SkylarkRuleClassFunctionsTest extends SkylarkTestCase {
public void testRuleBadTypeForDoc() throws Exception {
registerDummyUserDefinedFunction();
checkErrorContains(
- "argument 'doc' has type 'int', but should be 'string'",
+ "expected string for 'doc' while calling rule but got int instead",
"rule(impl, doc = 1)");
}