package jmri.jmrit.operations.setup.gui; import java.awt.GraphicsEnvironment; import javax.swing.JComboBox; import org.junit.Assert; import org.junit.Assume; import org.junit.jupiter.api.Test; import org.netbeans.jemmy.operators.*; import jmri.jmrit.display.LocoIcon; import jmri.jmrit.operations.OperationsTestCase; import jmri.jmrit.operations.setup.Setup; import jmri.util.*; import jmri.util.swing.JemmyUtil; /** * Tests for OperationsSetupFrame * * @author Dan Boudreau Copyright (C) 2009 * @author Paul Bender Copyright (C) 2017 */ public class OperationsSettingsFrameTest extends OperationsTestCase { @Test public void testCTor() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); OperationsSettingsFrame t = new OperationsSettingsFrame(); Assert.assertNotNull("exists",t); } @Test public void testDirectionCheckBoxes() { // Assume.assumeFalse("Ignoring intermittent test", Boolean.getBoolean("jmri.skipTestsRequiringSeparateRunning")); // it may be possible to make this a headless test by only initializing the panel, not the frame Assume.assumeFalse(GraphicsEnvironment.isHeadless()); OperationsSettingsFrame f = new OperationsSettingsFrame(); f.setLocation(0, 0); // entire panel must be visible for tests to work properly f.initComponents(); OperationsSettingsPanel p = (OperationsSettingsPanel) f.getContentPane(); // first confirm that setup has all directions selected Assert.assertEquals("All directions selected", Setup.EAST + Setup.WEST + Setup.NORTH + Setup.SOUTH, Setup.getTrainDirection()); // both east/west and north/south checkboxes should be set Assert.assertTrue("North selected", p.northCheckBox.isSelected()); Assert.assertTrue("East selected", p.eastCheckBox.isSelected()); JemmyUtil.enterClickAndLeave(p.northCheckBox); Assert.assertFalse("North deselected", p.northCheckBox.isSelected()); Assert.assertTrue("East selected", p.eastCheckBox.isSelected()); JemmyUtil.enterClickAndLeave(p.eastCheckBox); Assert.assertTrue("North selected", p.northCheckBox.isSelected()); Assert.assertFalse("East deselected", p.eastCheckBox.isSelected()); JemmyUtil.enterClickAndLeave(p.eastCheckBox); Assert.assertTrue("North selected", p.northCheckBox.isSelected()); Assert.assertTrue("East selected", p.eastCheckBox.isSelected()); // done JUnitUtil.dispose(f); } @Test public void testSetupFrameWrite() { // it may be possible to make this a headless test by only initializing the panel, not the frame Assume.assumeFalse(GraphicsEnvironment.isHeadless()); // force creation of backup Setup.setCarTypes(Setup.AAR); OperationsSettingsFrame f = new OperationsSettingsFrame(); f.setLocation(0, 0); // entire panel must be visible for tests to work properly f.initComponents(); OperationsSettingsPanel p = (OperationsSettingsPanel) f.getContentPane(); JFrameOperator jfo = new JFrameOperator(Bundle.getMessage("TitleOperationsSetup")); p.railroadNameTextField.setText("Test Railroad Name"); p.maxLengthTextField.setText("1234"); p.maxEngineSizeTextField.setText("5"); p.hptTextField.setText("2.1"); p.switchTimeTextField.setText("4"); p.travelTimeTextField.setText("3"); p.yearTextField.setText(" 1956 "); (new JRadioButtonOperator(jfo, "Sn3")).push(); (new JRadioButtonOperator(jfo,Bundle.getMessage("Descriptive"))).push(); p.panelTextField.setText("Test Panel Name"); ((JComboBox)(new JLabelOperator(jfo,Bundle.getMessage("IconNorth")).getLabelFor())).setSelectedItem(LocoIcon.RED); ((JComboBox)(new JLabelOperator(jfo,Bundle.getMessage("IconEast")).getLabelFor())).setSelectedItem(LocoIcon.BLUE); ((JComboBox)(new JLabelOperator(jfo,Bundle.getMessage("IconWest")).getLabelFor())).setSelectedItem(LocoIcon.WHITE); ((JComboBox)(new JLabelOperator(jfo,Bundle.getMessage("IconSouth")).getLabelFor())).setSelectedItem(LocoIcon.GREEN); ((JComboBox)(new JLabelOperator(jfo,Bundle.getMessage("IconTerminate")).getLabelFor())).setSelectedItem(LocoIcon.GRAY); ((JComboBox)(new JLabelOperator(jfo,Bundle.getMessage("IconLocal")).getLabelFor())).setSelectedItem(LocoIcon.YELLOW); (new JButtonOperator(jfo,Bundle.getMessage("ButtonSave"))).push(); // dialog window should appear regarding train lengths JemmyUtil.pressDialogButton(f,java.text.MessageFormat.format( Bundle.getMessage("MaxTrainLengthIncreased"), new Object[]{1234,"feet"}), Bundle.getMessage("ButtonOK")); // dialog window should appear regarding railroad name JemmyUtil.pressDialogButton(f,Bundle.getMessage("ChangeJMRIRailroadName"), Bundle.getMessage("ButtonNo")); JemmyUtil.waitFor(f); jfo.dispose(); // reload OperationsSettingsFrame frameRead = new OperationsSettingsFrame(); frameRead.setLocation(0, 0); // entire panel must be visible for tests to work properly frameRead.initComponents(); OperationsSettingsPanel panelRead = (OperationsSettingsPanel) frameRead.getContentPane(); JFrameOperator jfo2 = new JFrameOperator(Bundle.getMessage("TitleOperationsSetup")); Assert.assertEquals("railroad name", "Test Railroad Name", panelRead.railroadNameTextField.getText()); Assert.assertEquals("max length", "1234", panelRead.maxLengthTextField.getText()); Assert.assertEquals("max engines", "5", panelRead.maxEngineSizeTextField.getText()); Assert.assertEquals("HPT", "2.1", panelRead.hptTextField.getText()); Assert.assertEquals("switch time", "4", panelRead.switchTimeTextField.getText()); Assert.assertEquals("travel time", "3", panelRead.travelTimeTextField.getText()); Assert.assertEquals("year", "1956", panelRead.yearTextField.getText()); Assert.assertFalse("N scale", (new JRadioButtonOperator(jfo2,"N")).isSelected()); Assert.assertFalse("Z scale", (new JRadioButtonOperator(jfo2,"Z")).isSelected()); Assert.assertFalse("TT scale", (new JRadioButtonOperator(jfo2,"TT")).isSelected()); Assert.assertFalse("HOn3 scale", (new JRadioButtonOperator(jfo2,"HOn3")).isSelected()); Assert.assertFalse("HO scale", (new JRadioButtonOperator(jfo2, "HO", 1)).isSelected()); Assert.assertFalse("OO scale", (new JRadioButtonOperator(jfo2,"OO")).isSelected()); Assert.assertTrue("Sn3 scale", (new JRadioButtonOperator(jfo2, "Sn3")).isSelected()); Assert.assertFalse("S scale", (new JRadioButtonOperator(jfo2,"S",1)).isSelected()); Assert.assertFalse("On3 scale", (new JRadioButtonOperator(jfo2,"On3")).isSelected()); Assert.assertFalse("O scale", (new JRadioButtonOperator(jfo2, "O", 4)).isSelected()); Assert.assertFalse("G scale", (new JRadioButtonOperator(jfo2, "G 1/24")).isSelected()); Assert.assertTrue("descriptive", (new JRadioButtonOperator(jfo2,Bundle.getMessage("Descriptive"))).isSelected()); Assert.assertFalse("AAR", (new JRadioButtonOperator(jfo2,Bundle.getMessage("AAR"))).isSelected()); Assert.assertEquals("panel name", "Test Panel Name", panelRead.panelTextField.getText()); Assert.assertEquals("east color", LocoIcon.RED, ((JComboBox)(new JLabelOperator(jfo2,Bundle.getMessage("IconNorth")).getLabelFor())).getSelectedItem()); Assert.assertEquals("west color", LocoIcon.BLUE, ((JComboBox)(new JLabelOperator(jfo2,Bundle.getMessage("IconEast")).getLabelFor())).getSelectedItem()); Assert.assertEquals("north color", LocoIcon.WHITE, ((JComboBox)(new JLabelOperator(jfo2,Bundle.getMessage("IconWest")).getLabelFor())).getSelectedItem()); Assert.assertEquals("south color", LocoIcon.GREEN, ((JComboBox)(new JLabelOperator(jfo2,Bundle.getMessage("IconSouth")).getLabelFor())).getSelectedItem()); Assert.assertEquals("terminate color", LocoIcon.GRAY, ((JComboBox)(new JLabelOperator(jfo2,Bundle.getMessage("IconTerminate")).getLabelFor())).getSelectedItem()); Assert.assertEquals("local color", LocoIcon.YELLOW, ((JComboBox)(new JLabelOperator(jfo2,Bundle.getMessage("IconLocal")).getLabelFor())).getSelectedItem()); // done JUnitUtil.dispose(frameRead); } @Test public void testSaveButtonErrorTrainLength() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); OperationsSettingsFrame f = new OperationsSettingsFrame(); f.initComponents(); OperationsSettingsPanel p = (OperationsSettingsPanel) f.getContentPane(); JFrameOperator jfo = new JFrameOperator(Bundle.getMessage("TitleOperationsSetup")); p.maxLengthTextField.setText("Not a Number"); new JButtonOperator(jfo,Bundle.getMessage("ButtonSave")).push(); JemmyUtil.pressDialogButton(f, Bundle.getMessage("CanNotAcceptNumber"), Bundle.getMessage("ButtonOK")); JemmyUtil.waitFor(f); jfo.dispose(); } @Test public void testSaveButtonErrorEngineSize() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); OperationsSettingsFrame f = new OperationsSettingsFrame(); f.initComponents(); OperationsSettingsPanel p = (OperationsSettingsPanel) f.getContentPane(); JFrameOperator jfo = new JFrameOperator(Bundle.getMessage("TitleOperationsSetup")); p.maxEngineSizeTextField.setText("Not a Number"); new JButtonOperator(jfo,Bundle.getMessage("ButtonSave")).push(); JemmyUtil.pressDialogButton(f, Bundle.getMessage("CanNotAcceptNumber"), Bundle.getMessage("ButtonOK")); JemmyUtil.waitFor(f); jfo.dispose(); } @Test public void testSaveButtonErrorHPT() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); OperationsSettingsFrame f = new OperationsSettingsFrame(); f.initComponents(); OperationsSettingsPanel p = (OperationsSettingsPanel) f.getContentPane(); JFrameOperator jfo = new JFrameOperator(Bundle.getMessage("TitleOperationsSetup")); p.hptTextField.setText("Not a Number"); new JButtonOperator(jfo,Bundle.getMessage("ButtonSave")).push(); JemmyUtil.pressDialogButton(f, Bundle.getMessage("CanNotAcceptNumber"), Bundle.getMessage("ButtonOK")); JemmyUtil.waitFor(f); jfo.dispose(); } @Test public void testSaveButtonErrorSwitchTime() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); OperationsSettingsFrame f = new OperationsSettingsFrame(); f.initComponents(); OperationsSettingsPanel p = (OperationsSettingsPanel) f.getContentPane(); JFrameOperator jfo = new JFrameOperator(Bundle.getMessage("TitleOperationsSetup")); p.switchTimeTextField.setText("Not a Number"); new JButtonOperator(jfo,Bundle.getMessage("ButtonSave")).push(); JemmyUtil.pressDialogButton(f, Bundle.getMessage("CanNotAcceptNumber"), Bundle.getMessage("ButtonOK")); JemmyUtil.waitFor(f); jfo.dispose(); } @Test public void testSaveButtonErrorTravelTime() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); OperationsSettingsFrame f = new OperationsSettingsFrame(); f.initComponents(); OperationsSettingsPanel p = (OperationsSettingsPanel) f.getContentPane(); JFrameOperator jfo = new JFrameOperator(Bundle.getMessage("TitleOperationsSetup")); p.travelTimeTextField.setText("Not a Number"); new JButtonOperator(jfo,Bundle.getMessage("ButtonSave")).push(); JemmyUtil.pressDialogButton(f, Bundle.getMessage("CanNotAcceptNumber"), Bundle.getMessage("ButtonOK")); JemmyUtil.waitFor(f); jfo.dispose(); } @Test public void testSaveButtonErrorYear() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); OperationsSettingsFrame f = new OperationsSettingsFrame(); f.initComponents(); OperationsSettingsPanel p = (OperationsSettingsPanel) f.getContentPane(); JFrameOperator jfo = new JFrameOperator(Bundle.getMessage("TitleOperationsSetup")); p.yearTextField.setText("Not a Number"); new JButtonOperator(jfo,Bundle.getMessage("ButtonSave")).push(); JemmyUtil.pressDialogButton(f, Bundle.getMessage("CanNotAcceptNumber"), Bundle.getMessage("ButtonOK")); JemmyUtil.waitFor(f); jfo.dispose(); } @Test public void testSaveButtonTrainLength() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); // load routes JUnitOperationsUtil.createThreeLocationRoute(); OperationsSettingsFrame f = new OperationsSettingsFrame(); f.initComponents(); OperationsSettingsPanel p = (OperationsSettingsPanel) f.getContentPane(); JFrameOperator jfo = new JFrameOperator(Bundle.getMessage("TitleOperationsSetup")); p.maxLengthTextField.setText("200"); new JButtonOperator(jfo,Bundle.getMessage("ButtonSave")).push(); // 3 dialog windows will now appear JemmyUtil.pressDialogButton(f, Bundle.getMessage("WarningTooShort"), Bundle.getMessage("ButtonOK")); JemmyUtil.pressDialogButton(f, Bundle.getMessage("YouNeedToAdjustRoutes"), Bundle.getMessage("ButtonOK")); JemmyUtil.pressDialogButton(f, Bundle.getMessage("ModifyAllRoutes"), Bundle.getMessage("ButtonYes")); JemmyUtil.waitFor(f); jfo.dispose(); } @Test public void testBackupButton() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); // load routes JUnitOperationsUtil.createThreeLocationRoute(); OperationsSettingsFrame f = new OperationsSettingsFrame(); f.initComponents(); OperationsSettingsPanel p = (OperationsSettingsPanel) f.getContentPane(); JFrameOperator jfo = new JFrameOperator(Bundle.getMessage("TitleOperationsSetup")); p.maxLengthTextField.setText("200"); new JButtonOperator(jfo,Bundle.getMessage("Backup")).push(); // dialog window will now appear JemmyUtil.pressDialogButton(Bundle.getMessage("BackupDialog.this.title"), Bundle.getMessage("ButtonCancel")); JemmyUtil.waitFor(f); jfo.dispose(); } @Test public void testRestoreButton() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); // load routes JUnitOperationsUtil.createThreeLocationRoute(); OperationsSettingsFrame f = new OperationsSettingsFrame(); f.initComponents(); OperationsSettingsPanel p = (OperationsSettingsPanel) f.getContentPane(); JFrameOperator jfo = new JFrameOperator(Bundle.getMessage("TitleOperationsSetup")); p.maxLengthTextField.setText("200"); new JButtonOperator(jfo,Bundle.getMessage("Restore")).push(); // dialog window will now appear JemmyUtil.pressDialogButton(Bundle.getMessage("RestoreDialog.this.title"), Bundle.getMessage("ButtonCancel")); JemmyUtil.waitFor(f); jfo.dispose(); } @Test public void testCloseWindowOnSave() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); OperationsSettingsFrame tf = new OperationsSettingsFrame(); tf.initComponents(); JFrameOperator jfo = new JFrameOperator(tf.getTitle()); Assert.assertNotNull("visible and found", jfo); // confirm window appears JmriJFrame f = JmriJFrame.getFrame(Bundle.getMessage("TitleOperationsSetup")); Assert.assertNotNull("exists", f); new JButtonOperator(jfo, Bundle.getMessage("ButtonSave")).doClick(); f = JmriJFrame.getFrame(Bundle.getMessage("TitleOperationsSetup")); Assert.assertNotNull("exists", f); // now close window with save button new JCheckBoxOperator(jfo, Bundle.getMessage("CloseOnSave")).doClick(); new JButtonOperator(jfo, Bundle.getMessage("ButtonSave")).doClick(); jfo.waitClosed(); // confirm window is closed f = JmriJFrame.getFrame(Bundle.getMessage("TitleOperationsSetup")); Assert.assertNull("does not exist", f); } // private static final Logger log = LoggerFactory.getLogger(OperationsSetupFrameTest.class); }