mirror of
https://github.com/enso-org/enso.git
synced 2025-01-04 00:16:52 +03:00
PanicSentinel tests for CatchPanicNode
This commit is contained in:
parent
3fb27c98a2
commit
a85c561d2a
@ -12,6 +12,7 @@ import org.enso.interpreter.runtime.callable.function.Function;
|
|||||||
import org.enso.interpreter.runtime.callable.function.FunctionSchema;
|
import org.enso.interpreter.runtime.callable.function.FunctionSchema;
|
||||||
import org.enso.interpreter.runtime.data.text.Text;
|
import org.enso.interpreter.runtime.data.text.Text;
|
||||||
import org.enso.interpreter.runtime.error.PanicException;
|
import org.enso.interpreter.runtime.error.PanicException;
|
||||||
|
import org.enso.interpreter.runtime.error.PanicSentinel;
|
||||||
import org.enso.interpreter.runtime.library.dispatch.TypeOfNode;
|
import org.enso.interpreter.runtime.library.dispatch.TypeOfNode;
|
||||||
import org.enso.test.utils.ContextUtils;
|
import org.enso.test.utils.ContextUtils;
|
||||||
import org.enso.test.utils.TestRootNode;
|
import org.enso.test.utils.TestRootNode;
|
||||||
@ -131,6 +132,43 @@ public class CatchPanicNodeTest {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void catchAnyPanicSentinel() throws Exception {
|
||||||
|
ContextUtils.executeInContext(
|
||||||
|
context,
|
||||||
|
() -> {
|
||||||
|
var ctx = EnsoContext.get(catchPanicNode);
|
||||||
|
var any = ctx.getBuiltins().any();
|
||||||
|
var thrown = Text.create("Thrown");
|
||||||
|
var text = Text.create("Catched");
|
||||||
|
var handlerFn =
|
||||||
|
new TestRootNode(
|
||||||
|
(frame) -> {
|
||||||
|
var args =
|
||||||
|
Function.ArgumentsHelper.getPositionalArguments(frame.getArguments());
|
||||||
|
assertEquals("One argument expected", 1, args.length);
|
||||||
|
var argType = TypeOfNode.getUncached().execute(args[0]);
|
||||||
|
if (argType == ctx.getBuiltins().caughtPanic().getType()) {
|
||||||
|
assertThat(args[0].toString(), Matchers.containsString("Thrown"));
|
||||||
|
return text;
|
||||||
|
} else {
|
||||||
|
fail("Expecting Catched_Panic: " + args[0] + " type: " + argType);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
var fn =
|
||||||
|
new TestRootNode(
|
||||||
|
(frame) -> {
|
||||||
|
return new PanicSentinel(new PanicException(thrown, null), null);
|
||||||
|
});
|
||||||
|
var thunk = Function.thunk(fn.getCallTarget(), null);
|
||||||
|
var handler = new Function(handlerFn.getCallTarget(), null, schema("err"));
|
||||||
|
var result = catchPanicNode.execute(null, null, any, thunk, handler);
|
||||||
|
assertEquals("Thunk gets evaluated", "Catched", result.toString());
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void catchSpecificPanic() throws Exception {
|
public void catchSpecificPanic() throws Exception {
|
||||||
ContextUtils.executeInContext(
|
ContextUtils.executeInContext(
|
||||||
@ -168,6 +206,43 @@ public class CatchPanicNodeTest {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void catchSpecificPanicSentinel() throws Exception {
|
||||||
|
ContextUtils.executeInContext(
|
||||||
|
context,
|
||||||
|
() -> {
|
||||||
|
var ctx = EnsoContext.get(catchPanicNode);
|
||||||
|
var textType = ctx.getBuiltins().text();
|
||||||
|
var thrown = Text.create("Thrown");
|
||||||
|
var text = Text.create("Catched");
|
||||||
|
var handlerFn =
|
||||||
|
new TestRootNode(
|
||||||
|
(frame) -> {
|
||||||
|
var args =
|
||||||
|
Function.ArgumentsHelper.getPositionalArguments(frame.getArguments());
|
||||||
|
assertEquals("One argument expected", 1, args.length);
|
||||||
|
var argType = TypeOfNode.getUncached().execute(args[0]);
|
||||||
|
if (argType == ctx.getBuiltins().caughtPanic().getType()) {
|
||||||
|
assertThat(args[0].toString(), Matchers.containsString("Thrown"));
|
||||||
|
return text;
|
||||||
|
} else {
|
||||||
|
fail("Expecting Catched_Panic: " + args[0] + " type: " + argType);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
var fn =
|
||||||
|
new TestRootNode(
|
||||||
|
(frame) -> {
|
||||||
|
return new PanicSentinel(new PanicException(thrown, null), null);
|
||||||
|
});
|
||||||
|
var thunk = Function.thunk(fn.getCallTarget(), null);
|
||||||
|
var handler = new Function(handlerFn.getCallTarget(), null, schema("err"));
|
||||||
|
var result = catchPanicNode.execute(null, null, textType, thunk, handler);
|
||||||
|
assertEquals("Thunk gets evaluated", "Catched", result.toString());
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void dontCatchSpecificPanic() throws Exception {
|
public void dontCatchSpecificPanic() throws Exception {
|
||||||
ContextUtils.executeInContext(
|
ContextUtils.executeInContext(
|
||||||
@ -210,6 +285,48 @@ public class CatchPanicNodeTest {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void dontCatchSpecificPanicSentinel() throws Exception {
|
||||||
|
ContextUtils.executeInContext(
|
||||||
|
context,
|
||||||
|
() -> {
|
||||||
|
var ctx = EnsoContext.get(catchPanicNode);
|
||||||
|
var numberType = ctx.getBuiltins().number().getNumber();
|
||||||
|
var thrown = Text.create("Thrown");
|
||||||
|
var text = Text.create("Catched");
|
||||||
|
var handlerFn =
|
||||||
|
new TestRootNode(
|
||||||
|
(frame) -> {
|
||||||
|
var args =
|
||||||
|
Function.ArgumentsHelper.getPositionalArguments(frame.getArguments());
|
||||||
|
assertEquals("One argument expected", 1, args.length);
|
||||||
|
var argType = TypeOfNode.getUncached().execute(args[0]);
|
||||||
|
if (argType == ctx.getBuiltins().caughtPanic().getType()) {
|
||||||
|
assertThat(args[0].toString(), Matchers.containsString("Thrown"));
|
||||||
|
return text;
|
||||||
|
} else {
|
||||||
|
fail("Expecting Catched_Panic: " + args[0] + " type: " + argType);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
var fn =
|
||||||
|
new TestRootNode(
|
||||||
|
(frame) -> {
|
||||||
|
return new PanicSentinel(new PanicException(thrown, null), null);
|
||||||
|
});
|
||||||
|
var thunk = Function.thunk(fn.getCallTarget(), null);
|
||||||
|
var handler = new Function(handlerFn.getCallTarget(), null, schema("err"));
|
||||||
|
try {
|
||||||
|
var result = catchPanicNode.execute(null, null, numberType, thunk, handler);
|
||||||
|
fail("Not expecting any result back: " + result);
|
||||||
|
} catch (PanicException ex) {
|
||||||
|
// OK
|
||||||
|
assertEquals("Thrown", ex.getMessage());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private static FunctionSchema schema(String argName) {
|
private static FunctionSchema schema(String argName) {
|
||||||
var def =
|
var def =
|
||||||
new ArgumentDefinition(0, argName, null, null, ArgumentDefinition.ExecutionMode.EXECUTE);
|
new ArgumentDefinition(0, argName, null, null, ArgumentDefinition.ExecutionMode.EXECUTE);
|
||||||
|
Loading…
Reference in New Issue
Block a user