package jmri.jmrit.beantable; import javax.swing.*; import jmri.Route; import jmri.util.JUnitUtil; import jmri.util.junit.annotations.*; import jmri.util.swing.JemmyUtil; import jmri.util.ThreadingUtil; import org.junit.Assert; import org.junit.jupiter.api.*; import org.netbeans.jemmy.operators.*; /** * Tests for the jmri.jmrit.beantable.RouteTableAction class * * @author Bob Jacobsen Copyright 2004, 2007 */ public class RouteTableActionTest extends AbstractTableActionBase { @Test public void testCreate() { Assert.assertNotNull(a); } @Override public String getTableFrameName() { return Bundle.getMessage("TitleRouteTable"); } @Test public void testConstants() { // check constraints required by implementation, // because we assume that the codes are the same as the index // in a JComboBox Assert.assertEquals("Route.ONACTIVE", 0, Route.ONACTIVE); Assert.assertEquals("Route.ONINACTIVE", 1, Route.ONINACTIVE); Assert.assertEquals("Route.VETOACTIVE", 2, Route.VETOACTIVE); Assert.assertEquals("Route.VETOINACTIVE", 3, Route.VETOINACTIVE); } @Override @Test public void testGetClassDescription() { Assert.assertEquals("Route Table Action class description", "Route 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()); } @Test @DisabledIfHeadless public void testAddRoute() { ThreadingUtil.runOnGUI( () -> a.actionPerformed(null)); // show table JFrame f = JFrameOperator.waitJFrame(Bundle.getMessage("TitleRouteTable"), true, true); Assert.assertNotNull(f); ThreadingUtil.runOnGUI( () -> a.addPressed(null)); JFrameOperator addFrame = new JFrameOperator(Bundle.getMessage("TitleAddRoute")); // NOI18N Assert.assertNotNull("Found Add Route Frame", addFrame); // NOI18N JLabelOperator systemLabel = new JLabelOperator(addFrame,Bundle.getMessage("LabelSystemName")); new JTextFieldOperator((JTextField)systemLabel.getLabelFor()).setText("105"); // NOI18N JLabelOperator userLabel = new JLabelOperator(addFrame,Bundle.getMessage("LabelUserName")); new JTextFieldOperator((JTextField) userLabel.getLabelFor()).setText("Route 105"); // NOI18N new JButtonOperator(addFrame, Bundle.getMessage("ButtonCreate")).push(); // NOI18N //new JButtonOperator(addFrame, Bundle.getMessage("ButtonCancel")).push(); // NOI18N Route chk105 = jmri.InstanceManager.getDefault(jmri.RouteManager.class).getRoute("Route 105"); // NOI18N Assert.assertNotNull("Verify IO105 Added", chk105); // NOI18N Assert.assertEquals("Verify system name prefix", "IO105", chk105.getSystemName()); // NOI18N addFrame.dispose(); JUnitUtil.dispose(f); } @Test @DisabledIfHeadless public void testEditRoute() { Assertions.assertTrue(a.includeAddButton()); ThreadingUtil.runOnGUI( () -> a.actionPerformed(null)); // show table JFrame f = JFrameOperator.waitJFrame(getTableFrameName(), true, true); JFrameOperator jfo = new JFrameOperator(f); // find the "Add... " button and press it. JemmyUtil.pressButton(jfo,Bundle.getMessage("ButtonAdd")); JFrame f1 = JFrameOperator.waitJFrame(getAddFrameName(), true, true); JFrameOperator jf = new JFrameOperator(f1); //enable "Auto System Name" via checkbox JCheckBoxOperator jcbo = new JCheckBoxOperator(jf,Bundle.getMessage("LabelAutoSysName")); jcbo.doClick(); //press create button to create a Route, then close the create window JemmyUtil.pressButton(jf,Bundle.getMessage("ButtonCreate")); //jf.requestClose(); new org.netbeans.jemmy.QueueTool().waitEmpty(); // press "Edit" button, which is the last column (no heading), to open the Edit Route window JTableOperator tbl = new JTableOperator(jfo); tbl.clickOnCell(0,tbl.getColumnCount() -1); //enter a username in the Edit window JFrame f2 = JFrameOperator.waitJFrame("Edit Route", true, true); jf = new JFrameOperator(f2); JLabelOperator userLabel = new JLabelOperator(jf,Bundle.getMessage("LabelUserName")); new JTextFieldOperator((JTextField) userLabel.getLabelFor()).typeText("TestRouteUserName"); //press Update to save the Route change JemmyUtil.pressButton(new JFrameOperator(f2),Bundle.getMessage("ButtonUpdate")); //retrieve the expected route for verification Route chkRoute = jmri.InstanceManager.getDefault(jmri.RouteManager.class).getRoute("IO:AUTO:0001"); // NOI18N Assert.assertEquals("Verify no additional routes were created", 1, tbl.getRowCount()); // NOI18N Assert.assertNotNull("Verify IO:AUTO:0001 Added", chkRoute); // NOI18N Assert.assertEquals("Verify system name didn't change", "IO:AUTO:0001", chkRoute.getSystemName()); // NOI18N Assert.assertEquals("Verify user name is TestRouteUserName", "TestRouteUserName", chkRoute.getUserName()); // NOI18N JUnitUtil.dispose(f2); JUnitUtil.dispose(f1); JUnitUtil.dispose(f); } @Override public String getAddFrameName(){ return Bundle.getMessage("TitleAddRoute"); } @Test @Disabled("Route create frame does not have a hardware address") @ToDo("Re-write parent class test to use the right name") @Override public void testAddThroughDialog() { } @Test @Disabled("Route create frame does not have a hardware address") @ToDo("Re-write parent class test to use the right name, or add without dialog") @Override public void testEditButton() { } @BeforeEach @Override public void setUp() { JUnitUtil.setUp(); JUnitUtil.resetProfileManager(); JUnitUtil.initDefaultUserMessagePreferences(); helpTarget = "package.jmri.jmrit.beantable.RouteTable"; a = new RouteTableAction(); } @AfterEach @Override public void tearDown() { JUnitUtil.tearDown(); } }