342 lines
15 KiB
Java
342 lines
15 KiB
Java
|
|
package jmri.jmrit.operations.trains;
|
|
|
|
import java.awt.GraphicsEnvironment;
|
|
import java.text.MessageFormat;
|
|
import java.util.List;
|
|
import java.util.ResourceBundle;
|
|
|
|
import org.junit.Assert;
|
|
import org.junit.Assume;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import jmri.InstanceManager;
|
|
import jmri.jmrit.operations.OperationsTestCase;
|
|
import jmri.jmrit.operations.locations.Location;
|
|
import jmri.jmrit.operations.locations.LocationManager;
|
|
import jmri.jmrit.operations.rollingstock.cars.CarLoad;
|
|
import jmri.util.*;
|
|
import jmri.util.swing.JemmyUtil;
|
|
|
|
/**
|
|
* Tests for the TrainManager class Last manually cross-checked on 20090131
|
|
*
|
|
* @author Bob Coleman Copyright (C) 2008, 2009
|
|
*/
|
|
public class TrainManagerTest extends OperationsTestCase {
|
|
|
|
// test train manager
|
|
@Test
|
|
public void testTrainManager() {
|
|
TrainManager tmanager = InstanceManager.getDefault(TrainManager.class);
|
|
|
|
// test defaults
|
|
Assert.assertTrue("Build Messages", tmanager.isBuildMessagesEnabled());
|
|
Assert.assertFalse("Build Reports", tmanager.isBuildReportEnabled());
|
|
Assert.assertFalse("Print Preview", tmanager.isPrintPreviewEnabled());
|
|
|
|
Assert.assertFalse("Run File", tmanager.isRunFileEnabled());
|
|
Assert.assertFalse("Open File", tmanager.isOpenFileEnabled());
|
|
Assert.assertFalse("Hyphen Name", tmanager.isShowLocationHyphenNameEnabled());
|
|
|
|
// Swap them
|
|
tmanager.setBuildMessagesEnabled(false);
|
|
tmanager.setBuildReportEnabled(true);
|
|
tmanager.setPrintPreviewEnabled(true);
|
|
|
|
tmanager.setRunFileEnabled(true);
|
|
tmanager.setOpenFileEnabled(true);
|
|
tmanager.setShowLocationHyphenNameEnabled(true);
|
|
|
|
Assert.assertFalse("Build Messages", tmanager.isBuildMessagesEnabled());
|
|
Assert.assertTrue("Build Reports", tmanager.isBuildReportEnabled());
|
|
Assert.assertTrue("Print Preview", tmanager.isPrintPreviewEnabled());
|
|
|
|
Assert.assertTrue("Run File", tmanager.isRunFileEnabled());
|
|
Assert.assertTrue("Open File", tmanager.isOpenFileEnabled());
|
|
Assert.assertTrue("Hyphen Name", tmanager.isShowLocationHyphenNameEnabled());
|
|
}
|
|
|
|
@Test
|
|
public void testShutDownScripts() {
|
|
TrainManager tmanager = InstanceManager.getDefault(TrainManager.class);
|
|
|
|
tmanager.addShutDownScript("path to shutdown script");
|
|
Assert.assertEquals("Confirm size", 1, tmanager.getShutDownScripts().size());
|
|
Assert.assertEquals("Confirm script", "path to shutdown script", tmanager.getShutDownScripts().get(0));
|
|
|
|
tmanager.deleteShutDownScript("path to shutdown script");
|
|
Assert.assertEquals("Confirm size", 0, tmanager.getShutDownScripts().size());
|
|
}
|
|
|
|
@Test
|
|
public void testStartUpScripts() {
|
|
TrainManager tmanager = InstanceManager.getDefault(TrainManager.class);
|
|
|
|
tmanager.addStartUpScript("path to startup script");
|
|
Assert.assertEquals("Confirm size", 1, tmanager.getStartUpScripts().size());
|
|
Assert.assertEquals("Confirm script", "path to startup script", tmanager.getStartUpScripts().get(0));
|
|
|
|
tmanager.deleteStartUpScript("path to startup script");
|
|
Assert.assertEquals("Confirm size", 0, tmanager.getStartUpScripts().size());
|
|
}
|
|
|
|
/**
|
|
* Make sure we can retrieve a train from the manager by name.
|
|
*/
|
|
@Test
|
|
public void testGetTrainByName() {
|
|
TrainManager tmanager = InstanceManager.getDefault(TrainManager.class);
|
|
JUnitOperationsUtil.initOperationsData();
|
|
Assert.assertNotNull("Retrieve Train", tmanager.getTrainByName("STF"));
|
|
}
|
|
|
|
/**
|
|
* Make sure we can retrieve a train from the manager by name.
|
|
*/
|
|
@Test
|
|
public void testGetTrainById() {
|
|
TrainManager tmanager = InstanceManager.getDefault(TrainManager.class);
|
|
JUnitOperationsUtil.initOperationsData();
|
|
Assert.assertNotNull("Retrieve Train", tmanager.getTrainById("1"));
|
|
}
|
|
|
|
@Test
|
|
public void testTrainCopy() {
|
|
TrainManager tmanager = InstanceManager.getDefault(TrainManager.class);
|
|
JUnitOperationsUtil.initOperationsData();
|
|
Train train = tmanager.getTrainById("1");
|
|
Train copiedTrain = tmanager.copyTrain(train, "Copied train");
|
|
|
|
Assert.assertEquals("Copied train", copiedTrain.getName());
|
|
Assert.assertEquals(train.getRoute(), copiedTrain.getRoute());
|
|
}
|
|
|
|
@Test
|
|
public void testReplaceLoad() {
|
|
TrainManager tmanager = InstanceManager.getDefault(TrainManager.class);
|
|
JUnitOperationsUtil.initOperationsData();
|
|
Train train = tmanager.getTrainById("1");
|
|
train.setLoadOption(Train.INCLUDE_LOADS);
|
|
train.addLoadName("Nuts");
|
|
train.addLoadName("Boxcar" + CarLoad.SPLIT_CHAR + "Nuts");
|
|
train.addLoadName("Bolts");
|
|
train.addLoadName("Boxcar" + CarLoad.SPLIT_CHAR + "Bolts");
|
|
|
|
Assert.assertTrue("confirm load name", train.isLoadNameAccepted("Nuts"));
|
|
Assert.assertTrue("confirm load name", train.isLoadNameAccepted("Nuts", "Boxcar"));
|
|
Assert.assertTrue("confirm load name", train.isLoadNameAccepted("Bolts"));
|
|
Assert.assertTrue("confirm load name", train.isLoadNameAccepted("Bolts", "Boxcar"));
|
|
Assert.assertFalse("confirm load name", train.isLoadNameAccepted("NUTS"));
|
|
Assert.assertFalse("confirm load name", train.isLoadNameAccepted("BOLTS"));
|
|
|
|
tmanager.replaceLoad("Boxcar", "Nuts", "NUTS");
|
|
|
|
Assert.assertTrue("confirm load name", train.isLoadNameAccepted("NUTS"));
|
|
Assert.assertTrue("confirm load name", train.isLoadNameAccepted("NUTS", "Boxcar"));
|
|
Assert.assertTrue("confirm load name", train.isLoadNameAccepted("Bolts"));
|
|
Assert.assertTrue("confirm load name", train.isLoadNameAccepted("Bolts", "Boxcar"));
|
|
Assert.assertFalse("confirm load name", train.isLoadNameAccepted("Nuts"));
|
|
Assert.assertFalse("confirm load name", train.isLoadNameAccepted("BOLTS"));
|
|
|
|
// change bolts for all cars except for boxcars and bolts
|
|
tmanager.replaceLoad("Flat", "Bolts", "BOLTS");
|
|
|
|
Assert.assertTrue("confirm load name", train.isLoadNameAccepted("NUTS"));
|
|
Assert.assertTrue("confirm load name", train.isLoadNameAccepted("NUTS", "Boxcar"));
|
|
Assert.assertTrue("confirm load name", train.isLoadNameAccepted("BOLTS"));
|
|
Assert.assertTrue("confirm load name", train.isLoadNameAccepted("Bolts", "Boxcar")); // not changed
|
|
Assert.assertFalse("confirm load name", train.isLoadNameAccepted("Nuts"));
|
|
Assert.assertFalse("confirm load name", train.isLoadNameAccepted("bolts"));
|
|
}
|
|
|
|
@Test
|
|
public void testDeleteLoad() {
|
|
TrainManager tmanager = InstanceManager.getDefault(TrainManager.class);
|
|
JUnitOperationsUtil.initOperationsData();
|
|
Train train = tmanager.getTrainById("1");
|
|
train.setLoadOption(Train.INCLUDE_LOADS);
|
|
train.addLoadName("Nuts");
|
|
train.addLoadName("Boxcar" + CarLoad.SPLIT_CHAR + "Nuts");
|
|
train.addLoadName("Bolts");
|
|
train.addLoadName("Boxcar" + CarLoad.SPLIT_CHAR + "Bolts");
|
|
|
|
Assert.assertTrue("confirm load name", train.isLoadNameAccepted("Nuts"));
|
|
Assert.assertTrue("confirm load name", train.isLoadNameAccepted("Nuts", "Boxcar"));
|
|
Assert.assertTrue("confirm load name", train.isLoadNameAccepted("Bolts"));
|
|
Assert.assertTrue("confirm load name", train.isLoadNameAccepted("Bolts", "Boxcar"));
|
|
|
|
tmanager.replaceLoad("Boxcar", "Nuts", null);
|
|
Assert.assertFalse("confirm load name", train.isLoadNameAccepted("Nuts"));
|
|
Assert.assertFalse("confirm load name", train.isLoadNameAccepted("Nuts", "Boxcar"));
|
|
Assert.assertTrue("confirm load name", train.isLoadNameAccepted("Bolts"));
|
|
Assert.assertTrue("confirm load name", train.isLoadNameAccepted("Bolts", "Boxcar"));
|
|
}
|
|
|
|
@Test
|
|
public void testIsAnyTrainBuilt() {
|
|
TrainManager tmanager = InstanceManager.getDefault(TrainManager.class);
|
|
JUnitOperationsUtil.initOperationsData();
|
|
Train train = tmanager.getTrainById("1");
|
|
|
|
Assert.assertFalse("no built trains", tmanager.isAnyTrainBuilt());
|
|
Assert.assertTrue("train built",train.build());
|
|
Assert.assertTrue("One built train", tmanager.isAnyTrainBuilt());
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
|
|
@Test
|
|
public void testGetTrainsArrivingThisLocationList() {
|
|
TrainManager tmanager = InstanceManager.getDefault(TrainManager.class);
|
|
JUnitOperationsUtil.initOperationsData();
|
|
Train train1 = tmanager.getTrainById("1");
|
|
Train train2 = tmanager.getTrainById("2");
|
|
|
|
Location location = InstanceManager.getDefault(LocationManager.class).getLocationById("3");
|
|
List<Train> trains = tmanager.getTrainsArrivingThisLocationList(location);
|
|
|
|
// no trains have been built so no trains arriving South End
|
|
Assert.assertEquals("list size", 0 , trains.size());
|
|
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertTrue(train2.build());
|
|
|
|
trains = tmanager.getTrainsArrivingThisLocationList(location);
|
|
Assert.assertEquals("list size", 2 , trains.size());
|
|
Assert.assertEquals(train1, trains.get(0));
|
|
Assert.assertEquals(train2, trains.get(1));
|
|
|
|
// change arrival time
|
|
train2.move();
|
|
|
|
trains = tmanager.getTrainsArrivingThisLocationList(location);
|
|
Assert.assertEquals("list size", 2 , trains.size());
|
|
Assert.assertEquals(train2, trains.get(0));
|
|
Assert.assertEquals(train1, trains.get(1));
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
|
|
@Test
|
|
public void testGetTrainsByDepartureList() {
|
|
TrainManager tmanager = InstanceManager.getDefault(TrainManager.class);
|
|
JUnitOperationsUtil.initOperationsData();
|
|
List<Train> trains = tmanager.getTrainsByDepartureList();
|
|
Assert.assertEquals("list size", 2 , trains.size());
|
|
Assert.assertEquals("STF", trains.get(0).getName());
|
|
Assert.assertEquals("SFF", trains.get(1).getName());
|
|
}
|
|
|
|
@Test
|
|
public void testGetTrainsByDescriptionList() {
|
|
TrainManager tmanager = InstanceManager.getDefault(TrainManager.class);
|
|
JUnitOperationsUtil.initOperationsData();
|
|
Train train1 = tmanager.getTrainById("1");
|
|
Train train2 = tmanager.getTrainById("2");
|
|
train1.setDescription("Bad Train");
|
|
train2.setDescription("A Good Train");
|
|
|
|
List<Train> trains = tmanager.getTrainsByDescriptionList();
|
|
Assert.assertEquals("list size", 2 , trains.size());
|
|
Assert.assertEquals("SFF", trains.get(0).getName());
|
|
Assert.assertEquals("STF", trains.get(1).getName());
|
|
}
|
|
|
|
@Test
|
|
public void testGetTrainsByRouteList() {
|
|
TrainManager tmanager = InstanceManager.getDefault(TrainManager.class);
|
|
JUnitOperationsUtil.initOperationsData();
|
|
List<Train> trains = tmanager.getTrainsByRouteList();
|
|
Assert.assertEquals("list size", 2 , trains.size());
|
|
Assert.assertEquals("STF", trains.get(0).getName());
|
|
Assert.assertEquals("SFF", trains.get(1).getName());
|
|
}
|
|
|
|
@Test
|
|
public void testGetTrainsByStatusList() {
|
|
TrainManager tmanager = InstanceManager.getDefault(TrainManager.class);
|
|
JUnitOperationsUtil.initOperationsData();
|
|
List<Train> trains = tmanager.getTrainsByStatusList();
|
|
Assert.assertEquals("list size", 2 , trains.size());
|
|
Assert.assertEquals("STF", trains.get(0).getName());
|
|
Assert.assertEquals("SFF", trains.get(1).getName());
|
|
|
|
// change status
|
|
Train train1 = tmanager.getTrainById("1");
|
|
train1.reset();
|
|
|
|
trains = tmanager.getTrainsByStatusList();
|
|
Assert.assertEquals("list size", 2 , trains.size());
|
|
Assert.assertEquals("SFF", trains.get(0).getName());
|
|
Assert.assertEquals("STF", trains.get(1).getName());
|
|
}
|
|
|
|
@Test
|
|
public void testSelectedTrainsGUI() {
|
|
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
|
|
TrainManager tmanager = InstanceManager.getDefault(TrainManager.class);
|
|
JUnitOperationsUtil.initOperationsData();
|
|
// don't build train 1
|
|
Train train1 = tmanager.getTrainById("1");
|
|
train1.setBuildEnabled(false);
|
|
|
|
Train train2 = tmanager.getTrainById("2");
|
|
|
|
tmanager.buildSelectedTrains(tmanager.getTrainsByIdList());
|
|
|
|
Thread t = jmri.util.JUnitUtil.getThreadByName("Build Trains");
|
|
if (t != null) {
|
|
jmri.util.JUnitUtil.waitFor(() -> {
|
|
return t.getState().equals(Thread.State.TERMINATED);
|
|
}, "wait for builds to complete");
|
|
}
|
|
|
|
Assert.assertFalse(train1.isBuilt());
|
|
Assert.assertTrue(train2.isBuilt());
|
|
|
|
// now preview all built trains
|
|
tmanager.setPrintPreviewEnabled(true);
|
|
tmanager.printSelectedTrains(tmanager.getTrainsByIdList());
|
|
|
|
Assert.assertFalse(train1.isPrinted());
|
|
Assert.assertFalse("Print preview", train2.isPrinted());
|
|
|
|
// confirm print preview window is showing
|
|
ResourceBundle rb = ResourceBundle
|
|
.getBundle("jmri.util.UtilBundle");
|
|
JmriJFrame printPreviewFrame = JmriJFrame.getFrame(rb.getString("PrintPreviewTitle") + " " + train2.getDescription());
|
|
Assert.assertNotNull("exists", printPreviewFrame);
|
|
|
|
JUnitUtil.dispose(printPreviewFrame);
|
|
|
|
// should cause dialog window to confirm termination without printing
|
|
Thread terminate = new Thread(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
tmanager.terminateSelectedTrains(tmanager.getTrainsByIdList());
|
|
}
|
|
});
|
|
terminate.setName("Terminate Trains Test"); // NOI18N
|
|
terminate.start();
|
|
|
|
jmri.util.JUnitUtil.waitFor(() -> {
|
|
return terminate.getState().equals(Thread.State.WAITING);
|
|
}, "wait for prompt");
|
|
|
|
// two dialog messages should appear
|
|
JemmyUtil.pressDialogButton(Bundle.getMessage("TerminateSelectedTip"), Bundle.getMessage("ButtonYes"));
|
|
|
|
JemmyUtil.pressDialogButton(MessageFormat.format(Bundle.getMessage("TerminateTrain"),
|
|
new Object[]{train2.getName(), train2.getDescription()}), Bundle.getMessage("ButtonYes"));
|
|
|
|
jmri.util.JUnitUtil.waitFor(() -> {
|
|
return terminate.getState().equals(Thread.State.TERMINATED);
|
|
}, "wait terminate");
|
|
|
|
Assert.assertFalse(train2.isBuilt());
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
}
|