You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Dmitri Blinov (JIRA)" <ji...@apache.org> on 2016/07/10 15:41:10 UTC

[jira] [Created] (JEXL-204) Script is not interrupted by a method call throwing Exception

Dmitri Blinov created JEXL-204:
----------------------------------

             Summary: 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


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)