Files
JIMRI/java/test/jmri/jmrix/can/cbus/CbusPowerManagerTest.java
2026-06-17 14:00:51 +02:00

182 lines
4.8 KiB
Java

package jmri.jmrix.can.cbus;
import jmri.jmrix.AbstractPowerManagerTestBase;
import jmri.jmrix.can.CanReply;
import jmri.jmrix.can.CanSystemConnectionMemo;
import jmri.jmrix.can.TrafficControllerScaffold;
import jmri.PowerManager;
import jmri.util.JUnitUtil;
import org.junit.Assert;
import org.junit.jupiter.api.*;
/**
*
* @author Paul Bender Copyright (C) 2017
* @author Steve Young Copyright (c) 2019
* @author Andrew Crosland Copyright (c) 2021
*/
public class CbusPowerManagerTest extends AbstractPowerManagerTestBase {
/**
* service routines to simulate receiving on from command station
*/
@Override
protected void hearOn() {
CanReply r = new CanReply( new int[]{CbusConstants.CBUS_TON},0x12);
pwr.reply(r);
}
/**
* service routines to simulate receiving off from command station
*/
@Override
protected void hearOff() {
CanReply r = new CanReply( new int[]{CbusConstants.CBUS_TOF},0x12);
pwr.reply(r);
}
@Override
protected void sendOnReply() {
hearOn();
}
@Override
protected void sendOffReply() {
hearOff();
}
@Override
protected boolean outboundIdleOK(int index) {
return false;
}
@Override
protected boolean outboundOnOK(int index) {
return CbusConstants.CBUS_RTON == controller.outbound.elementAt(index).getOpCode();
}
@Override
protected boolean outboundOffOK(int index) {
return CbusConstants.CBUS_RTOF == controller.outbound.elementAt(index).getOpCode();
}
@Override
protected int numListeners() {
return controller.numListeners();
}
@Override
protected int outboundSize() {
return controller.outbound.size();
}
@Override
protected void hearIdle() {
}
@Override
protected void sendIdleReply() {
Assert.fail("Should not have been called");
}
@Test
public void checkCanMessage() {
// unused but needs to be there for CanListener
jmri.jmrix.can.CanMessage m = new jmri.jmrix.can.CanMessage(new int[]{CbusConstants.CBUS_TON},0x12);
pwr.message(m);
}
@Test
public void checkCanReplyExtendedRtr () throws jmri.JmriException {
CanReply r = new CanReply( new int[]{CbusConstants.CBUS_TOF},0x12);
pwr.reply(r);
Assert.assertEquals("set off", PowerManager.OFF, p.getPower());
r = new CanReply( new int[]{CbusConstants.CBUS_TON},0x12);
r.setExtended(true);
pwr.reply(r);
Assert.assertEquals("still off", PowerManager.OFF, p.getPower());
r.setExtended(false);
r.setRtr(true);
pwr.reply(r);
Assert.assertEquals("still off", PowerManager.OFF, p.getPower());
r.setRtr(false);
pwr.reply(r);
Assert.assertEquals("on", PowerManager.ON, p.getPower());
Assert.assertEquals(0, controller.outbound.size());
}
@Test
public void checkArstBehaviour () throws jmri.JmriException {
// Test effect of ARST on power state
CanReply r = new CanReply( new int[]{CbusConstants.CBUS_TOF},0x12);
pwr.reply(r);
Assert.assertEquals("set off before ARST", PowerManager.OFF, p.getPower());
r = new CanReply( new int[]{CbusConstants.CBUS_ARST},0x12);
pwr.reply(r);
Assert.assertEquals("on after ARST", PowerManager.ON, p.getPower());
// Change from default behaviour
memo.setPowerOnArst(false);
r = new CanReply( new int[]{CbusConstants.CBUS_TOF},0x12);
pwr.reply(r);
Assert.assertEquals("set off before ARST", PowerManager.OFF, p.getPower());
r = new CanReply( new int[]{CbusConstants.CBUS_ARST},0x12);
pwr.reply(r);
Assert.assertEquals("still off after ARST", PowerManager.OFF, p.getPower());
}
@Test
public void checkName() {
Assert.assertNotNull(pwr.getUserName());
}
private CanSystemConnectionMemo memo;
private CbusPowerManager pwr;
private TrafficControllerScaffold controller;
@BeforeEach
@Override
public void setUp() {
JUnitUtil.setUp();
controller = new TrafficControllerScaffold();
memo = new CanSystemConnectionMemo();
memo.setTrafficController(controller);
p = pwr = new CbusPowerManager(memo);
}
@AfterEach
public void tearDown() {
pwr.dispose();
memo.dispose();
controller.terminateThreads();
pwr = null;
memo = null;
controller = null;
JUnitUtil.tearDown();
}
// private static final Logger log = LoggerFactory.getLogger(CbusPowerManagerTest.class);
}