Files
JIMRI/java/test/jmri/jmrix/loconet/SE8cSignalHeadTest.java
T
2026-06-17 14:00:51 +02:00

268 lines
13 KiB
Java

package jmri.jmrix.loconet;
import java.beans.PropertyChangeListener;
import jmri.util.JUnitUtil;
import org.junit.Assert;
import org.junit.jupiter.api.*;
/**
*
* @author Paul Bender Copyright (C) 2017
*/
public class SE8cSignalHeadTest {
@Test
public void testCTor() {
SE8cSignalHead t = new SE8cSignalHead(5);
Assert.assertNotNull("exists",t);
}
@Test
public void testIt() {
SE8cSignalHead sh1 = new SE8cSignalHead(12);
Assert.assertEquals("default appearance upon construction", jmri.SignalHead.DARK, sh1.getAppearance());
Assert.assertEquals("signal head number assigned", 12, sh1.getNumber());
Assert.assertNull("User Name check", sh1.getUserName());
sh1.init(14);
Assert.assertEquals("signal head number changed", 14, sh1.getNumber());
sh1.setAppearance(jmri.SignalHead.GREEN);
Assert.assertEquals("appearance was changed", jmri.SignalHead.GREEN, sh1.getAppearance());
sh1.setAppearance(jmri.SignalHead.RED);
Assert.assertEquals("appearance was changed", jmri.SignalHead.RED, sh1.getAppearance());
sh1.setAppearance(jmri.SignalHead.YELLOW);
Assert.assertEquals("appearance was changed", jmri.SignalHead.YELLOW, sh1.getAppearance());
sh1 = new SE8cSignalHead(16, "Test Head 2");
Assert.assertEquals("signal head number assigned", 16, sh1.getNumber());
Assert.assertEquals("User Name check", "Test Head 2", sh1.getUserName());
lnis.outbound.removeAllElements();
Assert.assertEquals("no transmitted messages yet", 0, lnis.outbound.size());
sh1.updateOutput();
Assert.assertEquals("appearance was changed", jmri.SignalHead.DARK, sh1.getAppearance());
Assert.assertEquals("one transmitted message", 1, lnis.outbound.size());
Assert.assertEquals("transmit message OpCode", LnConstants.OPC_SW_REQ, lnis.outbound.get(0).getOpCode());
Assert.assertEquals("transmit message byte 1", 0x10, lnis.outbound.get(0).getElement(1));
Assert.assertEquals("transmit message Byte 2", 0x30, lnis.outbound.get(0).getElement(2));
sh1.setAppearance(jmri.SignalHead.YELLOW);
Assert.assertEquals("appearance was changed", jmri.SignalHead.YELLOW, sh1.getAppearance());
Assert.assertEquals("now two transmitted message", 2, lnis.outbound.size());
Assert.assertEquals("transmit message OpCode", LnConstants.OPC_SW_REQ, lnis.outbound.get(1).getOpCode());
Assert.assertEquals("transmit message byte 1", 0x10, lnis.outbound.get(1).getElement(1));
Assert.assertEquals("transmit message Byte 2", 0x10, lnis.outbound.get(1).getElement(2));
sh1.setAppearance(jmri.SignalHead.GREEN);
Assert.assertEquals("appearance was changed", jmri.SignalHead.GREEN, sh1.getAppearance());
Assert.assertEquals("now three transmitted message", 3, lnis.outbound.size());
Assert.assertEquals("transmit message OpCode", LnConstants.OPC_SW_REQ, lnis.outbound.get(2).getOpCode());
Assert.assertEquals("transmit message byte 1", 0x0F, lnis.outbound.get(2).getElement(1));
Assert.assertEquals("transmit message Byte 2", 0x30, lnis.outbound.get(2).getElement(2));
sh1.setAppearance(jmri.SignalHead.RED);
Assert.assertEquals("appearance was changed", jmri.SignalHead.RED, sh1.getAppearance());
Assert.assertEquals("now three transmitted message", 4, lnis.outbound.size());
Assert.assertEquals("transmit message OpCode", LnConstants.OPC_SW_REQ, lnis.outbound.get(3).getOpCode());
Assert.assertEquals("transmit message byte 1", 0x0F, lnis.outbound.get(3).getElement(1));
Assert.assertEquals("transmit message Byte 2", 0x10, lnis.outbound.get(3).getElement(2));
sh1.message(lnis.outbound.get(2));
Assert.assertEquals("appearance was changed", jmri.SignalHead.GREEN, sh1.getAppearance());
sh1.message(lnis.outbound.get(1));
Assert.assertEquals("appearance was changed", jmri.SignalHead.YELLOW, sh1.getAppearance());
sh1.message(lnis.outbound.get(3));
Assert.assertEquals("appearance was changed", jmri.SignalHead.RED, sh1.getAppearance());
sh1.message(lnis.outbound.get(0));
Assert.assertEquals("appearance was changed", jmri.SignalHead.DARK, sh1.getAppearance());
sh1.message(lnis.outbound.get(3));
Assert.assertEquals("appearance was changed", jmri.SignalHead.RED, sh1.getAppearance());
Assert.assertEquals("a bunch of transmitted messages", 4, lnis.outbound.size());
lnis.outbound.removeAllElements();
Assert.assertEquals("no transmitted messages yet", 0, lnis.outbound.size());
Assert.assertEquals("appearance is", jmri.SignalHead.RED, sh1.getAppearance());
sh1.updateOutput();
Assert.assertEquals("one transmitted messages", 1, lnis.outbound.size());
sh1.setLit(false);
Assert.assertEquals("two transmitted messages", 2, lnis.outbound.size());
Assert.assertEquals("appearance was changed", jmri.SignalHead.RED, sh1.getAppearance());
Assert.assertEquals("checking message opcode from setting unlit", 0xb0, lnis.outbound.get(1).getOpCode());
Assert.assertEquals("transmit message byte 1 from setting unlit", 0x10, lnis.outbound.get(1).getElement(1));
Assert.assertEquals("transmit message Byte 2 from setting unlit", 0x30, lnis.outbound.get(1).getElement(2));
sh1.setLit(true);
Assert.assertEquals("now three transmitted message", 3, lnis.outbound.size());
sh1.setAppearance(jmri.SignalHead.FLASHGREEN);
Assert.assertEquals("appearance was changed", jmri.SignalHead.FLASHGREEN, sh1.getAppearance());
Assert.assertEquals("now four transmitted message", 4, lnis.outbound.size());
Assert.assertEquals("transmit message OpCode", LnConstants.OPC_SW_REQ, lnis.outbound.get(3).getOpCode());
Assert.assertEquals("transmit message byte 1", 0x0F, lnis.outbound.get(3).getElement(1));
Assert.assertEquals("transmit message Byte 2", 0x30, lnis.outbound.get(3).getElement(2));
jmri.util.JUnitUtil.fasterWaitFor(()->{return lnis.outbound.size() >= 5;},"message received");
Assert.assertEquals("now five transmitted message", 5, lnis.outbound.size());
Assert.assertEquals("transmit message byte 1", 0x10, lnis.outbound.get(4).getElement(1));
Assert.assertEquals("transmit message Byte 2", 0x30, lnis.outbound.get(4).getElement(2));
sh1.setAppearance(jmri.SignalHead.FLASHRED);
Assert.assertEquals("appearance was changed", jmri.SignalHead.FLASHRED, sh1.getAppearance());
Assert.assertEquals("now six transmitted message", 6, lnis.outbound.size());
Assert.assertEquals("transmit message OpCode", LnConstants.OPC_SW_REQ, lnis.outbound.get(5).getOpCode());
Assert.assertEquals("transmit message byte 1", 0x10, lnis.outbound.get(5).getElement(1));
Assert.assertEquals("transmit message Byte 2", 0x30, lnis.outbound.get(5).getElement(2));
jmri.util.JUnitUtil.fasterWaitFor(()->{return lnis.outbound.size() >= 7;},"message received");
Assert.assertEquals("now seven transmitted message", 7, lnis.outbound.size());
Assert.assertEquals("transmit message byte 1", 0x0f, lnis.outbound.get(6).getElement(1));
Assert.assertEquals("transmit message Byte 2", 0x10, lnis.outbound.get(6).getElement(2));
sh1.setAppearance(jmri.SignalHead.FLASHYELLOW);
Assert.assertEquals("appearance was changed", jmri.SignalHead.FLASHYELLOW, sh1.getAppearance());
Assert.assertEquals("now eight transmitted message", 8, lnis.outbound.size());
Assert.assertEquals("transmit message OpCode", LnConstants.OPC_SW_REQ, lnis.outbound.get(7).getOpCode());
Assert.assertEquals("transmit message byte 1", 0x10, lnis.outbound.get(7).getElement(1));
Assert.assertEquals("transmit message Byte 2", 0x10, lnis.outbound.get(7).getElement(2));
jmri.util.JUnitUtil.fasterWaitFor(()->{return lnis.outbound.size() >= 9;},"message received");
Assert.assertEquals("now nine transmitted message", 9, lnis.outbound.size());
Assert.assertEquals("transmit message byte 1", 0x10, lnis.outbound.get(8).getElement(1));
Assert.assertEquals("transmit message Byte 2", 0x30, lnis.outbound.get(8).getElement(2));
sh1.setAppearance(jmri.SignalHead.DARK);
Assert.assertEquals("appearance was changed", jmri.SignalHead.DARK, sh1.getAppearance());
Assert.assertEquals("now ten transmitted message", 10, lnis.outbound.size());
Assert.assertEquals("transmit message OpCode", LnConstants.OPC_SW_REQ, lnis.outbound.get(9).getOpCode());
Assert.assertEquals("transmit message byte 1", 0x10, lnis.outbound.get(9).getElement(1));
Assert.assertEquals("transmit message Byte 2", 0x30, lnis.outbound.get(9).getElement(2));
sh1.message(lnis.outbound.get(0));
Assert.assertEquals("receive message", jmri.SignalHead.RED, sh1.getAppearance());
sh1.message(lnis.outbound.get(3));
Assert.assertEquals("receive message", jmri.SignalHead.GREEN, sh1.getAppearance());
sh1.message(lnis.outbound.get(6));
Assert.assertEquals("receive message", jmri.SignalHead.RED, sh1.getAppearance());
sh1.message(lnis.outbound.get(7));
Assert.assertEquals("receive message", jmri.SignalHead.YELLOW, sh1.getAppearance());
sh1.message(lnis.outbound.get(8));
Assert.assertEquals("receive message", jmri.SignalHead.DARK, sh1.getAppearance());
LocoNetMessage ln2 = lnis.outbound.get(0);
ln2.setOpCode(0xb1);
sh1.message(ln2);
Assert.assertEquals("receive message", jmri.SignalHead.RED, sh1.getAppearance());
ln2 = lnis.outbound.get(3);
ln2.setOpCode(0xb1);
ln2.setElement(2, 0x0f);
ln2.setElement(2, 0x20);
sh1.message(ln2);
Assert.assertEquals("receive message", jmri.SignalHead.GREEN, sh1.getAppearance());
ln2 = lnis.outbound.get(6);
ln2.setOpCode(0xb1);
sh1.message(ln2);
Assert.assertEquals("receive message", jmri.SignalHead.RED, sh1.getAppearance());
ln2 = lnis.outbound.get(7);
ln2.setOpCode(0xb1);
sh1.message(ln2);
Assert.assertEquals("receive message", jmri.SignalHead.YELLOW, sh1.getAppearance());
ln2 = lnis.outbound.get(8);
ln2.setOpCode(0xb1);
ln2.setElement(2, 0x20);
sh1.message(ln2);
Assert.assertEquals("receive message", jmri.SignalHead.DARK, sh1.getAppearance());
ln2 = lnis.outbound.get(7);
ln2.setOpCode(0xb3);
sh1.message(ln2);
Assert.assertEquals("receive message", jmri.SignalHead.DARK, sh1.getAppearance());
Assert.assertEquals("number of listeners", 0, sh1.getListenerRefs().size());
Assert.assertFalse(propChangeFlag);
PropertyChangeListener pcl = new java.beans.PropertyChangeListener() {
@Override
public void propertyChange(java.beans.PropertyChangeEvent e) {
propChangeFlag = true;
}
};
PropertyChangeListener[] listeners= memo.getPropertyChangeListeners();
for (int i = 0; i < listeners.length; ++i) {
if (listeners[i].equals(pcl)) {
Assert.fail("did not expect to find the property change listener registered yet!");
}
}
boolean foundIt = false;
sh1.addPropertyChangeListener(pcl);
for (int i = 0; i < listeners.length; ++i) {
if (listeners[i].equals(pcl)) {
foundIt = true;
}
}
Assert.assertFalse("did not expect to find the property change listener registered yet!", foundIt);
sh1.dispose();
listeners= memo.getPropertyChangeListeners();
for (int i = 0; i < listeners.length; ++i) {
if (listeners[i].equals(pcl)) {
Assert.fail("Property change listener still registered after dispose()");
}
}
}
jmri.jmrix.loconet.LocoNetInterfaceScaffold lnis;
LocoNetSystemConnectionMemo memo;
boolean propChangeFlag;
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
JUnitUtil.resetProfileManager();
memo = new jmri.jmrix.loconet.LocoNetSystemConnectionMemo();
lnis = new LocoNetInterfaceScaffold(memo);
memo.setLnTrafficController(lnis);
jmri.InstanceManager.store(lnis, jmri.jmrix.loconet.LnTrafficController.class);
jmri.InstanceManager.setDefault(jmri.jmrix.loconet.LnTrafficController.class, lnis);
memo.configureCommandStation(jmri.jmrix.loconet.LnCommandStationType.COMMAND_STATION_DCS100,false,false,false,false,false);
// memo.configureManagers(); // Skip this step, else autonomous loconet traffic is generated!
jmri.InstanceManager.store(memo,jmri.jmrix.loconet.LocoNetSystemConnectionMemo.class);
propChangeFlag=false;
}
@AfterEach
public void tearDown() {
memo.dispose();
JUnitUtil.tearDown();
}
// private static final Logger log = LoggerFactory.getLogger(SE8cSignalHeadTest.class);
}