Files
JIMRI/java/test/jmri/script/ScriptEngineSelectorTest.java
2026-06-17 14:00:51 +02:00

148 lines
5.1 KiB
Java

package jmri.script;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
import javax.script.*;
import jmri.*;
import jmri.jmrit.logixng.SocketAlreadyConnectedException;
import jmri.util.JUnitUtil;
import org.junit.jupiter.api.*;
/**
* Test ScriptEngineSelector
* @author Daniel Bergqvist (C) 2022
*/
public class ScriptEngineSelectorTest {
private static final String JYTHON_SCRIPT = String.format(
"import jmri%n" +
"turnouts.provide(\"IT1\").setState(jmri.Turnout.THROWN)");
private static final String ECMA_SCRIPT = String.format(
"var Turnout = Java.type(\"jmri.Turnout\");%n" +
"turnouts.provide(\"IT1\").setState(Turnout.THROWN);");
private ScriptEngineSelector _scriptEngineSelector;
private Turnout _turnout;
private void runJythonScriptOldStyle() throws ScriptException {
Bindings bindings = new SimpleBindings();
JmriScriptEngineManager scriptEngineManager =
jmri.script.JmriScriptEngineManager.getDefault();
scriptEngineManager.getEngineByName(JmriScriptEngineManager.JYTHON)
.eval(JYTHON_SCRIPT, bindings);
}
private void runEcmaScriptOldStyle() throws ScriptException {
Bindings bindings = new SimpleBindings();
JmriScriptEngineManager scriptEngineManager =
jmri.script.JmriScriptEngineManager.getDefault();
scriptEngineManager.getEngineByName("ecmascript")
.eval(ECMA_SCRIPT, bindings);
}
private void runJythonScriptNewStyle() throws ScriptException {
Bindings bindings = new SimpleBindings();
ScriptEngineSelector.Engine engine =
_scriptEngineSelector.getSelectedEngine();
Assertions.assertNotNull(engine);
engine.getScriptEngine().eval(JYTHON_SCRIPT, bindings);
}
private void runEcmaScriptNewStyle() throws ScriptException {
Bindings bindings = new SimpleBindings();
_scriptEngineSelector.setSelectedEngine(ScriptEngineSelector.ECMA_SCRIPT);
ScriptEngineSelector.Engine engine =
_scriptEngineSelector.getSelectedEngine();
Assertions.assertNotNull(engine);
engine.getScriptEngine().eval(ECMA_SCRIPT, bindings);
}
@Test
public void testJythonOldStyle1() throws JmriException, ScriptException {
runJythonScriptOldStyle();
assertEquals(Turnout.THROWN, _turnout.getState());
}
@Test
public void testJythonOldStyle2() throws JmriException, ScriptException {
_turnout.setState(Turnout.CLOSED);
runJythonScriptOldStyle();
assertEquals(Turnout.THROWN, _turnout.getState());
}
@Test
public void testEcmaOldStyle1() throws JmriException, ScriptException {
assumeTrue(hasEcmaScript());
_turnout.setState(Turnout.CLOSED);
runEcmaScriptOldStyle();
assertEquals(Turnout.THROWN, _turnout.getState());
}
@Test
public void testEcmaOldStyle2() throws JmriException, ScriptException {
assumeTrue(hasEcmaScript());
_turnout.setState(Turnout.CLOSED);
runEcmaScriptOldStyle();
assertEquals(Turnout.THROWN, _turnout.getState());
}
@Test
public void testJythonNewStyle1() throws JmriException, ScriptException {
_turnout.setState(Turnout.CLOSED);
runJythonScriptNewStyle();
assertEquals(Turnout.THROWN, _turnout.getState());
}
@Test
public void testJythonNewStyle2() throws JmriException, ScriptException {
_turnout.setState(Turnout.CLOSED);
runJythonScriptNewStyle();
assertEquals(Turnout.THROWN, _turnout.getState());
}
@Test
public void testEcmaNewStyle1() throws JmriException, ScriptException {
assumeTrue(hasEcmaScript());
_turnout.setState(Turnout.CLOSED);
runEcmaScriptNewStyle();
assertEquals(Turnout.THROWN, _turnout.getState());
}
@Test
public void testEcmaNewStyle2() throws JmriException, ScriptException {
assumeTrue(hasEcmaScript());
_turnout.setState(Turnout.CLOSED);
runEcmaScriptNewStyle();
assertEquals(Turnout.THROWN, _turnout.getState());
}
// Java 17 doesn't have ECMA_SCRIPT
private boolean hasEcmaScript() {
ScriptEngineSelector.Engine engine = _scriptEngineSelector.getSelectedEngine();
return engine != null && engine.getLanguageName().equals(ScriptEngineSelector.ECMA_SCRIPT);
}
// The minimal setup for log4J
@BeforeEach
public void setUp() throws SocketAlreadyConnectedException {
JUnitUtil.setUp();
JUnitUtil.resetInstanceManager();
JUnitUtil.resetProfileManager();
JUnitUtil.initConfigureManager();
JUnitUtil.initInternalTurnoutManager();
_turnout = InstanceManager.getDefault(TurnoutManager.class).provide("IT1");
_scriptEngineSelector = new ScriptEngineSelector();
}
@AfterEach
public void tearDown() {
_turnout = null;
JUnitUtil.deregisterBlockManagerShutdownTask();
JUnitUtil.tearDown();
}
}