125 lines
3.8 KiB
Java
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);
|
|
|
|
}
|