aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
diff options
context:
space:
mode:
authorGravatar dslomov <dslomov@google.com>2017-09-20 14:35:11 +0200
committerGravatar László Csomor <laszlocsomor@google.com>2017-09-20 16:37:06 +0200
commit17214ac78ffaec369d5d5bafe62a39730473cfaa (patch)
tree783cb524169b1ef2dfe2634be6bb5e52b00e2eae /src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
parent30adfbf30b509bdcf5befaf2abd77addb89c8e69 (diff)
Check parameter types for methods when multiple types are allowed.
Fixes #3714 RELNOTES: None. PiperOrigin-RevId: 169382686
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java')
-rw-r--r--src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java52
1 files changed, 51 insertions, 1 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
index 1febef33f9..175aedad67 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java
@@ -28,6 +28,7 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.packages.NativeProvider;
import com.google.devtools.build.lib.skylarkinterface.Param;
+import com.google.devtools.build.lib.skylarkinterface.ParamType;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkSignature;
@@ -155,6 +156,18 @@ public class SkylarkEvaluationTest extends EvaluationTest {
positional = false,
named = true
),
+ @Param(
+ name = "multi",
+ allowedTypes = {
+ @ParamType(type = String.class),
+ @ParamType(type = Integer.class),
+ @ParamType(type = SkylarkList.class, generic1 = Integer.class),
+ },
+ defaultValue = "None",
+ noneable = true,
+ positional = false,
+ named = true
+ )
}
)
public String withParams(
@@ -164,7 +177,8 @@ public class SkylarkEvaluationTest extends EvaluationTest {
boolean named,
boolean optionalNamed,
Object nonNoneable,
- Object noneable) {
+ Object noneable,
+ Object multi) {
return "with_params("
+ pos1
+ ", "
@@ -177,6 +191,8 @@ public class SkylarkEvaluationTest extends EvaluationTest {
+ optionalNamed
+ ", "
+ nonNoneable.toString()
+ + (noneable != Runtime.NONE ? ", " + noneable : "")
+ + (multi != Runtime.NONE ? ", " + multi : "")
+ ")";
}
@@ -744,6 +760,21 @@ public class SkylarkEvaluationTest extends EvaluationTest {
.testLookup("b", "with_params(1, true, false, true, false, a)");
new SkylarkTest()
.update("mock", new Mock())
+ .setUp("b = mock.with_params(1, True, named=True, multi=1)")
+ .testLookup("b", "with_params(1, true, false, true, false, a, 1)");
+ new SkylarkTest()
+ .update("mock", new Mock())
+ .setUp("b = mock.with_params(1, True, named=True, multi='abc')")
+ .testLookup("b", "with_params(1, true, false, true, false, a, abc)");
+
+ new SkylarkTest()
+ .update("mock", new Mock())
+ .setUp("b = mock.with_params(1, True, named=True, multi=[1,2,3])")
+ .testLookup("b", "with_params(1, true, false, true, false, a, [1, 2, 3])");
+
+
+ new SkylarkTest()
+ .update("mock", new Mock())
.setUp("")
.testIfExactError(
"parameter 'named' has no default value, in method with_params(int, bool) of 'Mock'",
@@ -781,6 +812,25 @@ public class SkylarkEvaluationTest extends EvaluationTest {
"parameter 'nonNoneable' cannot be None, in method with_params(int, bool, bool, "
+ "bool named, bool optionalNamed, NoneType nonNoneable) of 'Mock'",
"mock.with_params(1, True, True, named=True, optionalNamed=False, nonNoneable=None)");
+
+ new SkylarkTest()
+ .update("mock", new Mock())
+ .setUp("")
+ .testIfExactError(
+ "Cannot convert parameter 'multi' to type string or int or sequence of ints or"
+ + " NoneType, in method with_params(int, bool, bool named, bool multi) of 'Mock'",
+ "mock.with_params(1, True, named=True, multi=False)"
+ );
+
+ // We do not enforce list item parameter type constraints.
+ // Test for this behavior.
+ new SkylarkTest()
+ .update("mock", new Mock())
+ .setUp("b = mock.with_params(1, True, named=True, multi=['a', 'b'])")
+ .testLookup(
+ "b", "with_params(1, true, false, true, false, a, [\"a\", \"b\"])"
+ );
+
}
@Test