package jmri.implementation; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import java.io.IOException; import java.util.ArrayList; import java.util.List; import jmri.InstanceManager; import jmri.NamedBean; import jmri.NamedBeanHandle; import jmri.SignalHead; import jmri.SignalMast; import jmri.util.JUnitUtil; import org.junit.jupiter.api.*; /** * Tests for the SignalAppearanceMap interface. * * @author Bob Jacobsen Copyright (C) 2009 */ public class DefaultSignalAppearanceMapTest { private SignalHead h1; private SignalHead h2; private List> l1; private List> l2; @Test public void testCtor() { DefaultSignalAppearanceMap map = new DefaultSignalAppearanceMap("sys", "user"); assertNotNull(map); } @Test public void testSearchOrder() throws IOException { try { // need try-finally to ensure junk deleted from user area SignalSystemTestUtil.createMockSystem(); // check that mock (test directory) system is present InstanceManager.getDefault(jmri.SignalMastManager.class) .provideSignalMast("IF$shsm:" + SignalSystemTestUtil.getMockSystemName() + ":one-searchlight:IH1"); } finally { SignalSystemTestUtil.deleteMockSystem(); } } @Test public void testDefaultMap() { SignalMast s = InstanceManager.getDefault(jmri.SignalMastManager.class).provideSignalMast("IF$shsm:basic:one-searchlight:IH1"); DefaultSignalAppearanceMap t = (DefaultSignalAppearanceMap) s.getAppearanceMap(); t.loadDefaults(); s.setAspect("Stop"); assertEquals( SignalHead.RED, h1.getAppearance(), "Stop is RED"); s.setAspect("Approach"); assertEquals( SignalHead.YELLOW, h1.getAppearance(), "Approach is YELLOW"); s.setAspect("Clear"); assertEquals( SignalHead.GREEN, h1.getAppearance(), "Clear is GREEN"); InstanceManager.getDefault(jmri.SignalMastManager.class).deregister(s); s.dispose(); } @Test public void testDefaultAspects() { DefaultSignalAppearanceMap t = new DefaultSignalAppearanceMap("sys", "user"); t.loadDefaults(); java.util.Enumeration e = t.getAspects(); assertEquals("Stop", e.nextElement()); assertEquals("Approach", e.nextElement()); assertEquals("Clear", e.nextElement()); assertFalse(e.hasMoreElements()); } @Test public void testTwoHead() { SignalMast s = new SignalHeadSignalMast("IF$shsm:basic:two-searchlight:IH1:IH2") { @Override protected void configureAspectTable(String signalSystemName, String aspectMapName) { map = new DefaultSignalAppearanceMap("sys", "user"); } }; DefaultSignalAppearanceMap t = (DefaultSignalAppearanceMap) s.getAppearanceMap(); t.addAspect("meh", new int[]{SignalHead.LUNAR, SignalHead.DARK}); t.addAspect("biff", new int[]{SignalHead.GREEN, SignalHead.GREEN}); s.setAspect("meh"); assertEquals( SignalHead.LUNAR, h1.getAppearance(), "meh 1 is LUNAR"); assertEquals( SignalHead.DARK, h2.getAppearance(), "meh 2 is LUNAR"); s.setAspect("biff"); assertEquals( SignalHead.GREEN, h1.getAppearance(), "biff 1 is GREEN"); assertEquals( SignalHead.GREEN, h2.getAppearance(), "biff 2 is GREEN"); InstanceManager.getDefault(jmri.SignalMastManager.class).deregister(s); s.dispose(); } @Test public void testGetState() { DefaultSignalAppearanceMap map = new DefaultSignalAppearanceMap("sys", "user"); assertEquals(NamedBean.INCONSISTENT, map.getState()); } @Test public void testSetState() { DefaultSignalAppearanceMap map = new DefaultSignalAppearanceMap("sys", "user"); map.setState(NamedBean.UNKNOWN); // verify getState did not change assertEquals(NamedBean.INCONSISTENT, map.getState()); } @BeforeEach public void setUp() { JUnitUtil.setUp(); JUnitUtil.initInternalSignalHeadManager(); h1 = new DefaultSignalHead("IH1", "head1") { @Override protected void updateOutput() { } }; h2 = new DefaultSignalHead("IH2", "head2") { @Override protected void updateOutput() { } }; l1 = new ArrayList<>(); l1.add(new NamedBeanHandle<>("IH1", h1)); l2 = new ArrayList<>(); l2.add(new NamedBeanHandle<>("IH1", h1)); l2.add(new NamedBeanHandle<>("IH2", h2)); InstanceManager.getDefault(jmri.SignalHeadManager.class).register(h1); InstanceManager.getDefault(jmri.SignalHeadManager.class).register(h2); } @AfterEach public void tearDown() { InstanceManager.getDefault(jmri.SignalHeadManager.class).deregister(h1); h1.dispose(); h1 = null; InstanceManager.getDefault(jmri.SignalHeadManager.class).deregister(h2); h2.dispose(); h2 = null; l1 = null; l2 = null; JUnitUtil.tearDown(); } }