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. *

* 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. *

* 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 variables; // private ArrayList 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(); } }