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..9d9c1a8f82 --- /dev/null +++ b/src/test/java/scripting/ScriptEvaluationTest.java @@ -0,0 +1,105 @@ +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"); + } + + private static List eventScriptFilePaths() throws IOException { + return getScriptFilePaths("event"); + } + + private static List itemScriptFilePaths() throws IOException { + return getScriptFilePaths("item"); + } + + private static List npcScriptFilePaths() throws IOException { + return getScriptFilePaths("npc"); + } + + private static List portalScriptFilePaths() throws IOException { + return getScriptFilePaths("portal"); + } + + private static List questScriptFilePaths() throws IOException { + return getScriptFilePaths("quest"); + } + + private static List reactorScriptFilePaths() throws IOException { + return getScriptFilePaths("reactor"); + } + + private static List getScriptFilePaths(final String scriptsSubdirectory) throws IOException { + Path scriptDirectory = Path.of("scripts", scriptsSubdirectory); + try (Stream pathStream = Files.walk(scriptDirectory)) { + return pathStream + .filter(Files::isRegularFile) + .map(path -> "%s/%s".formatted(scriptsSubdirectory, path.getFileName().toString())) + .toList(); + } + } + + @ParameterizedTest + @MethodSource("eventScriptFilePaths") + void eventScriptShouldEvaluate(String eventScriptPath) { + ScriptEngine scriptEngine = scriptManager.getInvocableScriptEngine(eventScriptPath); + + assertNotNull(scriptEngine); + } + + @ParameterizedTest + @MethodSource("itemScriptFilePaths") + void itemScriptShouldEvaluate(String itemScriptPath) { + ScriptEngine scriptEngine = scriptManager.getInvocableScriptEngine(itemScriptPath); + + assertNotNull(scriptEngine); + } + + @ParameterizedTest + @MethodSource("npcScriptFilePaths") + void npcScriptShouldEvaluate(String npcScriptPath) { + ScriptEngine scriptEngine = scriptManager.getInvocableScriptEngine(npcScriptPath); + + assertNotNull(scriptEngine); + } + + @ParameterizedTest + @MethodSource("portalScriptFilePaths") + void portalScriptShouldEvaluate(String portalScriptPath) { + ScriptEngine scriptEngine = scriptManager.getInvocableScriptEngine(portalScriptPath); + + assertNotNull(scriptEngine); + } + + @ParameterizedTest + @MethodSource("questScriptFilePaths") + void questScriptShouldEvaluate(String questScriptPath) { + ScriptEngine scriptEngine = scriptManager.getInvocableScriptEngine(questScriptPath); + + assertNotNull(scriptEngine); + } + + @ParameterizedTest + @MethodSource("reactorScriptFilePaths") + void reactorScriptShouldEvaluate(String reactorScriptPath) { + ScriptEngine scriptEngine = scriptManager.getInvocableScriptEngine(reactorScriptPath); + + assertNotNull(scriptEngine); + } +}