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

254 lines
8.3 KiB
Java

package jmri.implementation;
import jmri.InstanceManager;
import jmri.SignalHead;
import jmri.SignalHeadManager;
import jmri.SignalMast;
import jmri.SignalSystem;
import jmri.util.JUnitUtil;
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;
/**
* Tests for the SignalHeadSignalMast implementation
*
* @author Bob Jacobsen Copyright (C) 2009
* updated to JUnit4 2016
* updated to JUnit5 2024
*/
public class SignalHeadSignalMastTest {
@Test
public void testSetup() {
assertNotNull(InstanceManager.getDefault(SignalHeadManager.class));
assertNotNull(InstanceManager.getDefault(SignalHeadManager.class).getSignalHead("IH1"));
}
@Test
public void testTwoNameOneHeadCtorOK() {
assertNotNull(
new SignalHeadSignalMast("IF$shsm:basic:one-searchlight(IH1)", "user"));
}
@Test
public void testHeld() {
SignalMast m = new SignalHeadSignalMast("IF$shsm:basic:one-searchlight(IH1)", "user");
assertFalse(m.getHeld());
m.setHeld(true);
assertTrue(m.getHeld());
SignalHead ih1 = InstanceManager.getDefault(SignalHeadManager.class).getSignalHead("IH1");
assertNotNull(ih1);
assertTrue( ih1.getHeld() );
m.setHeld(false);
assertFalse( m.getHeld());
assertFalse( ih1.getHeld());
}
@Test
public void testLit() {
SignalMast m = new SignalHeadSignalMast("IF$shsm:basic:one-searchlight(IH1)", "user");
assertTrue(m.getLit());
m.setLit(false);
assertFalse( m.getLit());
SignalHead ih1 = InstanceManager.getDefault(SignalHeadManager.class).getSignalHead("IH1");
assertNotNull( ih1 );
assertFalse( ih1.getLit());
m.setLit(true);
assertTrue(m.getLit());
assertTrue(ih1.getLit());
}
@Test
public void testTwoNameSe8cHeadCtorOK() {
// create the SE8c heads
InstanceManager.getDefault(SignalHeadManager.class).register(
new DefaultSignalHead("IH:SE8C:\"255\";\"256\"") {
@Override
protected void updateOutput() {
}
}
);
InstanceManager.getDefault(SignalHeadManager.class).register(
new DefaultSignalHead("IH:SE8C:\"257\";\"258\"") {
@Override
protected void updateOutput() {
}
}
);
// test uses those
assertNotNull(
new SignalHeadSignalMast("IF$shsm:AAR-1946:PL-2-high(IH:SE8C:\"255\";\"256\")(IH:SE8C:\"257\";\"258\")", "user"));
}
@Test
public void testOneNameOneHeadCtorOK() {
assertNotNull(
new SignalHeadSignalMast("IF$shsm:basic:one-searchlight(IH1)"));
}
@Test
public void testOldTwoNameCtorOK() {
assertNotNull(
new SignalHeadSignalMast("IF$shsm:basic:one-searchlight:IH1", "user"));
}
@Test
public void testOldOneNameCtorOK() {
assertNotNull(
new SignalHeadSignalMast("IF$shsm:basic:one-searchlight:IH1"));
}
@Test
public void testOldOneNameCtorFailNoSystem() {
Exception ex = assertThrows(IllegalArgumentException.class, () ->
new SignalHeadSignalMast("IF$shsm:notanaspect:one-searchlight:IH1").setHeld(true),
"should have thrown exception");
assertNotNull(ex);
assertTrue(ex.getMessage().contains("notanaspect"));
jmri.util.JUnitAppender.assertErrorMessage("Did not find signal definition: notanaspect");
}
@Test
public void testAspects() {
SignalMast s = new SignalHeadSignalMast("IF$shsm:basic:one-searchlight:IH1", "user");
s.setAspect("Clear");
assertEquals( "Clear", s.getAspect(), "check clear");
s.setAspect("Stop");
assertEquals( "Stop", s.getAspect(), "check stop");
}
@Test
public void testAspectAttributes() {
SignalMast s = new SignalHeadSignalMast("IF$shsm:basic:one-searchlight:IH1", "user");
s.setAspect("Clear");
assertEquals("../../../resources/icons/smallschematics/aspects/AAR-1946/SL-1-high-abs/rule-281.gif",
s.getAppearanceMap().getProperty("Clear", "imagelink"));
}
@Test
public void testAspectNotSet() {
SignalMast s = new SignalHeadSignalMast("IF$shsm:basic:one-searchlight:IH1", "user");
assertNull( s.getAspect(), "check null");
}
@Test
public void testAspectFail() {
SignalMast s = new SignalHeadSignalMast("IF$shsm:basic:one-searchlight:IH1", "user");
s.setAspect("Clear");
Exception ex = assertThrows( IllegalArgumentException.class, () ->
s.setAspect("Not An Aspect, I Hope"));
assertNotNull( ex );
assertTrue(ex.getMessage().contains("Not An Aspect, I Hope"));
jmri.util.JUnitAppender.assertWarnMessage("attempting to set invalid aspect: Not An Aspect, I Hope on mast: user");
assertEquals( "Clear", s.getAspect(), "check clear unchanged after failed request");
}
@Test
public void testConfigureOneSearchLight() {
SignalMast s = new SignalHeadSignalMast("IF$shsm:basic:one-searchlight:IH1", "user");
s.setAspect("Clear");
SignalHead ih1 = InstanceManager.getDefault(SignalHeadManager.class).getSignalHead("IH1");
assertNotNull( ih1 );
assertEquals( SignalHead.GREEN, ih1.getAppearance(), "check green");
s.setAspect("Approach");
assertEquals( SignalHead.YELLOW, ih1.getAppearance(), "check yellow");
}
@Test
public void testConfigureTwoSearchLight() {
SignalMast s = new SignalHeadSignalMast("IF$shsm:basic:two-searchlight:IH1:IH2", "user");
s.setAspect("Clear");
SignalHead ih1 = InstanceManager.getDefault(SignalHeadManager.class).getSignalHead("IH1");
assertNotNull( ih1 );
SignalHead ih2 = InstanceManager.getDefault(SignalHeadManager.class).getSignalHead("IH2");
assertNotNull( ih2 );
assertEquals( SignalHead.GREEN,ih1.getAppearance(), "Clear head 1 green");
assertEquals( SignalHead.RED, ih2.getAppearance(), "Clear head 2 red");
s.setAspect("Diverging Approach");
assertEquals( SignalHead.RED, ih1.getAppearance(), "Diverging Approach head 1 red");
assertEquals( SignalHead.YELLOW, ih2.getAppearance(), "Diverging Approach head 2 yellow");
}
@Test
public void testOneSearchLightViaManager() {
SignalMast s = InstanceManager.getDefault(jmri.SignalMastManager.class).provideSignalMast("IF$shsm:basic:one-searchlight:IH2");
SignalHead ih2 = InstanceManager.getDefault(SignalHeadManager.class).getSignalHead("IH2");
assertNotNull( ih2 );
s.setAspect("Clear");
assertEquals( SignalHead.GREEN, ih2.getAppearance(), "check green");
s.setAspect("Approach");
assertEquals( SignalHead.YELLOW,
ih2.getAppearance(), "check yellow");
}
@Test
public void testSignalSystemLink() {
SignalMast s = InstanceManager.getDefault(jmri.SignalMastManager.class).provideSignalMast("IF$shsm:basic:one-searchlight:IH2");
SignalSystem sy = s.getSignalSystem();
assertNotNull(sy);
assertEquals( s.getSignalSystem().getProperty("Clear", "indication"), "Proceed");
}
// from here down is testing infrastructure
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
JUnitUtil.initInternalSignalHeadManager();
InstanceManager.getDefault(SignalHeadManager.class).register(
new DefaultSignalHead("IH1") {
@Override
protected void updateOutput() {
}
}
);
InstanceManager.getDefault(SignalHeadManager.class).register(
new DefaultSignalHead("IH2") {
@Override
protected void updateOutput() {
}
}
);
InstanceManager.getDefault(SignalHeadManager.class).register(
new DefaultSignalHead("IH3") {
@Override
protected void updateOutput() {
}
}
);
}
@AfterEach
public void tearDown() {
JUnitUtil.tearDown();
}
// private static final Logger log = LoggerFactory.getLogger(SignalHeadSignalMastTest.class);
}