Skip to content

Commit 7e56388

Browse files
authored
Merge pull request #434 from thc202/test/use-graaljs
Use GraalJS to verify the JS scripts
2 parents c66725e + 2a364f1 commit 7e56388

File tree

2 files changed

+23
-12
lines changed

2 files changed

+23
-12
lines changed

build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ dependencies {
5656

5757
// The following versions should match the ones of the add-ons.
5858
testImplementation("org.codehaus.groovy:groovy-all:3.0.14")
59+
val graalJsVersion = "22.3.3"
60+
testImplementation("org.graalvm.js:js:$graalJsVersion")
61+
testImplementation("org.graalvm.js:js-scriptengine:$graalJsVersion")
5962
testImplementation("org.jruby:jruby-complete:1.7.4")
6063
testImplementation("org.zaproxy:zest:0.18.0")
6164
testImplementation("org.python:jython-standalone:2.7.2")

src/test/java/org/zaproxy/VerifyScripts.java

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import static org.assertj.core.api.Assertions.assertThat;
2323

24+
import com.oracle.truffle.js.scriptengine.GraalJSScriptEngine;
2425
import java.io.File;
2526
import java.io.IOException;
2627
import java.io.Reader;
@@ -35,23 +36,22 @@
3536
import java.util.ArrayList;
3637
import java.util.Arrays;
3738
import java.util.Collections;
38-
import java.util.EnumSet;
3939
import java.util.List;
4040
import java.util.Locale;
4141
import java.util.Optional;
4242
import java.util.function.Consumer;
4343
import java.util.stream.Stream;
4444
import javax.script.Compilable;
45-
import javax.script.ScriptEngineManager;
4645
import javax.script.ScriptException;
4746
import org.apache.commons.io.IOUtils;
4847
import org.apache.commons.lang3.SystemUtils;
4948
import org.apache.commons.lang3.mutable.MutableInt;
5049
import org.codehaus.groovy.jsr223.GroovyScriptEngineFactory;
50+
import org.graalvm.polyglot.Context;
51+
import org.graalvm.polyglot.Engine;
5152
import org.jruby.embed.jsr223.JRubyEngineFactory;
5253
import org.junit.jupiter.api.AfterAll;
5354
import org.junit.jupiter.api.BeforeAll;
54-
import org.junit.jupiter.api.condition.JRE;
5555
import org.junit.jupiter.params.ParameterizedTest;
5656
import org.junit.jupiter.params.provider.Arguments;
5757
import org.junit.jupiter.params.provider.MethodSource;
@@ -102,15 +102,23 @@ private static Stream<Arguments> scriptsGroovy() {
102102
}
103103

104104
private static Stream<Arguments> scriptsJavaScript() {
105-
if (!EnumSet.range(JRE.JAVA_8, JRE.JAVA_14).contains(JRE.currentVersion())) {
106-
// Nashorn is not bundled in Java 15+
107-
getFilesWithExtension(".js");
108-
return Stream.empty();
109-
}
110-
111-
Compilable engine = (Compilable) new ScriptEngineManager().getEngineByName("ECMAScript");
112-
assertThat(engine).as("ECMAScript script engine exists.").isNotNull();
113-
return testData(".js", engine);
105+
Engine engine =
106+
Engine.newBuilder()
107+
.allowExperimentalOptions(true)
108+
.option("engine.WarnInterpreterOnly", "false")
109+
.build();
110+
111+
Context.Builder contextBuilder =
112+
Context.newBuilder("js")
113+
.allowExperimentalOptions(true)
114+
.option("js.syntax-extensions", "true")
115+
.option("js.load", "true")
116+
.option("js.print", "true")
117+
.option("js.nashorn-compat", "true")
118+
.allowAllAccess(true)
119+
.hostClassLoader(VerifyScripts.class.getClassLoader());
120+
121+
return testData(".js", GraalJSScriptEngine.create(engine, contextBuilder));
114122
}
115123

116124
private static Stream<Arguments> scriptsPython() {

0 commit comments

Comments
 (0)