220 lines
7.3 KiB
Java
220 lines
7.3 KiB
Java
package jmri.jmrix.dccpp;
|
|
|
|
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.Turnout;
|
|
import jmri.util.JUnitUtil;
|
|
|
|
import org.junit.jupiter.api.*;
|
|
|
|
/**
|
|
* Tests for the jmri.jmrix.dccpp.DCCppTurnout class
|
|
*
|
|
* @author Paul Bender
|
|
* @author Mark Underwood
|
|
*/
|
|
public class DCCppTurnoutTest extends jmri.implementation.AbstractTurnoutTestBase {
|
|
|
|
@Override
|
|
public int numListeners() {
|
|
return dnis.numListeners();
|
|
}
|
|
|
|
private DCCppInterfaceScaffold dnis;
|
|
|
|
@Override
|
|
public void checkClosedMsgSent() {
|
|
assertEquals( "a 11 1 0",
|
|
dnis.outbound.elementAt(dnis.outbound.size() - 1).toString(),
|
|
"closed message");
|
|
}
|
|
|
|
@Override
|
|
public void checkThrownMsgSent() {
|
|
assertEquals( "a 11 1 1",
|
|
dnis.outbound.elementAt(dnis.outbound.size() - 1).toString(),
|
|
"thrown message");
|
|
}
|
|
|
|
@Test
|
|
public void testCtor() {
|
|
assertNotNull(t);
|
|
}
|
|
|
|
// Test the initialization sequence.
|
|
@Test
|
|
public void testInitSequence() {
|
|
int num = ((DCCppTurnout)t).getNumber();
|
|
assertEquals(42, num);
|
|
|
|
int[] vals = DCCppTurnout.getModeValues();
|
|
assertEquals(6, vals.length);
|
|
assertEquals(Turnout.MONITORING, vals[4]);
|
|
assertEquals(Turnout.EXACT, vals[5]);
|
|
|
|
String[] names = DCCppTurnout.getModeNames();
|
|
assertEquals(6, names.length);
|
|
assertEquals("BSTURNOUT", names[4]);
|
|
assertEquals("BSOUTPUT", names[5]);
|
|
// TODO: CHeck some othr stuff
|
|
|
|
// Check a few basic things
|
|
assertTrue(t.canInvert());
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testMonitoringMode() {
|
|
// Set mode to Monitoring
|
|
t.setFeedbackMode(Turnout.MONITORING);
|
|
assertEquals(Turnout.MONITORING, t.getFeedbackMode());
|
|
|
|
// Check that state changes appropriately
|
|
t.setCommandedState(Turnout.THROWN);
|
|
//Assert.assertEquals(t.getState(), Turnout.THROWN);
|
|
DCCppMessage m = dnis.outbound.elementAt(0);
|
|
assertTrue(m.isTurnoutCmdMessage());
|
|
assertEquals(1, m.getTOStateInt());
|
|
assertEquals(Turnout.INCONSISTENT, t.getState());
|
|
DCCppReply r = DCCppReply.parseDCCppReply("H 42 1");
|
|
((DCCppTurnout) t).message(r);
|
|
assertEquals(Turnout.THROWN, t.getState());
|
|
|
|
t.setCommandedState(Turnout.CLOSED);
|
|
//Assert.assertEquals(t.getState(), Turnout.CLOSED);
|
|
m = dnis.outbound.elementAt(1);
|
|
assertTrue(m.isTurnoutCmdMessage());
|
|
assertEquals(0, m.getTOStateInt());
|
|
assertEquals(Turnout.INCONSISTENT, t.getState());
|
|
r = DCCppReply.parseDCCppReply("H 42 0");
|
|
((DCCppTurnout) t).message(r);
|
|
assertEquals(Turnout.CLOSED, t.getState());
|
|
|
|
// Test Inverted Mode
|
|
// Check that state changes appropriately
|
|
t.setInverted(true);
|
|
t.setCommandedState(Turnout.THROWN);
|
|
//Assert.assertEquals(t.getState(), Turnout.THROWN);
|
|
m = dnis.outbound.elementAt(2);
|
|
assertTrue(m.isTurnoutCmdMessage());
|
|
assertEquals(0, m.getTOStateInt());
|
|
assertEquals(Turnout.INCONSISTENT, t.getState());
|
|
r = DCCppReply.parseDCCppReply("H 42 0");
|
|
((DCCppTurnout) t).message(r);
|
|
assertEquals(Turnout.THROWN, t.getState());
|
|
|
|
t.setCommandedState(Turnout.CLOSED);
|
|
//Assert.assertEquals(t.getState(), Turnout.CLOSED);
|
|
m = dnis.outbound.elementAt(3);
|
|
assertTrue(m.isTurnoutCmdMessage());
|
|
assertEquals(1, m.getTOStateInt());
|
|
assertEquals(Turnout.INCONSISTENT, t.getState());
|
|
r = DCCppReply.parseDCCppReply("H 42 1");
|
|
((DCCppTurnout) t).message(r);
|
|
assertEquals(Turnout.CLOSED, t.getState());
|
|
}
|
|
|
|
@Test
|
|
public void testExactMode() {
|
|
// Set mode to Exact
|
|
t.setFeedbackMode(Turnout.EXACT);
|
|
assertEquals(Turnout.EXACT, t.getFeedbackMode());
|
|
|
|
// Check that state changes appropriately
|
|
t.setCommandedState(Turnout.THROWN);
|
|
//Assert.assertEquals(t.getState(), Turnout.THROWN);
|
|
DCCppMessage m = dnis.outbound.elementAt(0);
|
|
assertTrue(m.isOutputCmdMessage());
|
|
assertEquals(0, m.getOutputStateInt());
|
|
assertEquals(Turnout.INCONSISTENT, t.getState());
|
|
DCCppReply r = DCCppReply.parseDCCppReply("Y 42 0");
|
|
((DCCppTurnout) t).message(r);
|
|
assertEquals(Turnout.THROWN, t.getState());
|
|
|
|
t.setCommandedState(Turnout.CLOSED);
|
|
//Assert.assertEquals(t.getState(), Turnout.CLOSED);
|
|
m = dnis.outbound.elementAt(1);
|
|
assertTrue(m.isOutputCmdMessage());
|
|
assertEquals(1, m.getOutputStateInt());
|
|
assertEquals(Turnout.INCONSISTENT, t.getState());
|
|
r = DCCppReply.parseDCCppReply("Y 42 1");
|
|
((DCCppTurnout) t).message(r);
|
|
assertEquals(Turnout.CLOSED, t.getState());
|
|
|
|
// Test Inverted Mode
|
|
// Check that state changes appropriately
|
|
t.setInverted(true);
|
|
t.setCommandedState(Turnout.THROWN);
|
|
//Assert.assertEquals(t.getState(), Turnout.THROWN);
|
|
m = dnis.outbound.elementAt(2);
|
|
assertTrue(m.isOutputCmdMessage());
|
|
assertEquals(1, m.getOutputStateInt());
|
|
assertEquals(Turnout.INCONSISTENT, t.getState());
|
|
r = DCCppReply.parseDCCppReply("Y 42 1");
|
|
((DCCppTurnout) t).message(r);
|
|
assertEquals(Turnout.THROWN, t.getState());
|
|
|
|
t.setCommandedState(Turnout.CLOSED);
|
|
//Assert.assertEquals(t.getState(), Turnout.CLOSED);
|
|
m = dnis.outbound.elementAt(3);
|
|
assertTrue(m.isOutputCmdMessage());
|
|
assertEquals(0, m.getOutputStateInt());
|
|
assertEquals(Turnout.INCONSISTENT, t.getState());
|
|
r = DCCppReply.parseDCCppReply("Y 42 0");
|
|
((DCCppTurnout) t).message(r);
|
|
assertEquals(Turnout.CLOSED, t.getState());
|
|
}
|
|
|
|
@Test
|
|
public void testDirectMode() {
|
|
// Set mode to DIRECT
|
|
t.setFeedbackMode(Turnout.DIRECT);
|
|
assertEquals(Turnout.DIRECT, t.getFeedbackMode());
|
|
|
|
// Check that state changes appropriately
|
|
t.setCommandedState(Turnout.THROWN);
|
|
DCCppMessage m = dnis.outbound.elementAt(0);
|
|
assertTrue(m.isAccessoryMessage());
|
|
assertEquals(1, m.getAccessoryStateInt());
|
|
assertEquals(Turnout.THROWN, t.getState());
|
|
|
|
t.setCommandedState(Turnout.CLOSED);
|
|
m = dnis.outbound.elementAt(1);
|
|
assertTrue(m.isAccessoryMessage());
|
|
assertEquals(0, m.getAccessoryStateInt());
|
|
assertEquals(Turnout.CLOSED, t.getState());
|
|
}
|
|
|
|
@Test
|
|
@Override
|
|
public void testDispose() {
|
|
t.setCommandedState(jmri.Turnout.CLOSED); // in case registration with TrafficController
|
|
|
|
//is deferred to after first use
|
|
t.dispose();
|
|
assertEquals( 1, numListeners(), "controller listeners remaining");
|
|
}
|
|
|
|
|
|
@Override
|
|
@BeforeEach
|
|
public void setUp() {
|
|
JUnitUtil.setUp();
|
|
// infrastructure objects
|
|
dnis = new DCCppInterfaceScaffold(new DCCppCommandStation());
|
|
t = new DCCppTurnout("DCCPP", 42, dnis);
|
|
}
|
|
|
|
@Override
|
|
@AfterEach
|
|
public void tearDown() {
|
|
dnis.terminateThreads();
|
|
dnis = null;
|
|
JUnitUtil.tearDown();
|
|
|
|
}
|
|
|
|
}
|