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)