package jmri.jmrit.logix; import java.io.File; import java.util.List; import jmri.*; import jmri.jmrit.display.EditorScaffold; import jmri.jmrit.display.LocoIcon; import jmri.jmrit.display.controlPanelEditor.ControlPanelEditor; import jmri.util.*; import org.junit.jupiter.api.*; import org.netbeans.jemmy.operators.JDialogOperator; import org.netbeans.jemmy.operators.JFrameOperator; import static org.junit.jupiter.api.Assertions.*; /** * * @author Paul Bender Copyright (C) 2017 */ @jmri.util.junit.annotations.DisabledIfHeadless public class TrackerTest { @Test public void testCTor() { var es = new EditorScaffold(); Tracker t = new Tracker(new OBlock("OB1", "Test"), "Test", new LocoIcon(es), InstanceManager.getDefault(TrackerTableAction.class)); assertNotNull(t,"exists"); JUnitUtil.dispose(es); JUnitUtil.dispose(JmriJFrame.getFrame(Bundle.getMessage("TrackerTable"))); } @Test public void testTrack() { var es = new EditorScaffold(); TrackerTableAction trackTable = InstanceManager.getDefault(TrackerTableAction.class); OBlock blk1 = new OBlock("OB1", "blk1"); blk1.setState(OBlock.OCCUPIED); Tracker t = new Tracker(blk1, "Test", new LocoIcon(es), trackTable); assertNotNull(t,"exists"); List occupied = t.getBlocksOccupied(); assertEquals(1, occupied.size(), "Number Blocks Occupied"); JUnitUtil.dispose(es); JUnitUtil.dispose(JmriJFrame.getFrame(Bundle.getMessage("TrackerTable"))); } @Test public void testMultipleStartBlocks() throws JmriException { Assumptions.assumeFalse(Boolean.getBoolean("jmri.skipTestsRequiringSeparateRunning"), "Ignoring intermittent test"); WarrantPreferences.getDefault().setShutdown(WarrantPreferences.Shutdown.NO_MERGE); // load and display File f = new File("java/test/jmri/jmrit/logix/valid/IndicatorDemoTest.xml"); Assertions.assertTrue(InstanceManager.getDefault(ConfigureManager.class).load(f)); JUnitAppender.suppressErrorMessage("Portal elem = null"); TrackerTableAction tta = InstanceManager.getDefault(TrackerTableAction.class); assertNotNull(tta,"TrackerTableAction not found"); OBlockManager _OBlockMgr = InstanceManager.getDefault(OBlockManager.class); OBlock westBlock = _OBlockMgr.getByUserName("West"); assertNotNull(westBlock); Sensor sWest = westBlock.getSensor(); assertNotNull(sWest, "Sensor sWest found"); NXFrameTest.setAndConfirmSensorAction(sWest, Sensor.ACTIVE, westBlock); OBlock mainBlock = _OBlockMgr.getByUserName("Main"); assertNotNull(mainBlock); Sensor sMain = mainBlock.getSensor(); assertNotNull(sMain, "Sensor sMain found"); NXFrameTest.setAndConfirmSensorAction(sMain, Sensor.ACTIVE, mainBlock); OBlock eastBlock = _OBlockMgr.getByUserName("East"); assertNotNull(eastBlock); Sensor sEast = eastBlock.getSensor(); assertNotNull(sEast, "Sensor sEast found"); NXFrameTest.setAndConfirmSensorAction(sEast, Sensor.ACTIVE, eastBlock); tta.actionPerformed(null); // called to make TrackerTableAction._frame Tracker tkrWest = new Tracker(westBlock, "TkrFW", null, tta); assertNotNull(tkrWest, "Tracker TkrWest found"); JFrameOperator nfo = new JFrameOperator(tta._frame); JDialogOperator jdo = new JDialogOperator(nfo, Bundle.getMessage("TrackerTitle")); assertNotNull(jdo, "Dialog operator found"); Tracker.ChooseStartBlock dialog = (Tracker.ChooseStartBlock)jdo.getSource(); assertNotNull(dialog, "JDialog found"); dialog._jList.setSelectedIndex(0); List occupied = tkrWest.getBlocksOccupied(); assertEquals(2, occupied.size(),"TkrWest Blocks Occupied"); new org.netbeans.jemmy.QueueTool().waitEmpty(); dialog._jList.setSelectedIndex(0); occupied = tkrWest.getBlocksOccupied(); assertEquals(3, occupied.size(),"TkrWest Blocks Occupied"); ControlPanelEditor panel = (ControlPanelEditor) JmriJFrame.getFrame("Indicator Demo 1 Editor"); // JFrameOperator requestClose just hides the Tracker Table, not disposing of it. Boolean retVal = ThreadingUtil.runOnGUIwithReturn(() -> { if (panel != null ) { panel.dispose(); } JmriJFrame.getFrame(Bundle.getMessage("TrackerTable")).dispose(); return true; }); assertTrue(retVal); _OBlockMgr.dispose(); } @BeforeEach public void setUp() { JUnitUtil.setUp(); JUnitUtil.resetInstanceManager(); JUnitUtil.initConfigureManager(); JUnitUtil.initOBlockManager(); JUnitUtil.initDebugThrottleManager(); } @AfterEach public void tearDown() { JUnitUtil.deregisterBlockManagerShutdownTask(); JUnitUtil.tearDown(); } }