Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
3.1
-
None
Description
I have noticed that when i call lambda.curry() method inside the script, then the curried lamba is created with wrong source text. I expect the source text of the curried lambda to be always equal to that of original, but that is not the case now. To illustrate this I have prepared two testcases, from which testCurryScript2 fails with
[ERROR] Failures:
[ERROR] LambdaTest.testCurryScript2:307 expected:<true> but was:<false>
@Test public void testCurryScript() throws Exception { JexlEngine jexl = new Engine(); JexlScript base = jexl.createScript("(x, y, z)->{ x + y + z }"); String text = base.toString(); JexlScript script = base.curry(5, 15); Assert.assertEquals(text, script.toString()); JexlEvalContext ctxt = new JexlEvalContext(); ctxt.set("s", base); script = jexl.createScript("return s"); Object result = script.execute(ctxt); Assert.assertEquals(text, result.toString()); script = jexl.createScript("return s.curry(1)"); result = script.execute(ctxt); Assert.assertEquals(text, result.toString()); } @Test public void testCurryScript2() throws Exception { JexlEngine jexl = new Engine(); JexlScript base = jexl.createScript("var base = 0; var sum = (y, z) -> {var x = base; x += y; return x}; base = 2; var y = sum.curry(1); y.toString() eq sum.toString()"); Object result = base.execute(null); Assert.assertEquals(Boolean.TRUE, result); }