392 lines
15 KiB
Java
392 lines
15 KiB
Java
package jmri.jmrix.can.cbus;
|
|
|
|
import jmri.jmrix.can.CanSystemConnectionMemo;
|
|
import jmri.jmrix.can.TrafficControllerScaffold;
|
|
import jmri.*;
|
|
import jmri.Manager.NameValidity;
|
|
import jmri.util.JUnitAppender;
|
|
import jmri.util.JUnitUtil;
|
|
|
|
import org.junit.Assert;
|
|
import org.junit.jupiter.api.*;
|
|
|
|
/**
|
|
*
|
|
* @author Paul Bender Copyright (C) 2017
|
|
* @author Steve Young Copyright (C) 2018
|
|
*/
|
|
public class CbusLightManagerTest extends jmri.managers.AbstractLightMgrTestBase {
|
|
|
|
@Test
|
|
public void testctor() {
|
|
// create and register the manager object
|
|
l = new CbusLightManager(memo);
|
|
Assert.assertNotNull(l);
|
|
}
|
|
|
|
@Override
|
|
protected int getNumToTest1() {
|
|
return 10;
|
|
}
|
|
|
|
@Override
|
|
protected int getNumToTest2() {
|
|
return 56517;
|
|
}
|
|
|
|
@Override
|
|
public String getSystemName(int i) {
|
|
return "MLX0A;+" + i;
|
|
}
|
|
|
|
@Test
|
|
public void testPrefix() {
|
|
// check prefix
|
|
Assert.assertTrue(memo.getSystemPrefix().equals("M"));
|
|
}
|
|
|
|
@Override // numeric system name has a + added to it
|
|
@Test
|
|
public void testDefaultSystemName() {
|
|
// create
|
|
String name = "ML+5;-7";
|
|
Light t = l.provideLight(name);
|
|
// check
|
|
Assert.assertNotNull("real object returned ", t);
|
|
Assert.assertEquals("system name correct ", t, l.getBySystemName(name));
|
|
}
|
|
|
|
@Override // numeric system name has a + added to it
|
|
@Test
|
|
public void testProvideName() {
|
|
String name = "ML+574;-7123";
|
|
// create
|
|
Light t = l.provide(name);
|
|
// check
|
|
Assert.assertNotNull("real object returned ", t);
|
|
Assert.assertEquals("system name correct ", t, l.getBySystemName(name));
|
|
}
|
|
|
|
@Test
|
|
public void testLowercaseSystemName() {
|
|
String name1 = "mlxabcdef;xfedcba";
|
|
try {
|
|
l.provideLight(name1);
|
|
Assert.fail("Expected exception not thrown");
|
|
} catch (IllegalArgumentException ex) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: Wrong number of events in address: mlxabcdef;xfedcba");
|
|
}
|
|
String name2 = "ml+n1e77;-n1e45";
|
|
try {
|
|
l.provideLight(name2);
|
|
Assert.fail("Expected exception not thrown");
|
|
} catch (IllegalArgumentException ex) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: Wrong number of events in address: ml+n1e77;-n1e45");
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void threePartFail() {
|
|
try {
|
|
l.provideLight("ML+7;-5;+11");
|
|
Assert.fail("3 split Should have thrown an exception");
|
|
} catch (IllegalArgumentException e) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: Unable to convert Address: +7;-5;+11");
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void testBadCbusLightAddresses() {
|
|
try {
|
|
Light t1 = l.provideLight("ML+N15E6");
|
|
Assert.assertNotNull(t1);
|
|
} catch (IllegalArgumentException e) {
|
|
Assert.fail("Should NOT have thrown an exception");
|
|
}
|
|
|
|
try {
|
|
l.provideLight("MLX;+N15E6");
|
|
Assert.fail("X Should have thrown an exception");
|
|
} catch (IllegalArgumentException e) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: Wrong number of events in address: X;+N15E6");
|
|
}
|
|
|
|
try {
|
|
l.provideLight("MLXA;+N15E6");
|
|
Assert.fail("A Should have thrown an exception");
|
|
} catch (IllegalArgumentException e) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: Wrong number of events in address: XA;+N15E6");
|
|
}
|
|
|
|
try {
|
|
l.provideLight("MLXABC;+N15E6");
|
|
Assert.fail("AC Should have thrown an exception");
|
|
} catch (IllegalArgumentException e) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: Wrong number of events in address: XABC;+N15E6");
|
|
}
|
|
|
|
try {
|
|
l.provideLight("MLXABCDE;+N15E6");
|
|
Assert.fail("ABCDE Should have thrown an exception");
|
|
} catch (IllegalArgumentException e) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: Wrong number of events in address: XABCDE;+N15E6");
|
|
}
|
|
|
|
try {
|
|
l.provideLight("MLXABCDEF0;+N15E6");
|
|
Assert.fail("ABCDEF0 Should have thrown an exception");
|
|
} catch (IllegalArgumentException e) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: Wrong number of events in address: XABCDEF0;+N15E6");
|
|
}
|
|
|
|
try {
|
|
l.provideLight("MLXABCDEF");
|
|
Assert.fail("Single hex Should have thrown an exception");
|
|
} catch (IllegalArgumentException e) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: can't make 2nd event from address XABCDEF");
|
|
}
|
|
|
|
try {
|
|
l.provideLight("MLXABCDEF;");
|
|
Assert.fail("Single hex ; Should have thrown an exception");
|
|
} catch (IllegalArgumentException e) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: Should not end with ; XABCDEF;");
|
|
}
|
|
|
|
try {
|
|
l.provideLight("MLXABCDEF;");
|
|
Assert.fail("Single hex ; Should have thrown an exception");
|
|
} catch (IllegalArgumentException e) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: Should not end with ; XABCDEF;");
|
|
}
|
|
|
|
try {
|
|
l.provideLight("ML;");
|
|
Assert.fail("; no arg Should have thrown an exception");
|
|
} catch (IllegalArgumentException e) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: Should not end with ; ;");
|
|
}
|
|
|
|
try {
|
|
l.provideLight("ML;+N15E6");
|
|
Assert.fail("ML Should have thrown an exception");
|
|
} catch (IllegalArgumentException e) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: Address Too Short? : ");
|
|
}
|
|
|
|
try {
|
|
l.provideLight(";+N15E6");
|
|
Assert.fail("; Should have thrown an exception");
|
|
} catch (IllegalArgumentException e) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: Address Too Short? : ");
|
|
Assert.assertEquals("Address Too Short? : ", e.getMessage());
|
|
}
|
|
|
|
try {
|
|
l.provideLight("S+N156E77;+N15E6");
|
|
Assert.fail("S Should have thrown an exception");
|
|
} catch (IllegalArgumentException e) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: System name \"S+N156E77;+N15E6\" contains invalid character \"S\".");
|
|
Assert.assertEquals("System name \"S+N156E77;+N15E6\" contains invalid character \"S\".", e.getMessage());
|
|
}
|
|
|
|
try {
|
|
l.provideLight("M+N156E77;+N15E6");
|
|
Assert.fail("M Should have thrown an exception");
|
|
} catch (IllegalArgumentException e) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: System name \"M+N156E77;+N15E6\" contains invalid character \"M\".");
|
|
Assert.assertEquals("System name \"M+N156E77;+N15E6\" contains invalid character \"M\".", e.getMessage());
|
|
}
|
|
|
|
try {
|
|
l.provideLight("ML++N156E77");
|
|
Assert.fail("++ Should have thrown an exception");
|
|
} catch (IllegalArgumentException e) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: System name \"++N156E77\" contains invalid character \"++\".");
|
|
Assert.assertEquals("System name \"++N156E77\" contains invalid character \"++\".", e.getMessage());
|
|
}
|
|
|
|
try {
|
|
l.provideLight("ML--N156E77");
|
|
Assert.fail("-- Should have thrown an exception");
|
|
} catch (IllegalArgumentException e) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: System name \"--N156E77\" contains invalid character \"--\".");
|
|
}
|
|
|
|
try {
|
|
l.provideLight("MLN156E+77");
|
|
Assert.fail("E+ Should have thrown an exception");
|
|
} catch (IllegalArgumentException e) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: Wrong number of events in address: N156E+77");
|
|
}
|
|
|
|
try {
|
|
l.provideLight("MLN156+E77");
|
|
Assert.fail("+E Should have thrown an exception");
|
|
} catch (IllegalArgumentException e) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: Wrong number of events in address: N156+E77");
|
|
}
|
|
|
|
try {
|
|
l.provideLight("MLXLKJK;XLKJK");
|
|
Assert.fail("LKJK Should have thrown an exception");
|
|
} catch (IllegalArgumentException e) {
|
|
JUnitAppender.assertErrorMessage("Invalid system name for Light: System name \"XLKJK;XLKJK\" contains invalid character \"J\".");
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void testSimpleNext() throws JmriException {
|
|
var t = l.provideLight("ML+17");
|
|
String next = l.getNextValidSystemName(t);
|
|
Assert.assertEquals("ML+18", next);
|
|
|
|
t = l.provideLight("ML+N45E22");
|
|
next = l.getNextValidSystemName(t);
|
|
Assert.assertEquals("ML+N45E23", next);
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testDoubleNext() throws JmriException {
|
|
var t = l.provideLight("ML+18;-21");
|
|
String next = l.getNextValidSystemName(t);
|
|
Assert.assertEquals("ML+19;-22", next);
|
|
}
|
|
|
|
@Test
|
|
public void testGoodCbusLightAddresses() {
|
|
|
|
Light t = l.provideLight("ML+7");
|
|
Assert.assertNotNull("exists", t);
|
|
|
|
Light t2 = l.provideLight("ML+1;-1");
|
|
Assert.assertNotNull("exists", t2);
|
|
|
|
Light t3 = l.provideLight("ML+654e321");
|
|
Assert.assertNotNull("exists", t3);
|
|
|
|
Light t4 = l.provideLight("ML-654e321;+123e456");
|
|
Assert.assertNotNull("exists", t4);
|
|
|
|
Light t5 = l.provideLight("ML+n654e321");
|
|
Assert.assertNotNull("exists", t5);
|
|
|
|
Light t6 = l.provideLight("ML+N299E17;-N123E456");
|
|
Assert.assertNotNull("exists", t6);
|
|
|
|
Light t7 = l.provideLight("MLX04;X05");
|
|
Assert.assertNotNull("exists", t7);
|
|
|
|
Light t8 = l.provideLight("MLX2301;X30FF");
|
|
Assert.assertNotNull("exists", t8);
|
|
|
|
Light t9 = l.provideLight("MLX410001;X56FFFF");
|
|
Assert.assertNotNull("exists", t9);
|
|
|
|
Light t10 = l.provideLight("MLX6000010001;X72FFFFFF");
|
|
Assert.assertNotNull("exists", t10);
|
|
|
|
Light t11 = l.provideLight("MLX9000010001;X91FFFFFFFF");
|
|
Assert.assertNotNull("exists", t11);
|
|
|
|
Light t12 = l.provideLight("MLXB00D60010001;XB1FFFAAFFFFF");
|
|
Assert.assertNotNull("exists", t12);
|
|
|
|
Light t13 = l.provideLight("MLXD00D0060010001;XD1FFFAAAFFFFFE");
|
|
Assert.assertNotNull("exists", t13);
|
|
|
|
Light t14 = l.provideLight("MLXF00D0A0600100601;XF1FFFFAAFAFFFFFE");
|
|
Assert.assertNotNull("exists", t14);
|
|
}
|
|
|
|
@Test
|
|
@Override
|
|
public void testGetEntryToolTip() {
|
|
super.testGetEntryToolTip();
|
|
String x = l.getEntryToolTip();
|
|
Assert.assertTrue(x.contains("<html>"));
|
|
|
|
Assert.assertTrue(l.allowMultipleAdditions("M77"));
|
|
}
|
|
|
|
@Test
|
|
public void testvalidSystemNameFormat() {
|
|
|
|
Assert.assertEquals("ML+123", NameValidity.VALID, l.validSystemNameFormat("MS+123"));
|
|
Assert.assertEquals("ML+N123E123", NameValidity.VALID, l.validSystemNameFormat("MS+N123E123"));
|
|
Assert.assertEquals("ML+123;456", NameValidity.VALID, l.validSystemNameFormat("MS+123;456"));
|
|
Assert.assertEquals("ML1", NameValidity.VALID, l.validSystemNameFormat("MS1"));
|
|
Assert.assertEquals("ML1;2", NameValidity.VALID, l.validSystemNameFormat("MS1;2"));
|
|
Assert.assertEquals("ML65535", NameValidity.VALID, l.validSystemNameFormat("MS65535"));
|
|
Assert.assertEquals("ML-65535", NameValidity.VALID, l.validSystemNameFormat("MS-65535"));
|
|
Assert.assertEquals("ML100001", NameValidity.VALID, l.validSystemNameFormat("MS100001"));
|
|
Assert.assertEquals("ML-100001", NameValidity.VALID, l.validSystemNameFormat("MS-100001"));
|
|
|
|
Assert.assertEquals("ML+1;+0", NameValidity.VALID, l.validSystemNameFormat("ML+1;+0"));
|
|
Assert.assertEquals("ML+1;-0", NameValidity.VALID, l.validSystemNameFormat("ML+1;-0"));
|
|
Assert.assertEquals("ML+0;+17", NameValidity.VALID, l.validSystemNameFormat("ML+0;+17"));
|
|
Assert.assertEquals("ML+0;-17", NameValidity.VALID, l.validSystemNameFormat("ML+0;-17"));
|
|
Assert.assertEquals("ML+0", NameValidity.VALID, l.validSystemNameFormat("ML+0"));
|
|
Assert.assertEquals("ML-0", NameValidity.VALID, l.validSystemNameFormat("ML-0"));
|
|
|
|
Assert.assertEquals("M", NameValidity.INVALID, l.validSystemNameFormat("M"));
|
|
Assert.assertEquals("ML", NameValidity.INVALID, l.validSystemNameFormat("ML"));
|
|
Assert.assertEquals("ML-65536", NameValidity.INVALID, l.validSystemNameFormat("ML-65536"));
|
|
Assert.assertEquals("ML65536", NameValidity.INVALID, l.validSystemNameFormat("ML65536"));
|
|
Assert.assertEquals("ML7;0", NameValidity.INVALID, l.validSystemNameFormat("ML7;0"));
|
|
Assert.assertEquals("ML0;7", NameValidity.INVALID, l.validSystemNameFormat("ML0;7"));
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testProvideswhenNotNull() {
|
|
Light t = l.provideLight("+4");
|
|
Light ta = l.provideLight("+4");
|
|
Assert.assertTrue(t == ta);
|
|
}
|
|
|
|
@Test
|
|
public void testcreateNewLightException() {
|
|
Exception ex = Assertions.assertThrows(IllegalArgumentException.class,
|
|
() -> ((CbusLightManager)l).createNewLight("",null));
|
|
Assertions.assertNotNull(ex);
|
|
JUnitAppender.assertErrorMessageStartsWith("Unable to create CbusLight, System name must start with \"ML\"");
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testValidSystemNameConfig() {
|
|
Assert.assertTrue(l.validSystemNameConfig("ML+123"));
|
|
Assert.assertFalse(l.validSystemNameConfig(""));
|
|
}
|
|
|
|
private CanSystemConnectionMemo memo = null;
|
|
private TrafficControllerScaffold tc = null;
|
|
|
|
@BeforeEach
|
|
@Override
|
|
public void setUp() {
|
|
JUnitUtil.setUp();
|
|
memo = new CanSystemConnectionMemo();
|
|
tc = new TrafficControllerScaffold();
|
|
memo.setTrafficController(tc);
|
|
l = new CbusLightManager(memo);
|
|
}
|
|
|
|
@AfterEach
|
|
public void tearDown() {
|
|
l.dispose();
|
|
Assertions.assertNotNull(tc);
|
|
tc.terminateThreads();
|
|
tc = null;
|
|
Assertions.assertNotNull(memo);
|
|
memo.dispose();
|
|
memo = null;
|
|
JUnitUtil.tearDown();
|
|
|
|
}
|
|
|
|
// private static final Logger log = LoggerFactory.getLogger(CbusLightManagerTest.class);
|
|
}
|