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

174 lines
4.8 KiB
Java

package jmri.jmrix.powerline;
import jmri.NamedBean;
import jmri.Sensor;
import jmri.util.JUnitAppender;
import jmri.util.JUnitUtil;
import jmri.util.junit.annotations.*;
import java.beans.PropertyVetoException;
import org.junit.Assert;
import org.junit.jupiter.api.*;
/**
* JUnit tests for the SerialSensorManager class.
*
* @author Bob Jacobsen Copyright 2003, 2007, 2008 Converted to multiple
* connection
* @author kcameron Copyright (C) 2011
* @author Paul Bender Copyright (C) 2016
*/
public class SerialSensorManagerTest extends jmri.managers.AbstractSensorMgrTestBase {
@Override
public String getSystemName(int i) {
return "PSP" + i;
}
/**
* Number of sensor to test. Made a separate method so it can be overridden
* in subclasses that do or don't support various numbers
*/
@Override
protected int getNumToTest1() {
return 8;
}
@Override
protected int getNumToTest2() {
return 9;
}
@Test
public void testSensorCreationAndRegistration() {
l.provideSensor("PSA3");
l.provideSensor("PSA11");
l.provideSensor("PSP8");
l.provideSensor("PSP9");
l.provideSensor("PSK13");
l.provideSensor("PSJ6");
l.provideSensor("PSA15");
l.provideSensor("PSB5");
l.provideSensor("PSH7");
l.provideSensor("PSI7");
l.provideSensor("PSJ7");
}
@Test
@Override
public void testProvideName() {
// create
Sensor t = l.provide(getSystemName(getNumToTest1()));
// check
Assert.assertTrue("real object returned ", t != null);
Assert.assertTrue("system name correct ", t == l.getBySystemName(getSystemName(getNumToTest1())));
}
@Override
@Test
public void testDefaultSystemName() {
// create
// powerline systems require a module letter(?) which
// isn't provided by makeSystemName();
Sensor t = l.provideSensor(getSystemName(getNumToTest1()));
// check
Assert.assertTrue("real object returned ", t != null);
Assert.assertTrue("system name correct ", t == l.getBySystemName(getSystemName(getNumToTest1())));
}
@Override
@Disabled("ignoring this test due to the system name format, needs to be properly coded")
@Test
@ToDo("modify system name format, then remove this overriden test so that the test in the parent class can run")
public void testUpperLower() {
}
@Test
@Override
public void testMoveUserName() {
Sensor t1 = l.provideSensor(getSystemName(getNumToTest1()));
Sensor t2 = l.provideSensor(getSystemName(getNumToTest2()));
t1.setUserName("UserName");
Assert.assertTrue(t1 == l.getByUserName("UserName"));
t2.setUserName("UserName");
Assert.assertTrue(t2 == l.getByUserName("UserName"));
Assert.assertTrue(null == t1.getUserName());
}
@Override
@Test
public void testRegisterDuplicateSystemName() throws PropertyVetoException, NoSuchFieldException,
NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
String s1 = l.makeSystemName("B1");
String s2 = l.makeSystemName("B2");
testRegisterDuplicateSystemName(l, s1, s2);
}
@Override
@Test
public void testMakeSystemName() {
try {
l.makeSystemName("1");
Assert.fail("Expected exception not thrown");
} catch (NamedBean.BadSystemNameException ex) {
Assert.assertEquals("\"PS1\" is not a recognized format.", ex.getMessage());
}
JUnitAppender.assertErrorMessage("Invalid system name for Sensor: \"PS1\" is not a recognized format.");
String s = l.makeSystemName("B1");
Assert.assertNotNull(s);
Assert.assertFalse(s.isEmpty());
}
@Override
protected String getASystemNameWithNoPrefix(){
return "B2";
}
@Override
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
// replace the SerialTrafficController to get clean reset
SerialTrafficController t = new jmri.jmrix.powerline.SerialTrafficController() {
SerialTrafficController test() {
return this;
}
}.test();
Assert.assertNotNull("exists", t);
SerialSystemConnectionMemo m = new SerialSystemConnectionMemo();
m.setSerialAddress(new SerialAddress(m));
t.setAdapterMemo(m);
l = new SerialSensorManager(t) {
@Override
public void reply(SerialReply r) {
}
};
}
@AfterEach
public void tearDown() {
l.dispose();
JUnitUtil.clearShutDownManager(); // put in place because AbstractMRTrafficController implementing subclass was not terminated properly
JUnitUtil.tearDown();
}
}