148 lines
5.1 KiB
Java
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();
|
|
}
|
|
}
|