[Improvement-16534][Master] Switch task support includes method (#16594)

This commit is contained in:
Terry Tao 2024-09-27 09:10:26 +08:00 committed by GitHub
parent 2ff487cb7b
commit b97f6fcb26
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 41 additions and 0 deletions

View File

@ -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 {

View File

@ -71,4 +71,16 @@ public class SwitchTaskUtilsTest {
});
}
@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);
}
}