Skip to content

Commit

Permalink
[Improvement-16534][Master] Switch task support includes method (#16594)
Browse files Browse the repository at this point in the history
  • Loading branch information
ChaoquanTao authored Sep 27, 2024
1 parent 2ff487c commit b97f6fc
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,38 @@ public class SwitchTaskUtils {

private static final NashornSandbox sandbox;
private static final String rgex = "['\"]*\\$\\{(.*?)\\}['\"]*";
public static final String NASHORN_POLYFILL_ARRAY_PROTOTYPE_INCLUDES =
"if (!Array.prototype.includes) {" +
" Object.defineProperty(Array.prototype, 'includes', {" +
" value: function(valueToFind, fromIndex) {" +
" if (this == null) {" +
" throw new TypeError('\"this\" is null or not defined');" +
" }" +
" var o = Object(this);" +
" var len = o.length >>> 0;" +
" if (len === 0) { return false; }" +
" var n = fromIndex | 0;" +
" var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);" +
" function sameValueZero(x, y) {" +
" return x === y || (typeof x === 'number' && " +
" typeof y === 'number' && isNaN(x) && isNaN(y));" +
" }" +
" while (k < len) {" +
" if (sameValueZero(o[k], valueToFind)) { return true; }" +
" k++;" +
" }" +
" return false;" +
" }" +
" });" +
"}";

static {
sandbox = NashornSandboxes.create();
try {
sandbox.eval(NASHORN_POLYFILL_ARRAY_PROTOTYPE_INCLUDES);
} catch (ScriptException e) {
log.error("failed to load Nashorn polyfill", e);
}
}

public static boolean evaluate(String expression) throws ScriptException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,16 @@ public void testIllegalCondition() {
});

}

@Test
public void testIncludes() throws ScriptException {
String content = "['abc','def'].includes('abc')";
boolean result = SwitchTaskUtils.evaluate(content);
Assertions.assertTrue(result);

SwitchTaskUtils.evaluate(SwitchTaskUtils.NASHORN_POLYFILL_ARRAY_PROTOTYPE_INCLUDES);
result = SwitchTaskUtils.evaluate(content);
Assertions.assertTrue(result);
}

}

0 comments on commit b97f6fc

Please sign in to comment.