Files
2026-06-17 14:00:51 +02:00

352 lines
13 KiB
Java

package jmri.jmrit.operations.locations.gui;
import java.awt.GraphicsEnvironment;
import java.text.MessageFormat;
import org.junit.Assert;
import org.junit.Assume;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.netbeans.jemmy.operators.JCheckBoxOperator;
import org.netbeans.jemmy.operators.JFrameOperator;
import jmri.InstanceManager;
import jmri.jmrit.operations.OperationsTestCase;
import jmri.jmrit.operations.locations.*;
import jmri.jmrit.operations.setup.Setup;
import jmri.util.JUnitOperationsUtil;
import jmri.util.JUnitUtil;
import jmri.util.swing.JemmyUtil;
/**
* Tests for the Operations Locations GUI class
*
* @author Dan Boudreau Copyright (C) 2009
*/
public class YardEditFrameTest extends OperationsTestCase {
static final int ALL = Track.EAST + Track.WEST + Track.NORTH + Track.SOUTH;
private LocationManager lManager;
private Location l;
@Test
public void testCreateYardTrackDefault() {
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
YardEditFrame f = new YardEditFrame();
f.setTitle("Test Yard Add Frame");
f.initComponents(l, null);
// create a yard track with length 43.
f.trackNameTextField.setText("new yard track");
f.trackLengthTextField.setText("43");
JemmyUtil.enterClickAndLeave(f.addTrackButton);
Track t = l.getTrackByName("new yard track", null);
Assert.assertNotNull("new yard track", t);
Assert.assertEquals("yard track length", 43, t.getLength());
// check that the defaults are correct
Assert.assertEquals("all directions", ALL, t.getTrainDirections());
Assert.assertEquals("all roads", Track.ALL_ROADS, t.getRoadOption());
// add a second track with length 6543.
f.trackNameTextField.setText("2nd yard track");
f.trackLengthTextField.setText("6543");
JemmyUtil.enterClickAndLeave(f.addTrackButton);
t = l.getTrackByName("2nd yard track", null);
Assert.assertNotNull("2nd yard track", t);
Assert.assertEquals("2nd yard track length", 6543, t.getLength());
// check that the defaults are correct
Assert.assertEquals("all directions", ALL, t.getTrainDirections());
Assert.assertEquals("all roads", Track.ALL_ROADS, t.getRoadOption());
// add A third track with length 1.
f.trackNameTextField.setText("3rd yard track");
f.trackLengthTextField.setText("1");
JemmyUtil.enterClickAndLeave(f.addTrackButton);
t = l.getTrackByName("3rd yard track", null);
Assert.assertNotNull("3rd yard track", t);
Assert.assertEquals("3rd yard track length", 1, t.getLength());
// check that the defaults are correct
Assert.assertEquals("all directions", ALL, t.getTrainDirections());
Assert.assertEquals("all roads", Track.ALL_ROADS, t.getRoadOption());
// clean up the frame
f.setVisible(false);
JUnitUtil.dispose(f);
}
@Test
public void testSetDirectionUsingCheckbox() {
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
YardEditFrame f = new YardEditFrame();
f.setTitle("Test Yard Direction Set Frame");
f.initComponents(l, null);
f.trackNameTextField.setText("4th yard track");
f.trackLengthTextField.setText("21");
JemmyUtil.enterClickAndLeave(f.addTrackButton);
Track t = l.getTrackByName("4th yard track", null);
Assert.assertNotNull("4th yard track", t);
Assert.assertEquals("4th yard track length", 21, t.getLength());
Assert.assertEquals("Direction all before change", ALL, t.getTrainDirections());
// deselect east, west and south check boxes
JemmyUtil.enterClickAndLeave(f.eastCheckBox);
JemmyUtil.enterClickAndLeave(f.westCheckBox);
JemmyUtil.enterClickAndLeave(f.southCheckBox);
JemmyUtil.enterClickAndLeave(f.saveTrackButton);
Assert.assertEquals("only north", Track.NORTH, t.getTrainDirections());
// clean up the frame
f.setVisible(false);
JUnitUtil.dispose(f);
}
@Test
public void testCreateTracksAndReloadFrame() {
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
YardEditFrame f = new YardEditFrame();
f.setTitle("Test Yard Create Frame");
f.initComponents(l, null);
// create four yard tracks
f.trackNameTextField.setText("new yard track");
f.trackLengthTextField.setText("43");
JemmyUtil.enterClickAndLeave(f.addTrackButton);
f.trackNameTextField.setText("2nd yard track");
f.trackLengthTextField.setText("6543");
JemmyUtil.enterClickAndLeave(f.addTrackButton);
f.trackNameTextField.setText("3rd yard track");
f.trackLengthTextField.setText("1");
JemmyUtil.enterClickAndLeave(f.addTrackButton);
f.trackNameTextField.setText("4th yard track");
f.trackLengthTextField.setText("21");
JemmyUtil.enterClickAndLeave(f.addTrackButton);
// deselect east, west and south check boxes
JemmyUtil.enterClickAndLeave(f.eastCheckBox);
JemmyUtil.enterClickAndLeave(f.westCheckBox);
JemmyUtil.enterClickAndLeave(f.southCheckBox);
JemmyUtil.enterClickAndLeave(f.saveTrackButton);
// clean up the frame
f.setVisible(false);
JUnitUtil.dispose(f);
// now reload
Location l2 = lManager.getLocationByName("Test Loc C");
Assert.assertNotNull("Location Test Loc C", l2);
LocationEditFrame fl = new LocationEditFrame(l2);
fl.setTitle("Test Edit Restored Location Frame");
// check location name
Assert.assertEquals("name", "Test Loc C", fl.locationNameTextField.getText());
Assert.assertEquals("number of yards", 4, fl.yardModel.getRowCount());
Assert.assertEquals("number of staging tracks", 0, fl.stagingModel.getRowCount());
// clean up the frame
fl.setVisible(false);
JUnitUtil.dispose(fl);
}
@Test
public void testDeleteButton() {
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
Track t = l.addTrack("Test Yard Delete", Track.YARD);
YardEditFrame f = new YardEditFrame();
f.initComponents(l, t);
JemmyUtil.enterClickAndLeave(f.deleteTrackButton);
t = l.getTrackByName("Test Yard Delete", null);
Assert.assertNull("track should not exist", t);
JUnitUtil.dispose(f);
}
@Test
public void testLIFO() {
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
Track t = l.addTrack("Test Yard Order", Track.YARD);
YardEditFrame f = new YardEditFrame();
f.initComponents(l, t);
JemmyUtil.enterClickAndLeave(f.orderLIFO);
Assert.assertEquals("service order", Track.LIFO, t.getServiceOrder());
JemmyUtil.enterClickAndLeave(f.orderFIFO);
Assert.assertEquals("service order", Track.FIFO, t.getServiceOrder());
JemmyUtil.enterClickAndLeave(f.orderNormal);
Assert.assertEquals("service order", Track.NORMAL, t.getServiceOrder());
JUnitUtil.dispose(f);
}
@Test
public void testErrorTrackName() {
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
YardEditFrame f = new YardEditFrame();
f.initComponents(l, null);
// no track name entered
JemmyUtil.enterClickAndLeaveThreadSafe(f.addTrackButton);
JemmyUtil.pressDialogButton(f,
MessageFormat.format(Bundle.getMessage("CanNotTrack"), new Object[]{Bundle.getMessage("add")}),
Bundle.getMessage("ButtonOK"));
// hyphen feature requires at least 2 characters
f.trackNameTextField.setText("-");
JemmyUtil.enterClickAndLeaveThreadSafe(f.addTrackButton);
JemmyUtil.pressDialogButton(f,
MessageFormat.format(Bundle.getMessage("CanNotTrack"), new Object[]{Bundle.getMessage("add")}),
Bundle.getMessage("ButtonOK"));
// track name too long (25 characters)
f.trackNameTextField.setText("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
JemmyUtil.enterClickAndLeaveThreadSafe(f.addTrackButton);
JemmyUtil.pressDialogButton(f,
MessageFormat.format(Bundle.getMessage("CanNotTrack"), new Object[]{Bundle.getMessage("add")}),
Bundle.getMessage("ButtonOK"));
JUnitUtil.dispose(f);
}
@Test
public void testErrorTrackLength() {
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
YardEditFrame f = new YardEditFrame();
f.initComponents(l, null);
// the length field is empty
f.trackNameTextField.setText("new yard track");
JemmyUtil.enterClickAndLeaveThreadSafe(f.addTrackButton);
JemmyUtil.pressDialogButton(f, Bundle.getMessage("ErrorTrackLength"), Bundle.getMessage("ButtonOK"));
// bad inches conversion
f.trackLengthTextField.setText("A\"");
JemmyUtil.enterClickAndLeaveThreadSafe(f.saveTrackButton);
JemmyUtil.pressDialogButton(f, Bundle.getMessage("ErrorTrackLength"), Bundle.getMessage("ButtonOK"));
// bad centimeter conversion
f.trackLengthTextField.setText("Acm");
JemmyUtil.enterClickAndLeaveThreadSafe(f.saveTrackButton);
JemmyUtil.pressDialogButton(f, Bundle.getMessage("ErrorTrackLength"), Bundle.getMessage("ButtonOK"));
// too large of a number
f.trackLengthTextField.setText("100000");
JemmyUtil.enterClickAndLeaveThreadSafe(f.saveTrackButton);
JemmyUtil.pressDialogButton(f, Bundle.getMessage("ErrorTrackLength"), Bundle.getMessage("ButtonOK"));
f.trackLengthTextField.setText("300");
JemmyUtil.enterClickAndLeave(f.saveTrackButton);
Track t = l.getTrackByName("new yard track", null);
// place a car on track
JUnitOperationsUtil.createAndPlaceCar("CP", "X10001", "Boxcar", "40", "DAB", "1984", t, 0);
// track is too short for a 40 foot car, need room for couplers
f.trackLengthTextField.setText("40");
JemmyUtil.enterClickAndLeaveThreadSafe(f.saveTrackButton);
JemmyUtil.pressDialogButton(f, Bundle.getMessage("ErrorTrackLength"), Bundle.getMessage("ButtonOK"));
// force track to 40 feet
JemmyUtil.pressDialogButton(f, Bundle.getMessage("ErrorTrackLength"), Bundle.getMessage("ButtonNo"));
Assert.assertEquals("track length", 300, t.getLength());
// again, but say yes this time
JemmyUtil.enterClickAndLeaveThreadSafe(f.saveTrackButton);
JemmyUtil.pressDialogButton(f, Bundle.getMessage("ErrorTrackLength"), Bundle.getMessage("ButtonOK"));
// force track to 40 feet
JemmyUtil.pressDialogButton(f, Bundle.getMessage("ErrorTrackLength"), Bundle.getMessage("ButtonYes"));
Assert.assertEquals("track length", 40, t.getLength());
JUnitUtil.dispose(f);
}
@Test
public void testTrackLengthInches() {
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
Track t = l.addTrack("Test Yard Length", Track.YARD);
YardEditFrame f = new YardEditFrame();
f.initComponents(l, t);
f.trackLengthTextField.setText("24\"");
JemmyUtil.enterClickAndLeave(f.saveTrackButton);
// confirm HO default
Assert.assertEquals("ratio", 87, Setup.getScaleRatio());
Assert.assertEquals("track length", 174, t.getLength());
JUnitUtil.dispose(f);
}
@Test
public void testTrackLengthCentimeters() {
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
Track t = l.addTrack("Test Yard Length", Track.YARD);
YardEditFrame f = new YardEditFrame();
f.initComponents(l, t);
f.trackLengthTextField.setText("240cm");
JemmyUtil.enterClickAndLeave(f.saveTrackButton);
// confirm HO default
Assert.assertEquals("ratio", 87, Setup.getScaleRatio());
// length conversion 240 x 87 / 100
Assert.assertEquals("track length", 208, t.getLength());
JUnitUtil.dispose(f);
}
@Test
public void testTypes() {
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
Track t = l.addTrack("Test Car Types", Track.YARD);
t.setLength(100);
YardEditFrame f = new YardEditFrame();
f.initComponents(l, t);
Assert.assertTrue("Boxcar is accepted", t.isTypeNameAccepted("Boxcar"));
JFrameOperator jfo = new JFrameOperator(f);
JCheckBoxOperator jbo = new JCheckBoxOperator(jfo, "Boxcar");
jbo.doClick();
Assert.assertFalse("Boxcar is not accepted", t.isTypeNameAccepted("Boxcar"));
jbo.doClick();
Assert.assertTrue("Boxcar is accepted", t.isTypeNameAccepted("Boxcar"));
JUnitUtil.dispose(f);
}
@Test
public void testCloseWindowOnSave() {
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
Track t = l.addTrack("Test Close", Track.YARD);
YardEditFrame f = new YardEditFrame();
f.initComponents(l, t);
JUnitOperationsUtil.testCloseWindowOnSave(f.getTitle());
}
// Ensure minimal setup for log4J
@Override
@BeforeEach
public void setUp() {
super.setUp();
JUnitOperationsUtil.loadFiveLocations();
lManager = InstanceManager.getDefault(LocationManager.class);
l = lManager.getLocationByName("Test Loc C");
JUnitOperationsUtil.loadTrain(l);
}
}