255 lines
9.3 KiB
Java
255 lines
9.3 KiB
Java
package jmri.jmrit.logixng.tools;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
|
|
import jmri.*;
|
|
import jmri.jmrit.entryexit.DestinationPoints;
|
|
import jmri.jmrit.logix.WarrantPreferences;
|
|
import jmri.jmrit.logixng.ConditionalNG_Manager;
|
|
import jmri.jmrit.logixng.LogixNG_Manager;
|
|
import jmri.util.*;
|
|
import jmri.util.junit.annotations.DisabledIfHeadless;
|
|
|
|
import org.junit.jupiter.api.*;
|
|
|
|
/**
|
|
* Test import of Logix to LogixNG.
|
|
* <P>
|
|
* This class loads a panel file with some Logix, test that the Logix works,
|
|
* then import the Logixs to LogixNG, then removes all the Logixs, and then
|
|
* test that the LogixNGs works.
|
|
* <P>
|
|
* This test tests expression warrant
|
|
*
|
|
* @author Daniel Bergqvist (C) 2021
|
|
* @author Dave Sand (C) 2021 (Dave Sand created the panel file)
|
|
*/
|
|
@DisabledIfHeadless
|
|
public class ImportTest {
|
|
|
|
|
|
private LogixManager logixManager;
|
|
private LogixNG_Manager logixNG_Manager;
|
|
|
|
// private Logix logix;
|
|
// private Conditional conditional;
|
|
// private ArrayList<ConditionalVariable> variables;
|
|
// private ArrayList<ConditionalAction> actions;
|
|
// ConditionalVariable cv;
|
|
|
|
private void deleteAllLogixs() {
|
|
// Remove all Logixs. Avoid concurrent modification by calling
|
|
// getNamedBeanSet() on each iteration.
|
|
while (! logixManager.getNamedBeanSet().isEmpty()) {
|
|
Logix l = logixManager.getNamedBeanSet().first();
|
|
l.setEnabled(false);
|
|
logixManager.deleteLogix(l);
|
|
}
|
|
}
|
|
|
|
private void runTestEntryExit(DestinationPoints dp, Sensor sensor) throws JmriException {
|
|
assertFalse(dp.isEnabled());
|
|
sensor.setState(Sensor.INACTIVE);
|
|
JUnitUtil.waitFor(() -> (dp.isEnabled()),"destination point enabled");
|
|
assertTrue(dp.isEnabled());
|
|
sensor.setState(Sensor.ACTIVE);
|
|
JUnitUtil.waitFor(() -> (!dp.isEnabled()),"destination point disabled");
|
|
assertFalse(dp.isEnabled());
|
|
}
|
|
|
|
@Test
|
|
@Disabled
|
|
public void testEntryExit() throws JmriException {
|
|
// ENTRYEXIT
|
|
// SET_NXPAIR_ENABLED
|
|
/*
|
|
for (DestinationPoints dp : InstanceManager.getDefault(jmri.jmrit.entryexit.EntryExitPairs.class).getNamedBeanSet()) {
|
|
System.out.format("DestinationPoints: %s, %s%n", dp.getSystemName(), dp.getUserName());
|
|
}
|
|
|
|
for (Sensor r : InstanceManager.getDefault(SensorManager.class).getNamedBeanSet()) {
|
|
System.out.format("Sensor: %s, '%s'%n", r.getSystemName(), r.getUserName());
|
|
}
|
|
|
|
for (Turnout r : InstanceManager.getDefault(TurnoutManager.class).getNamedBeanSet()) {
|
|
System.out.format("Turnout: %s, '%s'%n", r.getSystemName(), r.getUserName());
|
|
}
|
|
*/
|
|
Sensor sensor201 = InstanceManager.getDefault(SensorManager.class).getByUserName("Set NX Enabled");
|
|
assertNotNull(sensor201);
|
|
sensor201.setState(Sensor.ACTIVE);
|
|
assertEquals(Sensor.ACTIVE, sensor201.getState());
|
|
|
|
DestinationPoints dp = jmri.InstanceManager.getDefault(jmri.jmrit.entryexit.EntryExitPairs.class).getNamedBean("NX-Left-TO-A (Left-TO-A) to NX-Right-TO-B (Right-TO-B)");
|
|
assertNotNull(dp);
|
|
|
|
// Test entry/exit
|
|
runTestEntryExit(dp, sensor201);
|
|
|
|
for (Logix l : logixManager.getNamedBeanSet()) {
|
|
ImportLogix il = new ImportLogix(l, true);
|
|
il.doImport();
|
|
il.getLogixNG().setEnabled(true);
|
|
}
|
|
/*
|
|
final String treeIndent = " ";
|
|
java.io.StringWriter stringWriter = new java.io.StringWriter();
|
|
java.io.PrintWriter printWriter = new java.io.PrintWriter(stringWriter);
|
|
logixNG_Manager.printTree(Locale.ENGLISH, printWriter, treeIndent);
|
|
System.out.println(stringWriter.toString());
|
|
*/
|
|
deleteAllLogixs();
|
|
|
|
// Test entry/exit
|
|
runTestEntryExit(dp, sensor201);
|
|
}
|
|
|
|
private void runTestSetRoute(Turnout turnout101, Turnout turnout102, Sensor sensor) throws JmriException {
|
|
turnout101.setState(Turnout.THROWN);
|
|
assertEquals(Turnout.THROWN, turnout101.getState());
|
|
turnout102.setState(Turnout.THROWN);
|
|
assertEquals(Turnout.THROWN, turnout102.getState());
|
|
|
|
sensor.setState(Sensor.ACTIVE);
|
|
|
|
JUnitUtil.waitFor(() -> (turnout101.getState() == Turnout.CLOSED),"turnout 101 closed");
|
|
JUnitUtil.waitFor(() -> (turnout102.getState() == Turnout.CLOSED),"turnout 102 closed");
|
|
|
|
assertEquals(Turnout.CLOSED, turnout101.getState());
|
|
assertEquals(Turnout.CLOSED, turnout102.getState());
|
|
}
|
|
|
|
@Test
|
|
public void testSetRoute() throws JmriException {
|
|
// TRIGGER_ROUTE
|
|
Sensor sensor210 = InstanceManager.getDefault(SensorManager.class).getByUserName("Trigger Route");
|
|
assertNotNull(sensor210);
|
|
// for (Route r : InstanceManager.getDefault(RouteManager.class).getNamedBeanSet()) {
|
|
// System.out.format("Route: %s, %s%n", r.getSystemName(), r.getUserName());
|
|
// }
|
|
|
|
Route routeTurnouts = InstanceManager.getDefault(RouteManager.class).getRoute("Turnouts");
|
|
assertNotNull(routeTurnouts);
|
|
|
|
Turnout turnout101 = InstanceManager.getDefault(TurnoutManager.class).getBySystemName("IT101");
|
|
assertNotNull(turnout101);
|
|
|
|
Turnout turnout102 = InstanceManager.getDefault(TurnoutManager.class).getBySystemName("IT101");
|
|
assertNotNull(turnout102);
|
|
|
|
// Test route
|
|
runTestSetRoute(turnout101, turnout102, sensor210);
|
|
|
|
for (Logix l : logixManager.getNamedBeanSet()) {
|
|
ImportLogix il = new ImportLogix(l, true);
|
|
il.doImport();
|
|
il.getLogixNG().setEnabled(true);
|
|
}
|
|
|
|
deleteAllLogixs();
|
|
|
|
// Test route
|
|
runTestSetRoute(turnout101, turnout102, sensor210);
|
|
|
|
JUnitAppender.assertWarnMessage("Import Conditional 'IX:AUTO:0001C1' to LogixNG 'IQ:AUTO:0001'");
|
|
JUnitAppender.assertWarnMessage("Import Conditional 'IX:AUTO:0002C1' to LogixNG 'IQ:AUTO:0002'");
|
|
JUnitAppender.assertWarnMessage("Import Conditional 'IX:AUTO:0003C1' to LogixNG 'IQ:AUTO:0003'");
|
|
JUnitAppender.assertWarnMessage("Import Conditional 'IX:AUTO:0004C1' to LogixNG 'IQ:AUTO:0004'");
|
|
JUnitAppender.assertWarnMessage("Import Conditional 'IX:RTXINITIALIZER1T' to LogixNG 'IQ:AUTO:0005'");
|
|
}
|
|
|
|
@BeforeEach
|
|
public void setUp() {
|
|
|
|
JUnitUtil.setUp();
|
|
JUnitUtil.resetInstanceManager();
|
|
JUnitUtil.resetProfileManager();
|
|
JUnitUtil.initConfigureManager();
|
|
JUnitUtil.initInternalSensorManager();
|
|
JUnitUtil.initInternalTurnoutManager();
|
|
JUnitUtil.initLogixManager();
|
|
JUnitUtil.initLogixNGManager();
|
|
|
|
WarrantPreferences.getDefault().setShutdown(WarrantPreferences.Shutdown.NO_MERGE);
|
|
|
|
// We want the conditionalNGs run immediately during this test
|
|
InstanceManager.getDefault(ConditionalNG_Manager.class).setRunOnGUIDelayed(false);
|
|
|
|
logixManager = InstanceManager.getDefault(LogixManager.class);
|
|
logixNG_Manager = InstanceManager.getDefault(LogixNG_Manager.class);
|
|
|
|
|
|
ConfigureManager cm = InstanceManager.getNullableDefault(jmri.ConfigureManager.class);
|
|
assertNotNull(cm);
|
|
java.io.File file = new java.io.File("java/test/jmri/jmrit/logixng/tools/LogixNG_Test_Dave_Sand.xml");
|
|
boolean results = ThreadingUtil.runOnGUIwithReturn( () ->
|
|
assertDoesNotThrow( () -> cm.load(file)));
|
|
assertTrue(results);
|
|
|
|
logixManager.activateAllLogixs();
|
|
logixNG_Manager.activateAllLogixNGs(false, false);
|
|
|
|
|
|
|
|
|
|
/*
|
|
InstanceManager.getDefault(WarrantManager.class).register(new Warrant("IW1", null));
|
|
|
|
logixManager = InstanceManager.getDefault(LogixManager.class);
|
|
ConditionalManager conditionalManager = InstanceManager.getDefault(ConditionalManager.class);
|
|
|
|
logix = logixManager.createNewLogix("IX1", null);
|
|
|
|
conditional = conditionalManager.createNewConditional("IX1C1", "First conditional");
|
|
logix.addConditional(conditional.getSystemName(), 0);
|
|
|
|
conditional.setTriggerOnChange(true);
|
|
conditional.setLogicType(Conditional.AntecedentOperator.ALL_AND, "");
|
|
|
|
variables = new ArrayList<>();
|
|
|
|
cv = new ConditionalVariable();
|
|
cv.setTriggerActions(true);
|
|
cv.setNegation(false);
|
|
cv.setNum1(0);
|
|
cv.setNum2(0);
|
|
cv.setOpern(Conditional.Operator.AND);
|
|
cv.setType(Conditional.Type.NONE);
|
|
cv.setName("IW1");
|
|
variables.add(cv);
|
|
conditional.setStateVariables(variables);
|
|
|
|
actions = new ArrayList<>();
|
|
conditional.setAction(actions);
|
|
*/
|
|
}
|
|
|
|
@AfterEach
|
|
public void tearDown() {
|
|
|
|
if ( logixManager != null ) {
|
|
logixManager.dispose();
|
|
}
|
|
if ( logixNG_Manager != null ) {
|
|
logixNG_Manager.dispose();
|
|
}
|
|
|
|
logixManager = null;
|
|
logixNG_Manager = null;
|
|
|
|
jmri.jmrit.logixng.util.LogixNG_Thread.stopAllLogixNGThreads();
|
|
JUnitUtil.clearTurnoutThreads();
|
|
JUnitUtil.clearRouteThreads();
|
|
JUnitUtil.deregisterBlockManagerShutdownTask();
|
|
|
|
JUnitUtil.resetWindows(false, false);
|
|
|
|
JUnitUtil.tearDown();
|
|
}
|
|
|
|
}
|