aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar Benjamin Peterson <bp@benjamin.pe>2018-08-08 10:03:22 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-08-08 10:05:09 -0700
commitbf1db78d75ac6d2fe40742c36f79341859274f50 (patch)
treeac872853ae2d07928914d63adad59fadc9406a1e /src/test/java/com/google/devtools/build
parent25f112e0eba147f14ac51736c41ced3d6b284b57 (diff)
Don't convert InterruptException to EvalException in struct field call expressions.
This is probably only a theoretical problem, since a blocking struct field is probably a very bad idea. Closes #5132. Change-Id: Ie84a78ab4d9ce215f2806ac49bf8911de6959930 PiperOrigin-RevId: 207902766
Diffstat (limited to 'src/test/java/com/google/devtools/build')
-rw-r--r--src/test/java/com/google/devtools/build/lib/syntax/SkylarkEvaluationTest.java33
1 files changed, 33 insertions, 0 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 ecbe65cec5..6991363171 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
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.syntax;
import static com.google.common.truth.Truth.assertThat;
+import static com.google.devtools.build.lib.testutil.MoreAsserts.assertThrows;
import static java.util.stream.Collectors.joining;
import com.google.common.collect.ImmutableCollection;
@@ -73,6 +74,17 @@ public class SkylarkEvaluationTest extends EvaluationTest {
}
};
+ @SkylarkSignature(
+ name = "interrupted_function",
+ returnType = Runtime.NoneType.class,
+ documented = false)
+ static BuiltinFunction interruptedFunction =
+ new BuiltinFunction("interrupted_function") {
+ public Runtime.NoneType invoke() throws InterruptedException {
+ throw new InterruptedException();
+ }
+ };
+
@SkylarkModule(name = "Mock", doc = "")
static class NativeInfoMock extends NativeInfo {
@@ -154,6 +166,12 @@ public class SkylarkEvaluationTest extends EvaluationTest {
public BuiltinFunction structFieldCallable() {
return foobar;
}
+
+ @SkylarkCallable(name = "interrupted_struct_field", documented = false, structField = true)
+ public BuiltinFunction structFieldInterruptedCallable() throws InterruptedException {
+ throw new InterruptedException();
+ }
+
@SkylarkCallable(name = "function", documented = false, structField = false)
public String function() {
return "a";
@@ -1261,6 +1279,20 @@ public class SkylarkEvaluationTest extends EvaluationTest {
}
@Test
+ public void testCallingInterruptedStructField() throws Exception {
+ update("mock", new Mock());
+ assertThrows(InterruptedException.class, () -> eval("mock.interrupted_struct_field()"));
+ }
+
+ @Test
+ public void testCallingInterruptedFunction() throws Exception {
+ interruptedFunction.configure(
+ getClass().getDeclaredField("interruptedFunction").getAnnotation(SkylarkSignature.class));
+ update("interrupted_function", interruptedFunction);
+ assertThrows(InterruptedException.class, () -> eval("interrupted_function()"));
+ }
+
+ @Test
public void testJavaFunctionWithExtraInterpreterParams() throws Exception {
new SkylarkTest()
.update("mock", new Mock())
@@ -1868,6 +1900,7 @@ public class SkylarkEvaluationTest extends EvaluationTest {
.testExactOrder(
"dir(mock)",
"function",
+ "interrupted_struct_field",
"is_empty",
"legacy_method",
"nullfunc_failing",