You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Henri Biestro (JIRA)" <ji...@apache.org> on 2016/07/14 15:07:20 UTC
[jira] [Resolved] (JEXL-204) Script is not interrupted by a method
call throwing Exception
[ https://issues.apache.org/jira/browse/JEXL-204?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Henri Biestro resolved JEXL-204.
--------------------------------
Resolution: Invalid
A cancellable script will stop execution when an InterruptedException is raised (or its execution thread is interrupted).
> Script is not interrupted by a method call throwing Exception
> -------------------------------------------------------------
>
> Key: JEXL-204
> URL: https://issues.apache.org/jira/browse/JEXL-204
> Project: Commons JEXL
> Issue Type: Bug
> Affects Versions: 3.0
> Reporter: Dmitri Blinov
> Assignee: Henri Biestro
> Fix For: 3.0.1
>
>
> The following test case fails with the message
> {quote}
> java.lang.AssertionError: should have thrown a Cancel
> at org.junit.Assert.fail(Assert.java:88)
> at org.apache.commons.jexl3.ScriptInterruptableTest.testExceptionCancellable(ScriptInterruptableTest.java:73)
> {quote}
> {code}
> @SuppressWarnings({"UnnecessaryBoxing", "AssertEqualsBetweenInconvertibleTypes"})
> public class ScriptInterruptableTest extends JexlTestCase {
> //Logger LOGGER = Logger.getLogger(VarTest.class.getName());
> public ScriptInterruptableTest() {
> super("ScriptInterruptableTest");
> }
> public static class DummyInterrupt {
> public int except() throws Exception {
> throw new Exception("Cancelled by purpose");
> }
> }
> public static class TestContext extends MapContext implements JexlContext.NamespaceResolver {
> @Override
> public Object resolveNamespace(String name) {
> return name == null ? this : null;
> }
> }
> @Test
> public void testExceptionCancellable() throws Exception {
> JexlEngine jexl = new JexlBuilder().silent(true).strict(false).cancellable(true).create();
> JexlContext ctxt = new TestContext();
> ctxt.set("x", new DummyInterrupt());
> // run an interrupt
> JexlScript sint = jexl.createScript("x.except(); return 42");
> Object t = null;
> Script.Callable c = (Script.Callable) sint.callable(ctxt);
> try {
> t = c.call();
> if (c.isCancellable()) {
> Assert.fail("should have thrown a Cancel");
> }
> } catch (JexlException.Cancel xjexl) {
> if (!c.isCancellable()) {
> Assert.fail("should not have thrown " + xjexl);
> }
> }
> Assert.assertTrue(c.isCancelled());
> Assert.assertNotEquals(42, t);
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)