diff options
author | cparsons <cparsons@google.com> | 2018-04-16 12:58:03 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-04-16 13:01:41 -0700 |
commit | fcea9dec559bca165c08a36d4c8c8a20c1840755 (patch) | |
tree | 41375a79789279315ff08ccc8524f55768f2c887 /src/test/java/com/google/devtools | |
parent | 65e1fa81add2c40a5434d26c7a46a1ef9b249981 (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/java/com/google/devtools')
-rw-r--r-- | src/test/java/com/google/devtools/build/docgen/SkylarkDocumentationTest.java | 43 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java | 2 |
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)"); } |