Files
JIMRI/java/test/jmri/jmrix/lenz/hornbyelite/EliteXNetTurnoutTest.java
T
2026-06-17 14:00:51 +02:00

119 lines
3.7 KiB
Java

package jmri.jmrix.lenz.hornbyelite;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import jmri.jmrix.lenz.XNetInterfaceScaffold;
import jmri.jmrix.lenz.XNetReply;
import jmri.Turnout;
import jmri.util.JUnitUtil;
import org.junit.jupiter.api.*;
/**
* Tests for the {@link jmri.jmrix.lenz.hornbyelite.EliteXNetTurnout} class.
*
* @author Bob Jacobsen
*/
public class EliteXNetTurnoutTest extends jmri.jmrix.lenz.XNetTurnoutTest {
@Override
public void checkClosedMsgSent() {
assertEquals( "52 05 8A DD",
lnis.outbound.elementAt(lnis.outbound.size() - 1).toString(),
"closed message");
}
@Override
public void checkThrownMsgSent() {
assertEquals( "52 05 8B DC",
lnis.outbound.elementAt(lnis.outbound.size() - 1).toString(),
"thrown message");
}
@Override
protected void checkClosedOffSent() {
// We do not send off messages to the Elite
}
@Override
protected void checkThrownOffSent() {
// We do not send off messages to the Elite
}
// Test the XNetTurnout message sequence.
@Test
@Override
public void testXNetTurnoutMsgSequence() {
t.setFeedbackMode(jmri.Turnout.DIRECT);
// set closed
assertDoesNotThrow( () -> t.setCommandedState( Turnout.CLOSED ),
"TO exception: {}");
assertEquals(Turnout.CLOSED, t.getCommandedState());
assertEquals( "52 05 8A DD",
lnis.outbound.elementAt(lnis.outbound.size() - 1).toString(),
"on message sent");
// notify that the command station received the reply
XNetReply m = new XNetReply();
m.setElement(0, 0x42);
m.setElement(1, 0x05);
m.setElement(2, 0x04); // set CLOSED
m.setElement(3, 0x43);
((EliteXNetTurnout) t).message(m);
// no wait here. The last reply should cause the turnout to
// set it's state, but it will not cause another reply.
assertEquals(Turnout.CLOSED, t.getKnownState());
}
@Test
@Override
public void checkIncoming() {
t.setFeedbackMode(Turnout.MONITORING);
JUnitUtil.waitFor(() -> t.getFeedbackMode() == Turnout.MONITORING, "Feedback mode set");
listenStatus = Turnout.UNKNOWN;
t.addPropertyChangeListener(new Listen());
// notify the object that somebody else changed it...
XNetReply m = new XNetReply("42 05 04 43"); // set CLOSED
((EliteXNetTurnout) t).message(m);
JUnitUtil.waitFor(() -> listenStatus != Turnout.UNKNOWN, "Turnout state changed");
assertEquals( Turnout.CLOSED, t.getKnownState(), "state after CLOSED message");
listenStatus = Turnout.UNKNOWN;
m = new XNetReply("42 05 08 4F"); // set THROWN
((EliteXNetTurnout) t).message(m);
JUnitUtil.waitFor(() -> listenStatus != Turnout.UNKNOWN, "Turnout state changed");
assertEquals( Turnout.THROWN, t.getKnownState(), "state after THROWN message");
}
@Override
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
// prepare an interface
JUnitUtil.resetInstanceManager();
JUnitUtil.initInternalSensorManager();
lnis = new XNetInterfaceScaffold(new HornbyEliteCommandStation());
t = new EliteXNetTurnout("X", 21, lnis);
jmri.InstanceManager.store(new jmri.NamedBeanHandleManager(), jmri.NamedBeanHandleManager.class);
}
@Override
@AfterEach
public void tearDown() {
lnis.terminateThreads();
JUnitUtil.tearDown();
}
// private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(EliteXNetTurnoutTest.class);
}