159 lines
5.2 KiB
Java
159 lines
5.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;
|
|
|
|
/**
|
|
*
|
|
* @author Bob Jacobsen Copyright 2014
|
|
*
|
|
*/
|
|
@Timeout(60)
|
|
public class TwoIndexTcsProgrammerFacadeTest {
|
|
|
|
int readValue = -2;
|
|
boolean replied = false;
|
|
|
|
@Test
|
|
public void testWriteReadDirect() throws jmri.ProgrammerException, InterruptedException {
|
|
|
|
ProgDebugger dp = new ProgDebugger();
|
|
Programmer p = new TwoIndexTcsProgrammerFacade(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();
|
|
Assert.assertEquals("target written", 12, dp.getCvVal(4));
|
|
Assert.assertTrue("index not written", !dp.hasBeenWritten(81));
|
|
|
|
p.readCV("4", l);
|
|
waitReply();
|
|
Assert.assertEquals("read back", 12, readValue);
|
|
Assert.assertTrue("index not written", !dp.hasBeenWritten(81));
|
|
}
|
|
|
|
@Test
|
|
public void testWriteReadDoubleIndexed() throws jmri.ProgrammerException, InterruptedException {
|
|
|
|
ProgDebugger dp = new ProgDebugger();
|
|
Programmer p = new TwoIndexTcsProgrammerFacade(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("T2CV.10.20", 12 * 256 + 13, l);
|
|
waitReply();
|
|
Assert.assertEquals("index 1 written", 10, dp.getCvVal(201));
|
|
Assert.assertEquals("index 2 written", 20, dp.getCvVal(202));
|
|
Assert.assertEquals("value MSB written", 12, dp.getCvVal(203));
|
|
Assert.assertEquals("value LSB written", 13, dp.getCvVal(204));
|
|
|
|
dp.clearHasBeenWritten(201);
|
|
dp.clearHasBeenWritten(202);
|
|
dp.clearHasBeenWritten(203);
|
|
dp.clearHasBeenWritten(204);
|
|
dp.resetCv(203, 12);
|
|
dp.resetCv(204, 20);
|
|
|
|
p.readCV("T2CV.10.20", l);
|
|
waitReply();
|
|
Assert.assertEquals("index 1 written", 100 + 10, dp.getCvVal(201));
|
|
Assert.assertEquals("index 2 written", 20, dp.getCvVal(202));
|
|
Assert.assertEquals("dummy 204 written", 0, dp.getCvVal(204)); // TCS says this is arbitrary, so
|
|
// we write the offset value
|
|
|
|
Assert.assertEquals("read back", 12 * 256 + 0, readValue); // We get 0 from the LSB
|
|
// because we wrote the offset
|
|
// and the test Programmer remembers that
|
|
}
|
|
|
|
@Test
|
|
public void testWriteReadTripleIndexed() throws jmri.ProgrammerException, InterruptedException {
|
|
|
|
ProgDebugger dp = new ProgDebugger();
|
|
Programmer p = new TwoIndexTcsProgrammerFacade(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("T3CV.10.20.30", 13, l);
|
|
waitReply();
|
|
Assert.assertEquals("index 1 written", 10, dp.getCvVal(201));
|
|
Assert.assertEquals("value written", 13, dp.getCvVal(202));
|
|
Assert.assertEquals("index written to MSB", 20, dp.getCvVal(203));
|
|
Assert.assertEquals("index written to LSB", 30, dp.getCvVal(204));
|
|
|
|
dp.clearHasBeenWritten(201);
|
|
dp.resetCv(202, 13);
|
|
dp.clearHasBeenWritten(203);
|
|
dp.clearHasBeenWritten(204);
|
|
|
|
p.readCV("T3CV.10.20.30", l);
|
|
waitReply();
|
|
Assert.assertEquals("index 1 written", 100 + 10, dp.getCvVal(201));
|
|
Assert.assertEquals("SI not written, left at start value", 13, dp.getCvVal(202));
|
|
Assert.assertEquals("index written to MSB", 20, dp.getCvVal(203));
|
|
Assert.assertEquals("index written to LSB", 30, dp.getCvVal(204));
|
|
|
|
Assert.assertEquals("read back", 13, readValue);
|
|
}
|
|
|
|
@Test
|
|
public void testCvLimit() {
|
|
ProgDebugger dp = new ProgDebugger();
|
|
dp.setTestReadLimit(1024);
|
|
dp.setTestWriteLimit(1024);
|
|
|
|
Programmer p = new TwoIndexTcsProgrammerFacade(dp);
|
|
|
|
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"));
|
|
}
|
|
|
|
// 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 Logger log = LoggerFactory.getLogger(TwoIndexTcsProgrammerFacadeTest.class);
|
|
|
|
}
|