187 lines
5.6 KiB
Java
187 lines
5.6 KiB
Java
/**
|
|
* JUnit tests for the EasyDccProgrammer class
|
|
*
|
|
* @author Bob Jacobsen
|
|
*/
|
|
package jmri.jmrix.easydcc;
|
|
|
|
import org.junit.Assert;
|
|
import org.junit.jupiter.api.*;
|
|
|
|
import jmri.*;
|
|
import jmri.util.JUnitUtil;
|
|
|
|
public class EasyDccProgrammerTest extends jmri.jmrix.AbstractProgrammerTest {
|
|
|
|
private EasyDccTrafficControlScaffold t = null;
|
|
private EasyDccSystemConnectionMemo memo = null;
|
|
private EasyDccListenerScaffold l = null;
|
|
private EasyDccProgrammer p = null;
|
|
|
|
@Test
|
|
@Override
|
|
public void testDefault() {
|
|
Assert.assertEquals("Check Default", ProgrammingMode.PAGEMODE,
|
|
programmer.getMode());
|
|
}
|
|
|
|
@Override
|
|
@Test
|
|
public void testDefaultViaBestMode() {
|
|
Assert.assertEquals("Check Default", ProgrammingMode.PAGEMODE,
|
|
((EasyDccProgrammer)programmer).getBestMode());
|
|
}
|
|
|
|
@Test
|
|
public void testWriteSequence() throws JmriException {
|
|
p.setMode(ProgrammingMode.PAGEMODE);
|
|
|
|
// and do the write
|
|
p.writeCV("10", 20, l);
|
|
|
|
// check write message sent
|
|
Assert.assertEquals("write message sent", 1, t.outbound.size());
|
|
Assert.assertEquals("write message contents", "P 00A 14",
|
|
((t.outbound.elementAt(0))).toString());
|
|
}
|
|
|
|
@Test
|
|
public void testWriteRegisterSequence() throws JmriException {
|
|
// set register mode
|
|
p.setMode(ProgrammingMode.REGISTERMODE);
|
|
|
|
// and do the write
|
|
p.writeCV("3", 12, l);
|
|
|
|
// check write message sent
|
|
Assert.assertEquals("write message sent", 1, t.outbound.size());
|
|
Assert.assertEquals("write message contents", "S3 0C",
|
|
((t.outbound.elementAt(0))).toString());
|
|
}
|
|
|
|
@Test
|
|
public void testReadSequence() throws JmriException {
|
|
p.setMode(ProgrammingMode.PAGEMODE);
|
|
|
|
// and do the read
|
|
p.readCV("10", l);
|
|
|
|
// check "read command" message sent
|
|
Assert.assertEquals("read message sent", 1, t.outbound.size());
|
|
Assert.assertEquals("read message contents", "R 00A",
|
|
((t.outbound.elementAt(0))).toString());
|
|
// reply from programmer arrives
|
|
EasyDccReply r = new EasyDccReply();
|
|
r.setElement(0, 'C');
|
|
r.setElement(1, 'V');
|
|
r.setElement(2, '0');
|
|
r.setElement(3, '1');
|
|
r.setElement(4, '0');
|
|
r.setElement(5, '1');
|
|
r.setElement(6, '4');
|
|
t.sendTestReply(r);
|
|
Assert.assertEquals(" programmer listener invoked", 1, rcvdInvoked);
|
|
Assert.assertEquals(" value read", 20, rcvdValue);
|
|
Assert.assertEquals(" Status read", ProgListener.OK, rcvdStatus);
|
|
}
|
|
|
|
@Test
|
|
public void testReadRegisterSequence() throws JmriException {
|
|
// set register mode
|
|
p.setMode(ProgrammingMode.REGISTERMODE);
|
|
|
|
// and do the read
|
|
p.readCV("3", l);
|
|
|
|
// check "read command" message sent
|
|
Assert.assertEquals("read message sent", 1, t.outbound.size());
|
|
Assert.assertEquals("read message contents", "V3",
|
|
((t.outbound.elementAt(0))).toString());
|
|
// reply from programmer arrives
|
|
EasyDccReply r = new EasyDccReply();
|
|
r.setElement(0, 'V');
|
|
r.setElement(1, '3');
|
|
r.setElement(2, '1');
|
|
r.setElement(3, '4');
|
|
t.sendTestReply(r);
|
|
|
|
Assert.assertEquals(" programmer listener invoked", 1, rcvdInvoked);
|
|
Assert.assertEquals(" value read", 20, rcvdValue);
|
|
Assert.assertEquals(" Status read", ProgListener.OK, rcvdStatus);
|
|
}
|
|
|
|
/**
|
|
* The command station will return a CV001-- format message if programming
|
|
* fails. Test handling of that.
|
|
*
|
|
* @throws JmriException when needed
|
|
*/
|
|
@Test
|
|
public void testReadFailSequence() throws JmriException {
|
|
p.setMode(ProgrammingMode.PAGEMODE);
|
|
|
|
// and do the read
|
|
p.readCV("10", l);
|
|
|
|
// check "read command" message sent
|
|
Assert.assertEquals("read message sent", 1, t.outbound.size());
|
|
Assert.assertEquals("read message contents", "R 00A",
|
|
((t.outbound.elementAt(0))).toString());
|
|
// reply from programmer arrives
|
|
EasyDccReply r = new EasyDccReply();
|
|
r.setElement(0, 'C');
|
|
r.setElement(1, 'V');
|
|
r.setElement(2, '0');
|
|
r.setElement(3, '1');
|
|
r.setElement(4, '0');
|
|
r.setElement(5, '-');
|
|
r.setElement(6, '-');
|
|
t.sendTestReply(r);
|
|
Assert.assertEquals(" programmer listener not invoked again", 1, rcvdInvoked);
|
|
}
|
|
|
|
// internal class to simulate a Programming Listener
|
|
private class EasyDccListenerScaffold implements ProgListener {
|
|
|
|
EasyDccListenerScaffold() {
|
|
rcvdInvoked = 0;
|
|
rcvdValue = 0;
|
|
rcvdStatus = 0;
|
|
}
|
|
|
|
@Override
|
|
public void programmingOpReply(int value, int status) {
|
|
rcvdValue = value;
|
|
rcvdStatus = status;
|
|
rcvdInvoked++;
|
|
}
|
|
}
|
|
int rcvdValue;
|
|
int rcvdStatus;
|
|
int rcvdInvoked;
|
|
|
|
@BeforeEach
|
|
@Override
|
|
public void setUp() {
|
|
JUnitUtil.setUp();
|
|
memo = new EasyDccSystemConnectionMemo("E", "EasyDCC Test");
|
|
t = new EasyDccTrafficControlScaffold(memo);
|
|
memo.setEasyDccTrafficController(t);
|
|
l = new EasyDccListenerScaffold();
|
|
programmer = p = new EasyDccProgrammer(memo);
|
|
}
|
|
|
|
@AfterEach
|
|
@Override
|
|
public void tearDown() {
|
|
t.terminateThreads();
|
|
programmer = p = null;
|
|
memo.dispose();
|
|
memo = null;
|
|
JUnitUtil.tearDown();
|
|
}
|
|
|
|
// private static final Logger log = LoggerFactory.getLogger(EasyDccProgrammerTest.class);
|
|
|
|
}
|