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

125 lines
3.8 KiB
Java

package jmri.implementation;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import jmri.ProgListener;
import jmri.Programmer;
import jmri.ProgrammerException;
import jmri.progdebugger.ProgDebugger;
import org.junit.jupiter.api.*;
/**
* Test the VerifyWriteProgrammerFacade class.
*
* @author Bob Jacobsen Copyright 2013
*
*/
public class VerifyWriteProgrammerFacadeTest {
private int readValue = -2;
private boolean replied = false;
@Test
public void testWriteReadDirect() throws jmri.ProgrammerException, InterruptedException {
var dp = new ProgDebugger() {
private int readCount = 0;
@Override
public boolean getCanRead(String cv) { return false; }
@Override
public boolean getCanRead() { return false; }
@Override
public void readCV(String cv, ProgListener p) throws ProgrammerException { readCount++; super.readCV(cv, p); }
};
Programmer p = new VerifyWriteProgrammerFacade(dp);
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();
assertEquals( 12, dp.getCvVal(4), "target written");
assertEquals( 0, dp.readCount, "reads");
p.readCV("4", l);
waitReply();
assertEquals( 12, readValue, "read back");
}
@Test
public void testWriteReadVerify() throws jmri.ProgrammerException, InterruptedException {
var dp = new ProgDebugger() {
private int readCount = 0;
@Override
public boolean getCanRead(String cv) { return true; }
@Override
public boolean getCanRead() { return true; }
@Override
public void readCV(String cv, ProgListener p) throws ProgrammerException { readCount++; super.readCV(cv, p); }
};
Programmer p = new VerifyWriteProgrammerFacade(dp);
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();
assertEquals( 12, dp.getCvVal(4), "target written");
assertEquals( 1, dp.readCount, "reads");
p.readCV("4", l);
waitReply();
assertEquals( 12, readValue, "read back");
}
@Test
public void testCvLimit() {
ProgDebugger dp = new ProgDebugger();
dp.setTestReadLimit(1024);
dp.setTestWriteLimit(1024);
Programmer p = new VerifyWriteProgrammerFacade(dp);
assertTrue( p.getCanRead("1024"), "CV limit read OK");
assertTrue( p.getCanWrite("1024"), "CV limit write OK");
assertFalse( p.getCanRead("1025"), "CV limit read fail");
assertFalse( p.getCanWrite("1025"), "CV limit write fail");
}
// from here down is testing infrastructure
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 org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(VerifyWriteProgrammerFacadeTest.class);
}