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

233 lines
13 KiB
Java

package jmri.jmrix.maple;
import jmri.Manager.NameValidity;
import jmri.util.JUnitAppender;
import jmri.util.JUnitUtil;
import org.junit.Assert;
import org.junit.jupiter.api.*;
/**
* JUnit tests for the SerialAddress utility class.
*
* @author Dave Duchamp Copyright 2004
*/
public class SerialAddressTest {
@Test
public void testValidSystemNameFormat() {
Assert.assertTrue("valid format - KL2", NameValidity.VALID == SerialAddress.validSystemNameFormat("KL2", 'L', "K"));
Assert.assertTrue("invalid format - KL", NameValidity.VALID != SerialAddress.validSystemNameFormat("KL", 'L', "K"));
JUnitAppender.assertWarnMessage("missing numerical node address in system name: KL");
Assert.assertTrue("valid format - KL2005", NameValidity.VALID == SerialAddress.validSystemNameFormat("KL2005", 'L', "K"));
Assert.assertTrue("valid format - KT2005", NameValidity.VALID == SerialAddress.validSystemNameFormat("KT2005", 'T', "K"));
Assert.assertTrue("valid format - KS205", NameValidity.VALID == SerialAddress.validSystemNameFormat("KS205", 'S', "K"));
Assert.assertTrue("invalid format - KY2005", NameValidity.VALID != SerialAddress.validSystemNameFormat("KY2005", 'L', "K"));
JUnitAppender.assertErrorMessage("invalid character in header field of system name: KY2005");
Assert.assertTrue("valid format - KL1", NameValidity.VALID == SerialAddress.validSystemNameFormat("KL1", 'L', "K"));
Assert.assertTrue("valid format - KL1000", NameValidity.VALID == SerialAddress.validSystemNameFormat("KL1000", 'L', "K"));
// note: address format is invalid (out of range) as checked upon user input
Assert.assertTrue("invalid format - KL0", NameValidity.VALID != SerialAddress.validSystemNameFormat("KL0", 'L', "K"));
JUnitAppender.assertWarnMessage("node address field out of range in system name - KL0");
Assert.assertTrue("valid format - KL2999", NameValidity.VALID == SerialAddress.validSystemNameFormat("KL2999", 'L', "K"));
Assert.assertTrue("valid format - KL7999", NameValidity.VALID == SerialAddress.validSystemNameFormat("KL7999", 'L', "K"));
Assert.assertTrue("invalid format - KL2oo5", NameValidity.VALID != SerialAddress.validSystemNameFormat("KL2oo5", 'L', "K"));
JUnitAppender.assertWarnMessage("invalid character in number field of system name: KL2oo5");
JUnitAppender.assertWarnMessage("node address field out of range in system name - KL2oo5");
}
@Test
public void testGetBitFromSystemName() {
Assert.assertEquals("KL2", 2, SerialAddress.getBitFromSystemName("KL2", "K"));
Assert.assertEquals("KL2002", 2002, SerialAddress.getBitFromSystemName("KL2002", "K"));
Assert.assertEquals("KL1", 1, SerialAddress.getBitFromSystemName("KL1", "K"));
Assert.assertEquals("KL2001", 2001, SerialAddress.getBitFromSystemName("KL2001", "K"));
Assert.assertEquals("KL999", 999, SerialAddress.getBitFromSystemName("KL999", "K"));
Assert.assertEquals("KL2999", 2999, SerialAddress.getBitFromSystemName("KL2999", "K"));
Assert.assertEquals("KL29O9", 0, SerialAddress.getBitFromSystemName("KL29O9", "K"));
JUnitAppender.assertWarnMessage("invalid character in number field of system name: KL29O9");
}
@Test
public void testValidSystemNameConfig() {
InputBits.setNumInputBits(40);
OutputBits.setNumOutputBits(201);
Assert.assertTrue("valid config KL47", SerialAddress.validSystemNameConfig("KL47", 'L', memo));
Assert.assertTrue("valid config KS17", SerialAddress.validSystemNameConfig("KS17", 'S', memo));
Assert.assertTrue("valid config KL148", SerialAddress.validSystemNameConfig("KL148", 'L', memo));
Assert.assertTrue("invalid config KL1049", !SerialAddress.validSystemNameConfig("KL1049", 'L', memo));
JUnitAppender.assertWarnMessage("Maple hardware address out of range in system name: KL1049");
Assert.assertTrue("valid config KS24", SerialAddress.validSystemNameConfig("KS24", 'S', memo));
Assert.assertTrue("valid config KS40", SerialAddress.validSystemNameConfig("KS40", 'S', memo));
Assert.assertTrue("invalid config KS41", !SerialAddress.validSystemNameConfig("KS41", 'S', memo));
JUnitAppender.assertWarnMessage("Maple hardware address out of range in system name: KS41");
Assert.assertTrue("invalid config KS0", !SerialAddress.validSystemNameConfig("KS0", 'S', memo));
JUnitAppender.assertWarnMessage("node address field out of range in system name - KS0");
Assert.assertTrue("valid config KT201", SerialAddress.validSystemNameConfig("KT201", 'T', memo));
Assert.assertTrue("invalid config KT202", !SerialAddress.validSystemNameConfig("KT202", 'T', memo));
JUnitAppender.assertWarnMessage("Maple hardware address out of range in system name: KT202");
Assert.assertTrue("invalid config KT4129", !SerialAddress.validSystemNameConfig("KT4129", 'T', memo));
JUnitAppender.assertWarnMessage("Maple hardware address out of range in system name: KT4129");
}
@Test
public void testNormalizeSystemName() {
Assert.assertEquals("normalize KL007", "KL7", SerialAddress.normalizeSystemName("KL007", "K"));
Assert.assertEquals("normalize KL004007", "KL4007", SerialAddress.normalizeSystemName("KL004007", "K"));
Assert.assertEquals("normalize KL12007", "", SerialAddress.normalizeSystemName("KL12007", "K"));
JUnitAppender.assertWarnMessage("node address field out of range in system name - KL12007");
}
@Test
public void testConstructSystemName() {
Assert.assertEquals("make KL7", "KL7", SerialAddress.makeSystemName("L", 7, "K"));
Assert.assertEquals("make KT7", "KT7", SerialAddress.makeSystemName("T", 7, "K"));
Assert.assertEquals("make KS7", "KS7", SerialAddress.makeSystemName("S", 7, "K"));
Assert.assertEquals("make illegal 1", "", SerialAddress.makeSystemName("L", 0, "K"));
JUnitAppender.assertWarnMessage("illegal address range proposed for system name - 0");
Assert.assertEquals("make illegal 2", "", SerialAddress.makeSystemName("L", 9990, "K"));
JUnitAppender.assertWarnMessage("illegal address range proposed for system name - 9990");
Assert.assertEquals("make illegal 3", "", SerialAddress.makeSystemName("R", 120, "K"));
JUnitAppender.assertErrorMessage("illegal type character proposed for system name - R");
Assert.assertEquals("make KS999", "KS999", SerialAddress.makeSystemName("S", 999, "K"));
Assert.assertEquals("make KS1000", "KS1000", SerialAddress.makeSystemName("S", 1000, "K"));
}
@Test
public void testIsOutputBitFree() {
// create a new turnout
jmri.TurnoutManager tMgr = memo.getTurnoutManager();
jmri.Turnout t1 = tMgr.newTurnout("KT034", "userT34");
// check that turnout was created correctly including normalizing system name
Assert.assertEquals("create KT34 check 1", "KT34", t1.getSystemName());
// create a new turnout
jmri.Turnout t2 = tMgr.newTurnout("KT32", "userT32");
// check that turnout was created correctly
Assert.assertEquals("create KT32 check 1", "KT32", t2.getSystemName());
// create two new lights
jmri.LightManager lMgr = memo.getLightManager();
jmri.Light lgt1 = lMgr.newLight("KL36", "userL36");
jmri.Light lgt2 = lMgr.newLight("KL037", "userL37");
// check that the lights were created as expected
Assert.assertEquals("create KL36 check", "KL36", lgt1.getSystemName());
Assert.assertEquals("create KL37 check", "KL37", lgt2.getSystemName());
// test
Assert.assertEquals("test bit 30", "", SerialAddress.isOutputBitFree(30, "K"));
Assert.assertEquals("test bit 34", "KT34", SerialAddress.isOutputBitFree(34, "K"));
Assert.assertEquals("test bit 36", "KL36", SerialAddress.isOutputBitFree(36, "K"));
Assert.assertEquals("test bit 37", "KL37", SerialAddress.isOutputBitFree(37, "K"));
Assert.assertEquals("test bit 38", "", SerialAddress.isOutputBitFree(38, "K"));
Assert.assertEquals("test bit 39", "", SerialAddress.isOutputBitFree(39, "K"));
Assert.assertEquals("test bit 1000", "", SerialAddress.isOutputBitFree(1000, "K"));
}
@Test
public void testIsInputBitFree() {
jmri.SensorManager sMgr = memo.getSensorManager();
// create 4 new sensors
jmri.Sensor s1 = sMgr.newSensor("KS16", "userS16");
jmri.Sensor s2 = sMgr.newSensor("KS014", "userS14");
jmri.Sensor s3 = sMgr.newSensor("KS17", "userS17");
jmri.Sensor s4 = sMgr.newSensor("KS12", "userS12");
// check that the sensors were created as expected
Assert.assertEquals("create KS16 check", "KS16", s1.getSystemName());
Assert.assertEquals("create KS14 check", "KS14", s2.getSystemName());
Assert.assertEquals("create KS17 check", "KS17", s3.getSystemName());
Assert.assertEquals("create KS12 check", "KS12", s4.getSystemName());
// test
Assert.assertEquals("test bit 10", "", SerialAddress.isInputBitFree(10, "K"));
Assert.assertEquals("test bit 11", "", SerialAddress.isInputBitFree(11, "K"));
Assert.assertEquals("test bit 12", "KS12", SerialAddress.isInputBitFree(12, "K"));
Assert.assertEquals("test bit 13", "", SerialAddress.isInputBitFree(13, "K"));
Assert.assertEquals("test bit 14", "KS14", SerialAddress.isInputBitFree(14, "K"));
Assert.assertEquals("test bit 15", "", SerialAddress.isInputBitFree(15, "K"));
Assert.assertEquals("test bit 16", "KS16", SerialAddress.isInputBitFree(16, "K"));
Assert.assertEquals("test bit 17", "KS17", SerialAddress.isInputBitFree(17, "K"));
Assert.assertEquals("test bit 18", "", SerialAddress.isInputBitFree(18, "K"));
}
@Test
public void testGetUserNameFromSystemName() {
jmri.SensorManager sMgr = jmri.InstanceManager.sensorManagerInstance();
// create 4 new sensors
sMgr.newSensor("KS16", "userS16");
sMgr.newSensor("KS014", "userS14");
sMgr.newSensor("KS17", "userS17");
sMgr.newSensor("KS12", "userS12");
jmri.LightManager lMgr = memo.getLightManager();
lMgr.newLight("KL36", "userL36");
lMgr.newLight("KL037", "userL37");
jmri.TurnoutManager tMgr = memo.getTurnoutManager();
tMgr.newTurnout("KT32", "userT32");
tMgr.newTurnout("KT34", "userT34");
Assert.assertEquals("test KS16", "userS16", SerialAddress.getUserNameFromSystemName("KS16", "K"));
Assert.assertEquals("test KS12", "userS12", SerialAddress.getUserNameFromSystemName("KS12", "K"));
Assert.assertEquals("test KS17", "userS17", SerialAddress.getUserNameFromSystemName("KS17", "K"));
Assert.assertEquals("test undefined KS10", "", SerialAddress.getUserNameFromSystemName("KS10", "K"));
Assert.assertEquals("test KL37", "userL37", SerialAddress.getUserNameFromSystemName("KL37", "K"));
Assert.assertEquals("test KL36", "userL36", SerialAddress.getUserNameFromSystemName("KL36", "K"));
Assert.assertEquals("test undefined KL30", "", SerialAddress.getUserNameFromSystemName("KL30", "K"));
Assert.assertEquals("test KT32", "userT32", SerialAddress.getUserNameFromSystemName("KT32", "K"));
Assert.assertEquals("test KT34", "userT34", SerialAddress.getUserNameFromSystemName("KT34", "K"));
Assert.assertEquals("test undefined KT39", "", SerialAddress.getUserNameFromSystemName("KT39", "K"));
}
// from here down is testing infrastructure
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
// create and register the manager objects
SerialTrafficControlScaffold tc = new SerialTrafficControlScaffold();
memo = new MapleSystemConnectionMemo("K", "Maple");
memo.setTrafficController(tc);
new InputBits(tc);
new OutputBits(tc);
new SerialNode(4, 0,tc);
new SerialNode(10, 0,tc);
new SerialNode(99, 0,tc);
new SerialNode(18, 0,tc);
SerialTurnoutManager l = new SerialTurnoutManager(memo);
jmri.InstanceManager.setTurnoutManager(l);
memo.setTurnoutManager(l);
SerialLightManager lgt = new SerialLightManager(memo);
jmri.InstanceManager.setLightManager(lgt);
memo.setLightManager(lgt);
SerialSensorManager s = new SerialSensorManager(memo);
jmri.InstanceManager.setSensorManager(s);
memo.setSensorManager(s);
}
private MapleSystemConnectionMemo memo = null;
@AfterEach
public void tearDown() {
memo = null;
JUnitUtil.clearShutDownManager(); // put in place because AbstractMRTrafficController implementing subclass was not terminated properly
JUnitUtil.tearDown();
}
}