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

241 lines
9.7 KiB
Java

package jmri.jmrit.ussctc;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import jmri.*;
import jmri.util.JUnitUtil;
import org.junit.jupiter.api.*;
/**
* Tests for TurnoutSection class in the jmri.jmrit.ussctc package
*
* @author Bob Jacobsen Copyright 2007
*/
@SuppressWarnings("unchecked")
public class TurnoutSectionTest {
@Test
public void testConstruction() {
TurnoutSection t = new TurnoutSection("Sec 1 Layout TO", "Sec1 TO 1 N",
"Sec1 TO 1 R", "Sec1 TO 1 N", "Sec1 TO 1 R", station);
assertNotNull(t);
}
@Test
public void testInitialSet() throws JmriException {
layoutTurnout.setCommandedState(Turnout.THROWN);
normSensor.setState(Sensor.INACTIVE);
revSensor.setState(Sensor.INACTIVE);
TurnoutSection t = new TurnoutSection("Sec 1 Layout TO", "Sec1 TO 1 N",
"Sec1 TO 1 R", "Sec1 TO 1 N", "Sec1 TO 1 R", station);
assertNotNull(t);
// initialization sets indicators to follow actual turnout state
assertEquals(Turnout.THROWN, layoutTurnout.getKnownState());
assertEquals(Turnout.CLOSED, normIndicator.getCommandedState());
assertEquals(Turnout.THROWN, revIndicator.getCommandedState());
}
@Test
public void testLayoutMonitoring() throws JmriException {
layoutTurnout.setCommandedState(Turnout.THROWN);
TurnoutSection t = new TurnoutSection("Sec 1 Layout TO", "Sec1 TO 1 N",
"Sec1 TO 1 R", "Sec1 TO 1 N", "Sec1 TO 1 R", station);
assertNotNull(t);
layoutTurnout.setCommandedState(Turnout.CLOSED);
// initialization sets indicators to follow actual turnout state
assertTrue(requestIndicationStart);
}
@Test
public void testCodeSendStartReturns() throws JmriException {
// return value depends only on set inputs
TurnoutSection t = new TurnoutSection("Sec 1 Layout TO", "Sec1 TO 1 N", "Sec1 TO 1 R", "Sec1 TO 1 N", "Sec1 TO 1 R", station);
normSensor.setState(Sensor.ACTIVE);
revSensor.setState(Sensor.INACTIVE);
assertEquals(CodeGroupTwoBits.Double10, t.codeSendStart());
normSensor.setState(Sensor.INACTIVE);
revSensor.setState(Sensor.ACTIVE);
assertEquals(CodeGroupTwoBits.Double01, t.codeSendStart());
}
@Test
public void testCodeSendStartIndicatorsUnchanged() throws JmriException {
// unchanged setting, not changing indicators
TurnoutSection t = new TurnoutSection("Sec 1 Layout TO", "Sec1 TO 1 N", "Sec1 TO 1 R", "Sec1 TO 1 N", "Sec1 TO 1 R", station);
normSensor.setState(Sensor.ACTIVE);
revSensor.setState(Sensor.INACTIVE);
t.central.state = TurnoutSection.TurnoutCentralSection.State.SHOWING_NORMAL;
normIndicator.setCommandedState(Turnout.THROWN);
revIndicator.setCommandedState(Turnout.CLOSED);
assertEquals(CodeGroupTwoBits.Double10, t.codeSendStart());
assertEquals(Turnout.THROWN, normIndicator.getKnownState());
assertEquals(Turnout.CLOSED, revIndicator.getKnownState());
normSensor.setState(Sensor.INACTIVE);
revSensor.setState(Sensor.ACTIVE);
t.central.state = TurnoutSection.TurnoutCentralSection.State.SHOWING_REVERSED;
normIndicator.setCommandedState(Turnout.CLOSED);
revIndicator.setCommandedState(Turnout.THROWN);
assertEquals(CodeGroupTwoBits.Double01, t.codeSendStart());
assertEquals(Turnout.CLOSED, normIndicator.getKnownState());
assertEquals(Turnout.THROWN, revIndicator.getKnownState());
}
@Test
public void testCodeSendStartIndicatorsChangedToN() throws JmriException {
// unchanged setting, not changing indicators
// test getting indication from layout
TurnoutSection t = new TurnoutSection("Sec 1 Layout TO", "Sec1 TO 1 N", "Sec1 TO 1 R", "Sec1 TO 1 N", "Sec1 TO 1 R", station);
normSensor.setState(Sensor.ACTIVE);
revSensor.setState(Sensor.INACTIVE);
t.central.state = TurnoutSection.TurnoutCentralSection.State.SHOWING_REVERSED;
normIndicator.setCommandedState(Turnout.CLOSED);
revIndicator.setCommandedState(Turnout.THROWN);
assertEquals(CodeGroupTwoBits.Double10, t.codeSendStart());
assertEquals(Turnout.CLOSED, normIndicator.getKnownState());
assertEquals(Turnout.CLOSED, revIndicator.getKnownState());
}
@Test
public void testCodeSendStartIndicatorsChangedToR() throws JmriException {
// unchanged setting, not changing indicators
// test getting indication from layout
TurnoutSection t = new TurnoutSection("Sec 1 Layout TO", "Sec1 TO 1 N", "Sec1 TO 1 R", "Sec1 TO 1 N", "Sec1 TO 1 R", station);
normSensor.setState(Sensor.INACTIVE);
revSensor.setState(Sensor.ACTIVE);
t.central.state = TurnoutSection.TurnoutCentralSection.State.SHOWING_NORMAL;
normIndicator.setCommandedState(Turnout.THROWN);
revIndicator.setCommandedState(Turnout.CLOSED);
assertEquals(CodeGroupTwoBits.Double01, t.codeSendStart());
assertEquals(Turnout.CLOSED, normIndicator.getKnownState());
assertEquals(Turnout.CLOSED, revIndicator.getKnownState());
}
@Test
public void testIndicationStart() throws JmriException {
// test getting indication from layout
TurnoutSection t = new TurnoutSection("Sec 1 Layout TO", "Sec1 TO 1 N", "Sec1 TO 1 R", "Sec1 TO 1 N", "Sec1 TO 1 R", station);
// check multiple patterns for state -> return value
t.field.lastCodeValue = CodeGroupTwoBits.Double10; // access for testing
layoutTurnout.setCommandedState(Turnout.CLOSED);
assertEquals(CodeGroupTwoBits.Double10, t.indicationStart(), "CLOSED OK");
t.field.lastCodeValue = CodeGroupTwoBits.Double10;
layoutTurnout.setCommandedState(Turnout.THROWN);
assertEquals(CodeGroupTwoBits.Double00, t.indicationStart(), "CLOSED out of correspondence");
t.field.lastCodeValue = CodeGroupTwoBits.Double01;
layoutTurnout.setCommandedState(Turnout.THROWN);
assertEquals(CodeGroupTwoBits.Double01, t.indicationStart(), "THROWN OK");
t.field.lastCodeValue = CodeGroupTwoBits.Double01;
layoutTurnout.setCommandedState(Turnout.CLOSED);
assertEquals(CodeGroupTwoBits.Double00, t.indicationStart(), "THROWN out of correspondence");
}
@Test
public void testIndicationComplete00() throws JmriException {
TurnoutSection t = new TurnoutSection("Sec 1 Layout TO", "Sec1 TO 1 N", "Sec1 TO 1 R", "Sec1 TO 1 N", "Sec1 TO 1 R", station);
normIndicator.setCommandedState(Turnout.INCONSISTENT);
revIndicator.setCommandedState(Turnout.INCONSISTENT);
t.indicationComplete(CodeGroupTwoBits.Double00);
assertEquals(Turnout.CLOSED, normIndicator.getKnownState());
assertEquals(Turnout.CLOSED, revIndicator.getKnownState());
}
@Test
public void testIndicationComplete10() throws JmriException {
TurnoutSection t = new TurnoutSection("Sec 1 Layout TO", "Sec1 TO 1 N", "Sec1 TO 1 R", "Sec1 TO 1 N", "Sec1 TO 1 R", station);
normIndicator.setCommandedState(Turnout.INCONSISTENT);
revIndicator.setCommandedState(Turnout.INCONSISTENT);
t.indicationComplete(CodeGroupTwoBits.Double10);
assertEquals(Turnout.THROWN, normIndicator.getKnownState());
assertEquals(Turnout.CLOSED, revIndicator.getKnownState());
}
@Test
public void testIndicationComplete01() throws JmriException {
TurnoutSection t = new TurnoutSection("Sec 1 Layout TO", "Sec1 TO 1 N", "Sec1 TO 1 R", "Sec1 TO 1 N", "Sec1 TO 1 R", station);
normIndicator.setCommandedState(Turnout.INCONSISTENT);
revIndicator.setCommandedState(Turnout.INCONSISTENT);
t.indicationComplete(CodeGroupTwoBits.Double01);
assertEquals(Turnout.CLOSED, normIndicator.getKnownState());
assertEquals(Turnout.THROWN, revIndicator.getKnownState());
}
private CodeLine codeline;
private Station station;
private boolean requestIndicationStart;
private Turnout layoutTurnout;
private Turnout normIndicator;
private Turnout revIndicator;
private Sensor normSensor;
private Sensor revSensor;
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
JUnitUtil.resetProfileManager();
JUnitUtil.initConfigureManager();
JUnitUtil.initInternalTurnoutManager();
JUnitUtil.initInternalLightManager();
JUnitUtil.initInternalSensorManager();
JUnitUtil.initMemoryManager();
layoutTurnout = InstanceManager.getDefault(TurnoutManager.class).provideTurnout("IT1"); layoutTurnout.setUserName("Sec 1 Layout TO");
normIndicator = InstanceManager.getDefault(TurnoutManager.class).provideTurnout("IT2"); normIndicator.setUserName("Sec1 TO 1 N");
revIndicator = InstanceManager.getDefault(TurnoutManager.class).provideTurnout("IT3"); revIndicator.setUserName("Sec1 TO 1 R");
normSensor = InstanceManager.getDefault(SensorManager.class).provideSensor("IT2"); normSensor.setUserName("Sec1 TO 1 N");
revSensor = InstanceManager.getDefault(SensorManager.class).provideSensor("IT3"); revSensor.setUserName("Sec1 TO 1 R");
codeline = new CodeLine("Code Indication Start", "Code Send Start", "IT101", "IT102", "IT103", "IT104");
requestIndicationStart = false;
station = new Station("test", codeline, new CodeButton("IS221", "IS222")) {
@Override
public void requestIndicationStart() {
requestIndicationStart = true;
}
};
}
@AfterEach
public void tearDown() {
JUnitUtil.tearDown();
}
}