Files
JIMRI/java/test/jmri/jmrit/logix/TrackerTableActionTest.java
2026-06-17 14:00:51 +02:00

252 lines
9.9 KiB
Java

package jmri.jmrit.logix;
import java.io.File;
import java.util.List;
import jmri.ConfigureManager;
import jmri.InstanceManager;
import jmri.JmriException;
import jmri.Sensor;
import jmri.jmrit.display.controlPanelEditor.ControlPanelEditor;
import jmri.util.JmriJFrame;
import jmri.util.JUnitAppender;
import jmri.util.JUnitUtil;
import jmri.util.ThreadingUtil;
import jmri.util.junit.annotations.DisabledIfHeadless;
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
*/
public class TrackerTableActionTest {
private OBlockManager _OBlockMgr;
/**
* Checks automatic creation
*/
@Test
public void testInstance() {
TrackerTableAction t = InstanceManager.getDefault(TrackerTableAction.class);
assertNotNull(t, "exists");
}
@Test
@DisabledIfHeadless
public void testTracking1() 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");
assertTrue(InstanceManager.getDefault(ConfigureManager.class).load(f));
JUnitAppender.suppressErrorMessage("Portal elem = null");
ControlPanelEditor panel = (ControlPanelEditor) JmriJFrame.getFrame("Indicator Demo 1 Editor");
assertNotNull(panel);
ThreadingUtil.runOnGUI( () -> panel.setVisible(false));
TrackerTableAction tta = InstanceManager.getDefault(TrackerTableAction.class);
assertNotNull(tta, "TrackerTableAction not found");
OBlock middle = _OBlockMgr.getByUserName("Middle");
assertNotNull(middle);
Sensor sMiddle = middle.getSensor();
assertNotNull(sMiddle, "Senor sMiddle not found");
NXFrameTest.setAndConfirmSensorAction(sMiddle, Sensor.ACTIVE, middle);
JUnitUtil.waitFor(() -> (middle.getState() & OBlock.OCCUPIED) != 0, "Middle occupied");
tta.markNewTracker(middle, "Tkr1", null);
Tracker tracker1 = tta.findTrackerIn(middle);
assertNotNull(tta, "Tracker Tkr1 found");
List<OBlock> occupied = tracker1.getBlocksOccupied();
assertEquals(1, occupied.size(),"Tkr1 Blocks Occupied");
OBlock farEast = _OBlockMgr.getByUserName("FarEast");
assertNotNull(farEast);
Sensor sFarEast = farEast.getSensor();
assertNotNull(sFarEast, "Senor FarEast not found");
NXFrameTest.setAndConfirmSensorAction(sFarEast, Sensor.ACTIVE, farEast);
occupied = tracker1.getBlocksOccupied();
assertEquals(2, occupied.size(), "Tkr1 2 Blocks Occupied");
OBlock east = _OBlockMgr.getByUserName("East");
assertNotNull(east);
Sensor sEast = east.getSensor();
NXFrameTest.setAndConfirmSensorAction(sEast, Sensor.ACTIVE, east);
occupied = tracker1.getBlocksOccupied();
assertEquals(3, occupied.size(),"Tkr1 3 Blocks Occupied");
NXFrameTest.setAndConfirmSensorAction(sMiddle, Sensor.INACTIVE, middle);
occupied = tracker1.getBlocksOccupied();
assertEquals(2, occupied.size(),"Tkr1 2 Blocks Occupied");
NXFrameTest.setAndConfirmSensorAction(sFarEast, Sensor.INACTIVE, farEast);
occupied = tracker1.getBlocksOccupied();
assertEquals(1, occupied.size(), "Tkr1 1 Blocks Occupied");
tta.stopTracker(tracker1, east);
// JFrameOperator requestClose just hides the Tracker Table, not disposing of it.
Boolean retVal = ThreadingUtil.runOnGUIwithReturn(() -> {
panel.dispose();
JmriJFrame.getFrame(Bundle.getMessage("TrackerTable")).dispose();
return true;
});
assertTrue(retVal);
}
@Test
@DisabledIfHeadless
public void testTrackingDark() 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");
assertTrue(InstanceManager.getDefault(ConfigureManager.class).load(f));
JUnitAppender.suppressErrorMessage("Portal elem = null");
ControlPanelEditor panel = (ControlPanelEditor) JmriJFrame.getFrame("Indicator Demo 1 Editor");
assertNotNull(panel);
ThreadingUtil.runOnGUI( () -> panel.setVisible(false));
TrackerTableAction tta = InstanceManager.getDefault(TrackerTableAction.class);
assertNotNull(tta, "TrackerTableAction not found");
OBlock mainBlock = _OBlockMgr.getByUserName("Main");
assertNotNull(mainBlock);
Sensor sMain = mainBlock.getSensor();
assertNotNull(sMain,"Senor sMain found");
NXFrameTest.setAndConfirmSensorAction(sMain, Sensor.ACTIVE, mainBlock);
tta.markNewTracker(mainBlock, "Tkr1", null);
Tracker trackerD = tta.findTrackerIn(mainBlock);
assertNotNull(trackerD, "Tracker TkrD not found");
List<OBlock> occupied = trackerD.getBlocksOccupied();
assertEquals(1, occupied.size(), "TkrD Blocks Occupied");
// passes through dark block "West Yard"
OBlock farWestBlock = _OBlockMgr.getByUserName("FarWest");
assertNotNull(farWestBlock);
Sensor sFarWest = farWestBlock.getSensor();
NXFrameTest.setAndConfirmSensorAction(sFarWest, Sensor.ACTIVE, farWestBlock);
occupied = trackerD.getBlocksOccupied();
assertEquals(3, occupied.size(), "TkrD 3 Blocks Occupied");
NXFrameTest.setAndConfirmSensorAction(sMain, Sensor.INACTIVE, mainBlock);
occupied = trackerD.getBlocksOccupied();
assertEquals(1, occupied.size(),"TkrD 1 Blocks Occupied");
tta.stopTracker(trackerD, farWestBlock);
// JFrameOperator requestClose just hides the Tracker Table, not disposing of it.
Boolean retVal = ThreadingUtil.runOnGUIwithReturn(() -> {
panel.dispose();
JmriJFrame.getFrame(Bundle.getMessage("TrackerTable")).dispose();
return true;
});
assertTrue(retVal);
}
@Test
@DisabledIfHeadless
public void testMultipleTrackers() 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");
assertTrue(InstanceManager.getDefault(ConfigureManager.class).load(f));
JUnitAppender.suppressErrorMessage("Portal elem = null");
ControlPanelEditor panel = (ControlPanelEditor) JmriJFrame.getFrame("Indicator Demo 1 Editor");
assertNotNull(panel);
ThreadingUtil.runOnGUI( () -> panel.setVisible(false));
TrackerTableAction tta = InstanceManager.getDefault(TrackerTableAction.class);
assertNotNull(tta, "TrackerTableAction not found");
OBlock westBlock = _OBlockMgr.getByUserName("West");
assertNotNull(westBlock);
Sensor sWest = westBlock.getSensor();
assertNotNull(sWest, "Senor sWest found");
NXFrameTest.setAndConfirmSensorAction(sWest, Sensor.ACTIVE, westBlock);
tta.markNewTracker(westBlock, "TkrW", null);
Tracker tkrW = tta.findTrackerIn(westBlock);
assertNotNull(tkrW, "Tracker TkrW found");
OBlock eastBlock = _OBlockMgr.getByUserName("East");
assertNotNull(eastBlock);
Sensor sEast = eastBlock.getSensor();
assertNotNull(sEast, "Senor sEast found");
NXFrameTest.setAndConfirmSensorAction(sEast, Sensor.ACTIVE, eastBlock);
tta.markNewTracker(eastBlock, "TkrE", null);
Tracker TkrE = tta.findTrackerIn(eastBlock);
assertNotNull(TkrE, "Tracker TkrE found");
OBlock mainBlock = _OBlockMgr.getByUserName("Main");
assertNotNull(mainBlock);
Sensor sMain = mainBlock.getSensor();
assertNotNull(sMain, "Senor sMain found");
NXFrameTest.setAndConfirmSensorAction(sMain, Sensor.ACTIVE, mainBlock);
JFrameOperator nfo = new JFrameOperator(tta._frame);
JDialogOperator jdo = new JDialogOperator(nfo, Bundle.getMessage("TrackerTitle"));
assertNotNull(jdo, "Dialog operator found");
TrackerTableAction.ChooseTracker dialog = (TrackerTableAction.ChooseTracker)jdo.getSource();
assertNotNull(dialog, "JDialog found");
// first entry ought to be tracker "West"
dialog._jList.setSelectedIndex(0);
List<OBlock> occupied = TkrE.getBlocksOccupied();
assertEquals(1, occupied.size(), "TkrE Blocks Occupied");
occupied = tkrW.getBlocksOccupied();
assertEquals(2, occupied.size(), "TkrW Blocks Occupied");
// JFrameOperator requestClose just hides the Tracker Table, not disposing of it.
Boolean retVal = ThreadingUtil.runOnGUIwithReturn(() -> {
panel.dispose();
JmriJFrame.getFrame(Bundle.getMessage("TrackerTable")).dispose();
return true;
});
assertTrue(retVal);
}
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
JUnitUtil.resetInstanceManager();
JUnitUtil.initConfigureManager();
JUnitUtil.initOBlockManager();
JUnitUtil.initDebugThrottleManager();
_OBlockMgr = InstanceManager.getDefault(OBlockManager.class);
}
@AfterEach
public void tearDown() {
_OBlockMgr.dispose();
_OBlockMgr = null;
JUnitUtil.deregisterBlockManagerShutdownTask();
JUnitUtil.tearDown();
}
}