Files
JIMRI/java/test/jmri/jmrit/etcs/dmi/swing/DmiPanelGTest.java
T
2026-06-17 14:00:51 +02:00

208 lines
6.0 KiB
Java

package jmri.jmrit.etcs.dmi.swing;
import java.beans.PropertyChangeEvent;
import java.util.ArrayList;
import jmri.InstanceManager;
import jmri.Timebase;
import jmri.jmrit.etcs.*;
import jmri.util.JUnitUtil;
import jmri.util.swing.JemmyUtil;
import org.junit.jupiter.api.*;
import org.netbeans.jemmy.operators.JButtonOperator;
import org.netbeans.jemmy.operators.JFrameOperator;
/**
* Tests for DmiPanelG.
* @author Steve Young Copyright (C) 2024
*/
@jmri.util.junit.annotations.DisabledIfHeadless
public class DmiPanelGTest {
@Test
public void testPanelG1G2() {
int clockPCLsAtStart = InstanceManager.getDefault(Timebase.class).getPropertyChangeListeners().length;
DmiFrame df = new DmiFrame("testPanelG1G2");
DmiPanel p = df.getDmiPanel();
Assertions.assertNotNull(p);
df.setVisible(true);
JFrameOperator jfo = new JFrameOperator(df.getTitle());
// setup main panel as per figures in ERTMSv4 8.5.1
p.setMaxDialSpeed(400); // max 400 units / hour
p.setActualSpeed(133); // 36 units / hour
p.setLevel(2); // etcs level 2
p.setMode(DmiPanel.MODE_FULL_SUPERVISION);
p.setSafeRadioConnection(1); // safe radio connection up
ArrayList<DmiCircularSpeedGuideSection> csgSectionList = new ArrayList<>();
csgSectionList.add(new DmiCircularSpeedGuideSection(DmiCircularSpeedGuideSection.CSG_TYPE_NORMAL,
DmiPanel.DARK_GREY, 0, 140, true, true ));
p.setCsgSections(csgSectionList);
ArrayList<TrackSection> trackSectionList1 = new ArrayList<>();
TrackSection s = new TrackSection(290,140,5);
trackSectionList1.add(s);
s = new TrackSection(1000,140,-22);
trackSectionList1.add(s);
s = new TrackSection(8000,140,2);
s.addAnnouncement(new StationTrackCondition( 350, "Welwyn North"));
trackSectionList1.add(s);
MovementAuthority ma1 = new MovementAuthority(trackSectionList1);
ArrayList<MovementAuthority> mas1 = new ArrayList<>();
mas1.add(ma1);
p.resetMovementAuthorities(mas1);
p.setScale(2);
p.messageDriver(new CabMessage("Test Message",0,false));
p.setAtoMode(1);
p.setSkipStoppingPoint(17); // skipping inactive
p.setStoppingPointLabel("Welwyn North", "17:36:48");
// JUnitUtil.waitFor(10000);
p.setAtoMode(2);
verifyAck(jfo, p, DmiPanel.PROP_CHANGE_ATO_DRIVER_REQUEST_START);
// JUnitUtil.waitFor(1000);
p.setAtoMode(3);
verifyAck(jfo, p, DmiPanel.PROP_CHANGE_ATO_DRIVER_REQUEST_STOP);
// JUnitUtil.waitFor(1000);
p.setAtoMode(4);
verifyAck(jfo, p, DmiPanel.PROP_CHANGE_ATO_DRIVER_REQUEST_STOP);
// JUnitUtil.waitFor(1000);
p.setAtoMode(5);
// JUnitUtil.waitFor(1000);
p.setAtoMode(0);
// JUnitUtil.waitFor(1000);
p.setAtoMode(2);
p.setStoppingAccuracy(-1);
// JUnitUtil.waitFor(1000);
p.setStoppingAccuracy(0);
// JUnitUtil.waitFor(1000);
p.setStoppingAccuracy(1);
// JUnitUtil.waitFor(1000);
p.setStoppingAccuracy(-2);
// JUnitUtil.waitFor(1000);
// JUnitUtil.waitFor(5000);
p.setSkipStoppingPoint(17);
// JUnitUtil.waitFor(2000);
p.setSkipStoppingPoint(18);
// JUnitUtil.waitFor(2000);
p.setSkipStoppingPoint(19);
// JUnitUtil.waitFor(2000);
p.setSkipStoppingPoint(0);
// JUnitUtil.waitFor(2000);
p.setStoppingPointLabel("", "");
// JUnitUtil.waitFor(1000);
p.setDoorIcon(10);
// JUnitUtil.waitFor(1000);
p.setDoorIcon(11);
// JUnitUtil.waitFor(1000);
p.setDoorIcon(12);
// JUnitUtil.waitFor(1000);
p.setDoorIcon(13);
// JUnitUtil.waitFor(1000);
p.setDoorIcon(14);
// JUnitUtil.waitFor(1000);
p.setDoorIcon(15);
// JUnitUtil.waitFor(1000);
p.setDoorIcon(16);
// JUnitUtil.waitFor(1000);
p.setDoorIcon(0);
// JUnitUtil.waitFor(1000);
p.setDoorIcon(10); // request driver open both sides
p.setAtoMode(1); // ATO Selected
p.setStoppingAccuracy(0);
p.setDwellTime(1,9);
// JUnitUtil.waitFor(1000);
p.advance(8500);
// JUnitUtil.waitFor(1000);
p.setIndicationMarker(300,0);
// JUnitUtil.waitFor(5000);
p.setMode(DmiPanel.MODE_AUTOMATIC_DRIVING);
// JUnitUtil.waitFor(10000);
Assertions.assertTrue( clockPCLsAtStart <
InstanceManager.getDefault(Timebase.class).getPropertyChangeListeners().length);
Assertions.assertDoesNotThrow( () -> {
InstanceManager.getDefault(Timebase.class).userSetRate(3+(2/3d));
});
// JUnitUtil.waitFor(10000);
InstanceManager.getDefault(Timebase.class).setRun(false);
// JUnitUtil.waitFor(10000);
InstanceManager.getDefault(Timebase.class).setRun(true);
// JUnitUtil.waitFor(10000);
InstanceManager.getDefault(Timebase.class).setRun(false);
JUnitUtil.dispose(jfo.getWindow());
jfo.waitClosed();
Assertions.assertEquals(clockPCLsAtStart,
InstanceManager.getDefault(Timebase.class).getPropertyChangeListeners().length);
}
private boolean triggered = false;
private void verifyAck(JFrameOperator jfo, DmiPanel p, String actionCommand) {
triggered = false;
p.addPropertyChangeListener(actionCommand, (PropertyChangeEvent evt) -> {
triggered = true;
Assertions.assertEquals(actionCommand, evt.getPropertyName());
});
JButtonOperator jbo = JemmyUtil.getButtonOperatorByActionComnmand(jfo,actionCommand);
jbo.doClick();
// JUnitUtil.waitFor(2000);
JUnitUtil.waitFor(() -> triggered, actionCommand + " button triggered");
}
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
}
@AfterEach
public void tearDown() {
JUnitUtil.tearDown();
}
}