Files
JIMRI/java/test/jmri/managers/DefaultSignalMastManagerTest.java
2026-06-17 14:00:51 +02:00

132 lines
4.8 KiB
Java

package jmri.managers;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNotSame;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import jmri.JmriException;
import jmri.SignalMast;
import jmri.implementation.AbstractSignalMast;
import jmri.implementation.SignalMastRepeater;
import jmri.util.JUnitUtil;
import jmri.InstanceManager;
import jmri.jmrix.internal.InternalSystemConnectionMemo;
import org.junit.jupiter.api.*;
/**
*
* @author Paul Bender Copyright (C) 2017
*/
public class DefaultSignalMastManagerTest extends AbstractProvidingManagerTestBase<jmri.SignalMastManager,SignalMast> {
@Test
public void testCTor() {
DefaultSignalMastManager t = (DefaultSignalMastManager) l;
assertNotNull( t, "exists");
}
@SuppressWarnings("ProtectedInnerClass") // accessible to DefaultSignalMastManager
protected static class MastA extends AbstractSignalMast {
@SuppressWarnings("PublicConstructorInNonPublicClass") // reflection requires public access
public MastA(String systemName) {
super(systemName);
}
}
@SuppressWarnings("ProtectedInnerClass") // accessible to DefaultSignalMastManager
protected static class MastB extends AbstractSignalMast {
@SuppressWarnings("PublicConstructorInNonPublicClass") // reflection requires public access
public MastB(String systemName) {
super(systemName);
}
}
@Test
public void testProvideCustomMast() throws JmriException {
DefaultSignalMastManager mgr = (DefaultSignalMastManager) l;
SignalMast ma = mgr.provideCustomSignalMast("IM333", MastA.class);
SignalMast mb = mgr.provideCustomSignalMast("IM444", MastB.class);
assertInstanceOf( MastA.class, ma);
assertInstanceOf( MastB.class, mb);
SignalMast maa = mgr.provideCustomSignalMast("IM333", MastA.class);
assertSame(ma, maa);
SignalMast mbb = mgr.provideCustomSignalMast("IM444", MastB.class);
assertSame(mb, mbb);
SignalMast mac = mgr.provideCustomSignalMast("IM300", MastA.class);
assertNotSame(ma, mac);
SignalMast mbc = mgr.provideCustomSignalMast("IM400", MastB.class);
assertNotSame(mb, mbc);
Exception ex = assertThrows(JmriException.class, () ->
mgr.provideCustomSignalMast("IM300", MastB.class));
assertTrue( ex.getMessage().contains("system name is already used"),
"system name text not in exception");
assertTrue( ex.getMessage().contains("MastA"), "MastA not in exception text");
assertTrue( ex.getMessage().contains("MastB"), "MastB not in exception text");
}
@Test
public void testProvideRepeater() throws JmriException {
DefaultSignalMastManager mgr = (DefaultSignalMastManager) l;
SignalMast m1 = mgr.provideCustomSignalMast("IM331", MastA.class);
SignalMast m2 = mgr.provideCustomSignalMast("IM332", MastA.class);
SignalMast m3 = mgr.provideCustomSignalMast("IM333", MastA.class);
SignalMastRepeater rpx = mgr.provideRepeater(m1, m2);
assertSame(m1, rpx.getMasterMast());
assertSame(m2, rpx.getSlaveMast());
SignalMastRepeater rpy = mgr.provideRepeater(m1, m3);
assertSame(m1, rpy.getMasterMast());
assertSame(m3, rpy.getSlaveMast());
assertNotSame(rpx, rpy);
assertSame(rpx, mgr.provideRepeater(m1, m2));
assertSame(rpy, mgr.provideRepeater(m1, m3));
Exception ex = assertThrows(JmriException.class, () ->
mgr.provideRepeater(m2, m1));
String message = ex.getMessage();
Assertions.assertNotNull(message);
assertTrue( message.contains("repeater already exists the wrong way"),
"wrong way repeater not in exception text");
jmri.util.JUnitAppender.assertErrorMessage("Signal repeater IM332:IM331 already exists the wrong way");
}
@Test
@Override
@Disabled("No manager-specific system name validation at present")
public void testMakeSystemNameWithNoPrefixNotASystemName() {}
@Test
@Override
@Disabled("No manager-specific system name validation at present")
public void testMakeSystemNameWithPrefixNotASystemName() {}
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
l = new DefaultSignalMastManager(InstanceManager.getDefault(InternalSystemConnectionMemo.class));
}
@AfterEach
public void tearDown() {
l.dispose();
l = null;
JUnitUtil.tearDown();
}
// private static final Logger log = LoggerFactory.getLogger(DefaultSignalMastManagerTest.class);
}