Files
JIMRI/java/test/jmri/jmrix/openlcb/OlcbSensorManagerTest.java
2026-06-17 14:00:51 +02:00

147 lines
4.5 KiB
Java

package jmri.jmrix.openlcb;
import jmri.Sensor;
import jmri.util.JUnitUtil;
import jmri.util.junit.annotations.*;
import jmri.jmrix.can.TestTrafficController;
import org.junit.Assert;
import org.junit.jupiter.api.*;
import org.openlcb.*;
/**
* Tests for the jmri.jmrix.openlcb.OlcbSensorManager class.
*
* @author Bob Jacobsen Copyright 2008, 2010
*/
public class OlcbSensorManagerTest extends jmri.managers.AbstractSensorMgrTestBase {
private static OlcbSystemConnectionMemoScaffold memo;
static Connection connection;
static NodeID nodeID = new NodeID(new byte[]{1, 0, 0, 0, 0, 0});
static java.util.ArrayList<Message> messages;
@Override
public String getSystemName(int i) {
return "MSx010203040506070" + i;
}
@Test
public void testCtor() {
Assert.assertNotNull("exists", l);
}
@Test
@Override
public void testProvideName() {
// create
Sensor t = l.provide(getSystemName(getNumToTest1()));
// check
Assert.assertNotNull("real object returned ", t);
Assert.assertEquals("system name correct ", t, l.getBySystemName(getSystemName(getNumToTest1())));
}
@Override
@Test
public void testDefaultSystemName() {
// create
// olcb addresses are hex values requirng 16 digits.
Sensor t = l.provideSensor(getSystemName(getNumToTest1()));
// check
Assert.assertNotNull("real object returned ", t);
Assert.assertEquals("system name correct " + t.getSystemName(), t, l.getBySystemName(getSystemName(getNumToTest1())));
}
@Override
@Disabled("ignoring this test due to the system name format, needs to be properly coded")
@ToDo("Fix system name format")
@Test
public void testUpperLower() {
}
@Override
@Test
public void testMoveUserName() {
Sensor t1 = l.provideSensor(getSystemName(getNumToTest1()));
Sensor t2 = l.provideSensor(getSystemName(getNumToTest2()));
t1.setUserName("UserName");
Assert.assertSame(t1, l.getByUserName("UserName"));
t2.setUserName("UserName");
Assert.assertSame(t2, l.getByUserName("UserName"));
Assert.assertNull(t1.getUserName());
}
@Test
public void testDotted() {
// olcb addresses are hex values requirng 16 digits.
Sensor t = l.provideSensor("MS01.02.03.04.05.06.07.0" + getNumToTest2());
String name = t.getSystemName();
Assert.assertEquals(t, l.getSensor(name));
}
@Test
@Override
public void testRegisterDuplicateSystemName() throws java.beans.PropertyVetoException,
NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
String s1 = l.makeSystemName("x0102030405060701;x0102030405060702");
String s2 = l.makeSystemName("x0102030405060703;x0102030405060704");
testRegisterDuplicateSystemName(l, s1, s2);
}
@Override
@BeforeEach
public void setUp() {
l = new OlcbSensorManager(memo);
}
@AfterEach
public void tearDown() {
l.dispose();
}
@BeforeAll
@SuppressWarnings("deprecation") // OlcbInterface(NodeID, Connection)
public static void preClassInit() {
JUnitUtil.setUp();
JUnitUtil.initInternalTurnoutManager();
nodeID = new NodeID(new byte[]{1, 0, 0, 0, 0, 0});
messages = new java.util.ArrayList<>();
connection = new AbstractConnection() {
@Override
public void put(Message msg, Connection sender) {
messages.add(msg);
}
};
memo = new OlcbSystemConnectionMemoScaffold(); // this self-registers as 'M'
memo.setProtocol(jmri.jmrix.can.ConfigurationManager.OPENLCB);
memo.setInterface(new OlcbInterface(nodeID, connection) {
@Override
public Connection getOutputConnection() {
return connection;
}
});
memo.setTrafficController(new TestTrafficController());
memo.configureManagers();
jmri.util.JUnitUtil.waitFor(()-> (!messages.isEmpty()),"Initialization Complete message");
}
@AfterAll
public static void postClassTearDown() {
if(memo != null && memo.getInterface() !=null ) {
memo.getInterface().dispose();
}
memo = null;
connection = null;
nodeID = null;
JUnitUtil.clearShutDownManager(); // put in place because AbstractMRTrafficController implementing subclass was not terminated properly
JUnitUtil.tearDown();
}
}