Files
JIMRI/java/test/jmri/jmrix/roco/z21/Z21XNetOpsModeProgrammerTest.java
2026-06-17 14:00:51 +02:00

100 lines
3.3 KiB
Java

package jmri.jmrix.roco.z21;
import jmri.util.JUnitUtil;
import org.junit.Assert;
import org.junit.jupiter.api.*;
import jmri.jmrix.lenz.XNetInterfaceScaffold;
import jmri.jmrix.lenz.XNetMessage;
import jmri.jmrix.lenz.XNetReply;
/**
* Z21XNetOpsModeProgrammerTest.java
*
* Test for the jmri.jmrix.roco.z21.Z21XNetOpsModeProgrammer class
*
* @author Paul Bender
*/
public class Z21XNetOpsModeProgrammerTest extends jmri.jmrix.lenz.XNetOpsModeProgrammerTest {
@Override
@Test
public void testWriteCV() throws jmri.ProgrammerException{
op.writeCV("29",5,pl);
XNetMessage m = XNetMessage.getWriteOpsModeCVMsg(0,5,29,5);
Assert.assertEquals("outbound message sent",1,tc.outbound.size());
Assert.assertEquals("outbound message",m,tc.outbound.elementAt(0));
op.message(new XNetReply("01 04 05")); // send "OK" message to the programmer.
// and now we need to check the status is right
jmri.util.JUnitUtil.waitFor( ()->{ return lastValue == 5; }, "written value" );
Assert.assertEquals("status",jmri.ProgListener.OK,lastStatus);
}
@Override
@Test
public void testReadCV() throws jmri.ProgrammerException{
op.readCV("29",pl);
XNetMessage m = XNetMessage.getVerifyOpsModeCVMsg(0,5,29,0);
Assert.assertEquals("outbound message sent",1,tc.outbound.size());
Assert.assertEquals("outbound message",m,tc.outbound.elementAt(0));
// send a message reply
op.message(new XNetReply("64 14 00 1C 05 69"));
jmri.util.JUnitUtil.waitFor(()->{return lastValue != -1;}, "Receive Called by Programmer");
// and verify the status is right.
Assert.assertEquals("read value",5,lastValue);
Assert.assertEquals("status",jmri.ProgListener.OK,lastStatus);
}
@Override
@Test
public void testConfirmCV() throws jmri.ProgrammerException{
op.confirmCV("29",5,pl);
XNetMessage m = XNetMessage.getVerifyOpsModeCVMsg(0,5,29,5);
Assert.assertEquals("outbound message sent",1,tc.outbound.size());
Assert.assertEquals("outbound message",m,tc.outbound.elementAt(0));
// send a message reply
op.message(new XNetReply("64 14 00 1C 05 69"));
jmri.util.JUnitUtil.waitFor(()->{return lastValue != -1;}, "Receive Called by Programmer");
// and now we need to check the status is right
Assert.assertEquals("confirm value",5,lastValue);
Assert.assertEquals("status",jmri.ProgListener.OK,lastStatus);
}
@BeforeEach
@Override
public void setUp() {
JUnitUtil.setUp();
// infrastructure objects
tc = new XNetInterfaceScaffold(new RocoZ21CommandStation());
op = new Z21XNetOpsModeProgrammer(5, tc);
pl = new jmri.ProgListener(){
@Override
public void programmingOpReply(int value, int status){
lastValue = value;
lastStatus = status;
}
};
lastValue = -1;
lastStatus = -1;
programmer = op;
}
@AfterEach
@Override
public void tearDown() {
tc = null;
op = null;
pl = null;
programmer = null;
JUnitUtil.clearShutDownManager(); // put in place because AbstractMRTrafficController implementing subclass was not terminated properly
JUnitUtil.tearDown();
}
}