package jmri.jmrit.operations.rollingstock.engines.gui; import java.awt.GraphicsEnvironment; import java.awt.event.ActionEvent; import java.text.MessageFormat; import org.junit.Assert; import org.junit.Assume; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; import jmri.InstanceManager; import jmri.jmrit.operations.OperationsTestCase; import jmri.jmrit.operations.locations.Location; import jmri.jmrit.operations.locations.LocationManager; import jmri.jmrit.operations.locations.Track; import jmri.jmrit.operations.rollingstock.cars.CarOwners; import jmri.jmrit.operations.rollingstock.cars.CarRoads; import jmri.jmrit.operations.rollingstock.engines.*; import jmri.jmrit.operations.rollingstock.engines.tools.EngineAttributeEditFrame; import jmri.jmrit.operations.setup.Control; import jmri.jmrit.operations.setup.Setup; import jmri.util.JUnitOperationsUtil; import jmri.util.JUnitUtil; import jmri.util.swing.JemmyUtil; /** * Tests for the Operations EngineEditFrame class * * @author Dan Boudreau Copyright (C) 2010 * */ @Timeout(10) public class EngineEditFrameTest extends OperationsTestCase { @Test public void testClearRoadNumber() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); Assert.assertTrue(f.isShowing()); f.roadNumberTextField.setText("123"); JemmyUtil.enterClickAndLeave(f.clearRoadNumberButton); Assert.assertEquals("road number", "", f.roadNumberTextField.getText()); JUnitUtil.dispose(f); } @Test public void testRoadNumberErrorConditionsAddEngine() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); Assert.assertTrue(f.isShowing()); // this will load the weight fields f.lengthComboBox.setSelectedIndex(4); // "*" is not a legal character for road number f.roadNumberTextField.setText("6*6"); JemmyUtil.enterClickAndLeaveThreadSafe(f.addButton); JemmyUtil.pressDialogButton(f, Bundle.getMessage("roadNumNG"), Bundle.getMessage("ButtonOK")); JemmyUtil.waitFor(f); // test number too long StringBuffer sb = new StringBuffer("A"); for (int i = 0; i < Control.max_len_string_road_number; i++) { sb.append(i); } f.roadNumberTextField.setText(sb.toString()); JemmyUtil.enterClickAndLeaveThreadSafe(f.addButton); JemmyUtil.pressDialogButton(f, Bundle.getMessage("RoadNumTooLong"), Bundle.getMessage("ButtonOK")); JemmyUtil.waitFor(f); // confirm that delete and save buttons are disabled Assert.assertFalse(f.saveButton.isEnabled()); Assert.assertFalse(f.deleteButton.isEnabled()); // enter a good road number f.roadNumberTextField.setText("123"); JemmyUtil.enterClickAndLeave(f.addButton); // confirm that delete and save buttons are enabled Assert.assertTrue(f.saveButton.isEnabled()); Assert.assertTrue(f.deleteButton.isEnabled()); JUnitUtil.dispose(f); } @Test public void testRoadNumberErrorConditionsSaveEngine() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); JUnitOperationsUtil.initOperationsData(); EngineManager eManager = InstanceManager.getDefault(EngineManager.class); Engine e1 = eManager.getByRoadAndNumber("PC", "5016"); EngineLengths el = InstanceManager.getDefault(EngineLengths.class); el.addName("59"); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); f.load(e1); Assert.assertTrue(f.isShowing()); // confirm that delete and save buttons are enabled Assert.assertTrue(f.saveButton.isEnabled()); Assert.assertTrue(f.deleteButton.isEnabled()); // "*" is not a legal character for road number f.roadNumberTextField.setText("6*6"); JemmyUtil.enterClickAndLeaveThreadSafe(f.saveButton); JemmyUtil.pressDialogButton(f, Bundle.getMessage("roadNumNG"), Bundle.getMessage("ButtonOK")); JemmyUtil.waitFor(f); // test number too long StringBuffer sb = new StringBuffer("A"); for (int i = 0; i < Control.max_len_string_road_number; i++) { sb.append(i); } f.roadNumberTextField.setText(sb.toString()); JemmyUtil.enterClickAndLeaveThreadSafe(f.saveButton); JemmyUtil.pressDialogButton(f, Bundle.getMessage("RoadNumTooLong"), Bundle.getMessage("ButtonOK")); JemmyUtil.waitFor(f); // wait for dialog window to disappear jmri.util.JUnitUtil.waitFor(() -> { return f.isActive(); }, "wait for dialog window to clear"); // enter a good road number f.roadNumberTextField.setText("123"); JemmyUtil.enterClickAndLeave(f.saveButton); Assert.assertNull(eManager.getByRoadAndNumber("PC", "5016")); Assert.assertNotNull(eManager.getByRoadAndNumber("PC", "123")); JUnitUtil.dispose(f); } @Test public void testSaveEngine() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); JUnitOperationsUtil.initOperationsData(); // confirm load EngineManager engineManager = InstanceManager.getDefault(EngineManager.class); Assert.assertEquals("number of engines", 4, engineManager.getNumEntries()); Engine engine = engineManager.getByRoadAndNumber("PC", "5559"); // confirm engine id Assert.assertEquals("engine id", "PC5559", engine.getId()); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); f.load(engine); Assert.assertEquals("engine road", "PC", f.roadComboBox.getSelectedItem()); Assert.assertEquals("engine number", "5559", f.roadNumberTextField.getText()); // change road number for this engine f.roadNumberTextField.setText("54321"); JemmyUtil.enterClickAndLeave(f.saveButton); engine = engineManager.getByRoadAndNumber("PC", "54321"); Assert.assertNotNull("engine exists", engine); // confirm engine id was modified Assert.assertEquals("engine id", "PC54321", engine.getId()); // close on save Setup.setCloseWindowOnSaveEnabled(true); // change road name f.roadComboBox.setSelectedItem("SP"); JemmyUtil.enterClickAndLeave(f.saveButton); engine = engineManager.getByRoadAndNumber("SP", "54321"); Assert.assertNotNull("engine exists", engine); // confirm engine id was modified Assert.assertEquals("engine id", "SP54321", engine.getId()); Assert.assertFalse("window closed", f.isVisible()); } @Test public void testSaveExistingEngine() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); JUnitOperationsUtil.initOperationsData(); EngineManager eManager = InstanceManager.getDefault(EngineManager.class); Engine e1 = eManager.getByRoadAndNumber("PC", "5016"); EngineLengths el = InstanceManager.getDefault(EngineLengths.class); el.addName("59"); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); f.load(e1); Assert.assertTrue(f.isShowing()); // confirm that 5019 already exists Assert.assertNotNull(eManager.getByRoadAndNumber("PC", "5019")); // enter an existing road number f.roadNumberTextField.setText("5019"); JemmyUtil.enterClickAndLeaveThreadSafe(f.saveButton); JemmyUtil.pressDialogButton(f, Bundle.getMessage("engineCanNotUpdate"), Bundle.getMessage("ButtonOK")); JemmyUtil.waitFor(f); JUnitUtil.dispose(f); } @Test public void testWeightErrorConditions() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); Assert.assertTrue(f.isShowing()); // confirm that delete and save buttons are NOT enabled Assert.assertFalse(f.saveButton.isEnabled()); Assert.assertFalse(f.deleteButton.isEnabled()); // enter a good road number f.roadNumberTextField.setText("123456"); f.weightTonsTextField.setText("Bogus Weight"); // new dialog warning engine weight JemmyUtil.enterClickAndLeaveThreadSafe(f.addButton); JemmyUtil.pressDialogButton(f, Bundle.getMessage("WeightTonError"), Bundle.getMessage("ButtonOK")); JemmyUtil.waitFor(f); f.weightTonsTextField.setText("100"); JemmyUtil.enterClickAndLeave(f.addButton); // confirm that delete and save buttons are enabled Assert.assertTrue(f.saveButton.isEnabled()); Assert.assertTrue(f.deleteButton.isEnabled()); JUnitUtil.dispose(f); } @Test public void testHpErrorConditions() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); Assert.assertTrue(f.isShowing()); f.hpTextField.setText("Bogus HP"); // new dialog warning engine HP JemmyUtil.enterClickAndLeaveThreadSafe(f.addButton); JemmyUtil.pressDialogButton(f, Bundle.getMessage("engineCanNotHp"), Bundle.getMessage("ButtonOK")); JemmyUtil.waitFor(f); JUnitUtil.dispose(f); } @Test public void testEditRoadButton() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); JemmyUtil.enterClickAndLeave(f.editRoadButton); Assert.assertTrue(f.engineAttributeEditFrame.isShowing()); Assert.assertEquals("Check attribute", EngineAttributeEditFrame.ROAD, f.engineAttributeEditFrame._attribute); // test that the attribute edit frame gets disposed f.buttonEditActionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, null)); Assert.assertFalse(f.engineAttributeEditFrame.isShowing()); JUnitUtil.dispose(f.engineAttributeEditFrame); JUnitUtil.dispose(f); } @Test public void testEditModelButton() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); JemmyUtil.enterClickAndLeave(f.editModelButton); Assert.assertTrue(f.engineAttributeEditFrame.isShowing()); Assert.assertEquals("Check attribute", EngineAttributeEditFrame.MODEL, f.engineAttributeEditFrame._attribute); JUnitUtil.dispose(f.engineAttributeEditFrame); JUnitUtil.dispose(f); } @Test public void testEditTypeButton() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); JemmyUtil.enterClickAndLeave(f.editTypeButton); Assert.assertTrue(f.engineAttributeEditFrame.isShowing()); Assert.assertEquals("Check attribute", EngineAttributeEditFrame.TYPE, f.engineAttributeEditFrame._attribute); JUnitUtil.dispose(f.engineAttributeEditFrame); JUnitUtil.dispose(f); } @Test public void testEditLengthButton() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); JemmyUtil.enterClickAndLeave(f.editLengthButton); Assert.assertTrue(f.engineAttributeEditFrame.isShowing()); Assert.assertEquals("Check attribute", EngineAttributeEditFrame.LENGTH, f.engineAttributeEditFrame._attribute); JUnitUtil.dispose(f.engineAttributeEditFrame); JUnitUtil.dispose(f); } @Test public void testEditOwnerButton() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); JemmyUtil.enterClickAndLeave(f.editOwnerButton); Assert.assertTrue(f.engineAttributeEditFrame.isShowing()); Assert.assertEquals("Check attribute", EngineAttributeEditFrame.OWNER, f.engineAttributeEditFrame._attribute); JUnitUtil.dispose(f.engineAttributeEditFrame); JUnitUtil.dispose(f); } @Test public void testEditGroupButton() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); JemmyUtil.enterClickAndLeave(f.editGroupButton); Assert.assertTrue(f.engineAttributeEditFrame.isShowing()); Assert.assertEquals("Check attribute", EngineAttributeEditFrame.CONSIST, f.engineAttributeEditFrame._attribute); JUnitUtil.dispose(f.engineAttributeEditFrame); JUnitUtil.dispose(f); } @Test public void testLocationComboBox() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); JUnitOperationsUtil.initOperationsData(); LocationManager lm = InstanceManager.getDefault(LocationManager.class); Location loc1 = lm.getLocationByName("North End Staging"); Location loc2 = lm.getLocationByName("North Industries"); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); Assert.assertTrue(f.isShowing()); f.roadNumberTextField.setText("10345"); f.roadComboBox.setSelectedItem("SP"); EngineManager em = InstanceManager.getDefault(EngineManager.class); Engine engine = em.getByRoadAndNumber("SP", "10345"); Assert.assertNull("engine exists", engine); f.lengthComboBox.setSelectedIndex(4); // test no track selected error f.locationBox.setSelectedIndex(1); JemmyUtil.enterClickAndLeaveThreadSafe(f.addButton); JemmyUtil.pressDialogButton(f, Bundle.getMessage("rsCanNotLoc"), Bundle.getMessage("ButtonOK")); JemmyUtil.waitFor(f); engine = em.getByRoadAndNumber("SP", "10345"); Assert.assertNotNull("engine exists", engine); Assert.assertEquals("engine location", null, engine.getLocation()); f.trackLocationBox.setSelectedIndex(1); JemmyUtil.enterClickAndLeaveThreadSafe(f.addButton); // engine already exists JemmyUtil.pressDialogButton(f, Bundle.getMessage("engineCanNotUpdate"), Bundle.getMessage("ButtonOK")); JemmyUtil.waitFor(f); Assert.assertEquals("engine location", null, engine.getLocation()); JemmyUtil.enterClickAndLeave(f.saveButton); // engine location should have been updated Assert.assertEquals("engine location", loc1, engine.getLocation()); // now change location f.locationBox.setSelectedIndex(2); f.trackLocationBox.setSelectedIndex(1); JemmyUtil.enterClickAndLeave(f.saveButton); Assert.assertEquals("engine location", loc2, engine.getLocation()); // add a track Assert.assertEquals("Number of locations", 4, f.locationBox.getItemCount()); Assert.assertEquals("Number of tracks", 2, f.trackLocationBox.getItemCount()); Track testSpur = loc2.addTrack("Test_Spur", Track.SPUR); // add a location to cause update to both location and track comboboxes lm.newLocation("Test_Location"); Assert.assertEquals("Number of locations", 5, f.locationBox.getItemCount()); Assert.assertEquals("Number of tracks", 3, f.trackLocationBox.getItemCount()); // try to set engine to test spur, with a length of 0 f.trackLocationBox.setSelectedIndex(2); // get response message String status = engine.setLocation(loc2, testSpur); Assert.assertFalse(status.equals(Track.OKAY)); JemmyUtil.enterClickAndLeaveThreadSafe(f.saveButton); JemmyUtil.pressDialogButton(f, Bundle.getMessage("rsCanNotLoc"), Bundle.getMessage("ButtonOK")); JemmyUtil.pressDialogButton(f, MessageFormat .format(Bundle.getMessage("rsOverride"), new Object[]{status}), Bundle.getMessage("ButtonNo")); JemmyUtil.waitFor(f); // confirm engine location and track didn't change Assert.assertNotEquals("track", testSpur, engine.getTrack()); // do it again, but say yes JemmyUtil.enterClickAndLeaveThreadSafe(f.saveButton); JemmyUtil.pressDialogButton(f, Bundle.getMessage("rsCanNotLoc"), Bundle.getMessage("ButtonOK")); JemmyUtil.pressDialogButton(f, MessageFormat .format(Bundle.getMessage("rsOverride"), new Object[]{status}), Bundle.getMessage("ButtonYes")); JemmyUtil.waitFor(f); // confirm engine location and track changed Assert.assertEquals("track", testSpur, engine.getTrack()); JUnitUtil.dispose(f); } @Test public void testAddEngine() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); JUnitOperationsUtil.initOperationsData(); // increase test coverage Setup.setValueEnabled(true); Setup.setRfidEnabled(true); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); f.setTitle("Test Add Engine Frame"); // add a new Engine f.roadComboBox.setSelectedItem("SP"); f.roadNumberTextField.setText("6"); f.modelComboBox.setSelectedItem("SW8"); f.builtTextField.setText("1999"); f.ownerComboBox.setSelectedItem("AT"); f.commentTextField.setText("test Engine comment field"); JemmyUtil.enterClickAndLeave(f.addButton); EngineManager em = InstanceManager.getDefault(EngineManager.class); Assert.assertEquals("number of Engines", 5, em.getNumEntries()); Engine e6 = em.getByRoadAndNumber("SP", "6"); Assert.assertNotNull("Engine exists", e6); Assert.assertEquals("Engine type", "SW8", e6.getModel()); Assert.assertEquals("Engine type", "Diesel", e6.getTypeName()); Assert.assertEquals("Engine length", "44", e6.getLength()); //default for SW8 is 44 Assert.assertEquals("Engine built", "1999", e6.getBuilt()); Assert.assertEquals("Engine owner", "AT", e6.getOwnerName()); Assert.assertEquals("Engine comment", "test Engine comment field", e6.getComment()); Assert.assertFalse(e6.isBunit()); Assert.assertEquals("Blocking order", Engine.DEFAULT_BLOCKING_ORDER, e6.getBlocking()); // make B unit JemmyUtil.enterClickAndLeave(f.bUnitCheckBox); JemmyUtil.enterClickAndLeave(f.saveButton); Assert.assertEquals("number of Engines", 5, em.getNumEntries()); Assert.assertTrue(e6.isBunit()); Assert.assertEquals("Blocking order", Engine.B_UNIT_BLOCKING, e6.getBlocking()); JUnitUtil.dispose(f); } @Test public void testEngineEditFrameRead() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); JUnitOperationsUtil.initOperationsData(); EngineManager em = InstanceManager.getDefault(EngineManager.class); Engine e1 = em.getByRoadAndNumber("PC", "5016"); e1.setComment("Test engine Comment for E1"); EngineLengths el = InstanceManager.getDefault(EngineLengths.class); el.addName("59"); Location location = InstanceManager.getDefault(LocationManager.class).getLocationByName("North End Staging"); Track track = location.getTrackByName("North End 1", null); Assert.assertEquals("place engine", Track.OKAY, e1.setLocation(location, track)); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); f.load(e1); f.setTitle("Test Edit Engine Frame"); Assert.assertEquals("Engine road", "PC", f.roadComboBox.getSelectedItem()); Assert.assertEquals("Engine number", "5016", f.roadNumberTextField.getText()); Assert.assertEquals("Engine type", "GP40", f.modelComboBox.getSelectedItem()); Assert.assertEquals("Engine type", "Diesel", f.typeComboBox.getSelectedItem()); Assert.assertEquals("Engine length", "59", f.lengthComboBox.getSelectedItem()); Assert.assertEquals("Engine weight", "122", f.weightTonsTextField.getText()); Assert.assertEquals("Engine built", "1990", f.builtTextField.getText()); Assert.assertEquals("Engine owner", "AT", f.ownerComboBox.getSelectedItem()); Assert.assertEquals("Engine comment", "Test engine Comment for E1", f.commentTextField.getText()); Assert.assertEquals("Engine location", location, f.locationBox.getSelectedItem()); Assert.assertEquals("Engine track", track, f.trackLocationBox.getSelectedItem()); // test delete button JemmyUtil.enterClickAndLeave(f.deleteButton); Assert.assertEquals("number of Engines", 3, em.getNumEntries()); JUnitUtil.dispose(f); } @Test public void testAddNewRoadNo() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); JUnitOperationsUtil.initOperationsData(); // load engines EngineManager em = InstanceManager.getDefault(EngineManager.class); Engine e1 = em.getByRoadAndNumber("PC", "5524"); e1.setRoadName("TEST_ROAD"); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); // should cause add road dialog to appear Thread load = new Thread(new Runnable() { @Override public void run() { f.load(e1); } }); load.setName("load edit frame"); // NOI18N load.start(); jmri.util.JUnitUtil.waitFor(() -> { return load.getState().equals(Thread.State.WAITING); }, "wait for prompt"); JemmyUtil.pressDialogButton(Bundle.getMessage("addRoad"), Bundle.getMessage("ButtonNo")); try { load.join(); } catch (InterruptedException e) { // do nothing } JemmyUtil.waitFor(f); Assert.assertFalse(InstanceManager.getDefault(CarRoads.class).containsName("TEST_ROAD")); JUnitUtil.dispose(f); } @Test public void testAddNewRoadYes() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); JUnitOperationsUtil.initOperationsData(); // load engines EngineManager engineManager = InstanceManager.getDefault(EngineManager.class); Engine e1 = engineManager.getByRoadAndNumber("PC", "5524"); e1.setRoadName("TEST_ROAD"); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); // should cause add road dialog to appear Thread load = new Thread(new Runnable() { @Override public void run() { f.load(e1); } }); load.setName("load edit frame"); // NOI18N load.start(); jmri.util.JUnitUtil.waitFor(() -> { return load.getState().equals(Thread.State.WAITING); }, "wait for prompt"); JemmyUtil.pressDialogButton(Bundle.getMessage("addRoad"), Bundle.getMessage("ButtonYes")); try { load.join(); } catch (InterruptedException e) { // do nothing } JemmyUtil.waitFor(f); Assert.assertTrue(InstanceManager.getDefault(CarRoads.class).containsName("TEST_ROAD")); JUnitUtil.dispose(f); } @Test public void testAddNewModel() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); JUnitOperationsUtil.initOperationsData(); // load engines EngineManager engineManager = InstanceManager.getDefault(EngineManager.class); Engine e1 = engineManager.getByRoadAndNumber("PC", "5524"); e1.setModel("TEST_MODEL"); e1.setTypeName("Diesel"); e1.setLength("50"); e1.setHp("2000"); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); // should cause add model dialog to appear Thread load = new Thread(new Runnable() { @Override public void run() { f.load(e1); } }); load.setName("load edit frame"); // NOI18N load.start(); jmri.util.JUnitUtil.waitFor(() -> { return load.getState().equals(Thread.State.WAITING); }, "wait for prompt"); JemmyUtil.pressDialogButton(Bundle.getMessage("engineAddModel"), Bundle.getMessage("ButtonNo")); try { load.join(); } catch (InterruptedException e) { // do nothing } JemmyUtil.waitFor(f); Assert.assertFalse(InstanceManager.getDefault(EngineModels.class).containsName("TEST_MODEL")); // now answer yes to add model Thread load2 = new Thread(new Runnable() { @Override public void run() { f.load(e1); } }); load2.setName("load edit frame"); // NOI18N load2.start(); jmri.util.JUnitUtil.waitFor(() -> { return load2.getState().equals(Thread.State.WAITING); }, "wait for prompt"); JemmyUtil.pressDialogButton(Bundle.getMessage("engineAddModel"), Bundle.getMessage("ButtonYes")); try { load2.join(); } catch (InterruptedException e) { // do nothing } JemmyUtil.waitFor(f); Assert.assertTrue(InstanceManager.getDefault(EngineModels.class).containsName("TEST_MODEL")); JUnitUtil.dispose(f); } @Test public void testAddNewType() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); JUnitOperationsUtil.initOperationsData(); // load engines EngineManager engineManager = InstanceManager.getDefault(EngineManager.class); Engine e1 = engineManager.getByRoadAndNumber("PC", "5524"); e1.setTypeName("TEST_TYPE"); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); // should cause add type dialog to appear Thread load = new Thread(new Runnable() { @Override public void run() { f.load(e1); } }); load.setName("load edit frame"); // NOI18N load.start(); jmri.util.JUnitUtil.waitFor(() -> { return load.getState().equals(Thread.State.WAITING); }, "wait for prompt"); JemmyUtil.pressDialogButton(Bundle.getMessage("addType"), Bundle.getMessage("ButtonNo")); try { load.join(); } catch (InterruptedException e) { // do nothing } JemmyUtil.waitFor(f); Assert.assertFalse(InstanceManager.getDefault(EngineTypes.class).containsName("TEST_TYPE")); // now answer yes to add type Thread load2 = new Thread(new Runnable() { @Override public void run() { f.load(e1); } }); load2.setName("load edit frame"); // NOI18N load2.start(); jmri.util.JUnitUtil.waitFor(() -> { return load2.getState().equals(Thread.State.WAITING); }, "wait for prompt"); JemmyUtil.pressDialogButton(Bundle.getMessage("addType"), Bundle.getMessage("ButtonYes")); try { load2.join(); } catch (InterruptedException e) { // do nothing } JemmyUtil.waitFor(f); Assert.assertTrue(InstanceManager.getDefault(EngineTypes.class).containsName("TEST_TYPE")); JUnitUtil.dispose(f); } @Test public void testAddNewLength() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); JUnitOperationsUtil.initOperationsData(); // load engines EngineManager engineManager = InstanceManager.getDefault(EngineManager.class); Engine e1 = engineManager.getByRoadAndNumber("PC", "5524"); e1.setLength("1234"); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); // should cause add length dialog to appear Thread load = new Thread(new Runnable() { @Override public void run() { f.load(e1); } }); load.setName("load edit frame"); // NOI18N load.start(); jmri.util.JUnitUtil.waitFor(() -> { return load.getState().equals(Thread.State.WAITING); }, "wait for prompt"); JemmyUtil.pressDialogButton(Bundle.getMessage("addLength"), Bundle.getMessage("ButtonNo")); try { load.join(); } catch (InterruptedException e) { // do nothing } JemmyUtil.waitFor(f); Assert.assertFalse(InstanceManager.getDefault(EngineLengths.class).containsName("1234")); // now answer yes to add type Thread load2 = new Thread(new Runnable() { @Override public void run() { f.load(e1); } }); load2.setName("load edit frame"); // NOI18N load2.start(); jmri.util.JUnitUtil.waitFor(() -> { return load2.getState().equals(Thread.State.WAITING); }, "wait for prompt"); JemmyUtil.pressDialogButton(Bundle.getMessage("addLength"), Bundle.getMessage("ButtonYes")); try { load2.join(); } catch (InterruptedException e) { // do nothing } JemmyUtil.waitFor(f); Assert.assertTrue(InstanceManager.getDefault(EngineLengths.class).containsName("1234")); JUnitUtil.dispose(f); } @Test public void testAddOwner() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); JUnitOperationsUtil.initOperationsData(); // load engines EngineManager engineManager = InstanceManager.getDefault(EngineManager.class); Engine e1 = engineManager.getByRoadAndNumber("PC", "5524"); e1.setOwnerName("TEST_OWNER"); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); // should cause add owner dialog to appear Thread load = new Thread(new Runnable() { @Override public void run() { f.load(e1); } }); load.setName("load edit frame"); // NOI18N load.start(); jmri.util.JUnitUtil.waitFor(() -> { return load.getState().equals(Thread.State.WAITING); }, "wait for prompt"); JemmyUtil.pressDialogButton(Bundle.getMessage("addOwner"), Bundle.getMessage("ButtonNo")); try { load.join(); } catch (InterruptedException e) { // do nothing } JemmyUtil.waitFor(f); Assert.assertFalse(InstanceManager.getDefault(CarOwners.class).containsName("TEST_OWNER")); // now answer yes to add owner Thread load2 = new Thread(new Runnable() { @Override public void run() { f.load(e1); } }); load2.setName("load edit frame"); // NOI18N load2.start(); jmri.util.JUnitUtil.waitFor(() -> { return load2.getState().equals(Thread.State.WAITING); }, "wait for prompt"); JemmyUtil.pressDialogButton(Bundle.getMessage("addOwner"), Bundle.getMessage("ButtonYes")); try { load2.join(); } catch (InterruptedException e) { // do nothing } JemmyUtil.waitFor(f); Assert.assertTrue(InstanceManager.getDefault(CarOwners.class).containsName("TEST_OWNER")); JUnitUtil.dispose(f); } @Test public void testSaveConsist() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); JUnitOperationsUtil.initOperationsData(); // load engines EngineManager engineManager = InstanceManager.getDefault(EngineManager.class); Engine e1 = engineManager.getByRoadAndNumber("PC", "5524"); Assert.assertEquals("consist name", "C14", e1.getConsistName()); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); f.load(e1); Consist c = InstanceManager.getDefault(ConsistManager.class).newConsist("TEST_CONSIST"); f.groupComboBox.setSelectedItem(c.getName()); JemmyUtil.enterClickAndLeave(f.saveButton); Assert.assertEquals("consist name", "TEST_CONSIST", e1.getConsistName()); JUnitUtil.dispose(f); } @Test public void testConsist() { Assume.assumeFalse(GraphicsEnvironment.isHeadless()); JUnitOperationsUtil.initOperationsData(); // load engines EngineManager engineManager = InstanceManager.getDefault(EngineManager.class); Engine e1 = engineManager.getByRoadAndNumber("PC", "5524"); Assert.assertEquals("consist name", "C14", e1.getConsistName()); Engine e2 = engineManager.getByRoadAndNumber("PC", "5559"); Assert.assertEquals("consist name", "C14", e2.getConsistName()); Location location = InstanceManager.getDefault(LocationManager.class).getLocationByName("North End Staging"); Track track = location.getTrackByName("North End 1", null); Assert.assertEquals("place engine", Track.OKAY, e1.setLocation(location, track)); EngineEditFrame f = new EngineEditFrame(); f.initComponents(); f.load(e1); JemmyUtil.enterClickAndLeaveThreadSafe(f.saveButton); JemmyUtil.pressDialogButton(Bundle.getMessage("enginePartConsist"), Bundle.getMessage("ButtonYes")); JemmyUtil.waitFor(f); Assert.assertEquals("Confirm location change", location, e2.getLocation()); Assert.assertEquals("Confirm track change", track, e2.getTrack()); JUnitUtil.dispose(f); } }