Files
JIMRI/java/test/jmri/implementation/ResettingOffsetHighCvProgrammerFacadeTest.java
2026-06-17 14:00:51 +02:00

131 lines
4.2 KiB
Java

package jmri.implementation;
import jmri.ProgListener;
import jmri.Programmer;
import jmri.progdebugger.ProgDebugger;
import org.junit.jupiter.api.*;
import org.junit.Assert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Test the ResettingOffsetHighCvProgrammerFacade class.
*
* @author Bob Jacobsen Copyright 2013, 2014
*
*/
public class ResettingOffsetHighCvProgrammerFacadeTest {
int readValue = -2;
boolean replied = false;
@Test
public void testWriteReadDirect() throws jmri.ProgrammerException, InterruptedException {
ProgDebugger dp = new ProgDebugger();
dp.setTestReadLimit(256);
dp.setTestWriteLimit(256);
Programmer p = new ResettingOffsetHighCvProgrammerFacade(dp, "256", "7", "10", "100", "200");
ProgListener l = new ProgListener() {
@Override
public void programmingOpReply(int value, int status) {
log.debug("callback value={} status={}", value, status);
replied = true;
readValue = value;
}
};
p.writeCV("4", 12, l);
waitReply();
Assert.assertEquals("target written", 12, dp.getCvVal(4));
Assert.assertTrue("index not written", !dp.hasBeenWritten(7));
p.readCV("4", l);
waitReply();
Assert.assertEquals("read back", 12, readValue);
}
@Test
public void testWriteReadDirectHighCV() throws jmri.ProgrammerException, InterruptedException {
ProgDebugger dp = new ProgDebugger();
dp.setTestReadLimit(1024);
dp.setTestWriteLimit(1024);
Programmer p = new ResettingOffsetHighCvProgrammerFacade(dp, "256", "7", "10", "100", "200");
ProgListener l = new ProgListener() {
@Override
public void programmingOpReply(int value, int status) {
log.debug("callback value={} status={}", value, status);
replied = true;
readValue = value;
}
};
p.writeCV("258", 12, l);
waitReply();
Assert.assertEquals("target written", 12, dp.getCvVal(258));
Assert.assertTrue("index not written", !dp.hasBeenWritten(7));
p.readCV("258", l);
waitReply();
Assert.assertEquals("read back", 12, readValue);
}
@Test
public void testWriteReadIndexed() throws jmri.ProgrammerException, InterruptedException {
ProgDebugger dp = new ProgDebugger();
dp.setTestReadLimit(256);
dp.setTestWriteLimit(256);
Programmer p = new ResettingOffsetHighCvProgrammerFacade(dp, "256", "7", "10", "100", "200");
ProgListener l = new ProgListener() {
@Override
public void programmingOpReply(int value, int status) {
log.debug("callback value={} status={}", value, status);
replied = true;
readValue = value;
}
};
p.writeCV("258", 12, l);
waitReply();
Assert.assertTrue("target not written", !dp.hasBeenWritten(258));
Assert.assertEquals("index written", 0, dp.getCvVal(7)); // wrote 220, then wrote back
Assert.assertEquals("value written", 12, dp.getCvVal(58));
Assert.assertEquals("did 3 operations", 3, dp.nOperations);
}
@Test
public void testCvLimit() {
ProgDebugger dp = new ProgDebugger();
dp.setTestReadLimit(256);
dp.setTestWriteLimit(256);
Programmer p = new ResettingOffsetHighCvProgrammerFacade(dp, "256", "7", "10", "100", "200");
Assert.assertTrue("CV limit read OK", p.getCanRead("1024"));
Assert.assertTrue("CV limit write OK", p.getCanWrite("1024"));
Assert.assertTrue("CV limit read fail", !p.getCanRead("1025"));
Assert.assertTrue("CV limit write fail", !p.getCanWrite("1025"));
}
synchronized void waitReply() throws InterruptedException {
while (!replied) {
wait(200);
}
replied = false;
}
@BeforeEach
public void setUp() {
jmri.util.JUnitUtil.setUp();
}
@AfterEach
public void tearDown(){
jmri.util.JUnitUtil.tearDown();
}
private static final Logger log = LoggerFactory.getLogger(ResettingOffsetHighCvProgrammerFacadeTest.class);
}