Files
JIMRI/java/test/jmri/SignalGroupTest.java
T
2026-06-17 14:00:51 +02:00

89 lines
4.0 KiB
Java

package jmri;
import jmri.util.JUnitUtil;
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
/**
* Tests for the jmri.SignalGroup class
*
* @author Egbert Broerse Copyright 2017
*/
public class SignalGroupTest {
@Test
public void testSetup() {
// provide 2 turnouts:
Turnout it1 = InstanceManager.turnoutManagerInstance().provideTurnout("IT1");
Turnout it2 = InstanceManager.turnoutManagerInstance().provideTurnout("IT2");
assertEquals( Turnout.UNKNOWN, it1.getCommandedState(), "it before");
assertEquals( Turnout.UNKNOWN, it2.getCommandedState(), "it before");
// provide a single output signal head with IT1 as the output:
jmri.implementation.SingleTurnoutSignalHead sh
= new jmri.implementation.SingleTurnoutSignalHead("IH1",
new jmri.NamedBeanHandle<Turnout>("IT1", it1),
SignalHead.GREEN, SignalHead.DARK); // on state + off state
assertNotNull( sh, "SignalHead is null!");
// provide a virtual signal mast:
SignalMast sm = new jmri.implementation.VirtualSignalMast("IF$vsm:AAR-1946:CPL($0002)");
assertNotNull( sm, "SignalMast is null!");
// provide a signal group:
SignalGroup sg = InstanceManager.getDefault(jmri.SignalGroupManager.class).provideSignalGroup("IF12", "SignalGroup12");
assertNotNull( sg, "SignalGroup is null!");
// add the head to the group:
sg.addSignalHead(sh);
// check value of OnState
assertEquals( SignalHead.GREEN, sg.getHeadOnState(sh), "initial On state");
// set On state of IH1 from GREEN to LUNAR:
sg.setHeadOnState(sh, SignalHead.LUNAR);
assertEquals( SignalHead.LUNAR, sg.getHeadOnState(sh), "new On state");
// set IT1 to Closed to end Unknown state:
it1.setCommandedState(Turnout.CLOSED); // Off = IH1 Dark
it2.setCommandedState(Turnout.CLOSED); // set the control turnout Off
// add IT2 as a control turnout to sh with conditional state Thrown:
sg.setHeadAlignTurnout(sh, it2, Turnout.THROWN);
assertEquals( "IT2", sg.getTurnoutNameByIndex(0, 0), "group align turnout");
sg.setSensorTurnoutOper(sh, false); // OR
assertFalse( sg.getSensorTurnoutOperByIndex(0), "group logic oper");
// attach aspect Clear on mast sm to group
sg.addSignalMastAspect("Clear"); // condition 1
// set sm to Stop
sm.setAspect("Stop");
// Debug states
// System.out.println("Before:");
// System.out.println("IT1 =" + it1.getCommandedState());
// System.out.println("IH1 =" + sh.getAppearanceName());
// System.out.println("SM =" + sm.getAspect());
// System.out.println("IT2 =" + it2.getCommandedState());
// check state of member head sh
assertEquals( Bundle.getMessage("SignalHeadStateDark"), sh.getAppearanceName(), "sh before");
// now set conditional turnout
it2.setCommandedState(Turnout.THROWN); // set the control turnout On = condition 2
// set incuded aspect and check state of member head sh when conditional is met:
sm.setAspect("Clear");
// System.out.println("After:");
// System.out.println("IT1 =" + it1.getCommandedState());
// System.out.println("IH1 =" + sh.getAppearanceName());
// System.out.println("SM =" + sm.getAspect());
// System.out.println("IT2 =" + it2.getCommandedState());
assertEquals( Bundle.getMessage("SignalHeadStateDark"), sh.getAppearanceName(), "sh after");
// TODO would expect LUNAR instead, working on SignalGroup code
}
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
JUnitUtil.initDefaultUserMessagePreferences();
JUnitUtil.initInternalTurnoutManager();
}
@AfterEach
public void tearDown() {
JUnitUtil.tearDown();
}
}