268 lines
13 KiB
Java
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);
|
|
|
|
}
|