Files
JIMRI/java/test/jmri/jmrit/operations/trains/TrainSwitchListsTest.java
T
2026-06-17 14:00:51 +02:00

676 lines
29 KiB
Java

package jmri.jmrit.operations.trains;
import java.io.*;
import org.junit.Assert;
import org.junit.jupiter.api.*;
import jmri.InstanceManager;
import jmri.jmrit.operations.OperationsTestCase;
import jmri.jmrit.operations.locations.*;
import jmri.jmrit.operations.rollingstock.cars.*;
import jmri.jmrit.operations.rollingstock.engines.Engine;
import jmri.jmrit.operations.rollingstock.engines.EngineManager;
import jmri.jmrit.operations.routes.*;
import jmri.jmrit.operations.setup.Setup;
import jmri.jmrit.operations.trains.schedules.TrainScheduleManager;
import jmri.util.JUnitOperationsUtil;
/**
*
* @author Paul Bender Copyright (C) 2017
* @author Dan Boudreau Copyright (C) 2018, 2026
*
* TODO data check of switch list files
*/
public class TrainSwitchListsTest extends OperationsTestCase {
private TrainManager tmanager;
private RouteManager rmanager;
private LocationManager lmanager;
private EngineManager emanager;
private CarManager cmanager;
private Location locationA;
private Location locationAhyphen;
@Test
public void testCTor() {
TrainSwitchLists t = new TrainSwitchLists();
Assert.assertNotNull("exists", t);
}
@Test
public void testDefaults() {
// the assumed defaults for this set of tests
Assert.assertFalse(Setup.isBuildAggressive());
Assert.assertEquals("default moves for a route", 5, Setup.getCarMoves());
Assert.assertTrue(Setup.isSwitchListRealTime());
}
@Test
public void testNoSwichListFile() {
loadLocationsEnginesAndCars();
File switchListFile = InstanceManager.getDefault(TrainManagerXml.class).getSwitchListFile(locationA.getName());
Assert.assertFalse(switchListFile.exists());
}
@Test
public void testSwitchListRealTime() throws IOException {
loadLocationsEnginesAndCars();
Train train = tmanager.newTrain("Test switchlists train");
Route route = rmanager.newRoute("Test switchlists route");
route.addLocation(locationA);
locationA.setSwitchListComment("Location A switch list comment");
train.setRoute(route);
train.setNumberEngines("1"); // request an engine
Assert.assertTrue(train.build());
TrainSwitchLists tsl = new TrainSwitchLists();
tsl.buildSwitchList(locationA);
File switchListFileA = InstanceManager.getDefault(TrainManagerXml.class).getSwitchListFile(locationA.getName());
Assert.assertTrue(switchListFileA.exists());
BufferedReader in = JUnitOperationsUtil.getBufferedReader(switchListFileA);
Assert.assertEquals("confirm number of lines in switch list", 30, in.lines().count());
in.close();
JUnitOperationsUtil.checkOperationsShutDownTask();
}
@Test
public void testSwitchListTrain() throws IOException {
Setup.setSwitchListPageFormat(Setup.PAGE_PER_VISIT);
loadLocationsEnginesAndCars();
Train train = tmanager.newTrain("Test switchlists train");
Route route = rmanager.newRoute("Test switchlists route");
Location locationB = lmanager.newLocation("Test Location B");
Track yardB = locationB.addTrack("Yard at B", Track.YARD);
yardB.setLength(400);
Location locationC = lmanager.newLocation("Test Location C");
Track yardC = locationC.addTrack("Yard at C", Track.YARD);
yardC.setLength(180); // only enough room for one car and engine
// create the route
route.addLocation(locationA);
route.addLocation(locationB);
RouteLocation rlc = route.addLocation(locationC);
rlc.setComment("Only one drop at location C");
train.setRoute(route);
train.setNumberEngines("1"); // request an engine
// place one car at location B for pick up
Car c6 = cmanager.getByRoadAndNumber("AA", "6");
Assert.assertEquals("Place car on track", Track.OKAY, c6.setLocation(locationB, yardB));
Assert.assertTrue(train.build());
TrainSwitchLists tsl = new TrainSwitchLists();
tsl.buildSwitchList(locationA);
tsl.buildSwitchList(locationB);
tsl.buildSwitchList(locationC);
File switchListFileA = InstanceManager.getDefault(TrainManagerXml.class).getSwitchListFile(locationA.getName());
Assert.assertTrue(switchListFileA.exists());
File switchListFileB = InstanceManager.getDefault(TrainManagerXml.class).getSwitchListFile(locationB.getName());
Assert.assertTrue(switchListFileB.exists());
File switchListFileC = InstanceManager.getDefault(TrainManagerXml.class).getSwitchListFile(locationC.getName());
Assert.assertTrue(switchListFileC.exists());
BufferedReader inA = JUnitOperationsUtil.getBufferedReader(switchListFileA);
Assert.assertEquals("confirm number of lines in switch list", 27, inA.lines().count());
BufferedReader inB = JUnitOperationsUtil.getBufferedReader(switchListFileB);
Assert.assertEquals("confirm number of lines in switch list", 20, inB.lines().count());
BufferedReader inC = JUnitOperationsUtil.getBufferedReader(switchListFileC);
Assert.assertEquals("confirm number of lines in switch list", 18, inC.lines().count());
// this train has no work at all locations
Train train2 = tmanager.newTrain("Test switchlists train 2");
train2.setRoute(route);
Assert.assertTrue(train2.build());
tsl.buildSwitchList(locationA);
tsl.buildSwitchList(locationB);
tsl.buildSwitchList(locationC);
// no change in switch lists
inA = JUnitOperationsUtil.getBufferedReader(switchListFileA);
Assert.assertEquals("confirm number of lines in switch list", 27, inA.lines().count());
inB = JUnitOperationsUtil.getBufferedReader(switchListFileB);
Assert.assertEquals("confirm number of lines in switch list", 20, inB.lines().count());
inC = JUnitOperationsUtil.getBufferedReader(switchListFileC);
Assert.assertEquals("confirm number of lines in switch list", 18, inC.lines().count());
inA.close();
inB.close();
inC.close();
JUnitOperationsUtil.checkOperationsShutDownTask();
}
/**
* Creates a switch list for a train that visits a location twice
* @throws IOException BufferedReader close
*/
@Test
public void testSwitchListTrainTurn() throws IOException {
Setup.setPrintLoadsAndEmptiesEnabled(true); // improve test coverage
Setup.setSwitchListPageFormat(Setup.PAGE_PER_VISIT);
Setup.setSwitchListAllTrainsEnabled(true);
loadLocationsEnginesAndCars();
Train train = tmanager.newTrain("Test switchlists train");
Route route = rmanager.newRoute("Test switchlists route");
Location locationB = lmanager.newLocation("Test Location B");
Track yardB = locationB.addTrack("Yard at B", Track.YARD);
yardB.setLength(400);
Location locationC = lmanager.newLocation("Test Location C");
Track yardC = locationC.addTrack("Yard at C", Track.YARD);
yardC.setLength(80); // only enough room for one car
Location locationD = lmanager.newLocation("Test Location D");
// create the turn
route.addLocation(locationA);
route.addLocation(locationB);
RouteLocation rlc = route.addLocation(locationC);
route.addLocation(locationD); // no tracks at D, so no work
RouteLocation rld = route.addLocation(locationD); // change direction
route.addLocation(locationC);
route.addLocation(locationB); // no work at B at this time
route.addLocation(locationA);
rlc.setComment("Test comment for location C");
// confirm that the default train direction was north
Assert.assertEquals("default train direction", RouteLocation.NORTH, rlc.getTrainDirection());
rld.setTrainDirection(RouteLocation.SOUTH);
train.setRoute(route);
train.setNumberEngines("1"); // request an engine
// place one car at location B for pick up
Car c6 = cmanager.getByRoadAndNumber("AA", "6");
Assert.assertEquals("Place car on track", Track.OKAY, c6.setLocation(locationB, yardB));
Assert.assertTrue(train.build());
TrainSwitchLists tsl = new TrainSwitchLists();
tsl.buildSwitchList(locationA);
tsl.buildSwitchList(locationB);
tsl.buildSwitchList(locationC);
// improve test coverage, switch list for a location without work
tsl.buildSwitchList(locationD);
File switchListFileA = InstanceManager.getDefault(TrainManagerXml.class).getSwitchListFile(locationA.getName());
Assert.assertTrue(switchListFileA.exists());
File switchListFileB = InstanceManager.getDefault(TrainManagerXml.class).getSwitchListFile(locationB.getName());
Assert.assertTrue(switchListFileB.exists());
File switchListFileC = InstanceManager.getDefault(TrainManagerXml.class).getSwitchListFile(locationC.getName());
Assert.assertTrue(switchListFileC.exists());
File switchListFileD = InstanceManager.getDefault(TrainManagerXml.class).getSwitchListFile(locationD.getName());
Assert.assertTrue(switchListFileD.exists());
// note that any changes to switch list will cause the following tests to fail
BufferedReader inA = JUnitOperationsUtil.getBufferedReader(switchListFileA);
Assert.assertEquals("confirm number of lines in switch list", 36, inA.lines().count());
BufferedReader inB = JUnitOperationsUtil.getBufferedReader(switchListFileB);
Assert.assertEquals("confirm number of lines in switch list", 30, inB.lines().count());
BufferedReader inC = JUnitOperationsUtil.getBufferedReader(switchListFileC);
Assert.assertEquals("confirm number of lines in switch list", 24, inC.lines().count());
BufferedReader inD = JUnitOperationsUtil.getBufferedReader(switchListFileD);
Assert.assertEquals("confirm number of lines in switch list", 12, inD.lines().count());
train.move(); // move train to B
tsl.buildSwitchList(locationA);
tsl.buildSwitchList(locationB);
tsl.buildSwitchList(locationC);
tsl.buildSwitchList(locationD);
inA = JUnitOperationsUtil.getBufferedReader(switchListFileA);
Assert.assertEquals("confirm number of lines in switch list", 23, inA.lines().count());
inB = JUnitOperationsUtil.getBufferedReader(switchListFileB);
Assert.assertEquals("confirm number of lines in switch list", 29, inB.lines().count());
inC = JUnitOperationsUtil.getBufferedReader(switchListFileC);
Assert.assertEquals("confirm number of lines in switch list", 24, inC.lines().count());
inD = JUnitOperationsUtil.getBufferedReader(switchListFileD);
Assert.assertEquals("confirm number of lines in switch list", 12, inD.lines().count());
train.move(rlc); // move train to C
Assert.assertEquals("current train location", "Test Location C", train.getCurrentRouteLocation().getName());
tsl.buildSwitchList(locationA);
tsl.buildSwitchList(locationB); // should report that already serviced train
tsl.buildSwitchList(locationC);
tsl.buildSwitchList(locationD);
inA = JUnitOperationsUtil.getBufferedReader(switchListFileA);
Assert.assertEquals("confirm number of lines in switch list", 23, inA.lines().count());
inB = JUnitOperationsUtil.getBufferedReader(switchListFileB);
Assert.assertEquals("confirm number of lines in switch list", 23, inB.lines().count());
inC = JUnitOperationsUtil.getBufferedReader(switchListFileC);
Assert.assertEquals("confirm number of lines in switch list", 23, inC.lines().count());
inD = JUnitOperationsUtil.getBufferedReader(switchListFileD);
Assert.assertEquals("confirm number of lines in switch list", 12, inD.lines().count());
train.move(); // move train to D
Assert.assertEquals("current train location", "Test Location D", train.getCurrentRouteLocation().getName());
train.move(); // move train to D reverse direction
Assert.assertEquals("current train location", "Test Location D", train.getCurrentRouteLocation().getName());
tsl.buildSwitchList(locationA);
tsl.buildSwitchList(locationB);
tsl.buildSwitchList(locationC);
tsl.buildSwitchList(locationD);
inA = JUnitOperationsUtil.getBufferedReader(switchListFileA);
Assert.assertEquals("confirm number of lines in switch list", 23, inA.lines().count());
inB = JUnitOperationsUtil.getBufferedReader(switchListFileB);
Assert.assertEquals("confirm number of lines in switch list", 23, inB.lines().count());
inC = JUnitOperationsUtil.getBufferedReader(switchListFileC);
Assert.assertEquals("confirm number of lines in switch list", 18, inC.lines().count());
inD = JUnitOperationsUtil.getBufferedReader(switchListFileD);
Assert.assertEquals("confirm number of lines in switch list", 9, inD.lines().count());
train.move(); // move train to C
Assert.assertEquals("current train location", "Test Location C", train.getCurrentRouteLocation().getName());
tsl.buildSwitchList(locationA);
tsl.buildSwitchList(locationB);
tsl.buildSwitchList(locationC);
tsl.buildSwitchList(locationD);
inA = JUnitOperationsUtil.getBufferedReader(switchListFileA);
Assert.assertEquals("confirm number of lines in switch list", 23, inA.lines().count());
inB = JUnitOperationsUtil.getBufferedReader(switchListFileB);
Assert.assertEquals("confirm number of lines in switch list", 23, inB.lines().count());
inC = JUnitOperationsUtil.getBufferedReader(switchListFileC);
Assert.assertEquals("confirm number of lines in switch list", 17, inC.lines().count());
inD = JUnitOperationsUtil.getBufferedReader(switchListFileD);
Assert.assertEquals("confirm number of lines in switch list", 9, inD.lines().count());
train.move(); // move train to B
Assert.assertEquals("current train location", "Test Location B", train.getCurrentRouteLocation().getName());
tsl.buildSwitchList(locationA);
tsl.buildSwitchList(locationB);
tsl.buildSwitchList(locationC);
tsl.buildSwitchList(locationD);
inA = JUnitOperationsUtil.getBufferedReader(switchListFileA);
Assert.assertEquals("confirm number of lines in switch list", 23, inA.lines().count());
inB = JUnitOperationsUtil.getBufferedReader(switchListFileB);
Assert.assertEquals("confirm number of lines in switch list", 22, inB.lines().count());
inC = JUnitOperationsUtil.getBufferedReader(switchListFileC);
Assert.assertEquals("confirm number of lines in switch list", 17, inC.lines().count());
inD = JUnitOperationsUtil.getBufferedReader(switchListFileD);
Assert.assertEquals("confirm number of lines in switch list", 9, inD.lines().count());
train.move(); // move train to A
Assert.assertEquals("current train location", "Test Location A", train.getCurrentRouteLocation().getName());
tsl.buildSwitchList(locationA);
tsl.buildSwitchList(locationB);
tsl.buildSwitchList(locationC);
tsl.buildSwitchList(locationD);
inA = JUnitOperationsUtil.getBufferedReader(switchListFileA);
Assert.assertEquals("confirm number of lines in switch list", 22, inA.lines().count());
inB = JUnitOperationsUtil.getBufferedReader(switchListFileB);
Assert.assertEquals("confirm number of lines in switch list", 19, inB.lines().count());
inC = JUnitOperationsUtil.getBufferedReader(switchListFileC);
Assert.assertEquals("confirm number of lines in switch list", 17, inC.lines().count());
inD = JUnitOperationsUtil.getBufferedReader(switchListFileD);
Assert.assertEquals("confirm number of lines in switch list", 9, inD.lines().count());
train.move(); // terminate train
tsl.buildSwitchList(locationA);
tsl.buildSwitchList(locationB);
tsl.buildSwitchList(locationC);
tsl.buildSwitchList(locationD);
inA = JUnitOperationsUtil.getBufferedReader(switchListFileA);
Assert.assertEquals("confirm number of lines in switch list", 9, inA.lines().count());
inB = JUnitOperationsUtil.getBufferedReader(switchListFileB);
Assert.assertEquals("confirm number of lines in switch list", 10, inB.lines().count());
inC = JUnitOperationsUtil.getBufferedReader(switchListFileC);
Assert.assertEquals("confirm number of lines in switch list", 7, inC.lines().count());
inD = JUnitOperationsUtil.getBufferedReader(switchListFileD);
Assert.assertEquals("confirm number of lines in switch list", 4, inD.lines().count());
inA.close();
inB.close();
inC.close();
inD.close();
JUnitOperationsUtil.checkOperationsShutDownTask();
}
/**
* Creates a switch list for two trains that are turns.
* @throws IOException BufferedReader close
*/
@Test
public void testSwitchListTrainTurnPagePerTrain() throws IOException {
Setup.setPrintLoadsAndEmptiesEnabled(true); // improve test coverage
Setup.setSwitchListPageFormat(Setup.PAGE_PER_TRAIN);
Setup.setSwitchListAllTrainsEnabled(true);
loadLocationsEnginesAndCars();
Train train1 = tmanager.newTrain("Test switchlists train 1");
Train train2 = tmanager.newTrain("Test switchlists train 2");
Route route = rmanager.newRoute("Test switchlists route");
Location locationB = lmanager.newLocation("Test Location B");
Track yardB = locationB.addTrack("Yard at B", Track.YARD);
yardB.setLength(400);
Location locationC = lmanager.newLocation("Test Location C");
Track yardC = locationC.addTrack("Yard at C", Track.YARD);
yardC.setLength(80); // only enough room for one car
Location locationD = lmanager.newLocation("Test Location D");
// create the turn
RouteLocation rla = route.addLocation(locationA);
route.addLocation(locationB);
RouteLocation rlc = route.addLocation(locationC);
route.addLocation(locationD); // no tracks at D, so no work
RouteLocation rld = route.addLocation(locationD); // change direction
route.addLocation(locationC);
route.addLocation(locationB); // no work at B at this time
route.addLocation(locationA);
rla.setMaxCarMoves(3);
rlc.setComment("Test comment for location C");
// confirm that the default train direction was north
Assert.assertEquals("default train direction", RouteLocation.NORTH, rlc.getTrainDirection());
rld.setTrainDirection(RouteLocation.SOUTH);
train1.setRoute(route);
train1.setNumberEngines("1"); // request an engine
train2.setRoute(route);
// place one car at location B for pick up
Car c6 = cmanager.getByRoadAndNumber("AA", "6");
Assert.assertEquals("Place car on track", Track.OKAY, c6.setLocation(locationB, yardB));
Assert.assertTrue(train1.build());
Assert.assertTrue(train2.build());
TrainSwitchLists tsl = new TrainSwitchLists();
tsl.buildSwitchList(locationA);
tsl.buildSwitchList(locationB);
tsl.buildSwitchList(locationC);
// improve test coverage, switch list for a location without work
tsl.buildSwitchList(locationD);
File switchListFileA = InstanceManager.getDefault(TrainManagerXml.class).getSwitchListFile(locationA.getName());
Assert.assertTrue(switchListFileA.exists());
File switchListFileB = InstanceManager.getDefault(TrainManagerXml.class).getSwitchListFile(locationB.getName());
Assert.assertTrue(switchListFileB.exists());
File switchListFileC = InstanceManager.getDefault(TrainManagerXml.class).getSwitchListFile(locationC.getName());
Assert.assertTrue(switchListFileC.exists());
File switchListFileD = InstanceManager.getDefault(TrainManagerXml.class).getSwitchListFile(locationD.getName());
Assert.assertTrue(switchListFileD.exists());
// note that any changes to switch list will cause the following tests to fail
BufferedReader inA = JUnitOperationsUtil.getBufferedReader(switchListFileA);
Assert.assertEquals("confirm number of lines in switch list", 49, inA.lines().count());
BufferedReader inB = JUnitOperationsUtil.getBufferedReader(switchListFileB);
Assert.assertEquals("confirm number of lines in switch list", 44, inB.lines().count());
BufferedReader inC = JUnitOperationsUtil.getBufferedReader(switchListFileC);
Assert.assertEquals("confirm number of lines in switch list", 39, inC.lines().count());
BufferedReader inD = JUnitOperationsUtil.getBufferedReader(switchListFileD);
Assert.assertEquals("confirm number of lines in switch list", 19, inD.lines().count());
JUnitOperationsUtil.checkOperationsShutDownTask();
}
@Test
public void testSwitchListTwoColumnFormat() throws IOException {
Setup.setManifestFormat(Setup.TWO_COLUMN_FORMAT);
Setup.setSwitchListPageFormat(Setup.PAGE_PER_TRAIN);
loadLocationsEnginesAndCars();
Train train = tmanager.newTrain("Test switchlists train");
Route route = rmanager.newRoute("Test switchlists route");
route.addLocation(locationA);
train.setRoute(route);
train.setNumberEngines("1"); // request an engine
Assert.assertTrue(train.build());
TrainSwitchLists tsl = new TrainSwitchLists();
tsl.buildSwitchList(locationA);
File switchListFileA = InstanceManager.getDefault(TrainManagerXml.class).getSwitchListFile(locationA.getName());
Assert.assertTrue(switchListFileA.exists());
BufferedReader inA = JUnitOperationsUtil.getBufferedReader(switchListFileA);
Assert.assertEquals("confirm number of lines in switch list", 30, inA.lines().count());
inA.close();
JUnitOperationsUtil.checkOperationsShutDownTask();
}
@Test
public void testSwitchListTwoColumnTrackFormat() throws IOException {
Setup.setManifestFormat(Setup.TWO_COLUMN_TRACK_FORMAT);
loadLocationsEnginesAndCars();
Train train = tmanager.newTrain("Test switchlists train");
Route route = rmanager.newRoute("Test switchlists route");
route.addLocation(locationA);
train.setRoute(route);
train.setNumberEngines("1"); // request an engine
Assert.assertTrue(train.build());
TrainSwitchLists tsl = new TrainSwitchLists();
tsl.buildSwitchList(locationA);
File switchListFileA = InstanceManager.getDefault(TrainManagerXml.class).getSwitchListFile(locationA.getName());
Assert.assertTrue(switchListFileA.exists());
BufferedReader inA = JUnitOperationsUtil.getBufferedReader(switchListFileA);
Assert.assertEquals("confirm number of lines in switch list", 39, inA.lines().count());
inA.close();
JUnitOperationsUtil.checkOperationsShutDownTask();
}
@Test
public void testSwitchListNotRealTime() throws IOException {
Setup.setSwitchListRealTime(false);
loadLocationsEnginesAndCars();
Setup.setSwitchListPageFormat(Setup.PAGE_PER_TRAIN); // for better test coverage
Train train = tmanager.newTrain("Test switchlists train");
Route route = rmanager.newRoute("Test switchlists route");
route.addLocation(locationA);
train.setRoute(route);
Train train2 = tmanager.newTrain("Test switchlists train 2");
train2.setRoute(route); // use the same route
TrainSwitchLists tsl = new TrainSwitchLists();
// test no new work
tsl.buildSwitchList(locationA);
// now create some work
Assert.assertTrue(train.build());
tsl.buildSwitchList(locationA);
// now append new work to file
Assert.assertTrue(train2.build());
Assert.assertEquals("Confirm append mode", Location.SW_APPEND, locationA.getSwitchListState());
tsl.buildSwitchList(locationA);
File switchListFileA = InstanceManager.getDefault(TrainManagerXml.class).getSwitchListFile(locationA.getName());
Assert.assertTrue(switchListFileA.exists());
BufferedReader inA = JUnitOperationsUtil.getBufferedReader(switchListFileA);
Assert.assertEquals("confirm number of lines in switch list", 26, inA.lines().count());
inA.close();
JUnitOperationsUtil.checkOperationsShutDownTask();
}
@Test
public void testSwitchListSwitcher() throws IOException {
loadLocationsEnginesAndCars();
Train train = tmanager.newTrain("Test switchlists train");
Route route = rmanager.newRoute("Test switchlists route");
route.addLocation(locationA);
route.addLocation(locationAhyphen); // "similar" name for location A
train.setRoute(route);
Train train2 = tmanager.newTrain("Test switchlists train 2");
train2.setRoute(route); // use the same route
train.setNumberEngines("1"); // request an engine
Assert.assertTrue(train.build());
TrainSwitchLists tsl = new TrainSwitchLists();
tsl.buildSwitchList(locationA);
File switchListFileA = InstanceManager.getDefault(TrainManagerXml.class).getSwitchListFile(locationA.getName());
Assert.assertTrue(switchListFileA.exists());
BufferedReader inA = JUnitOperationsUtil.getBufferedReader(switchListFileA);
Assert.assertEquals("confirm number of lines in switch list", 29, inA.lines().count());
inA.close();
JUnitOperationsUtil.checkOperationsShutDownTask();
}
/**
* Unique data for this test. Any changes below can affect the number of
* lines in the switch list file
*/
private void loadLocationsEnginesAndCars() {
CarTypes ct = InstanceManager.getDefault(CarTypes.class);
// register the car and engine types used
ct.addName("Boxcar");
locationA = lmanager.newLocation("Test Location A");
Track spurA = locationA.addTrack("Spur at A", Track.SPUR);
spurA.setLength(400);
Track yardA = locationA.addTrack("Yard at A", Track.YARD);
yardA.setLength(400);
// create a "similar" location and track names with a hyphen added to it
locationAhyphen = lmanager.newLocation(locationA.getName() + "-1");
Track spurAA = locationAhyphen.addTrack("Spur at A-1", Track.SPUR);
spurAA.setLength(400);
Track yardAA = locationAhyphen.addTrack("Yard at A-1", Track.YARD);
yardAA.setLength(400);
// place 6 cars
JUnitOperationsUtil.createAndPlaceCar("AA", "1", "Boxcar", "40", "DAB", "1984", spurA, 0);
JUnitOperationsUtil.createAndPlaceCar("AA", "2", "Boxcar", "40", "DAB", "1984", spurA, 0);
JUnitOperationsUtil.createAndPlaceCar("AA", "3", "Boxcar", "40", "DAB", "1984", spurA, 0);
// 3 on yard tracks
JUnitOperationsUtil.createAndPlaceCar("AA", "4", "Boxcar", "40", "DAB", "1984", yardA, 0);
JUnitOperationsUtil.createAndPlaceCar("AA", "5", "Boxcar", "40", "DAB", "1984", yardA, 0);
Car c6 = JUnitOperationsUtil.createAndPlaceCar("AA", "6", "Boxcar", "40", "DAB", "1984", yardA, 20);
c6.setUtility(true); // make this car a utility car for better test coverage
Engine e1 = emanager.newRS("NYC", "1");
e1.setModel("E8");
Assert.assertEquals("Place engine on track", Track.OKAY, e1.setLocation(locationA, yardA));
}
@Override
@BeforeEach
public void setUp() {
super.setUp();
// setup new managers
tmanager = InstanceManager.getDefault(TrainManager.class);
rmanager = InstanceManager.getDefault(RouteManager.class);
lmanager = InstanceManager.getDefault(LocationManager.class);
emanager = InstanceManager.getDefault(EngineManager.class);
cmanager = InstanceManager.getDefault(CarManager.class);
// disable build messages
tmanager.setBuildMessagesEnabled(false);
// disable build reports
tmanager.setBuildReportEnabled(false);
Setup.setBuildAggressive(false);
Setup.setStagingTrainCheckEnabled(true);
Setup.setMaxTrainLength(1000);
Setup.setRouterBuildReportLevel(Setup.BUILD_REPORT_VERY_DETAILED);
Setup.setLocalInterchangeMovesEnabled(false);
Setup.setLocalSpurMovesEnabled(false);
Setup.setLocalYardMovesEnabled(false);
Setup.setCarMoves(5);
Setup.setMaxNumberEngines(6);
Setup.setStagingTrainCheckEnabled(true);
Setup.setStagingAllowReturnEnabled(false);
Setup.setGenerateCsvManifestEnabled(false);
Setup.setStagingPromptToEnabled(false);
Setup.setCarRoutingEnabled(true);
// improve test coverage
Setup.setSwitchListAllTrainsEnabled(false);
Setup.setPrintTrainScheduleNameEnabled(true);
Setup.setSwitchListRouteLocationCommentEnabled(true);
TrainScheduleManager tsmanager = InstanceManager.getDefault(TrainScheduleManager.class);
tsmanager.setTrainScheduleActiveId(tsmanager.getSchedulesByIdList().get(0).getId());
}
@Override
@AfterEach
public void tearDown() {
super.tearDown();
}
// private static final Logger log = LoggerFactory.getLogger(TrainSwitchListsTest.class);
}