diff --git a/pom.xml b/pom.xml index 81d853db31..82536389b4 100644 --- a/pom.xml +++ b/pom.xml @@ -126,6 +126,11 @@ junit-jupiter-engine ${junit.version} + + org.junit.jupiter + junit-jupiter-params + ${junit.version} + diff --git a/src/main/java/scripting/AbstractScriptManager.java b/src/main/java/scripting/AbstractScriptManager.java index 017e30cecc..f32487e438 100644 --- a/src/main/java/scripting/AbstractScriptManager.java +++ b/src/main/java/scripting/AbstractScriptManager.java @@ -23,13 +23,13 @@ package scripting; import client.Client; import com.oracle.truffle.js.scriptengine.GraalJSScriptEngine; -import constants.string.CharsetConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.script.*; import java.io.BufferedReader; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; @@ -57,7 +57,7 @@ public abstract class AbstractScriptManager { enableScriptHostAccess(graalScriptEngine); - try (BufferedReader br = Files.newBufferedReader(scriptFile, CharsetConstants.CHARSET)) { + try (BufferedReader br = Files.newBufferedReader(scriptFile, StandardCharsets.UTF_8)) { engine.eval(br); } catch (final ScriptException | IOException t) { log.warn("Exception during script eval for file: {}", path, t); diff --git a/src/test/java/scripting/ScriptEvaluationTest.java b/src/test/java/scripting/ScriptEvaluationTest.java new file mode 100644 index 0000000000..200974596d --- /dev/null +++ b/src/test/java/scripting/ScriptEvaluationTest.java @@ -0,0 +1,45 @@ +package scripting; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +import javax.script.ScriptEngine; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +public class ScriptEvaluationTest { + private AbstractScriptManager scriptManager = new AbstractScriptManager() {}; + + @BeforeAll + static void muteGraal() { + System.setProperty("polyglot.engine.WarnInterpreterOnly", "false"); + } + + public static List npcScriptFiles() throws IOException { + Path npcScriptDirectory = Path.of("scripts", "npc"); + try (Stream pathStream = Files.walk(npcScriptDirectory)) { + return pathStream + .filter(Files::isRegularFile) + .map(ScriptEvaluationTest::mapToNpcScriptPath) + .toList(); + } + } + + private static String mapToNpcScriptPath(Path path) { + return "npc/%s".formatted(path.getFileName().toString()); + } + + @ParameterizedTest + @MethodSource("npcScriptFiles") + void npcScriptShouldEvaluate(String npcScriptPath) { + ScriptEngine scriptEngine = scriptManager.getInvocableScriptEngine(npcScriptPath); + + assertNotNull(scriptEngine); + } +}