Files
JIMRI/java/test/jmri/jmrix/easydcc/EasyDccProgrammerTest.java
2026-06-17 14:00:51 +02:00

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);
}