Files
JIMRI/java/test/jmri/jmrit/beantable/signalmast/MatrixSignalMastAddPaneTest.java
2026-06-17 14:00:51 +02:00

173 lines
6.4 KiB
Java

package jmri.jmrit.beantable.signalmast;
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 java.util.*;
import javax.swing.*;
import jmri.*;
import jmri.implementation.*;
import jmri.util.*;
import jmri.util.junit.annotations.DisabledIfHeadless;
import org.junit.jupiter.api.*;
import org.netbeans.jemmy.operators.JCheckBoxOperator;
import org.netbeans.jemmy.operators.JFrameOperator;
/**
* @author Bob Jacobsen Copyright 2018
*/
public class MatrixSignalMastAddPaneTest extends AbstractSignalMastAddPaneTestBase {
/** {@inheritDoc} */
@Override
protected SignalMastAddPane getOTT() { return new MatrixSignalMastAddPane(); }
@Test
public void testSetMastOK() {
MatrixSignalMast s1 = new MatrixSignalMast("IF$xsm:basic:one-low($0001)-3t", "user name");
InstanceManager.turnoutManagerInstance().provideTurnout("IT1");
InstanceManager.turnoutManagerInstance().provideTurnout("IT2");
InstanceManager.turnoutManagerInstance().provideTurnout("IT3");
InstanceManager.turnoutManagerInstance().provideTurnout("IT4");
InstanceManager.turnoutManagerInstance().provideTurnout("IT5");
InstanceManager.turnoutManagerInstance().provideTurnout("IT666");
// s1.setBitNum(6); // defaults to 6
s1.setOutput("output1", "IT1");
s1.setOutput("output2", "IT2");
s1.setOutput("output3", "IT3");
s1.setOutput("output4", "IT4");
s1.setOutput("output5", "IT5");
s1.setOutput("output6", "IT666");
MatrixSignalMastAddPane vp = new MatrixSignalMastAddPane();
assertTrue(vp.canHandleMast(s1));
vp.setMast(null);
vp.setMast(s1);
SignalSystem basicSys = InstanceManager.getDefault(SignalSystemManager.class).getSystem("basic");
assertNotNull(basicSys);
vp.setAspectNames(
new jmri.implementation.DefaultSignalAppearanceMap("IF$xsm:basic:one-low($0001)-3t") {
@Override
public Enumeration<String> getAspects() {
return java.util.Collections.enumeration(
java.util.Arrays.asList(
new String[]{"Approach","Stop","Unlit"}));
}
}
, basicSys);
}
@Test
public void testSetMastReject() {
TurnoutSignalMast m1 = new TurnoutSignalMast("IF$tsm:basic:one-searchlight($1)", "user name");
MatrixSignalMastAddPane vp = new MatrixSignalMastAddPane();
assertFalse(vp.canHandleMast(m1));
vp.setMast(null);
SignalSystem basicSys = InstanceManager.getDefault(SignalSystemManager.class).getSystem("basic");
assertNotNull(basicSys);
vp.setAspectNames(m1.getAppearanceMap(), basicSys);
vp.setMast(m1);
JUnitAppender.assertErrorMessage("mast was wrong type: IF$tsm:basic:one-searchlight($1) jmri.implementation.TurnoutSignalMast");
}
@Test
@DisabledIfHeadless
public void testEditAndDisableViaGui() {
assertEquals(0, InstanceManager.getDefault(SignalMastManager.class).getObjectCount());
// create a mast
InstanceManager.turnoutManagerInstance().provideTurnout("IT1");
InstanceManager.turnoutManagerInstance().provideTurnout("IT2");
InstanceManager.turnoutManagerInstance().provideTurnout("IT3");
MatrixSignalMast mast = new MatrixSignalMast("IF$xsm:basic:one-low($0002)-3t", "user name 2"){
{ setLastRef(3); } // reset references - this leads to $0003 below, just in case anybody else has created one
};
mast.setBitNum(3);
mast.setOutput("output1", "IT1");
mast.setOutput("output2", "IT2");
mast.setOutput("output3", "IT3");
mast.setBitstring("Clear", "111"); // used for test below
mast.setBitstring("Approach", "100");
mast.setBitstring("Stop", "001"); // used for test below
mast.setBitstring("Unlit", "000");
InstanceManager.getDefault(SignalMastManager.class).register(mast);
assertEquals(1, InstanceManager.getDefault(SignalMastManager.class).getObjectCount());
mast.setAspectDisabled("Unlit"); // we will reenable this below
mast.setAllowUnLit(true);
// set up a mast edit pane
MatrixSignalMastAddPane vp = new MatrixSignalMastAddPane();
SignalSystem basicSys = InstanceManager.getDefault(SignalSystemManager.class).getSystem("basic");
assertNotNull(basicSys);
vp.setAspectNames(
new jmri.implementation.DefaultSignalAppearanceMap("IM123") {
@Override
public Enumeration<String> getAspects() { return mast.getAllKnownAspects().elements(); }
}
, basicSys);
vp.setMast(mast);
JFrame frame = new JFrame("Add/Edit Signal Mast");
frame.add(vp);
ThreadingUtil.runOnGUI( () -> {
frame.pack();
frame.setVisible(true);
});
JFrameOperator frameOp = new JFrameOperator("Add/Edit Signal Mast");
JCheckBoxOperator rBox = new JCheckBoxOperator(frameOp, Bundle.getMessage("ResetPrevious"));
// enable Reset
ThreadingUtil.runOnGUI(() -> {
rBox.push(); // this should set Reset enabled
vp.createMast("basic", "appearance-one-searchlight.xml", "user name 2");
});
// check list of SignalMasts
assertEquals(1, InstanceManager.getDefault(SignalMastManager.class).getObjectCount());
SignalMast userName2 = InstanceManager.getDefault(SignalMastManager.class).getByUserName("user name 2");
assertNotNull(userName2);
// system name not checked, depends on history of how many MatrixSignalMast objects have been created
// check correct aspect disabled
assertFalse(userName2.isAspectDisabled("Stop"));
assertTrue(userName2.isAspectDisabled("Unlit"));
// check Reset setting in mast
assertTrue(mast.resetPreviousStates());
JUnitUtil.dispose(frame);
}
@BeforeEach
@Override
public void setUp() {
JUnitUtil.setUp();
JUnitUtil.initDefaultUserMessagePreferences();
}
@AfterEach
@Override
public void tearDown() {
JUnitUtil.tearDown();
}
}