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)