package jmri.jmrit.beantable; import javax.swing.JFrame; import javax.swing.JTextField; import jmri.InstanceManager; import jmri.NamedBeanHandle; import jmri.SignalHead; import jmri.implementation.DoubleTurnoutSignalHead; import jmri.implementation.QuadOutputSignalHead; import jmri.implementation.SE8cSignalHead; import jmri.util.JUnitUtil; import org.junit.Assert; import org.junit.jupiter.api.*; import org.junit.jupiter.api.condition.DisabledIfSystemProperty; import org.netbeans.jemmy.operators.*; /** * Tests for the jmri.jmrit.beantable.SignalHeadTableAction class * * @author Bob Jacobsen Copyright 2004, 2007, 2008, 2009 */ public class SignalHeadTableActionTest extends AbstractTableActionBase { @Test public void testCreate() { Assert.assertNotNull(a); } @Override public String getTableFrameName(){ return Bundle.getMessage("TitleSignalTable"); } @Test @DisabledIfSystemProperty(named = "java.awt.headless", matches = "true") public void testAddAndInvoke() { // add a few signals and see if they exist InstanceManager.getDefault(jmri.SignalHeadManager.class).register( new DoubleTurnoutSignalHead("IH2", "double example 1-2", new NamedBeanHandle<>("IT1", InstanceManager.turnoutManagerInstance().provideTurnout("IT1")), new NamedBeanHandle<>("IT2", InstanceManager.turnoutManagerInstance().provideTurnout("IT2")) )); InstanceManager.getDefault(jmri.SignalHeadManager.class).register( new QuadOutputSignalHead("IH4", "quad example 11-14", new NamedBeanHandle<>("IT11", InstanceManager.turnoutManagerInstance().provideTurnout("IT11")), new NamedBeanHandle<>("IT12", InstanceManager.turnoutManagerInstance().provideTurnout("IT12")), new NamedBeanHandle<>("IT13", InstanceManager.turnoutManagerInstance().provideTurnout("IT13")), new NamedBeanHandle<>("IT14", InstanceManager.turnoutManagerInstance().provideTurnout("IT14")) )); InstanceManager.getDefault(jmri.SignalHeadManager.class).register( new SE8cSignalHead( new NamedBeanHandle<>("IT1", InstanceManager.turnoutManagerInstance().provideTurnout("IT21")), new NamedBeanHandle<>("IT2", InstanceManager.turnoutManagerInstance().provideTurnout("IT22")), "SE8c from handles") ); InstanceManager.getDefault(jmri.SignalHeadManager.class).register( new SE8cSignalHead(31, "SE8c from number") ); new SignalHeadTableAction().actionPerformed(null); JFrame f = JFrameOperator.waitJFrame(Bundle.getMessage("TitleSignalTable"), true, true); Assert.assertNotNull("found frame", f); JUnitUtil.dispose(f); } @Override @Test public void testGetClassDescription(){ Assert.assertEquals("Signal Head Table Action class description","Signal Head Table",a.getClassDescription()); } /** * Check the return value of includeAddButton. The table generated by * this action includes an Add Button. */ @Override @Test public void testIncludeAddButton(){ Assert.assertTrue("Default include add button",a.includeAddButton()); } @Override public String getAddFrameName(){ return Bundle.getMessage("TitleAddSignalHead"); } @Test @Override @DisabledIfSystemProperty(named = "java.awt.headless", matches = "true") public void testAddThroughDialog() { Assertions.assertTrue(a.includeAddButton()); a.actionPerformed(null); JFrame f = JFrameOperator.waitJFrame(getTableFrameName(), true, true); // find the "Add... " button and press it. jmri.util.swing.JemmyUtil.pressButton(new JFrameOperator(f),Bundle.getMessage("ButtonAdd")); new org.netbeans.jemmy.QueueTool().waitEmpty(); JFrame f1 = JFrameOperator.waitJFrame(getAddFrameName(), true, true); JFrameOperator jf = new JFrameOperator(f1); // change the combo box to the "Virtual" entry. (new JComboBoxOperator(jf)).selectItem("Virtual"); //Enter IH1 in the text field labeled "System Name:" JLabelOperator jlo = new JLabelOperator(jf,Bundle.getMessage("LabelSystemName")); ((JTextField)jlo.getLabelFor()).setText("IH1"); //and press create jmri.util.swing.JemmyUtil.pressButton(jf,Bundle.getMessage("ButtonCreate")); JUnitUtil.dispose(f1); JUnitUtil.dispose(f); } @Test @Override @DisabledIfSystemProperty(named = "java.awt.headless", matches = "true") public void testEditButton() { a.actionPerformed(null); JFrame f = JFrameOperator.waitJFrame(getTableFrameName(), true, true); JFrameOperator jfo = new JFrameOperator(f); // find the "Add... " button and press it. jmri.util.swing.JemmyUtil.pressButton(jfo,Bundle.getMessage("ButtonAdd")); JFrame f1 = JFrameOperator.waitJFrame(getAddFrameName(), true, true); JFrameOperator jf = new JFrameOperator(f1); // change the combo box to the "Virtual" entry. (new JComboBoxOperator(jf)).selectItem("Virtual"); //Enter IH1 in the text field labeled "System Name:" JLabelOperator jlo = new JLabelOperator(jf,Bundle.getMessage("LabelSystemName")); ((JTextField)jlo.getLabelFor()).setText("IH1"); //and press create jmri.util.swing.JemmyUtil.pressButton(jf,Bundle.getMessage("ButtonCreate")); // close the add frame jf.requestClose(); new org.netbeans.jemmy.QueueTool().waitEmpty(); JTableOperator tbl = new JTableOperator(jfo, 0); // find the "Edit" button and press it. This is in the table body. tbl.clickOnCell(0,tbl.getColumnCount() -1); // edit column is last in light table. JFrame f2 = JFrameOperator.waitJFrame(getEditFrameName(), true, true); jmri.util.swing.JemmyUtil.pressButton(new JFrameOperator(f2),Bundle.getMessage("ButtonCancel")); JUnitUtil.dispose(f2); JUnitUtil.dispose(f1); JUnitUtil.dispose(f); } @Override public String getEditFrameName(){ return "Edit Signal Head"; } @Override @BeforeEach public void setUp() { JUnitUtil.setUp(); JUnitUtil.resetProfileManager(); JUnitUtil.initDefaultUserMessagePreferences(); JUnitUtil.initInternalTurnoutManager(); JUnitUtil.initInternalSignalHeadManager(); helpTarget = "package.jmri.jmrit.beantable.SignalHeadTable"; a = new SignalHeadTableAction(); } @Override @AfterEach public void tearDown() { a = null; JUnitUtil.clearShutDownManager(); JUnitUtil.tearDown(); } }