5176 lines
270 KiB
Java
5176 lines
270 KiB
Java
package jmri.jmrit.operations.trains;
|
|
|
|
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.locations.schedules.*;
|
|
import jmri.jmrit.operations.rollingstock.cars.*;
|
|
import jmri.jmrit.operations.rollingstock.engines.*;
|
|
import jmri.jmrit.operations.routes.*;
|
|
import jmri.jmrit.operations.setup.Setup;
|
|
import jmri.util.JUnitOperationsUtil;
|
|
|
|
/**
|
|
* Tests for the Operations Trains class Last manually cross-checked on 20090131
|
|
* <p>
|
|
* Still to do:
|
|
* <p>
|
|
* Train: DepartureTime, ArrivalTime
|
|
* <p>
|
|
* Train: numberCarsWorked
|
|
* <p>
|
|
* Train: isTraininRoute
|
|
* <p>
|
|
* Train: getBuild, setBuildEnabled, buildIfSelected
|
|
* <p>
|
|
* Train: printBuildReport, printManifest, printReport
|
|
* <p>
|
|
* Train: getPrint, setPrint, printIfSelected
|
|
* <p>
|
|
* Train: setTrainIconCoordinates
|
|
* <p>
|
|
* Train: terminateIfSelected
|
|
* <p>
|
|
* Train: load/move/get/create Train Icon
|
|
* <p>
|
|
* Train: get/set Lead Engine
|
|
* <p>
|
|
* Train: setIconColor
|
|
* <p>
|
|
* Train: reset
|
|
* <p>
|
|
* Train: xml read/write
|
|
* <p>
|
|
* Train: Most build scenarios.
|
|
* <p>
|
|
* TrainBuilder: Everything. TrainSwitchLists: Everything.
|
|
*
|
|
* @author Bob Coleman Copyright (C) 2008, 2009
|
|
*/
|
|
public class TrainTest extends OperationsTestCase {
|
|
|
|
// the managers used in this set of tests
|
|
TrainManager trainManager = null;
|
|
RouteManager routeManager = null;
|
|
LocationManager locationManager = null;
|
|
EngineManager engineManager = null;
|
|
CarTypes ct = null;
|
|
|
|
// test Train creation
|
|
@Test
|
|
public void testCreate() {
|
|
Train train1 = new Train("TESTTRAINID", "TESTTRAINNAME");
|
|
|
|
Assert.assertEquals("Train Id", "TESTTRAINID", train1.getId());
|
|
Assert.assertEquals("Train Name", "TESTTRAINNAME", train1.getName());
|
|
}
|
|
|
|
// test Train public constants
|
|
@Test
|
|
public void testConstants() {
|
|
Train train1 = new Train("TESTTRAINID", "TESTTRAINNAME");
|
|
|
|
Assert.assertEquals("Train Id", "TESTTRAINID", train1.getId());
|
|
Assert.assertEquals("Train Name", "TESTTRAINNAME", train1.getName());
|
|
|
|
Assert.assertEquals("Train Constant NONE", 0, Train.NO_CABOOSE_OR_FRED);
|
|
Assert.assertEquals("Train Constant CABOOSE", 1, Train.CABOOSE);
|
|
Assert.assertEquals("Train Constant FRED", 2, Train.FRED);
|
|
|
|
Assert.assertEquals("Train Constant ALLROADS", "All", Train.ALL_ROADS);
|
|
Assert.assertEquals("Train Constant INCLUDEROADS", "Include", Train.INCLUDE_ROADS);
|
|
Assert.assertEquals("Train Constant EXCLUDEROADS", "Exclude", Train.EXCLUDE_ROADS);
|
|
|
|
Assert.assertEquals("Train Constant DISPOSE_CHANGED_PROPERTY", "TrainDispose", Train.DISPOSE_CHANGED_PROPERTY);
|
|
Assert.assertEquals("Train Constant STOPS_CHANGED_PROPERTY", "TrainStops", Train.STOPS_CHANGED_PROPERTY);
|
|
Assert.assertEquals("Train Constant TYPES_CHANGED_PROPERTY", "TrainTypes", Train.TYPES_CHANGED_PROPERTY);
|
|
Assert.assertEquals("Train Constant ROADS_CHANGED_PROPERTY", "TrainRoads", Train.ROADS_CHANGED_PROPERTY);
|
|
Assert.assertEquals("Train Constant STATUS_CHANGED_PROPERTY", "TrainStatus", Train.STATUS_CHANGED_PROPERTY);
|
|
Assert.assertEquals("Train Constant DEPARTURETIME_CHANGED_PROPERTY", "TrainDepartureTime",
|
|
Train.DEPARTURETIME_CHANGED_PROPERTY);
|
|
|
|
Assert.assertEquals("Train Constant AUTO", "Auto", Train.AUTO);
|
|
}
|
|
|
|
// test Train attributes
|
|
@Test
|
|
public void testAttributes() {
|
|
Train train1 = new Train("TESTTRAINID", "TESTTRAINNAME");
|
|
|
|
Assert.assertEquals("Train Id", "TESTTRAINID", train1.getId());
|
|
Assert.assertEquals("Train Name", "TESTTRAINNAME", train1.getName());
|
|
Assert.assertEquals("Train toString", "TESTTRAINNAME", train1.toString());
|
|
|
|
train1.setName("TESTNEWNAME");
|
|
Assert.assertEquals("Train New Name", "TESTNEWNAME", train1.getName());
|
|
train1.setComment("TESTCOMMENT");
|
|
Assert.assertEquals("Train Comment", "TESTCOMMENT", train1.getCommentWithColor());
|
|
train1.setDescription("TESTDESCRIPTION");
|
|
Assert.assertEquals("Train Description", "TESTDESCRIPTION", train1.getDescription());
|
|
train1.setCabooseRoad("TESTCABOOSEROAD");
|
|
Assert.assertEquals("Train Caboose Road", "TESTCABOOSEROAD", train1.getCabooseRoad());
|
|
train1.setEngineModel("TESTENGINEMODEL");
|
|
Assert.assertEquals("Train Engine Model", "TESTENGINEMODEL", train1.getEngineModel());
|
|
train1.setEngineRoad("TESTENGINEROAD");
|
|
Assert.assertEquals("Train Engine Road", "TESTENGINEROAD", train1.getEngineRoad());
|
|
train1.setBuilt(true);
|
|
Assert.assertTrue("Train Built true", train1.isBuilt());
|
|
train1.setBuilt(false);
|
|
Assert.assertFalse("Train Built false", train1.isBuilt());
|
|
train1.setNumberEngines("13");
|
|
Assert.assertEquals("Train Number Engines", "13", train1.getNumberEngines());
|
|
train1.setCarRoadOption("INCLUDEROADS");
|
|
Assert.assertEquals("Train Road Option INCLUDEROADS", "INCLUDEROADS", train1.getCarRoadOption());
|
|
train1.setCarRoadOption("EXCLUDEROADS");
|
|
Assert.assertEquals("Train Road Option EXCLUDEROADS", "EXCLUDEROADS", train1.getCarRoadOption());
|
|
train1.setCarRoadOption("ALLROADS");
|
|
Assert.assertEquals("Train Road Option ALLROADS", "ALLROADS", train1.getCarRoadOption());
|
|
train1.setStatusCode(Train.CODE_UNKNOWN);
|
|
Assert.assertEquals("Train Status", Train.UNKNOWN, train1.getStatus());
|
|
train1.setRequirements(Train.CABOOSE);
|
|
Assert.assertEquals("Train Requirements CABOOSE", 1, train1.getRequirements());
|
|
Assert.assertTrue("requires caboose", train1.isCabooseNeeded());
|
|
train1.setRequirements(Train.FRED);
|
|
Assert.assertEquals("Train Requirements FRED", 2, train1.getRequirements());
|
|
Assert.assertTrue("requires FRED", train1.isFredNeeded());
|
|
train1.setRequirements(Train.NO_CABOOSE_OR_FRED);
|
|
Assert.assertEquals("Train Requirements NONE", 0, train1.getRequirements());
|
|
Assert.assertFalse("no caboose", train1.isCabooseNeeded());
|
|
Assert.assertFalse("no FRED", train1.isFredNeeded());
|
|
train1.setDepartureTime("0", "12", "55");
|
|
Assert.assertEquals("Train departure day", "0", train1.getDepartureTimeDay());
|
|
Assert.assertEquals("Train departure hour", "12", train1.getDepartureTimeHour());
|
|
Assert.assertEquals("Train departure minute", "55", train1.getDepartureTimeMinute());
|
|
Assert.assertEquals("Train departure hour and minute", "0:12:55", train1.getDepartureTime());
|
|
}
|
|
|
|
@Test
|
|
public void testTrainDefaults() {
|
|
|
|
Train train = new Train("1", "test name");
|
|
Assert.assertTrue(train.isAllowLocalMovesEnabled());
|
|
Assert.assertFalse(train.isAllowReturnToStagingEnabled());
|
|
Assert.assertTrue(train.isAllowThroughCarsEnabled());
|
|
Assert.assertFalse(train.isBuildConsistEnabled());
|
|
Assert.assertTrue(train.isBuildEnabled());
|
|
Assert.assertFalse(train.isBuildTrainNormalEnabled());
|
|
Assert.assertFalse(train.isBuilt());
|
|
Assert.assertTrue(train.isLocalSwitcher());
|
|
Assert.assertFalse(train.isModified());
|
|
Assert.assertTrue(train.isOnlyPassengerCars());
|
|
Assert.assertFalse(train.isPrinted());
|
|
Assert.assertFalse(train.isSendCarsToTerminalEnabled());
|
|
Assert.assertFalse(train.isSendCarsWithCustomLoadsToStagingEnabled());
|
|
Assert.assertFalse(train.isServiceAllCarsWithFinalDestinationsEnabled());
|
|
Assert.assertTrue(train.isShowArrivalAndDepartureTimesEnabled());
|
|
Assert.assertFalse(train.isTrainEnRoute());
|
|
|
|
}
|
|
|
|
// test Train route
|
|
@Test
|
|
public void testRoute() {
|
|
Train train1 = new Train("TESTTRAINID", "TESTTRAINNAME");
|
|
|
|
Assert.assertEquals("Train Id", "TESTTRAINID", train1.getId());
|
|
Assert.assertEquals("Train Name", "TESTTRAINNAME", train1.getName());
|
|
|
|
Route r1 = new Route("TESTROUTEID", "TESTROUTENAME");
|
|
|
|
train1.setRoute(r1);
|
|
Assert.assertEquals("Train Route Name", "TESTROUTENAME", train1.getTrainRouteName());
|
|
|
|
Route rnew = new Route("TESTROUTEID2", "TESTNEWROUTENAME");
|
|
|
|
Location l1 = new Location("TESTLOCATIONID1", "TESTNEWROUTEDEPTNAME");
|
|
rnew.addLocation(l1);
|
|
Location l2 = new Location("TESTLOCATIONID2", "TESTLOCATIONNAME2");
|
|
rnew.addLocation(l2);
|
|
Location l3 = new Location("TESTLOCATIONID3", "TESTNEWROUTECURRNAME");
|
|
rnew.addLocation(l3);
|
|
Location l4 = new Location("TESTLOCATIONID4", "TESTLOCATIONNAME4");
|
|
rnew.addLocation(l4);
|
|
Location l5 = new Location("TESTLOCATIONID5", "TESTNEWROUTETERMNAME");
|
|
rnew.addLocation(l5);
|
|
|
|
train1.setRoute(rnew);
|
|
Assert.assertEquals("Train New Route Name", "TESTNEWROUTENAME", train1.getTrainRouteName());
|
|
|
|
Assert.assertEquals("Train New Route Departure Name", "TESTNEWROUTEDEPTNAME", train1.getTrainDepartsName());
|
|
Assert.assertEquals("Train New Route Terminates Name", "TESTNEWROUTETERMNAME", train1.getTrainTerminatesName());
|
|
|
|
RouteLocation rl1test;
|
|
rl1test = rnew.getLastLocationByName("TESTNEWROUTECURRNAME");
|
|
train1.setCurrentLocation(rl1test);
|
|
Assert.assertEquals("Train New Route Current Name", "TESTNEWROUTECURRNAME", train1.getCurrentLocationName());
|
|
rl1test = train1.getCurrentRouteLocation();
|
|
Assert.assertEquals("Train New Route Current Name by Route Location", "TESTNEWROUTECURRNAME",
|
|
rl1test.getName());
|
|
}
|
|
|
|
// test Train skip locations support
|
|
@Test
|
|
public void testSkipLocations() {
|
|
Train train1 = new Train("TESTTRAINID", "TESTTRAINNAME");
|
|
|
|
Assert.assertEquals("Train Id", "TESTTRAINID", train1.getId());
|
|
Assert.assertEquals("Train Name", "TESTTRAINNAME", train1.getName());
|
|
|
|
Location loc2 = new Location("LOCATIONID2", "TESTLOCATION2");
|
|
RouteLocation rl2 = new RouteLocation("TESTLOCATIONID2", loc2);
|
|
train1.addTrainSkipsLocation(rl2);
|
|
Assert.assertTrue("Location 2 to be skipped", train1.isLocationSkipped(rl2));
|
|
|
|
Location loc4 = new Location("LOCATIONID4", "TESTLOCATION4");
|
|
RouteLocation rl4 = new RouteLocation("TESTLOCATIONID4", loc4);
|
|
train1.addTrainSkipsLocation(rl4);
|
|
Assert.assertTrue("Location 4 to be skipped", train1.isLocationSkipped(rl4));
|
|
|
|
train1.deleteTrainSkipsLocation(rl2);
|
|
Assert.assertFalse("Location 2 not to be skipped", train1.isLocationSkipped(rl2));
|
|
Assert.assertTrue("Location 4 still to be skipped", train1.isLocationSkipped(rl4));
|
|
|
|
train1.deleteTrainSkipsLocation(rl4);
|
|
Assert.assertFalse("Location 2 still not to be skipped", train1.isLocationSkipped(rl2));
|
|
Assert.assertFalse("Location 4 not to be skipped", train1.isLocationSkipped(rl4));
|
|
}
|
|
|
|
// test Train accepts types support
|
|
@Test
|
|
public void testAcceptsTypes() {
|
|
Train train1 = new Train("TESTTRAINID", "TESTTRAINNAME");
|
|
|
|
Assert.assertEquals("Train Id", "TESTTRAINID", train1.getId());
|
|
Assert.assertEquals("Train Name", "TESTTRAINNAME", train1.getName());
|
|
|
|
// add the HopperTest cartype here, so that the train doesn't
|
|
// know about it.
|
|
InstanceManager.getDefault(CarTypes.class).addName("HopperTest");
|
|
|
|
// Caboose is one of the default car types
|
|
Assert.assertTrue("Train accepts type name Caboose", train1.isTypeNameAccepted(Bundle.getMessage("Caboose")));
|
|
Assert.assertFalse("Train does not accept type name HopperTest", train1.isTypeNameAccepted("HopperTest"));
|
|
|
|
train1.addTypeName("HopperTest");
|
|
Assert.assertTrue("Train still accepts type name Caboose",
|
|
train1.isTypeNameAccepted(Bundle.getMessage("Caboose")));
|
|
Assert.assertTrue("Train accepts type name HopperTest", train1.isTypeNameAccepted("HopperTest"));
|
|
|
|
train1.deleteTypeName(Bundle.getMessage("Caboose"));
|
|
Assert.assertFalse("Train no longer accepts type name Caboose",
|
|
train1.isTypeNameAccepted(Bundle.getMessage("Caboose")));
|
|
Assert.assertTrue("Train still accepts type name HopperTest", train1.isTypeNameAccepted("HopperTest"));
|
|
}
|
|
|
|
@Test
|
|
public void testReplaceType() {
|
|
|
|
Train train1 = new Train("TESTTRAINID", "TESTTRAINNAME");
|
|
|
|
// replacing a car type also needs to adjust load names accepted by this train
|
|
Assert.assertTrue(train1.addLoadName("Boxcar" + CarLoad.SPLIT_CHAR + "NutAndBolts"));
|
|
|
|
Assert.assertTrue("Train accepts type name Boxcar", train1.isTypeNameAccepted("Boxcar"));
|
|
Assert.assertFalse("Train does not accept type name BOXCAR", train1.isTypeNameAccepted("BOXCAR"));
|
|
|
|
train1.replaceType("Boxcar", "BOXCAR");
|
|
|
|
Assert.assertFalse("Train does not accept type name Boxcar", train1.isTypeNameAccepted("Boxcar"));
|
|
Assert.assertTrue("Train accepts type name BOXCAR", train1.isTypeNameAccepted("BOXCAR"));
|
|
|
|
// Boxcar with NutAndBolts no longer exists
|
|
Assert.assertFalse(train1.deleteLoadName("Boxcar" + CarLoad.SPLIT_CHAR + "NutAndBolts"));
|
|
// BOXCAR with NutAndBolts should exists
|
|
Assert.assertTrue(train1.deleteLoadName("BOXCAR" + CarLoad.SPLIT_CHAR + "NutAndBolts"));
|
|
}
|
|
|
|
// test train accepts road names support
|
|
@Test
|
|
public void testAcceptsRoadNames() {
|
|
Train train1 = new Train("TESTTRAINID", "TESTTRAINNAME");
|
|
|
|
Assert.assertEquals("Train Id", "TESTTRAINID", train1.getId());
|
|
Assert.assertEquals("Train Name", "TESTTRAINNAME", train1.getName());
|
|
|
|
train1.setCarRoadOption(Train.ALL_ROADS);
|
|
Assert.assertTrue("Train accepts (ALLROADS) Road name CP", train1.isCarRoadNameAccepted("CP"));
|
|
Assert.assertTrue("Train accepts (ALLROADS) Road name VIA", train1.isCarRoadNameAccepted("VIA"));
|
|
|
|
train1.setCarRoadOption(Train.INCLUDE_ROADS);
|
|
Assert.assertTrue(train1.addCarRoadName("CP"));
|
|
Assert.assertFalse(train1.addCarRoadName("CP")); // returns false if name already exists
|
|
Assert.assertTrue("Train accepts (INCLUDEROADS) Road name CP", train1.isCarRoadNameAccepted("CP"));
|
|
Assert.assertFalse("Train does not accept (INCLUDEROADS) Road name VIA", train1.isCarRoadNameAccepted("VIA"));
|
|
|
|
train1.addCarRoadName("VIA");
|
|
Assert.assertTrue("Train still accepts (INCLUDEROADS) Road name CP", train1.isCarRoadNameAccepted("CP"));
|
|
Assert.assertTrue("Train accepts (INCLUDEROADS) Road name VIA", train1.isCarRoadNameAccepted("VIA"));
|
|
|
|
Assert.assertTrue(train1.deleteCarRoadName("CP")); // returns true if name exists
|
|
Assert.assertFalse(train1.deleteCarRoadName("CP"));
|
|
Assert.assertFalse("Train no longer accepts (INCLUDEROADS) Road name CP", train1.isCarRoadNameAccepted("CP"));
|
|
Assert.assertTrue("Train still accepts (INCLUDEROADS) Road name VIA", train1.isCarRoadNameAccepted("VIA"));
|
|
|
|
train1.setCarRoadOption(Train.EXCLUDE_ROADS);
|
|
Assert.assertTrue("Train does accept (EXCLUDEROADS) Road name CP", train1.isCarRoadNameAccepted("CP"));
|
|
Assert.assertFalse("Train does not accept (EXCLUDEROADS) Road name VIA", train1.isCarRoadNameAccepted("VIA"));
|
|
|
|
train1.addCarRoadName("CP");
|
|
Assert.assertFalse("Train does not accept (EXCLUDEROADS) Road name CP", train1.isCarRoadNameAccepted("CP"));
|
|
Assert.assertFalse("Train still does not accept (EXCLUDEROADS) Road name VIA",
|
|
train1.isCarRoadNameAccepted("VIA"));
|
|
|
|
train1.deleteCarRoadName("VIA");
|
|
Assert.assertFalse("Train still does not accepts (EXCLUDEROADS) Road name CP",
|
|
train1.isCarRoadNameAccepted("CP"));
|
|
Assert.assertTrue("Train now accepts (EXCLUDEROADS) Road name VIA", train1.isCarRoadNameAccepted("VIA"));
|
|
}
|
|
|
|
@Test
|
|
public void testReplaceRoadName() {
|
|
Train train1 = new Train("TESTTRAINID", "TESTTRAINNAME");
|
|
|
|
// there are 9 places for road names
|
|
train1.setCabooseRoad("A");
|
|
train1.setEngineRoad("B");
|
|
train1.setSecondLegCabooseRoad("D");
|
|
train1.setThirdLegCabooseRoad("E");
|
|
train1.setSecondLegEngineRoad("F");
|
|
train1.setThirdLegEngineRoad("G");
|
|
|
|
train1.setCarRoadOption(Train.INCLUDE_ROADS);
|
|
Assert.assertTrue(train1.addCarRoadName("C"));
|
|
train1.setCabooseRoadOption(Train.INCLUDE_ROADS);
|
|
Assert.assertTrue(train1.addCabooseRoadName("A"));
|
|
train1.setLocoRoadOption(Train.INCLUDE_ROADS);
|
|
Assert.assertTrue(train1.addLocoRoadName("F"));
|
|
|
|
// confirm
|
|
Assert.assertEquals("caboose road", "A", train1.getCabooseRoad());
|
|
Assert.assertEquals("engine road", "B", train1.getEngineRoad());
|
|
Assert.assertEquals("Second Leg Caboose Road", "D", train1.getSecondLegCabooseRoad());
|
|
Assert.assertEquals("Third Leg Caboose Road", "E", train1.getThirdLegCabooseRoad());
|
|
Assert.assertEquals("Second Leg Engine Road", "F", train1.getSecondLegEngineRoad());
|
|
Assert.assertEquals("Third Leg Engine Road", "G", train1.getThirdLegEngineRoad());
|
|
|
|
Assert.assertEquals("car road", true, train1.isCarRoadNameAccepted("C"));
|
|
Assert.assertEquals("car road", false, train1.isCarRoadNameAccepted("c"));
|
|
Assert.assertEquals("caboose road", true, train1.isCabooseRoadNameAccepted("A"));
|
|
Assert.assertEquals("caboose road", false, train1.isCabooseRoadNameAccepted("a"));
|
|
Assert.assertEquals("loco road", true, train1.isLocoRoadNameAccepted("F"));
|
|
Assert.assertEquals("loco road", false, train1.isLocoRoadNameAccepted("f"));
|
|
|
|
train1.replaceRoad("A", "a");
|
|
|
|
// confirm
|
|
Assert.assertEquals("caboose road", "a", train1.getCabooseRoad());
|
|
Assert.assertEquals("engine road", "B", train1.getEngineRoad());
|
|
Assert.assertEquals("Second Leg Caboose Road", "D", train1.getSecondLegCabooseRoad());
|
|
Assert.assertEquals("Third Leg Caboose Road", "E", train1.getThirdLegCabooseRoad());
|
|
Assert.assertEquals("Second Leg Engine Road", "F", train1.getSecondLegEngineRoad());
|
|
Assert.assertEquals("Third Leg Engine Road", "G", train1.getThirdLegEngineRoad());
|
|
|
|
Assert.assertEquals("car road", true, train1.isCarRoadNameAccepted("C"));
|
|
Assert.assertEquals("car road", false, train1.isCarRoadNameAccepted("c"));
|
|
Assert.assertEquals("caboose road", true, train1.isCabooseRoadNameAccepted("a"));
|
|
Assert.assertEquals("caboose road", false, train1.isCabooseRoadNameAccepted("A"));
|
|
Assert.assertEquals("loco road", true, train1.isLocoRoadNameAccepted("F"));
|
|
Assert.assertEquals("loco road", false, train1.isLocoRoadNameAccepted("f"));
|
|
|
|
train1.replaceRoad("B", "b");
|
|
|
|
// confirm
|
|
Assert.assertEquals("caboose road", "a", train1.getCabooseRoad());
|
|
Assert.assertEquals("engine road", "b", train1.getEngineRoad());
|
|
Assert.assertEquals("Second Leg Caboose Road", "D", train1.getSecondLegCabooseRoad());
|
|
Assert.assertEquals("Third Leg Caboose Road", "E", train1.getThirdLegCabooseRoad());
|
|
Assert.assertEquals("Second Leg Engine Road", "F", train1.getSecondLegEngineRoad());
|
|
Assert.assertEquals("Third Leg Engine Road", "G", train1.getThirdLegEngineRoad());
|
|
|
|
Assert.assertEquals("car road", true, train1.isCarRoadNameAccepted("C"));
|
|
Assert.assertEquals("car road", false, train1.isCarRoadNameAccepted("c"));
|
|
Assert.assertEquals("caboose road", true, train1.isCabooseRoadNameAccepted("a"));
|
|
Assert.assertEquals("caboose road", false, train1.isCabooseRoadNameAccepted("A"));
|
|
Assert.assertEquals("loco road", true, train1.isLocoRoadNameAccepted("F"));
|
|
Assert.assertEquals("loco road", false, train1.isLocoRoadNameAccepted("f"));
|
|
|
|
train1.replaceRoad("C", "c");
|
|
|
|
// confirm
|
|
Assert.assertEquals("caboose road", "a", train1.getCabooseRoad());
|
|
Assert.assertEquals("engine road", "b", train1.getEngineRoad());
|
|
Assert.assertEquals("Second Leg Caboose Road", "D", train1.getSecondLegCabooseRoad());
|
|
Assert.assertEquals("Third Leg Caboose Road", "E", train1.getThirdLegCabooseRoad());
|
|
Assert.assertEquals("Second Leg Engine Road", "F", train1.getSecondLegEngineRoad());
|
|
Assert.assertEquals("Third Leg Engine Road", "G", train1.getThirdLegEngineRoad());
|
|
|
|
Assert.assertEquals("car road", true, train1.isCarRoadNameAccepted("c"));
|
|
Assert.assertEquals("car road", false, train1.isCarRoadNameAccepted("C"));
|
|
Assert.assertEquals("caboose road", true, train1.isCabooseRoadNameAccepted("a"));
|
|
Assert.assertEquals("caboose road", false, train1.isCabooseRoadNameAccepted("A"));
|
|
Assert.assertEquals("loco road", true, train1.isLocoRoadNameAccepted("F"));
|
|
Assert.assertEquals("loco road", false, train1.isLocoRoadNameAccepted("f"));
|
|
|
|
train1.replaceRoad("D", "d");
|
|
|
|
// confirm
|
|
Assert.assertEquals("caboose road", "a", train1.getCabooseRoad());
|
|
Assert.assertEquals("engine road", "b", train1.getEngineRoad());
|
|
Assert.assertEquals("Second Leg Caboose Road", "d", train1.getSecondLegCabooseRoad());
|
|
Assert.assertEquals("Third Leg Caboose Road", "E", train1.getThirdLegCabooseRoad());
|
|
Assert.assertEquals("Second Leg Engine Road", "F", train1.getSecondLegEngineRoad());
|
|
Assert.assertEquals("Third Leg Engine Road", "G", train1.getThirdLegEngineRoad());
|
|
|
|
Assert.assertEquals("car road", true, train1.isCarRoadNameAccepted("c"));
|
|
Assert.assertEquals("car road", false, train1.isCarRoadNameAccepted("C"));
|
|
Assert.assertEquals("caboose road", true, train1.isCabooseRoadNameAccepted("a"));
|
|
Assert.assertEquals("caboose road", false, train1.isCabooseRoadNameAccepted("A"));
|
|
Assert.assertEquals("loco road", true, train1.isLocoRoadNameAccepted("F"));
|
|
Assert.assertEquals("loco road", false, train1.isLocoRoadNameAccepted("f"));
|
|
|
|
train1.replaceRoad("E", "e");
|
|
|
|
// confirm
|
|
Assert.assertEquals("caboose road", "a", train1.getCabooseRoad());
|
|
Assert.assertEquals("engine road", "b", train1.getEngineRoad());
|
|
Assert.assertEquals("Second Leg Caboose Road", "d", train1.getSecondLegCabooseRoad());
|
|
Assert.assertEquals("Third Leg Caboose Road", "e", train1.getThirdLegCabooseRoad());
|
|
Assert.assertEquals("Second Leg Engine Road", "F", train1.getSecondLegEngineRoad());
|
|
Assert.assertEquals("Third Leg Engine Road", "G", train1.getThirdLegEngineRoad());
|
|
|
|
train1.replaceRoad("F", "f");
|
|
|
|
// confirm
|
|
Assert.assertEquals("caboose road", "a", train1.getCabooseRoad());
|
|
Assert.assertEquals("engine road", "b", train1.getEngineRoad());
|
|
Assert.assertEquals("Second Leg Caboose Road", "d", train1.getSecondLegCabooseRoad());
|
|
Assert.assertEquals("Third Leg Caboose Road", "e", train1.getThirdLegCabooseRoad());
|
|
Assert.assertEquals("Second Leg Engine Road", "f", train1.getSecondLegEngineRoad());
|
|
Assert.assertEquals("Third Leg Engine Road", "G", train1.getThirdLegEngineRoad());
|
|
|
|
Assert.assertEquals("car road", true, train1.isCarRoadNameAccepted("c"));
|
|
Assert.assertEquals("car road", false, train1.isCarRoadNameAccepted("C"));
|
|
Assert.assertEquals("caboose road", true, train1.isCabooseRoadNameAccepted("a"));
|
|
Assert.assertEquals("caboose road", false, train1.isCabooseRoadNameAccepted("A"));
|
|
Assert.assertEquals("loco road", true, train1.isLocoRoadNameAccepted("f"));
|
|
Assert.assertEquals("loco road", false, train1.isLocoRoadNameAccepted("F"));
|
|
|
|
train1.replaceRoad("G", "g");
|
|
|
|
// confirm
|
|
Assert.assertEquals("caboose road", "a", train1.getCabooseRoad());
|
|
Assert.assertEquals("engine road", "b", train1.getEngineRoad());
|
|
Assert.assertEquals("rolling stock road", true, train1.isCarRoadNameAccepted("c"));
|
|
Assert.assertEquals("Second Leg Caboose Road", "d", train1.getSecondLegCabooseRoad());
|
|
Assert.assertEquals("Third Leg Caboose Road", "e", train1.getThirdLegCabooseRoad());
|
|
Assert.assertEquals("Second Leg Engine Road", "f", train1.getSecondLegEngineRoad());
|
|
Assert.assertEquals("Third Leg Engine Road", "g", train1.getThirdLegEngineRoad());
|
|
}
|
|
|
|
// test train accepts load names support
|
|
@Test
|
|
public void testAcceptsLoadNames() {
|
|
Train train1 = new Train("TESTTRAINID", "TESTTRAINNAME");
|
|
|
|
Assert.assertEquals("Train Id", "TESTTRAINID", train1.getId());
|
|
Assert.assertEquals("Train Name", "TESTTRAINNAME", train1.getName());
|
|
|
|
train1.setLoadOption(Train.ALL_LOADS);
|
|
Assert.assertTrue("Train accepts (ALLLOADS) Load name BOXES", train1.isLoadNameAccepted("BOXES"));
|
|
Assert.assertTrue("Train accepts (ALLLOADS) Load name WOOD", train1.isLoadNameAccepted("WOOD"));
|
|
|
|
train1.setLoadOption(Train.INCLUDE_LOADS);
|
|
Assert.assertTrue(train1.addLoadName("BOXES"));
|
|
Assert.assertFalse(train1.addLoadName("BOXES")); // returns false if name already exists
|
|
Assert.assertTrue("Train accepts (INCLUDELOADS) Load name BOXES", train1.isLoadNameAccepted("BOXES"));
|
|
Assert.assertFalse("Train does not accept (INCLUDELOADS) Load name WOOD", train1.isLoadNameAccepted("WOOD"));
|
|
|
|
Assert.assertTrue(train1.addLoadName("WOOD"));
|
|
Assert.assertTrue("Train still accepts (INCLUDELOADS) Load name BOXES", train1.isLoadNameAccepted("BOXES"));
|
|
Assert.assertTrue("Train accepts (INCLUDELOADS) Load name WOOD", train1.isLoadNameAccepted("WOOD"));
|
|
|
|
Assert.assertTrue(train1.addLoadName("Boxcar" + CarLoad.SPLIT_CHAR + "SCREWS"));
|
|
Assert.assertFalse("Train does not accept (INCLUDELOADS) Load name SCREWS",
|
|
train1.isLoadNameAccepted("SCREWS"));
|
|
Assert.assertTrue("Train still accepts (INCLUDELOADS) Load name BOXES",
|
|
train1.isLoadNameAccepted("BOXES", "Boxcar"));
|
|
Assert.assertTrue("Train accepts (INCLUDELOADS) Load WOOD carried by Boxcar",
|
|
train1.isLoadNameAccepted("WOOD", "Boxcar"));
|
|
Assert.assertTrue("Train accepts (INCLUDELOADS) Load Boxcar with SCREWS",
|
|
train1.isLoadNameAccepted("SCREWS", "Boxcar"));
|
|
|
|
Assert.assertTrue(train1.deleteLoadName("BOXES")); // returns true if name exists
|
|
Assert.assertFalse(train1.deleteLoadName("BOXES"));
|
|
Assert.assertFalse("Train no longer accepts (INCLUDELOADS) Load name BOXES",
|
|
train1.isLoadNameAccepted("BOXES"));
|
|
Assert.assertTrue("Train still accepts (INCLUDELOADS) Load name WOOD", train1.isLoadNameAccepted("WOOD"));
|
|
|
|
train1.setLoadOption(Train.EXCLUDE_LOADS);
|
|
Assert.assertTrue("Train does accept (EXCLUDELOADS) Load name BOXES", train1.isLoadNameAccepted("BOXES"));
|
|
Assert.assertFalse("Train does not accept (EXCLUDELOADS) Load name WOOD", train1.isLoadNameAccepted("WOOD"));
|
|
|
|
Assert.assertTrue(train1.addLoadName("BOXES"));
|
|
Assert.assertFalse("Train does not accept (EXCLUDELOADS) Load name BOXES", train1.isLoadNameAccepted("BOXES"));
|
|
Assert.assertFalse("Train still does not accept (EXCLUDELOADS) Load name WOOD",
|
|
train1.isLoadNameAccepted("WOOD"));
|
|
|
|
Assert.assertTrue(train1.deleteLoadName("WOOD"));
|
|
Assert.assertFalse("Train still does not accepts (EXCLUDELOADS) Load name BOXES",
|
|
train1.isLoadNameAccepted("BOXES"));
|
|
Assert.assertTrue("Train now accepts (EXCLUDELOADS) Load name WOOD", train1.isLoadNameAccepted("WOOD"));
|
|
}
|
|
|
|
@Test
|
|
public void testAcceptsOwnerNames() {
|
|
Train train1 = new Train("TESTTRAINID", "TESTTRAINNAME");
|
|
|
|
Assert.assertEquals("Train Id", "TESTTRAINID", train1.getId());
|
|
Assert.assertEquals("Train Name", "TESTTRAINNAME", train1.getName());
|
|
|
|
train1.setOwnerOption(Train.ALL_OWNERS);
|
|
Assert.assertTrue("Train accepts (ALLOWNERS) Owner name BOB", train1.isOwnerNameAccepted("BOB"));
|
|
Assert.assertTrue("Train accepts (ALLOWNERS) Owner name DAN", train1.isOwnerNameAccepted("DAN"));
|
|
|
|
train1.setOwnerOption(Train.INCLUDE_OWNERS);
|
|
Assert.assertTrue(train1.addOwnerName("BOB"));
|
|
Assert.assertFalse(train1.addOwnerName("BOB")); // returns false if name already exists
|
|
Assert.assertTrue("Train accepts (INCLUDEOWNERS) Owner name BOB", train1.isOwnerNameAccepted("BOB"));
|
|
Assert.assertFalse("Train does not accept (INCLUDEOWNERS) Owner name DAN", train1.isOwnerNameAccepted("DAN"));
|
|
|
|
Assert.assertTrue(train1.addOwnerName("DAN"));
|
|
Assert.assertTrue("Train still accepts (INCLUDEOWNERS) Owner name BOB", train1.isOwnerNameAccepted("BOB"));
|
|
Assert.assertTrue("Train accepts (INCLUDEOWNERS) Owner name DAN", train1.isOwnerNameAccepted("DAN"));
|
|
|
|
Assert.assertTrue(train1.deleteOwnerName("BOB")); // returns true if name exists
|
|
Assert.assertFalse(train1.deleteOwnerName("BOB"));
|
|
Assert.assertFalse("Train no longer accepts (INCLUDEOWNERS) Owner name BOB", train1.isOwnerNameAccepted("BOB"));
|
|
Assert.assertTrue("Train still accepts (INCLUDEOWNERS) Owner name DAN", train1.isOwnerNameAccepted("DAN"));
|
|
|
|
train1.setOwnerOption(Train.EXCLUDE_OWNERS);
|
|
Assert.assertTrue("Train does accept (EXCLUDEOWNERS) Owner name BOB", train1.isOwnerNameAccepted("BOB"));
|
|
Assert.assertFalse("Train does not accept (EXCLUDEOWNERS) Owner name DAN", train1.isOwnerNameAccepted("DAN"));
|
|
|
|
Assert.assertTrue(train1.addOwnerName("BOB"));
|
|
Assert.assertFalse("Train does not accept (EXCLUDEOWNERS) Owner name BOB", train1.isOwnerNameAccepted("BOB"));
|
|
Assert.assertFalse("Train still does not accept (EXCLUDEOWNERS) Owner name DAN",
|
|
train1.isOwnerNameAccepted("DAN"));
|
|
|
|
Assert.assertTrue(train1.deleteOwnerName("DAN"));
|
|
Assert.assertFalse("Train still does not accepts (EXCLUDEOWNERS) Owner name BOB",
|
|
train1.isOwnerNameAccepted("BOB"));
|
|
Assert.assertTrue("Train now accepts (EXCLUDEOWNERS) Owner name DAN", train1.isOwnerNameAccepted("DAN"));
|
|
|
|
// test replace
|
|
Assert.assertTrue("Train does accept (EXCLUDEOWNERS) Owner name bob", train1.isOwnerNameAccepted("bob"));
|
|
train1.replaceOwner("BOB", "bob");
|
|
Assert.assertFalse("Train does not accept (EXCLUDEOWNERS) Owner name bob", train1.isOwnerNameAccepted("bob"));
|
|
}
|
|
|
|
@Test
|
|
public void testEngineModels() {
|
|
Train train1 = new Train("TESTTRAINID", "TESTTRAINNAME");
|
|
|
|
train1.setEngineModel("TestEngineModel");
|
|
train1.setSecondLegEngineModel("Test2ndLegEngineModel");
|
|
train1.setThirdLegEngineModel("Test3rdLegEngineModel");
|
|
|
|
// confirm
|
|
Assert.assertEquals("Engine model", "TestEngineModel", train1.getEngineModel());
|
|
Assert.assertEquals("Engine model", "Test2ndLegEngineModel", train1.getSecondLegEngineModel());
|
|
Assert.assertEquals("Engine model", "Test3rdLegEngineModel", train1.getThirdLegEngineModel());
|
|
|
|
// test replace
|
|
train1.replaceModel("TestEngineModel", "NewEngineModel");
|
|
|
|
// confirm
|
|
Assert.assertEquals("Engine model", "NewEngineModel", train1.getEngineModel());
|
|
Assert.assertEquals("Engine model", "Test2ndLegEngineModel", train1.getSecondLegEngineModel());
|
|
Assert.assertEquals("Engine model", "Test3rdLegEngineModel", train1.getThirdLegEngineModel());
|
|
|
|
// test replace
|
|
train1.replaceModel("Test2ndLegEngineModel", "New2ndLegEngineModel");
|
|
|
|
// confirm
|
|
Assert.assertEquals("Engine model", "NewEngineModel", train1.getEngineModel());
|
|
Assert.assertEquals("Engine model", "New2ndLegEngineModel", train1.getSecondLegEngineModel());
|
|
Assert.assertEquals("Engine model", "Test3rdLegEngineModel", train1.getThirdLegEngineModel());
|
|
|
|
// test replace
|
|
train1.replaceModel("Test3rdLegEngineModel", "New3rdLegEngineModel");
|
|
|
|
// confirm
|
|
Assert.assertEquals("Engine model", "NewEngineModel", train1.getEngineModel());
|
|
Assert.assertEquals("Engine model", "New2ndLegEngineModel", train1.getSecondLegEngineModel());
|
|
Assert.assertEquals("Engine model", "New3rdLegEngineModel", train1.getThirdLegEngineModel());
|
|
}
|
|
|
|
@Test
|
|
public void testNoRouteBuild() {
|
|
|
|
Train train = trainManager.newTrain("Test");
|
|
|
|
// build train without a route, should fail
|
|
Assert.assertFalse(train.build());
|
|
Assert.assertFalse("Train should not build, no route", train.isBuilt());
|
|
Assert.assertEquals("Train build failed", Train.CODE_BUILD_FAILED, train.getStatusCode());
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testRouteLocationBuild() {
|
|
|
|
Train train = trainManager.newTrain("Test");
|
|
|
|
// exercise manifest build
|
|
train.setRailroadName("Working Railroad");
|
|
train.setComment("One Hard Working Train");
|
|
|
|
// now add a route that doesn't have any locations
|
|
Route route = routeManager.newRoute("TestRoute");
|
|
train.setRoute(route);
|
|
Assert.assertFalse(train.build());
|
|
Assert.assertFalse("Train should not build, no route locations", train.isBuilt());
|
|
Assert.assertEquals("Train build failed", Train.CODE_BUILD_FAILED, train.getStatusCode());
|
|
}
|
|
|
|
@Test
|
|
public void testRouteLocationsBuild() {
|
|
|
|
Train train = trainManager.newTrain("Test");
|
|
|
|
// exercise manifest build
|
|
train.setRailroadName("Working Railroad");
|
|
train.setComment("One Hard Working Train");
|
|
|
|
Route route = routeManager.newRoute("TestRoute");
|
|
train.setRoute(route);
|
|
|
|
// now add a location to the route
|
|
Location depart = locationManager.newLocation("depart");
|
|
RouteLocation rl = route.addLocation(depart);
|
|
Assert.assertTrue(train.build());
|
|
Assert.assertTrue("Train should build", train.isBuilt());
|
|
Assert.assertEquals("Train built", Train.CODE_PARTIAL_BUILT, train.getStatusCode());
|
|
|
|
// delete location
|
|
locationManager.deregister(depart);
|
|
Assert.assertFalse(train.build());
|
|
Assert.assertFalse("Train should not build, location deleted", train.isBuilt());
|
|
Assert.assertEquals("Train build failed", Train.CODE_BUILD_FAILED, train.getStatusCode());
|
|
|
|
// recreate location
|
|
depart = locationManager.newLocation("depart");
|
|
Assert.assertFalse(train.build());
|
|
Assert.assertFalse("Train should not build, location recreated, but not part of route", train.isBuilt());
|
|
|
|
route.deleteLocation(rl);
|
|
route.addLocation(depart);
|
|
Assert.assertTrue(train.build());
|
|
Assert.assertTrue("Train should build, route repaired", train.isBuilt());
|
|
|
|
Location terminate = locationManager.newLocation("terminate");
|
|
rl = route.addLocation(terminate);
|
|
Assert.assertTrue(train.build());
|
|
Assert.assertTrue("Train should build, route has two locations", train.isBuilt());
|
|
|
|
// delete terminal location
|
|
locationManager.deregister(terminate);
|
|
Assert.assertFalse(train.build());
|
|
Assert.assertFalse("Train should not build, terminal location deleted", train.isBuilt());
|
|
|
|
route.deleteLocation(rl);
|
|
terminate = locationManager.newLocation("terminate");
|
|
rl = route.addLocation(terminate);
|
|
Assert.assertNotNull(rl);
|
|
Assert.assertTrue(train.build());
|
|
Assert.assertTrue("Train should build, route has been repaired", train.isBuilt());
|
|
|
|
Location middle = locationManager.newLocation("middle");
|
|
// staging tracks in the middle of the route are ignored
|
|
middle.addTrack("staging in the middle", Track.STAGING);
|
|
|
|
// next 5 lines exercise manifest build messages
|
|
Setup.setPrintLocationCommentsEnabled(true);
|
|
middle.setComment("Middle comment");
|
|
rl = route.addLocation(middle, 2); // put location in middle of route
|
|
rl.setDepartureTimeHourMinutes("12:30");
|
|
rl.setComment("This location has a departure time");
|
|
|
|
Assert.assertTrue(train.build());
|
|
Assert.assertTrue("Train should build, three location route", train.isBuilt());
|
|
|
|
// delete location in the middle
|
|
locationManager.deregister(middle);
|
|
Assert.assertFalse(train.build());
|
|
Assert.assertFalse("Train should not build, middle location deleted", train.isBuilt());
|
|
|
|
// remove the middle location from the route
|
|
route.deleteLocation(rl);
|
|
Assert.assertTrue(train.build());
|
|
Assert.assertTrue("Train should build, two location route", train.isBuilt());
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
|
|
@Test
|
|
public void testBuildRequiresCars() {
|
|
|
|
Train train = trainManager.newTrain("Test");
|
|
|
|
// exercise manifest build
|
|
train.setRailroadName("Working Railroad");
|
|
train.setComment("One Hard Working Train");
|
|
|
|
// now add a route that doesn't have any locations
|
|
Route route = routeManager.newRoute("TestRoute");
|
|
train.setRoute(route);
|
|
|
|
// now add locations to the route
|
|
Location depart = locationManager.newLocation("depart");
|
|
route.addLocation(depart);
|
|
|
|
Location terminate = locationManager.newLocation("terminate");
|
|
route.addLocation(terminate);
|
|
|
|
Location middle = locationManager.newLocation("middle");
|
|
route.addLocation(middle, 2); // put location in middle of route
|
|
|
|
// Build option require cars
|
|
|
|
// restore control
|
|
Assert.assertTrue(train.build());
|
|
Assert.assertTrue("Train should build, build doesn't require cars", train.isBuilt());
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
|
|
@Test
|
|
public void testAutoEnginesBuildFailNoEngines() {
|
|
|
|
Train train = trainManager.newTrain("AutoEngineTest");
|
|
train.setNumberEngines(Train.AUTO);
|
|
|
|
Route route = JUnitOperationsUtil.createThreeLocationRoute();
|
|
train.setRoute(route);
|
|
|
|
// Auto Engines calculates the number of engines based on requested moves in the
|
|
// route
|
|
Assert.assertFalse(train.build());
|
|
Assert.assertFalse("Train should not build, no engines", train.isBuilt());
|
|
}
|
|
|
|
@Test
|
|
public void testAutoEnginesSingleEngine() {
|
|
|
|
Train train = trainManager.newTrain("AutoEngineTest");
|
|
train.setNumberEngines(Train.AUTO);
|
|
|
|
Route route = JUnitOperationsUtil.createThreeLocationRoute();
|
|
train.setRoute(route);
|
|
|
|
RouteLocation rA = route.getDepartsRouteLocation();
|
|
RouteLocation rB = route.getRouteLocationBySequenceNumber(2);
|
|
RouteLocation rC = route.getTerminatesRouteLocation();
|
|
|
|
Assert.assertEquals("confirm location", "Acton", rA.getLocation().getName());
|
|
Assert.assertEquals("confirm location", "Boston", rB.getLocation().getName());
|
|
Assert.assertEquals("confirm location", "Chelmsford", rC.getLocation().getName());
|
|
|
|
// place four engines at the start of the route
|
|
Location A = rA.getLocation();
|
|
Track actonYard1 = A.getTrackByName("Acton Yard 1", null);
|
|
Assert.assertNotNull(actonYard1);
|
|
placeFourEngines(actonYard1);
|
|
|
|
rA.setMaxCarMoves(8);
|
|
rB.setMaxCarMoves(9);
|
|
|
|
// 17 moves requires 2 engines, build should fail
|
|
Assert.assertFalse(train.build());
|
|
Assert.assertFalse("Train should not build, needs 2 engines", train.isBuilt());
|
|
|
|
// 16 moves requires 1 engine
|
|
rB.setMaxCarMoves(8);
|
|
|
|
Assert.assertTrue(train.build());
|
|
Assert.assertTrue("Train should build, only needs a single engine", train.isBuilt());
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
|
|
@Test
|
|
public void testAutoEnginesTwoEngines() {
|
|
|
|
Train train = trainManager.newTrain("AutoEngineTest");
|
|
train.setNumberEngines(Train.AUTO);
|
|
|
|
Route route = JUnitOperationsUtil.createThreeLocationRoute();
|
|
train.setRoute(route);
|
|
|
|
// place four engines at the start of the route
|
|
RouteLocation rA = route.getDepartsRouteLocation();
|
|
Location A = rA.getLocation();
|
|
Track actonYard1 = A.getTrackByName("Acton Yard 1", null);
|
|
Assert.assertNotNull(actonYard1);
|
|
placeFourEngines(actonYard1);
|
|
|
|
// 17 moves requires 2 engines, build should fail
|
|
rA.setMaxCarMoves(10);
|
|
|
|
Assert.assertFalse(train.build());
|
|
Assert.assertFalse("Train should not build, only single engines", train.isBuilt());
|
|
|
|
// now build a consist of two engines
|
|
Consist c = InstanceManager.getDefault(ConsistManager.class).newConsist("c");
|
|
Engine e1 = engineManager.getByRoadAndNumber("E", "1");
|
|
Engine e2 = engineManager.getByRoadAndNumber("E", "2");
|
|
e1.setConsist(c);
|
|
e2.setConsist(c);
|
|
|
|
// train should require two engines
|
|
Assert.assertTrue(train.build());
|
|
Assert.assertTrue("Train should build", train.isBuilt());
|
|
|
|
Assert.assertEquals("e1 should be assigned to train", train, e1.getTrain());
|
|
Assert.assertEquals("e2 should be assigned to train", train, e2.getTrain());
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
|
|
@Test
|
|
public void testAutoEnginesGrade() {
|
|
|
|
Train train = trainManager.newTrain("AutoEngineTest");
|
|
train.setNumberEngines(Train.AUTO);
|
|
|
|
Route route = JUnitOperationsUtil.createThreeLocationRoute();
|
|
train.setRoute(route);
|
|
|
|
RouteLocation rA = route.getDepartsRouteLocation();
|
|
RouteLocation rB = route.getRouteLocationBySequenceNumber(2);
|
|
RouteLocation rC = route.getTerminatesRouteLocation();
|
|
|
|
// create demand for 4 engines
|
|
rA.setMaxCarMoves(12);
|
|
rB.setMaxCarMoves(12);
|
|
rC.setMaxCarMoves(12);
|
|
rB.setGrade(2.5); // 2.5% grade!
|
|
|
|
// place four engines at the start of the route
|
|
Location A = rA.getLocation();
|
|
Track actonYard1 = A.getTrackByName("Acton Yard 1", null);
|
|
Assert.assertNotNull(actonYard1);
|
|
placeFourEngines(actonYard1);
|
|
|
|
Consist c = InstanceManager.getDefault(ConsistManager.class).newConsist("c");
|
|
Engine e1 = engineManager.getByRoadAndNumber("E", "1");
|
|
Engine e2 = engineManager.getByRoadAndNumber("E", "2");
|
|
e1.setConsist(c);
|
|
e2.setConsist(c);
|
|
|
|
// train should require four engines
|
|
Assert.assertFalse(train.build());
|
|
Assert.assertFalse("Train should not build, needs four engines, only two", train.isBuilt());
|
|
|
|
Engine e3 = engineManager.getByRoadAndNumber("E", "3");
|
|
e3.setConsist(c);
|
|
Assert.assertFalse(train.build());
|
|
Assert.assertFalse("Train should not build, needs four engines, only three", train.isBuilt());
|
|
|
|
Engine e4 = engineManager.getByRoadAndNumber("E", "4");
|
|
e4.setConsist(c);
|
|
Assert.assertTrue(train.build());
|
|
Assert.assertTrue("Train should build, four engines available", train.isBuilt());
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
|
|
@Test
|
|
public void testMaxEngines() {
|
|
|
|
Train train = trainManager.newTrain("AutoEngineTest");
|
|
train.setNumberEngines(Train.AUTO);
|
|
|
|
Route route = JUnitOperationsUtil.createThreeLocationRoute();
|
|
train.setRoute(route);
|
|
|
|
RouteLocation rA = route.getDepartsRouteLocation();
|
|
RouteLocation rB = route.getRouteLocationBySequenceNumber(2);
|
|
RouteLocation rC = route.getTerminatesRouteLocation();
|
|
|
|
// create demand for 4 engines
|
|
rA.setMaxCarMoves(12);
|
|
rB.setMaxCarMoves(12);
|
|
rC.setMaxCarMoves(12);
|
|
rB.setGrade(2.5); // 2.5% grade!
|
|
|
|
// place four engines at the start of the route
|
|
Location A = rA.getLocation();
|
|
Track actonYard1 = A.getTrackByName("Acton Yard 1", null);
|
|
Assert.assertNotNull(actonYard1);
|
|
placeFourEngines(actonYard1);
|
|
|
|
Consist c = InstanceManager.getDefault(ConsistManager.class).newConsist("c");
|
|
Engine e1 = engineManager.getByRoadAndNumber("E", "1");
|
|
Engine e2 = engineManager.getByRoadAndNumber("E", "2");
|
|
Engine e3 = engineManager.getByRoadAndNumber("E", "3");
|
|
Engine e4 = engineManager.getByRoadAndNumber("E", "4");
|
|
e1.setConsist(c);
|
|
e2.setConsist(c);
|
|
e3.setConsist(c);
|
|
e4.setConsist(c);
|
|
|
|
Setup.setMaxNumberEngines(3); // limit the maximum to three engines
|
|
Assert.assertFalse(train.build());
|
|
Assert.assertFalse("Train should not build, needs four engines, three is the maximum allowed", train.isBuilt());
|
|
|
|
// remove one engine from consist, train should build
|
|
c.delete(e4);
|
|
Assert.assertTrue(train.build());
|
|
Assert.assertTrue("Train should build, three engines available", train.isBuilt());
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
|
|
// test spur and yard moves
|
|
// tests manual setting of destinations and trains for engines, cars, and
|
|
// cabooses.
|
|
// tests consists and kernels
|
|
@Test
|
|
public void testSpursYards() {
|
|
|
|
// Create two Cabooses, six Boxcars, and two Flats
|
|
Car c1 = JUnitOperationsUtil.createAndPlaceCar("CP", "10", Bundle.getMessage("Caboose"), "32", null, 10);
|
|
c1.setCaboose(true);
|
|
Car c2 = JUnitOperationsUtil.createAndPlaceCar("CP", "200", Bundle.getMessage("Caboose"), "32", null, 11);
|
|
c2.setCaboose(true);
|
|
Car c3 = JUnitOperationsUtil.createAndPlaceCar("CP", "30", "Boxcar", "40", null, 12);
|
|
Car c4 = JUnitOperationsUtil.createAndPlaceCar("CP", "4000", "Boxcar", "40", null, 13);
|
|
Car c5 = JUnitOperationsUtil.createAndPlaceCar("CP", "5", "Boxcar", "40", null, 14);
|
|
Car c6 = JUnitOperationsUtil.createAndPlaceCar("CP", "60", "Boxcar", "40", null, 15);
|
|
Car c7 = JUnitOperationsUtil.createAndPlaceCar("CP", "700", "Boxcar", "50", null, 16);
|
|
Car c8 = JUnitOperationsUtil.createAndPlaceCar("CP", "8000", "Boxcar", "60", null, 17);
|
|
Car c9 = JUnitOperationsUtil.createAndPlaceCar("CP", "9", "Flat", "40", null, 18);
|
|
Car c10 = JUnitOperationsUtil.createAndPlaceCar("CP", "1000", "Flat", "40", null, 19);
|
|
|
|
// place two engines in a consist
|
|
Consist con1 = InstanceManager.getDefault(ConsistManager.class).newConsist("CP");
|
|
|
|
Engine e1 = engineManager.newRS("CP", "10");
|
|
e1.setModel("GP30");
|
|
e1.setConsist(con1);
|
|
Engine e2 = engineManager.newRS("CP", "20");
|
|
e2.setModel("GP30");
|
|
e2.setConsist(con1);
|
|
|
|
// Set up a turn route of 3 locations:
|
|
// Foxboro-Acton-Nashua-Acton-Foxboro
|
|
// Foxboro (2 tracks, yard and spur),
|
|
// Acton (2 tracks, spurs), and Nashua (2 tracks, yards).
|
|
Location foxboro = locationManager.newLocation("Foxboro");
|
|
Assert.assertEquals("Location 1 Name", "Foxboro", foxboro.getName());
|
|
Assert.assertEquals("Location 1 Initial Length", 0, foxboro.getLength());
|
|
|
|
Track foxboroSpur = foxboro.addTrack("Foxboro Spur", Track.SPUR);
|
|
foxboroSpur.setLength(600);
|
|
Assert.assertEquals("Location 1s1 Name", "Foxboro Spur", foxboroSpur.getName());
|
|
Assert.assertEquals("Location 1s1 LocType", "Spur", foxboroSpur.getTrackType());
|
|
Assert.assertEquals("Location 1s1 Length", 600, foxboroSpur.getLength());
|
|
Assert.assertEquals("Default directions", Track.EAST + Track.WEST + Track.SOUTH + Track.NORTH,
|
|
foxboroSpur.getTrainDirections());
|
|
|
|
Track foxboroYard = foxboro.addTrack("Foxboro Yard", Track.YARD);
|
|
foxboroYard.setLength(400);
|
|
Assert.assertEquals("Location 1s2 Name", "Foxboro Yard", foxboroYard.getName());
|
|
Assert.assertEquals("Location 1s2 LocType", "Yard", foxboroYard.getTrackType());
|
|
Assert.assertEquals("Location 1s2 Length", 400, foxboroYard.getLength());
|
|
|
|
Assert.assertEquals("Location 1 Length", 1000, foxboro.getLength());
|
|
|
|
Location acton = locationManager.newLocation("Acton");
|
|
Assert.assertEquals("Location 2 Name", "Acton", acton.getName());
|
|
|
|
Track actonSpur1 = acton.addTrack("Acton Spur 1", Track.SPUR);
|
|
actonSpur1.setLength(543);
|
|
actonSpur1.setMoves(1);
|
|
Assert.assertEquals("Location 2s1 Name", "Acton Spur 1", actonSpur1.getName());
|
|
Assert.assertEquals("Location 2s1 LocType", Track.SPUR, actonSpur1.getTrackType());
|
|
Assert.assertEquals("Location 2s1 Length", 543, actonSpur1.getLength());
|
|
|
|
Track actonSpur2 = acton.addTrack("Acton Spur 2", Track.SPUR);
|
|
actonSpur2.setLength(345);
|
|
|
|
Assert.assertEquals("Acton Length", 888, acton.getLength());
|
|
|
|
Location nashua = locationManager.newLocation("Nashua");
|
|
Track nashuaYard1 = nashua.addTrack("Nashua Yard 1", Track.YARD);
|
|
nashuaYard1.setLength(301);
|
|
|
|
Track nashuaYard2 = nashua.addTrack("Nashua Yard 2", Track.YARD);
|
|
nashuaYard2.setLength(402);
|
|
|
|
Assert.assertEquals("Location 3 Length", 703, nashua.getLength());
|
|
|
|
// define the route. A three location turn
|
|
Setup.setCarMoves(6); // set default to 6 moves per location
|
|
Route r1 = routeManager.newRoute("Foxboro-Acton-Nashua-Acton-Foxboro");
|
|
RouteLocation rl1 = r1.addLocation(foxboro);
|
|
rl1.setTrainIconX(25); // set the train icon coordinates
|
|
rl1.setTrainIconY(225);
|
|
RouteLocation rl2 = r1.addLocation(acton);
|
|
rl2.setTrainIconX(75); // set the train icon coordinates
|
|
rl2.setTrainIconY(225);
|
|
RouteLocation rl3 = r1.addLocation(nashua);
|
|
rl3.setTrainIconX(125); // set the train icon coordinates
|
|
rl3.setTrainIconY(225);
|
|
RouteLocation rl4 = r1.addLocation(acton);
|
|
rl4.setTrainIconX(175); // set the train icon coordinates
|
|
rl4.setTrainIconY(225);
|
|
RouteLocation rl5 = r1.addLocation(foxboro);
|
|
rl5.setTrainIconX(225); // set the train icon coordinates
|
|
rl5.setTrainIconY(225);
|
|
rl5.setPickUpAllowed(false); // don't include cars at destination
|
|
|
|
// define the train
|
|
Train t1 = trainManager.newTrain("FF");
|
|
t1.setRoute(r1);
|
|
|
|
// request helper engines to improve test coverage
|
|
t1.setSecondLegOptions(Train.HELPER_ENGINES);
|
|
t1.setSecondLegStartRouteLocation(rl1);
|
|
t1.setSecondLegEndRouteLocation(rl2);
|
|
|
|
t1.setThirdLegOptions(Train.HELPER_ENGINES);
|
|
t1.setThirdLegStartRouteLocation(rl3);
|
|
t1.setThirdLegEndRouteLocation(rl4);
|
|
|
|
Assert.assertTrue(t1.build());
|
|
Assert.assertTrue("train built 1", t1.isBuilt());
|
|
Assert.assertEquals("should be 0 cars", 0, t1.getNumberCarsWorked());
|
|
|
|
// place the cars on the tracks
|
|
Assert.assertEquals("Place c1", Track.OKAY, c1.setLocation(foxboro, foxboroSpur));
|
|
Assert.assertEquals("Place c2", Track.OKAY, c2.setLocation(foxboro, foxboroSpur));
|
|
Assert.assertEquals("Place c3", Track.OKAY, c3.setLocation(foxboro, foxboroSpur));
|
|
Assert.assertEquals("Place c4", Track.OKAY, c4.setLocation(foxboro, foxboroSpur));
|
|
Assert.assertEquals("Place c5", Track.OKAY, c5.setLocation(foxboro, foxboroSpur));
|
|
Assert.assertEquals("Place c6", Track.OKAY, c6.setLocation(foxboro, foxboroSpur));
|
|
Assert.assertEquals("Place c7", Track.OKAY, c7.setLocation(foxboro, foxboroSpur));
|
|
Assert.assertEquals("Place c8", Track.OKAY, c8.setLocation(foxboro, foxboroSpur));
|
|
Assert.assertEquals("Place c9", Track.OKAY, c9.setLocation(foxboro, foxboroSpur));
|
|
Assert.assertEquals("Place c10", Track.OKAY, c10.setLocation(foxboro, foxboroSpur));
|
|
Assert.assertEquals("Place e1", Track.OKAY, e1.setLocation(foxboro, foxboroSpur));
|
|
|
|
Assert.assertTrue(t1.build());
|
|
Assert.assertTrue("train built 2", t1.isBuilt());
|
|
Assert.assertEquals("should be 6 cars", 6, t1.getNumberCarsWorked());
|
|
|
|
// check car destinations
|
|
Assert.assertEquals("Destination c1", "", c1.getDestinationName());
|
|
Assert.assertEquals("Destination c2", "", c2.getDestinationName());
|
|
Assert.assertEquals("Destination c3", "Acton", c3.getDestinationName());
|
|
Assert.assertEquals("Destination c4", "Nashua", c4.getDestinationName());
|
|
Assert.assertEquals("Destination c5", "Acton", c5.getDestinationName());
|
|
Assert.assertEquals("Destination c6", "Nashua", c6.getDestinationName());
|
|
Assert.assertEquals("Destination c7", "Acton", c7.getDestinationName());
|
|
Assert.assertEquals("Destination c8", "Nashua", c8.getDestinationName());
|
|
Assert.assertEquals("Destination c9", "", c9.getDestinationName());
|
|
Assert.assertEquals("Destination c10", "", c10.getDestinationName());
|
|
Assert.assertEquals("Destination e1", "", e1.getDestinationName());
|
|
|
|
// release cars from train
|
|
Assert.assertTrue("reset train", t1.reset());
|
|
Assert.assertEquals("Train reset", Train.CODE_TRAIN_RESET, t1.getStatusCode());
|
|
// set c3, c5, c6, c8, c10 destination to be Nashua
|
|
c3.setDestination(nashua, nashuaYard1);
|
|
c5.setDestination(nashua, nashuaYard1);
|
|
c6.setDestination(nashua, nashuaYard1);
|
|
c8.setDestination(nashua, nashuaYard1);
|
|
c10.setDestination(nashua, nashuaYard1);
|
|
// set c5 and c9 to be serviced by train TT
|
|
Train t2 = trainManager.newTrain("TT");
|
|
c5.setTrain(t2);
|
|
c9.setTrain(t2);
|
|
// set c6 to be serviced by train FF
|
|
c6.setTrain(t1);
|
|
|
|
// require a caboose
|
|
t1.setRequirements(Train.CABOOSE);
|
|
t1.setShowArrivalAndDepartureTimes(false); // increase test coverage
|
|
Assert.assertTrue(t1.build());
|
|
Assert.assertTrue("train built 3", t1.isBuilt());
|
|
|
|
// check car destinations
|
|
Assert.assertEquals("2 Destination c1", "Foxboro", c1.getDestinationName());
|
|
Assert.assertEquals("2 Destination c2", "", c2.getDestinationName());
|
|
Assert.assertEquals("2 Destination c3", "Nashua", c3.getDestinationName());
|
|
Assert.assertEquals("2 Destination c4", "Acton", c4.getDestinationName());
|
|
Assert.assertEquals("2 Destination c5", "Nashua", c5.getDestinationName());
|
|
Assert.assertEquals("2 Destination c6", "Nashua", c6.getDestinationName());
|
|
Assert.assertEquals("2 Destination c7", "Acton", c7.getDestinationName());
|
|
Assert.assertEquals("2 Destination c8", "Nashua", c8.getDestinationName());
|
|
Assert.assertEquals("2 Destination c9", "", c9.getDestinationName());
|
|
Assert.assertEquals("2 Destination c10", "Nashua", c10.getDestinationName());
|
|
|
|
// move and terminate the train
|
|
t1.move(); // to Acton
|
|
Assert.assertEquals("confirm train location", "Acton", t1.getCurrentLocationName());
|
|
t1.move(); // to Nashua
|
|
Assert.assertEquals("confirm train location", "Nashua", t1.getCurrentLocationName());
|
|
t1.move(); // to Acton
|
|
Assert.assertEquals("confirm train location", "Acton", t1.getCurrentLocationName());
|
|
t1.move(); // to Foxboro
|
|
Assert.assertEquals("confirm train location", "Foxboro", t1.getCurrentLocationName());
|
|
t1.move(); // terminate
|
|
|
|
// check car destinations
|
|
Assert.assertEquals("3 Destination c1", "", c1.getDestinationName());
|
|
Assert.assertEquals("3 Destination c2", "", c2.getDestinationName());
|
|
Assert.assertEquals("3 Destination c3", "", c3.getDestinationName());
|
|
Assert.assertEquals("3 Destination c4", "", c4.getDestinationName());
|
|
Assert.assertEquals("3 Destination c5", "Nashua", c5.getDestinationName());
|
|
Assert.assertEquals("3 Destination c6", "", c6.getDestinationName());
|
|
Assert.assertEquals("3 Destination c7", "", c7.getDestinationName());
|
|
Assert.assertEquals("3 Destination c8", "", c8.getDestinationName());
|
|
Assert.assertEquals("3 Destination c9", "", c9.getDestinationName());
|
|
Assert.assertEquals("3 Destination c10", "Nashua", c10.getDestinationName());
|
|
|
|
// check car locations
|
|
Assert.assertEquals("Location c1", "Foxboro", c1.getLocationName());
|
|
Assert.assertEquals("Location c2", "Foxboro", c2.getLocationName());
|
|
Assert.assertEquals("Location c3", "Nashua", c3.getLocationName());
|
|
Assert.assertEquals("Location c4", "Acton", c4.getLocationName());
|
|
Assert.assertEquals("Location c5", "Foxboro", c5.getLocationName());
|
|
Assert.assertEquals("Location c6", "Nashua", c6.getLocationName());
|
|
Assert.assertEquals("Location c7", "Acton", c7.getLocationName());
|
|
Assert.assertEquals("Location c8", "Nashua", c8.getLocationName());
|
|
Assert.assertEquals("Location c9", "Foxboro", c9.getLocationName());
|
|
Assert.assertEquals("Location c10", "Foxboro", c10.getLocationName());
|
|
|
|
// now set caboose destinations that aren't the terminal
|
|
Assert.assertEquals("set destination c1", Track.OKAY, c1.setDestination(acton, actonSpur1));
|
|
Assert.assertEquals("set destination c2", Track.OKAY, c2.setDestination(nashua, nashuaYard1));
|
|
|
|
// train requires a caboose, should fail
|
|
Assert.assertFalse(t1.build());
|
|
Assert.assertFalse("train built 4", t1.isBuilt());
|
|
|
|
// Set caboose destination to be the terminal
|
|
Assert.assertEquals("set caboose destination", Track.OKAY, c2.setDestination(foxboro, foxboroYard));
|
|
Assert.assertTrue(t1.build());
|
|
Assert.assertTrue("train built 5", t1.isBuilt());
|
|
Assert.assertTrue("train reset 5", t1.reset());
|
|
|
|
// set the cabooses to train FF
|
|
c1.setTrain(t2);
|
|
c2.setTrain(t2);
|
|
|
|
// build should fail
|
|
Assert.assertFalse(t1.build());
|
|
Assert.assertFalse("train built 6", t1.isBuilt());
|
|
|
|
// set caboose to train TT
|
|
c1.setTrain(t1);
|
|
Assert.assertTrue(t1.build());
|
|
Assert.assertTrue("train built 7", t1.isBuilt());
|
|
|
|
// check car destinations
|
|
Assert.assertEquals("4 Destination c1", "Foxboro", c1.getDestinationName());
|
|
Assert.assertEquals("4 Destination c2", "", c2.getDestinationName());
|
|
Assert.assertEquals("4 Destination c3", "Acton", c3.getDestinationName());
|
|
Assert.assertEquals("4 Destination c4", "Nashua", c4.getDestinationName());
|
|
Assert.assertEquals("4 Destination c5", "Nashua", c5.getDestinationName());
|
|
Assert.assertEquals("4 Destination c6", "Foxboro", c6.getDestinationName());
|
|
Assert.assertEquals("4 Destination c7", "Nashua", c7.getDestinationName());
|
|
Assert.assertEquals("4 Destination c8", "Foxboro", c8.getDestinationName());
|
|
Assert.assertEquals("4 Destination c9", "", c9.getDestinationName());
|
|
Assert.assertEquals("4 Destination c10", "Acton", c10.getDestinationName());
|
|
|
|
// add an engine
|
|
t1.setNumberEngines("2");
|
|
Assert.assertTrue(t1.build());
|
|
Assert.assertTrue("train built 8", t1.isBuilt());
|
|
Assert.assertEquals("5 Destination e1", "Foxboro", e1.getDestinationName());
|
|
Assert.assertEquals("5 Destination e2", "Foxboro", e2.getDestinationName());
|
|
|
|
t1.reset();
|
|
// assign lead engine to train TT
|
|
e1.setTrain(t2);
|
|
// should fail
|
|
Assert.assertFalse(t1.build());
|
|
Assert.assertFalse("train built 9", t1.isBuilt());
|
|
|
|
// assign one of the consist engine to train TT
|
|
e1.setTrain(t1);
|
|
e2.setTrain(t2); // shouldn't pay attention to the other engine
|
|
// should build
|
|
Assert.assertTrue(t1.build());
|
|
Assert.assertTrue("train built 10", t1.isBuilt());
|
|
t1.reset();
|
|
|
|
// both engines should release
|
|
Assert.assertEquals("6 Destination e1", "", e1.getDestinationName());
|
|
Assert.assertEquals("6 Train e1", "", e1.getTrainName());
|
|
Assert.assertEquals("6 Destination e2", "", e2.getDestinationName());
|
|
Assert.assertEquals("6 Train e2", "", e2.getTrainName());
|
|
|
|
// now try setting engine destination that isn't the terminal
|
|
Assert.assertEquals("set destination e1", Track.OKAY, e1.setDestination(acton, actonSpur1));
|
|
// should fail
|
|
Assert.assertFalse(t1.build());
|
|
Assert.assertFalse("train built 11", t1.isBuilt());
|
|
|
|
e1.setDestination(foxboro, foxboroYard);
|
|
e2.setDestination(acton, actonSpur1); // program should ignore
|
|
// should build
|
|
Assert.assertTrue(t1.build());
|
|
Assert.assertTrue("train built 12", t1.isBuilt());
|
|
|
|
// set lead engine's track to null
|
|
Assert.assertEquals("Place e1", Track.OKAY, e1.setLocation(foxboro, null));
|
|
// should not build
|
|
Assert.assertFalse(t1.build());
|
|
Assert.assertFalse("train will not build engine track is null", t1.isBuilt());
|
|
Assert.assertEquals("Place e1", Track.OKAY, e1.setLocation(foxboro, foxboroSpur));
|
|
|
|
// should now build
|
|
Assert.assertTrue(t1.build());
|
|
|
|
// move and terminate the train
|
|
t1.move(); // to Acton
|
|
t1.move(); // to Nashua
|
|
t1.move(); // to Acton
|
|
t1.move(); // to Foxboro
|
|
t1.move(); // terminate
|
|
|
|
// check engine final locations
|
|
Assert.assertEquals("Location e1", "Foxboro", e1.getLocationName());
|
|
Assert.assertEquals("Location e2", "Foxboro", e2.getLocationName());
|
|
|
|
// move c7 & c8 to Foxboro to help test kernels
|
|
Assert.assertEquals("Place c7", Track.OKAY, c7.setLocation(foxboro, foxboroSpur));
|
|
Assert.assertEquals("Place c8", Track.OKAY, c8.setLocation(foxboro, foxboroSpur));
|
|
// now test kernels
|
|
Kernel k1 = InstanceManager.getDefault(KernelManager.class).newKernel("group of cars");
|
|
c8.setKernel(k1); // lead car
|
|
c7.setKernel(k1);
|
|
c7.setTrain(t2); // program should ignore
|
|
c3.setLocation(foxboro, foxboroSpur);
|
|
c3.setKernel(k1);
|
|
c3.setDestination(foxboro, foxboroSpur); // program should ignore (produces debug warning)
|
|
|
|
// should build
|
|
Assert.assertTrue(t1.build());
|
|
Assert.assertTrue("train built 12", t1.isBuilt());
|
|
// Confirm partial build
|
|
Assert.assertEquals("Train built", Train.CODE_PARTIAL_BUILT, t1.getStatusCode());
|
|
Assert.assertEquals("12 Location c3", "Foxboro", c3.getLocationName());
|
|
Assert.assertEquals("12 Location c7", "Foxboro", c7.getLocationName());
|
|
Assert.assertEquals("12 Location c8", "Foxboro", c8.getLocationName());
|
|
Assert.assertEquals("12 Destination c3", "Nashua", c3.getDestinationName());
|
|
Assert.assertEquals("12 Destination c7", "Nashua", c7.getDestinationName());
|
|
Assert.assertEquals("12 Destination c8", "Nashua", c8.getDestinationName());
|
|
|
|
// move and terminate the train
|
|
t1.move(); // to Acton
|
|
Assert.assertEquals("Train en route", Train.CODE_TRAIN_EN_ROUTE, t1.getStatusCode());
|
|
t1.move(); // to Nashua
|
|
Assert.assertEquals("Train en route", Train.CODE_TRAIN_EN_ROUTE, t1.getStatusCode());
|
|
t1.move(); // to Acton
|
|
Assert.assertEquals("Train en route", Train.CODE_TRAIN_EN_ROUTE, t1.getStatusCode());
|
|
t1.move(); // to Foxboro
|
|
Assert.assertEquals("Train en route", Train.CODE_TRAIN_EN_ROUTE, t1.getStatusCode());
|
|
t1.move(); // terminate
|
|
Assert.assertEquals("Train Terminated", Train.CODE_TERMINATED, t1.getStatusCode());
|
|
|
|
Assert.assertEquals("13 Location c3", "Nashua", c3.getLocationName());
|
|
Assert.assertEquals("13 Location c7", "Nashua", c7.getLocationName());
|
|
Assert.assertEquals("13 Location c8", "Nashua", c8.getLocationName());
|
|
Assert.assertEquals("13 Destination c3", "", c3.getDestinationName());
|
|
Assert.assertEquals("13 Destination c7", "", c7.getDestinationName());
|
|
Assert.assertEquals("13 Destination c8", "", c8.getDestinationName());
|
|
Assert.assertEquals("13 Train c3", "", c3.getTrainName());
|
|
Assert.assertEquals("13 Train c7", "", c7.getTrainName());
|
|
Assert.assertEquals("13 Train c8", "", c8.getTrainName());
|
|
|
|
// now test car with FRED
|
|
c1.setCaboose(false);
|
|
c2.setCaboose(false);
|
|
c1.setFred(true);
|
|
c2.setFred(true);
|
|
c1.setTypeName("Boxcar"); // change the type, now Boxcar with FRED
|
|
c2.setTypeName("Boxcar");
|
|
c2.setTrain(null);
|
|
|
|
// train requires a caboose, there are none, should fail
|
|
Assert.assertFalse(t1.build());
|
|
Assert.assertFalse("train built 14", t1.isBuilt());
|
|
|
|
// change requirement to car with FRED
|
|
t1.setRequirements(Train.FRED);
|
|
|
|
// train requires a car with FRED, should pass
|
|
Assert.assertTrue(t1.build());
|
|
Assert.assertTrue("train built 15", t1.isBuilt());
|
|
Assert.assertTrue("train reset 15", t1.reset()); // release cars
|
|
|
|
// now set FRED destinations that aren't the terminal
|
|
Assert.assertEquals("set destination c1", Track.OKAY, c1.setDestination(acton, actonSpur1));
|
|
Assert.assertEquals("set destination c2", Track.OKAY, c2.setDestination(nashua, nashuaYard1));
|
|
|
|
// train requires a car with FRED, should fail
|
|
Assert.assertFalse(t1.build());
|
|
Assert.assertFalse("train built 16", t1.isBuilt());
|
|
|
|
// Set FRED destination to be the terminal
|
|
Assert.assertEquals("set destination c2", Track.OKAY, c2.setDestination(foxboro, foxboroYard));
|
|
Assert.assertTrue(t1.build());
|
|
Assert.assertTrue("train built 17", t1.isBuilt());
|
|
Assert.assertTrue("train reset 17", t1.reset());
|
|
|
|
// set the cars with FRED to train FF
|
|
c1.setTrain(t2);
|
|
c2.setTrain(t2);
|
|
|
|
// build should fail
|
|
Assert.assertFalse(t1.build());
|
|
Assert.assertFalse("train built 18", t1.isBuilt());
|
|
|
|
// set car with FRED to train TT
|
|
c2.setTrain(t1);
|
|
Assert.assertTrue(t1.build());
|
|
Assert.assertTrue("train built 19", t1.isBuilt());
|
|
|
|
// test car out of service
|
|
c2.setOutOfService(true);
|
|
Assert.assertFalse(t1.build());
|
|
Assert.assertFalse("required car is out of service", t1.isBuilt());
|
|
|
|
// test location unknown
|
|
c2.setOutOfService(false);
|
|
c2.setLocationUnknown(true);
|
|
Assert.assertFalse(t1.build());
|
|
Assert.assertFalse("required car location is unknown", t1.isBuilt());
|
|
|
|
c2.setLocationUnknown(false);
|
|
Assert.assertTrue(t1.build());
|
|
Assert.assertTrue("need car is available", t1.isBuilt());
|
|
|
|
c2.setWait(1);
|
|
Assert.assertFalse(t1.build());
|
|
Assert.assertFalse("required car will wait for next train", t1.isBuilt());
|
|
|
|
Assert.assertTrue(t1.build());
|
|
Assert.assertTrue("next train!", t1.isBuilt());
|
|
Assert.assertEquals("CP 4000 destination", "Nashua", c4.getDestinationName());
|
|
|
|
// test train and location direction controls
|
|
c8.setLocation(acton, actonSpur1); // place led car of kernel in Action Spur 1
|
|
acton.setTrainDirections(Location.EAST + Location.SOUTH + Location.WEST); // train is north bound
|
|
|
|
// build should fail, cars c3 and c7 which is part of c8 kernel are on the wrong
|
|
// track
|
|
Assert.assertFalse(t1.build());
|
|
Assert.assertFalse("Train direction test", t1.isBuilt());
|
|
c3.setLocation(acton, actonSpur1); // place c3 Action Spur 1
|
|
c7.setLocation(acton, actonSpur1); // place c7 Action Spur 1
|
|
|
|
Assert.assertTrue(t1.build());
|
|
Assert.assertTrue("Train direction test", t1.isBuilt());
|
|
Assert.assertEquals("CP 1000 destination", "Foxboro", c10.getDestinationName());
|
|
Assert.assertEquals("CP 30 at Acton, not serviced", null, c3.getTrain());
|
|
Assert.assertEquals("CP 700 at Acton, not serviced", null, c7.getTrain());
|
|
Assert.assertEquals("CP 8000 at Acton, not serviced", null, c8.getTrain());
|
|
|
|
// restore Acton
|
|
acton.setTrainDirections(Location.NORTH); // train is north bound
|
|
Assert.assertTrue(t1.build());
|
|
|
|
Assert.assertEquals("CP 1000 destination is now", "Acton", c10.getDestinationName());
|
|
Assert.assertEquals("CP 30 at Acton", t1, c3.getTrain());
|
|
Assert.assertEquals("CP 700 at Acton", t1, c7.getTrain());
|
|
Assert.assertEquals("CP 8000 at Acton", t1, c8.getTrain());
|
|
|
|
// restrict train direction at the track level
|
|
actonSpur2.setTrainDirections(Track.EAST + Track.SOUTH + Track.WEST);
|
|
// take one car out of kernel
|
|
c3.setKernel(null);
|
|
c3.setLocation(acton, actonSpur1); // place car in Action Spur 1
|
|
c8.setLocation(acton, actonSpur2); // place lead car in Action Yard
|
|
c7.setLocation(acton, actonSpur2); // place c7 in Action Yard
|
|
Assert.assertTrue(t1.build());
|
|
|
|
Assert.assertEquals("CP 1000 destination track", "Acton Spur 1", c1.getDestinationTrackName());
|
|
Assert.assertEquals("CP 200 at Foxboro Spur", t1, c2.getTrain());
|
|
Assert.assertEquals("CP 30 at Acton Spur 1", t1, c3.getTrain());
|
|
Assert.assertEquals("CP 30 destination track", "Nashua Yard 2", c3.getDestinationTrackName());
|
|
Assert.assertEquals("CP 4000 at Foxboro Spur", t1, c4.getTrain());
|
|
Assert.assertEquals("CP 4000 destination", "Nashua", c4.getDestinationName());
|
|
Assert.assertEquals("CP 4000 destination track", "Nashua Yard 2", c4.getDestinationTrackName());
|
|
Assert.assertEquals("CP 60 destination track", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("CP 700 at Acton, not serviced, part of kernel CP 8000", null, c7.getTrain());
|
|
Assert.assertEquals("CP 8000 at Acton, Acton Spur 2 not serviced", null, c8.getTrain());
|
|
|
|
// test train length restrictions
|
|
rl1.setMaxTrainLength(155); // only enough for the two engines, train needs a car with FRED
|
|
Assert.assertFalse(t1.build());
|
|
Assert.assertFalse("Train length test, can't service car with FRED", t1.isBuilt());
|
|
|
|
// build failed after engines were assigned to train 1
|
|
Assert.assertEquals("Engine assignment ignores train length restrictions", null, e1.getTrain());
|
|
Assert.assertEquals("Engine assignment ignores train length restrictions", null, e2.getTrain());
|
|
|
|
Assert.assertEquals("Check CP30 engine length", "56", e1.getLength());
|
|
Assert.assertEquals("Check CP 200 length", "32", c2.getLength());
|
|
rl1.setMaxTrainLength(156); // enough for the two engines and a car with FRED 56 + 56 + 32 + 12(couplers) =
|
|
// 156
|
|
|
|
Assert.assertTrue(t1.build());
|
|
Assert.assertTrue("Train length test, just enough length for engines and car with FRED", t1.isBuilt());
|
|
Assert.assertEquals("CP 200 at Foxboro Spur", t1, c2.getTrain());
|
|
Assert.assertEquals("CP 200 destination track", "Foxboro Spur", c2.getDestinationTrackName());
|
|
Assert.assertEquals("CP 30 at Acton Spur 1", t1, c3.getTrain());
|
|
Assert.assertEquals("CP 30 destination track", "Nashua Yard 2", c3.getDestinationTrackName());
|
|
Assert.assertEquals("CP 4000 at Foxboro Spur", t1, c4.getTrain());
|
|
Assert.assertEquals("CP 60 destination track", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("CP 700 at Acton, not serviced, part of kernel CP 8000", null, c7.getTrain());
|
|
Assert.assertEquals("CP 8000 at Acton, Acton Spur 2 not serviced", null, c8.getTrain());
|
|
Assert.assertEquals("CP 1000 ", t1, c10.getTrain());
|
|
|
|
// Increase the train length from the departure location
|
|
rl1.setMaxTrainLength(1000);
|
|
rl2.setMaxTrainLength(156); // restrict train length from Acton
|
|
Assert.assertTrue(t1.build());
|
|
Assert.assertTrue("Train length test, just enough length for engines and car with FRED", t1.isBuilt());
|
|
Assert.assertEquals("CP 200 at Foxboro Spur", t1, c2.getTrain());
|
|
Assert.assertEquals("CP 200 destination track", "Foxboro Spur", c2.getDestinationTrackName());
|
|
Assert.assertEquals("CP 30 at Acton Spur 1", t1, c3.getTrain());
|
|
Assert.assertEquals("CP 30 destination track", "Foxboro Spur", c3.getDestinationTrackName());
|
|
Assert.assertEquals("CP 4000 at Foxboro Yard", t1, c4.getTrain());
|
|
Assert.assertEquals("CP 4000 destination track", "Foxboro Yard", c4.getDestinationTrackName());
|
|
Assert.assertEquals("CP 60 destination track", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("CP 1000 part of train", t1, c10.getTrain());
|
|
Assert.assertEquals("CP 1000 destination track", "Acton Spur 1", c10.getDestinationTrackName());
|
|
|
|
// test setting car's destination to Foxboro Spur
|
|
c2.setDestination(foxboro, foxboroSpur);
|
|
Assert.assertTrue(t1.build());
|
|
Assert.assertTrue("car with FRED has destination", t1.isBuilt());
|
|
t1.reset();
|
|
|
|
// again, but now change car type serviced by Foxboro Yard
|
|
c2.setDestination(foxboro, foxboroSpur);
|
|
foxboroSpur.deleteTypeName("Boxcar");
|
|
Assert.assertFalse(t1.build());
|
|
Assert.assertFalse("car with FRED has destination that won't accept it", t1.isBuilt());
|
|
foxboroSpur.addTypeName("Boxcar");
|
|
|
|
c6.setDestination(acton, actonSpur2); // destination Action Spur 2
|
|
actonSpur2.deleteTypeName("Boxcar"); // don't allow Boxcar to drop
|
|
Assert.assertTrue(t1.build());
|
|
Assert.assertTrue("car with FRED has destination that will now accept it", t1.isBuilt());
|
|
Assert.assertEquals("CP 60 can't be delivered", null, c6.getTrain());
|
|
|
|
c2.setLocation(foxboro, null);
|
|
Assert.assertFalse(t1.build());
|
|
Assert.assertFalse("need car doesn't have a track assignment", t1.isBuilt());
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
// end testSpursYards
|
|
}
|
|
|
|
/**
|
|
* Test a route of one location (local train). Locations that don't have a
|
|
* train direction assigned can only be served by a local train. Creates two
|
|
* locations Westford and Chelmsford and 9 cars. Westford has 2 yards, 2
|
|
* spurs, 3 interchange tracks. Chelmsford has 1 yard. Chelmsford is used to
|
|
* test that a train with two locations will not service certain tracks.
|
|
*/
|
|
@Test
|
|
public void testLocal() {
|
|
|
|
// Create locations used
|
|
Location westford = locationManager.newLocation("Westford");
|
|
Location chelmsford = locationManager.newLocation("Chelmsford");
|
|
|
|
Track westfordYard1;
|
|
westfordYard1 = westford.addTrack("Westford Yard 1", Track.YARD);
|
|
westfordYard1.setTrainDirections(Track.WEST + Track.EAST);
|
|
westfordYard1.setLength(500);
|
|
|
|
Track westfordYard2;
|
|
westfordYard2 = westford.addTrack("Westford Yard 2", Track.YARD);
|
|
westfordYard2.setTrainDirections(Track.WEST + Track.EAST);
|
|
westfordYard2.setLength(500);
|
|
|
|
Track westfordSpur3;
|
|
westfordSpur3 = westford.addTrack("Westford Spur 3", Track.SPUR);
|
|
westfordSpur3.setTrainDirections(0); // Only local moves allowed
|
|
westfordSpur3.setLength(300);
|
|
|
|
Track westfordSpur4;
|
|
westfordSpur4 = westford.addTrack("Westford Spur 4", Track.SPUR);
|
|
westfordSpur4.setTrainDirections(0); // Only local moves allowed
|
|
westfordSpur4.setLength(300);
|
|
|
|
Track westfordInterchange5;
|
|
westfordInterchange5 = westford.addTrack("Westford Interchange 5", Track.INTERCHANGE);
|
|
westfordInterchange5.setTrainDirections(0); // Only local moves allowed
|
|
westfordInterchange5.setLength(300);
|
|
|
|
Track westfordInterchange6;
|
|
westfordInterchange6 = westford.addTrack("Westford Interchange 6", Track.INTERCHANGE);
|
|
westfordInterchange6.setTrainDirections(Track.WEST + Track.EAST);
|
|
westfordInterchange6.setLength(300);
|
|
|
|
Track westfordInterchange7;
|
|
westfordInterchange7 = westford.addTrack("Westford Interchange 7", Track.INTERCHANGE);
|
|
westfordInterchange7.setTrainDirections(0); // Only local moves allowed
|
|
westfordInterchange7.setLength(300);
|
|
|
|
Track chelmsfordYard1;
|
|
chelmsfordYard1 = chelmsford.addTrack("Chelmsford Yard 1", Track.YARD);
|
|
chelmsfordYard1.setTrainDirections(Track.WEST + Track.EAST);
|
|
chelmsfordYard1.setLength(900);
|
|
|
|
// now bias track selection by moves
|
|
westfordYard1.setMoves(3); // no yard to yard moves expected
|
|
westfordYard2.setMoves(4); // no yard to yard moves expected
|
|
westfordSpur3.setMoves(10); // this will be the 5th location assigned
|
|
westfordSpur4.setMoves(10); // this will be the 6th location assigned
|
|
westfordInterchange5.setMoves(9); // this will be the 2nd location assigned
|
|
westfordInterchange6.setMoves(9); // this will be the 3rd location assigned
|
|
westfordInterchange7.setMoves(8); // this will be the first and 4th location assigned
|
|
|
|
// Create route with only one location
|
|
Route rte1 = routeManager.newRoute("Local Route");
|
|
Setup.setCarMoves(7); // set the default moves to 7
|
|
RouteLocation rl1 = rte1.addLocation(westford);
|
|
|
|
// Create train
|
|
Train train1 = trainManager.newTrain("Local Train");
|
|
train1.setRoute(rte1);
|
|
|
|
// Set up 8 box cars and 1 flat cars
|
|
|
|
// should be the 7th car assigned to train
|
|
Car c1 = JUnitOperationsUtil.createAndPlaceCar("BM", "1", "Boxcar", "90", westfordYard1, 17);
|
|
|
|
// should be the 6th car assigned to train
|
|
Car c2 = JUnitOperationsUtil.createAndPlaceCar("CP", "2", "Boxcar", "80", westfordYard1, 15);
|
|
|
|
// should be the 1st car assigned to train
|
|
Car c3 = JUnitOperationsUtil.createAndPlaceCar("XP", "3", "Flat Car", "70", westfordYard1, 0);
|
|
|
|
// should be the 5th car assigned to train
|
|
Car c4 = JUnitOperationsUtil.createAndPlaceCar("UP", "4", "Boxcar", "60", westfordYard1, 6);
|
|
|
|
// should be the 2nd car assigned to train
|
|
Car c5 = JUnitOperationsUtil.createAndPlaceCar("UP", "5", "Boxcar", "50", westfordYard2, 1);
|
|
|
|
// should be the 4th car assigned to train
|
|
Car c6 = JUnitOperationsUtil.createAndPlaceCar("CP", "6", "Boxcar", "40", westfordYard2, 3);
|
|
Car c7 = JUnitOperationsUtil.createAndPlaceCar("UP", "7", "Boxcar", "50", westfordYard2, 18);
|
|
|
|
// should be the 3rd car assigned to train
|
|
Car c8 = JUnitOperationsUtil.createAndPlaceCar("XP", "8", "Boxcar", "60", westfordYard2, 2);
|
|
Car c9 = JUnitOperationsUtil.createAndPlaceCar("XP", "9", "Boxcar", "90", westfordSpur3, 19);
|
|
|
|
// do cars have the right default loads?
|
|
Assert.assertEquals("Car c1 load should be E", "E", c1.getLoadName());
|
|
Assert.assertEquals("Car c2 load should be E", "E", c2.getLoadName());
|
|
Assert.assertEquals("Car c3 load should be E", "E", c3.getLoadName());
|
|
Assert.assertEquals("Car c4 load should be E", "E", c4.getLoadName());
|
|
Assert.assertEquals("Car c5 load should be E", "E", c5.getLoadName());
|
|
Assert.assertEquals("Car c6 load should be E", "E", c6.getLoadName());
|
|
Assert.assertEquals("Car c7 load should be E", "E", c7.getLoadName());
|
|
Assert.assertEquals("Car c8 load should be E", "E", c8.getLoadName());
|
|
Assert.assertEquals("Car c9 load should be E", "E", c9.getLoadName());
|
|
|
|
// Build train
|
|
Assert.assertTrue(train1.build());
|
|
|
|
// check train status
|
|
Assert.assertEquals("Train 1 built", Train.CODE_BUILT, train1.getStatusCode());
|
|
|
|
Assert.assertEquals("Train 1 After Build Departs Name", "Westford", train1.getTrainDepartsName());
|
|
Assert.assertEquals("Train 1 After Build Terminates Name", "Westford", train1.getTrainTerminatesName());
|
|
Assert.assertEquals("Train 1 After Build Next Location Name", "", train1.getNextLocationName());
|
|
Assert.assertEquals("Train 1 After Build Built Status", true, train1.isBuilt());
|
|
|
|
// are the right cars assigned to the train?
|
|
// the default moves is 7, therefore only 7 cars should be moved based on their
|
|
// move counts
|
|
Assert.assertEquals("Car c1 After Build should be assigned to Train 1", train1, c1.getTrain());
|
|
Assert.assertEquals("Car c2 After Build should be assigned to Train 1", train1, c2.getTrain());
|
|
Assert.assertEquals("Car c3 After Build should be assigned to Train 1", train1, c3.getTrain());
|
|
Assert.assertEquals("Car c4 After Build should NOT be assigned to Train 1", train1, c4.getTrain());
|
|
Assert.assertEquals("Car c5 After Build should be assigned to Train 1", train1, c5.getTrain());
|
|
Assert.assertEquals("Car c6 After Build should be assigned to Train 1", train1, c6.getTrain());
|
|
Assert.assertEquals("Car c7 After Build should NOT be assigned to Train 1", null, c7.getTrain());
|
|
Assert.assertEquals("Car c8 After Build should be assigned to Train 1", train1, c8.getTrain());
|
|
Assert.assertEquals("Car c9 After Build should NOT be assigned to Train 1", null, c9.getTrain());
|
|
|
|
// now check to see if cars are going to be delivered to the right places?
|
|
Assert.assertEquals("Car c1 After Build destination", "Westford Interchange 5", c1.getDestinationTrackName());
|
|
Assert.assertEquals("Car c2 After Build destination", "Westford Spur 4", c2.getDestinationTrackName());
|
|
Assert.assertEquals("Car c3 After Build destination", "Westford Interchange 7", c3.getDestinationTrackName());
|
|
Assert.assertEquals("Car c4 After Build destination", "Westford Spur 3", c4.getDestinationTrackName());
|
|
Assert.assertEquals("Car c5 After Build destination", "Westford Interchange 5", c5.getDestinationTrackName());
|
|
Assert.assertEquals("Car c6 After Build destination", "Westford Interchange 7", c6.getDestinationTrackName());
|
|
Assert.assertEquals("Car c8 After Build destination", "Westford Interchange 6", c8.getDestinationTrackName());
|
|
|
|
// are the pickup and drop counts correct?
|
|
Assert.assertEquals("Drop count for Westford", 7, westford.getDropRS());
|
|
Assert.assertEquals("Drop count for Westford track Westford Yard 1", 0, westfordYard1.getDropRS());
|
|
Assert.assertEquals("Drop count for Westford track Westford Yard 2", 0, westfordYard2.getDropRS());
|
|
Assert.assertEquals("Drop count for Westford track Westford Spur 3", 1, westfordSpur3.getDropRS());
|
|
Assert.assertEquals("Drop count for Westford track Westford Spur 4", 1, westfordSpur4.getDropRS());
|
|
Assert.assertEquals("Drop count for Westford track Westford Interchange 5", 2,
|
|
westfordInterchange5.getDropRS());
|
|
Assert.assertEquals("Drop count for Westford track Westford Interchange 6", 1,
|
|
westfordInterchange6.getDropRS());
|
|
Assert.assertEquals("Drop count for Westford track Westford Interchange 7", 2,
|
|
westfordInterchange7.getDropRS());
|
|
Assert.assertEquals("Pickup count for Westford", 7, westford.getPickupRS());
|
|
Assert.assertEquals("Pickup count for Westford track Westford Yard 1", 4, westfordYard1.getPickupRS());
|
|
Assert.assertEquals("Pickup count for Westford track Westford Yard 2", 3, westfordYard2.getPickupRS());
|
|
Assert.assertEquals("Pickup count for Westford track Westford Spur 3", 0, westfordSpur3.getPickupRS());
|
|
Assert.assertEquals("Pickup count for Westford track Westford Spur 4", 0, westfordSpur4.getPickupRS());
|
|
Assert.assertEquals("Pickup count for Westford track Westford Interchange 5", 0,
|
|
westfordInterchange5.getPickupRS());
|
|
Assert.assertEquals("Pickup count for Westford track Westford Interchange 6", 0,
|
|
westfordInterchange6.getPickupRS());
|
|
Assert.assertEquals("Pickup count for Westford track Westford Interchange 7", 0,
|
|
westfordInterchange7.getPickupRS());
|
|
|
|
train1.move();
|
|
// Train should not be in route since there's only one location
|
|
Assert.assertEquals("Train 1 not in route", false, train1.isTrainEnRoute());
|
|
// check train status
|
|
Assert.assertEquals("Train 1 not en route", Train.TERMINATED, getTrainStatus(train1));
|
|
Assert.assertEquals("Train 1 not en route", Train.CODE_TERMINATED, train1.getStatusCode());
|
|
// check for correct tracks
|
|
Assert.assertEquals("Car c1 After Move location", "Westford Interchange 5", c1.getTrackName());
|
|
Assert.assertEquals("Car c2 After Move location", "Westford Spur 4", c2.getTrackName());
|
|
Assert.assertEquals("Car c3 After Move location", "Westford Interchange 7", c3.getTrackName());
|
|
Assert.assertEquals("Car c4 After Move location", "Westford Spur 3", c4.getTrackName());
|
|
Assert.assertEquals("Car c5 After Move location", "Westford Interchange 5", c5.getTrackName());
|
|
Assert.assertEquals("Car c6 After Move location", "Westford Interchange 7", c6.getTrackName());
|
|
Assert.assertEquals("Car c8 After Move location", "Westford Interchange 6", c8.getTrackName());
|
|
|
|
// do cars have the right loads?
|
|
Assert.assertEquals("Car c1 After Move load should be E", "E", c1.getLoadName());
|
|
Assert.assertEquals("Car c2 After Move load should be L", "L", c2.getLoadName());
|
|
Assert.assertEquals("Car c3 After Move load should be E", "E", c3.getLoadName());
|
|
Assert.assertEquals("Car c4 After Move load should be L", "L", c4.getLoadName());
|
|
Assert.assertEquals("Car c5 After Move load should be E", "E", c5.getLoadName());
|
|
Assert.assertEquals("Car c6 After Move load should be E", "E", c6.getLoadName());
|
|
Assert.assertEquals("Car c7 After Move load should be E", "E", c7.getLoadName());
|
|
Assert.assertEquals("Car c8 After Move load should be E", "E", c8.getLoadName());
|
|
Assert.assertEquals("Car c9 After Move load should be E", "E", c9.getLoadName());
|
|
|
|
// are the pickup and drop counts correct?
|
|
Assert.assertEquals("Move 1 Drop count for Westford", 0, westford.getDropRS());
|
|
Assert.assertEquals("Move 1 Drop count for Westford track Westford Yard 1", 0, westfordYard1.getDropRS());
|
|
Assert.assertEquals("Move 1 Drop count for Westford track Westford Yard 2", 0, westfordYard2.getDropRS());
|
|
Assert.assertEquals("Move 1 Drop count for Westford track Westford Spur 3", 0, westfordSpur3.getDropRS());
|
|
Assert.assertEquals("Move 1 Drop count for Westford track Westford Spur 4", 0, westfordSpur4.getDropRS());
|
|
Assert.assertEquals("Move 1 Drop count for Westford track Westford Interchange 5", 0,
|
|
westfordInterchange5.getDropRS());
|
|
Assert.assertEquals("Move 1 Drop count for Westford track Westford Interchange 6", 0,
|
|
westfordInterchange6.getDropRS());
|
|
Assert.assertEquals("Move 1 Drop count for Westford track Westford Interchange 7", 0,
|
|
westfordInterchange7.getDropRS());
|
|
Assert.assertEquals("Move 1 Pickup count for Westford", 0, westford.getPickupRS());
|
|
Assert.assertEquals("Move 1 Pickup count for Westford track Westford Yard 1", 0, westfordYard1.getPickupRS());
|
|
Assert.assertEquals("Move 1 Pickup count for Westford track Westford Yard 2", 0, westfordYard2.getPickupRS());
|
|
Assert.assertEquals("Move 1 Pickup count for Westford track Westford Spur 3", 0, westfordSpur3.getPickupRS());
|
|
Assert.assertEquals("Move 1 Pickup count for Westford track Westford Spur 4", 0, westfordSpur4.getPickupRS());
|
|
Assert.assertEquals("Move 1 Pickup count for Westford track Westford Interchange 5", 0,
|
|
westfordInterchange5.getPickupRS());
|
|
Assert.assertEquals("Move 1 Pickup count for Westford track Westford Interchange 6", 0,
|
|
westfordInterchange6.getPickupRS());
|
|
Assert.assertEquals("Move 1 Pickup count for Westford track Westford Interchange 7", 0,
|
|
westfordInterchange7.getPickupRS());
|
|
|
|
// Verify that an extra move will not change train status.
|
|
train1.move();
|
|
Assert.assertEquals("Train 1 After 2nd Move Status", Train.TERMINATED, getTrainStatus(train1));
|
|
Assert.assertEquals("Train 1 After 2nd Move Status", Train.CODE_TERMINATED, train1.getStatusCode());
|
|
|
|
// build the train again, now there are cars on all tracks
|
|
rl1.setMaxCarMoves(10); // try and use all 9/10 of the cars
|
|
Assert.assertTrue(train1.build());
|
|
// c1, c3, c5, c6, c8 are at interchange tracks and should not be assigned to
|
|
// train1
|
|
Assert.assertEquals("Car c1 After Build 2 should NOT be assigned to Train 1", null, c1.getTrain());
|
|
Assert.assertEquals("Car c2 After Build 2 should be assigned to Train 1", train1, c2.getTrain());
|
|
Assert.assertEquals("Car c3 After Build 2 should NOT be assigned to Train 1", null, c3.getTrain());
|
|
Assert.assertEquals("Car c4 After Build 2 should be assigned to Train 1", train1, c4.getTrain());
|
|
Assert.assertEquals("Car c5 After Build 2 should NOT be assigned to Train 1", null, c5.getTrain());
|
|
Assert.assertEquals("Car c6 After Build 2 should NOT be assigned to Train 1", null, c6.getTrain());
|
|
Assert.assertEquals("Car c7 After Build 2 should be assigned to Train 1", train1, c7.getTrain());
|
|
Assert.assertEquals("Car c8 After Build 2 should NOT be assigned to Train 1", null, c8.getTrain());
|
|
Assert.assertEquals("Car c9 After Build 2 should be assigned to Train 1", train1, c9.getTrain());
|
|
|
|
// now check to see if cars are going to be delivered to the right places?
|
|
Assert.assertEquals("Car c2 After Build 2 destination", "Westford Yard 1", c2.getDestinationTrackName());
|
|
Assert.assertEquals("Car c4 After Build 2 destination", "Westford Yard 1", c4.getDestinationTrackName());
|
|
Assert.assertEquals("Car c7 After Build 2 destination", "Westford Interchange 6", c7.getDestinationTrackName());
|
|
Assert.assertEquals("Car c9 After Build 2 destination", "Westford Yard 2", c9.getDestinationTrackName());
|
|
// move and terminate
|
|
train1.move();
|
|
Assert.assertEquals("Train 1 After 2nd build Status", Train.TERMINATED, getTrainStatus(train1));
|
|
Assert.assertEquals("Train 1 After 2nd build Status", Train.CODE_TERMINATED, train1.getStatusCode());
|
|
|
|
// are cars at the right location?
|
|
Assert.assertEquals("Car c2 After Move 2 location", "Westford Yard 1", c2.getTrackName());
|
|
Assert.assertEquals("Car c4 After Move 2 location", "Westford Yard 1", c4.getTrackName());
|
|
Assert.assertEquals("Car c7 After Move 2 location", "Westford Interchange 6", c7.getTrackName());
|
|
Assert.assertEquals("Car c9 After Move 2 location", "Westford Yard 2", c9.getTrackName());
|
|
|
|
// do cars have the right loads?
|
|
Assert.assertEquals("Car c1 After Move 2 load should be E", "E", c1.getLoadName());
|
|
Assert.assertEquals("Car c2 After Move 2 load should be L", "L", c2.getLoadName());
|
|
Assert.assertEquals("Car c3 After Move 2 load should be E", "E", c3.getLoadName());
|
|
Assert.assertEquals("Car c4 After Move 2 load should be L", "L", c4.getLoadName());
|
|
Assert.assertEquals("Car c5 After Move 2 load should be E", "E", c5.getLoadName());
|
|
Assert.assertEquals("Car c6 After Move 2 load should be E", "E", c6.getLoadName());
|
|
Assert.assertEquals("Car c7 After Move 2 load should be E", "E", c7.getLoadName());
|
|
Assert.assertEquals("Car c8 After Move 2 load should be E", "E", c8.getLoadName());
|
|
Assert.assertEquals("Car c9 After Move 2 load should be E", "E", c9.getLoadName());
|
|
|
|
// try a new route, this should allow cars to move from interchange
|
|
// Create route with only one location
|
|
Route rte2;
|
|
rte2 = routeManager.newRoute("Local Route 2");
|
|
RouteLocation rl2 = rte2.addLocation(westford);
|
|
rl2.setMaxCarMoves(8); // move 8 of the 9 cars available
|
|
// and assign the new route to train 1
|
|
train1.setRoute(rte2);
|
|
Assert.assertTrue(train1.build());
|
|
// we should be able to pickup cars at the interchange tracks
|
|
Assert.assertEquals("Car c1 After Build 3 should be assigned to Train 1", train1, c1.getTrain());
|
|
Assert.assertEquals("Car c2 After Build 3 should be assigned to Train 1", train1, c2.getTrain());
|
|
Assert.assertEquals("Car c3 After Build 3 should be assigned to Train 1", train1, c3.getTrain());
|
|
Assert.assertEquals("Car c4 After Build 3 should be assigned to Train 1", train1, c4.getTrain());
|
|
Assert.assertEquals("Car c5 After Build 3 should be assigned to Train 1", train1, c5.getTrain());
|
|
Assert.assertEquals("Car c6 After Build 3 should be assigned to Train 1", train1, c6.getTrain());
|
|
Assert.assertEquals("Car c7 After Build 3 should be assigned to Train 1", train1, c7.getTrain());
|
|
Assert.assertEquals("Car c8 After Build 3 should be assigned to Train 1", train1, c8.getTrain());
|
|
Assert.assertEquals("Car c9 After Build 3 should NOT be assigned to Train 1", null, c9.getTrain());
|
|
|
|
// now check to see if cars are going to be delivered to the right places?
|
|
Assert.assertEquals("Car c1 After Build 3 destination", "Westford Yard 1", c1.getDestinationTrackName());
|
|
Assert.assertEquals("Car c2 After Build 3 destination", "Westford Spur 3", c2.getDestinationTrackName());
|
|
Assert.assertEquals("Car c3 After Build 3 destination", "Westford Yard 1", c3.getDestinationTrackName());
|
|
Assert.assertEquals("Car c4 After Build 3 destination", "Westford Interchange 7", c4.getDestinationTrackName());
|
|
Assert.assertEquals("Car c5 After Build 3 destination", "Westford Yard 2", c5.getDestinationTrackName());
|
|
Assert.assertEquals("Car c6 After Build 3 destination", "Westford Yard 2", c6.getDestinationTrackName());
|
|
Assert.assertEquals("Car c7 After Build 3 destination", "Westford Yard 2", c7.getDestinationTrackName());
|
|
Assert.assertEquals("Car c8 After Build 3 destination", "Westford Yard 1", c8.getDestinationTrackName());
|
|
|
|
// move and terminate
|
|
train1.move();
|
|
Assert.assertEquals("Train 1 After 2nd build Status", Train.TERMINATED, getTrainStatus(train1));
|
|
Assert.assertEquals("Train 1 After 2nd build Status", Train.CODE_TERMINATED, train1.getStatusCode());
|
|
|
|
// Final check to see if cars were delivered.
|
|
Assert.assertEquals("Car c1 After Move 3 location", "Westford Yard 1", c1.getTrackName());
|
|
Assert.assertEquals("Car c2 After Move 3 location", "Westford Spur 3", c2.getTrackName());
|
|
Assert.assertEquals("Car c3 After Move 3 location", "Westford Yard 1", c3.getTrackName());
|
|
Assert.assertEquals("Car c4 After Move 3 location", "Westford Interchange 7", c4.getTrackName());
|
|
Assert.assertEquals("Car c5 After Move 3 location", "Westford Yard 2", c5.getTrackName());
|
|
Assert.assertEquals("Car c6 After Move 3 location", "Westford Yard 2", c6.getTrackName());
|
|
Assert.assertEquals("Car c7 After Move 3 location", "Westford Yard 2", c7.getTrackName());
|
|
Assert.assertEquals("Car c8 After Move 3 location", "Westford Yard 1", c8.getTrackName());
|
|
|
|
// do cars have the right loads?
|
|
Assert.assertEquals("Car c1 After Move 3 load should be E", "E", c1.getLoadName());
|
|
Assert.assertEquals("Car c2 After Move 3 load should be E", "E", c2.getLoadName());
|
|
Assert.assertEquals("Car c3 After Move 3 load should be E", "E", c3.getLoadName());
|
|
Assert.assertEquals("Car c4 After Move 3 load should be L", "L", c4.getLoadName());
|
|
Assert.assertEquals("Car c5 After Move 3 load should be E", "E", c5.getLoadName());
|
|
Assert.assertEquals("Car c6 After Move 3 load should be E", "E", c6.getLoadName());
|
|
Assert.assertEquals("Car c7 After Move 3 load should be E", "E", c7.getLoadName());
|
|
Assert.assertEquals("Car c8 After Move 3 load should be E", "E", c8.getLoadName());
|
|
Assert.assertEquals("Car c9 After Move 3 load should be E", "E", c9.getLoadName());
|
|
|
|
// check car move counts
|
|
Assert.assertEquals("Car c1 Move count", 19, c1.getMoves());
|
|
Assert.assertEquals("Car c2 Move count", 18, c2.getMoves());
|
|
Assert.assertEquals("Car c3 Move count", 2, c3.getMoves());
|
|
Assert.assertEquals("Car c4 Move count", 9, c4.getMoves());
|
|
Assert.assertEquals("Car c5 Move count", 3, c5.getMoves());
|
|
Assert.assertEquals("Car c6 Move count", 5, c6.getMoves());
|
|
Assert.assertEquals("Car c7 Move count", 20, c7.getMoves());
|
|
Assert.assertEquals("Car c8 Move count", 4, c8.getMoves());
|
|
Assert.assertEquals("Car c9 Move count", 20, c9.getMoves());
|
|
|
|
// now try and use a train with more than one location
|
|
// Create route with two locations
|
|
Route rte3;
|
|
rte3 = routeManager.newRoute("Westford to Chelmsford");
|
|
RouteLocation rl3 = rte3.addLocation(westford);
|
|
rl3.setTrainDirection(RouteLocation.WEST);
|
|
rl3.setMaxCarMoves(10);
|
|
RouteLocation rl4 = rte3.addLocation(chelmsford);
|
|
rl4.setTrainDirection(RouteLocation.WEST);
|
|
// and assign the new route to train 1
|
|
train1.setRoute(rte3);
|
|
rl4.setMaxCarMoves(10);
|
|
rl4.setTrainIconX(175); // set the train icon coordinates
|
|
rl4.setTrainIconY(50);
|
|
|
|
Assert.assertTrue(train1.build());
|
|
// should not pick up cars at Westford Spur 3, Westford Spur 4, Westford
|
|
// Interchange 5
|
|
// and Westford Interchange 7
|
|
Assert.assertEquals("Car c1 After Build 4 should be assigned to Train 1", train1, c1.getTrain());
|
|
Assert.assertEquals("Car c2 After Build 4 should NOT be assigned to Train 1", null, c2.getTrain());
|
|
Assert.assertEquals("Car c3 After Build 4 should be assigned to Train 1", train1, c3.getTrain());
|
|
Assert.assertEquals("Car c4 After Build 4 should NOT be assigned to Train 1", null, c4.getTrain());
|
|
Assert.assertEquals("Car c5 After Build 4 should be assigned to Train 1", train1, c5.getTrain());
|
|
Assert.assertEquals("Car c6 After Build 4 should be assigned to Train 1", train1, c6.getTrain());
|
|
Assert.assertEquals("Car c7 After Build 4 should be assigned to Train 1", train1, c7.getTrain());
|
|
Assert.assertEquals("Car c8 After Build 4 should be assigned to Train 1", train1, c8.getTrain());
|
|
Assert.assertEquals("Car c9 After Build 4 should be assigned to Train 1", train1, c9.getTrain());
|
|
|
|
train1.move();
|
|
// Train in route since there's two locations
|
|
Assert.assertEquals("Train 1 in route to Chelmsford", true, train1.isTrainEnRoute());
|
|
Assert.assertEquals("Train 1 in route to Chelmsford", Train.CODE_TRAIN_EN_ROUTE, train1.getStatusCode());
|
|
train1.move();
|
|
// 7 cars should in Chelmsford, the other 2 in Westford
|
|
Assert.assertEquals("Car c1 After Move 4 location", "Chelmsford Yard 1", c1.getTrackName());
|
|
Assert.assertEquals("Car c2 verify location", "Westford Spur 3", c2.getTrackName());
|
|
Assert.assertEquals("Car c3 After Move 4 location", "Chelmsford Yard 1", c3.getTrackName());
|
|
Assert.assertEquals("Car c4 verify location", "Westford Interchange 7", c4.getTrackName());
|
|
Assert.assertEquals("Car c5 After Move 4 location", "Chelmsford Yard 1", c5.getTrackName());
|
|
Assert.assertEquals("Car c6 After Move 4 location", "Chelmsford Yard 1", c6.getTrackName());
|
|
Assert.assertEquals("Car c7 After Move 4 location", "Chelmsford Yard 1", c7.getTrackName());
|
|
Assert.assertEquals("Car c8 After Move 4 location", "Chelmsford Yard 1", c8.getTrackName());
|
|
Assert.assertEquals("Car c9 After Move 4 location", "Chelmsford Yard 1", c9.getTrackName());
|
|
|
|
// do cars have the right loads?
|
|
Assert.assertEquals("Car c1 After Move 4 load should be E", "E", c1.getLoadName());
|
|
Assert.assertEquals("Car c2 After Move 4 load should be E", "E", c2.getLoadName());
|
|
Assert.assertEquals("Car c3 After Move 4 load should be E", "E", c3.getLoadName());
|
|
Assert.assertEquals("Car c4 After Move 4 load should be L", "L", c4.getLoadName());
|
|
Assert.assertEquals("Car c5 After Move 4 load should be E", "E", c5.getLoadName());
|
|
Assert.assertEquals("Car c6 After Move 4 load should be E", "E", c6.getLoadName());
|
|
Assert.assertEquals("Car c7 After Move 4 load should be E", "E", c7.getLoadName());
|
|
Assert.assertEquals("Car c8 After Move 4 load should be E", "E", c8.getLoadName());
|
|
Assert.assertEquals("Car c9 After Move 4 load should be E", "E", c9.getLoadName());
|
|
|
|
// check car move counts
|
|
Assert.assertEquals("Car c1 Move count", 20, c1.getMoves());
|
|
Assert.assertEquals("Car c2 Move count", 18, c2.getMoves());
|
|
Assert.assertEquals("Car c3 Move count", 3, c3.getMoves());
|
|
Assert.assertEquals("Car c4 Move count", 9, c4.getMoves());
|
|
Assert.assertEquals("Car c5 Move count", 4, c5.getMoves());
|
|
Assert.assertEquals("Car c6 Move count", 6, c6.getMoves());
|
|
Assert.assertEquals("Car c7 Move count", 21, c7.getMoves());
|
|
Assert.assertEquals("Car c8 Move count", 5, c8.getMoves());
|
|
Assert.assertEquals("Car c9 Move count", 21, c9.getMoves());
|
|
|
|
train1.move();
|
|
Assert.assertEquals("Train 1 After 4th build Status", Train.TERMINATED, getTrainStatus(train1));
|
|
Assert.assertEquals("Train 1 After 4th build Status", Train.CODE_TERMINATED, train1.getStatusCode());
|
|
|
|
// test spur to spur
|
|
train1.setRoute(rte1);
|
|
|
|
// bias track selection to spurs
|
|
westfordSpur3.setMoves(2);
|
|
westfordSpur4.setMoves(2);
|
|
Assert.assertTrue(train1.build());
|
|
|
|
Assert.assertTrue("local testing spur to spur", train1.isBuilt());
|
|
Assert.assertEquals("car UP 4 at interchange, destination Westford Spur 3", westfordSpur3,
|
|
c4.getDestinationTrack());
|
|
Assert.assertEquals("car CP 2 at spur, destination Westford Yard 1", westfordYard1, c2.getDestinationTrack());
|
|
|
|
// bias track selection to interchanges
|
|
westfordSpur3.setMoves(12);
|
|
westfordSpur4.setMoves(12);
|
|
westfordInterchange5.setMoves(2);
|
|
westfordInterchange6.setMoves(2);
|
|
Assert.assertTrue(train1.build());
|
|
|
|
Assert.assertTrue("local testing spur to spur", train1.isBuilt());
|
|
Assert.assertEquals("car UP 4 at interchange, destination", "Westford Yard 2", c4.getDestinationTrackName());
|
|
Assert.assertEquals("car CP 2 at spur, destination", "Westford Interchange 5", c2.getDestinationTrackName());
|
|
|
|
// set CP 2 destination, currently at Westford, Westford Spur 3
|
|
train1.reset(); // release CP2 from train so we can set the car's destination
|
|
c2.setDestination(westford, null);
|
|
westfordSpur3.setMoves(1); // bias to same track
|
|
Assert.assertTrue(train1.build());
|
|
|
|
Assert.assertTrue("local testing spur to spur", train1.isBuilt());
|
|
Assert.assertEquals("car UP 4 at interchange, destination", "Westford Spur 3", c4.getDestinationTrackName());
|
|
Assert.assertEquals("car CP 2 at spur, destination", "Westford Interchange 6", c2.getDestinationTrackName());
|
|
|
|
// CP 2 is at Westford Spur 3, set destination to be the same
|
|
train1.reset();
|
|
c2.setDestination(westford, westfordSpur3);
|
|
Assert.assertTrue(train1.build());
|
|
|
|
Assert.assertTrue("local testing spur to spur", train1.isBuilt());
|
|
Assert.assertEquals("car UP 4 at interchange, destination", "Westford Spur 3", c4.getDestinationTrackName());
|
|
Assert.assertEquals("car CP 2 at spur, destination", "Westford Spur 3", c2.getDestinationTrackName());
|
|
|
|
train1.move();
|
|
Assert.assertEquals("Train 1 terminated", Train.TERMINATED, getTrainStatus(train1));
|
|
Assert.assertEquals("Train 1 terminated", Train.CODE_TERMINATED, train1.getStatusCode());
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
|
|
/**
|
|
* tests cars with custom loads. A train with two locations, the second has
|
|
* schedules.
|
|
*/
|
|
@Test
|
|
public void testScheduleLoadsA() {
|
|
|
|
ScheduleManager smanager = InstanceManager.getDefault(ScheduleManager.class);
|
|
|
|
// create schedules
|
|
Schedule sch1 = smanager.newSchedule("Schedule 1");
|
|
ScheduleItem sch1Item1 = sch1.addItem("Boxcar");
|
|
// request a UP Boxcar
|
|
sch1Item1.setRoadName("UP");
|
|
ScheduleItem sch1Item2 = sch1.addItem("Flat Car");
|
|
// request an empty car and load it with Scrap
|
|
sch1Item2.setReceiveLoadName("E");
|
|
sch1Item2.setShipLoadName("Scrap");
|
|
ScheduleItem sch1Item3 = sch1.addItem("Gon");
|
|
// request a loaded car and load it with Tin
|
|
sch1Item3.setReceiveLoadName("L");
|
|
sch1Item3.setShipLoadName("Tin");
|
|
InstanceManager.getDefault(CarLoads.class).addName("Gon", "Tin"); // Allows c13 which is part of a kernel to get
|
|
// a new load
|
|
|
|
Schedule sch2 = smanager.newSchedule("Schedule 2");
|
|
ScheduleItem sch2Item1 = sch2.addItem("Coil Car");
|
|
sch2Item1.setCount(2);
|
|
sch2.addItem("Boxcar");
|
|
|
|
// Create locations used
|
|
Location newWestford = locationManager.newLocation("New Westford");
|
|
Location newChelmsford = locationManager.newLocation("New Chelmsford");
|
|
|
|
Track westfordYard1;
|
|
westfordYard1 = newWestford.addTrack("Westford Yard 1", Track.YARD);
|
|
westfordYard1.setTrainDirections(Track.WEST + Track.EAST);
|
|
westfordYard1.setLength(900);
|
|
|
|
Track westfordYard2;
|
|
westfordYard2 = newWestford.addTrack("Westford Yard 2", Track.YARD);
|
|
westfordYard2.setTrainDirections(Track.WEST + Track.EAST);
|
|
westfordYard2.setLength(500);
|
|
westfordYard2.deleteTypeName("Coil Car");
|
|
|
|
Track westfordExpress3;
|
|
westfordExpress3 = newWestford.addTrack("Westford Express 3", Track.SPUR);
|
|
westfordExpress3.setTrainDirections(Track.WEST + Track.EAST);
|
|
westfordExpress3.setLength(300);
|
|
westfordExpress3.deleteTypeName("Gon");
|
|
westfordExpress3.deleteTypeName("Coil Car");
|
|
|
|
Track westfordExpress4;
|
|
westfordExpress4 = newWestford.addTrack("Westford Express 4", Track.SPUR);
|
|
westfordExpress4.setTrainDirections(Track.WEST + Track.EAST);
|
|
westfordExpress4.setLength(300);
|
|
westfordExpress4.deleteTypeName("Gon");
|
|
westfordExpress4.deleteTypeName("Coil Car");
|
|
|
|
Track chelmsfordFreight1;
|
|
chelmsfordFreight1 = newChelmsford.addTrack("Chelmsford Freight 1", Track.SPUR);
|
|
chelmsfordFreight1.setTrainDirections(Track.WEST + Track.EAST);
|
|
chelmsfordFreight1.setLength(900);
|
|
chelmsfordFreight1.deleteTypeName("Coil Car");
|
|
chelmsfordFreight1.setSchedule(sch1);
|
|
chelmsfordFreight1.setScheduleMode(Track.SEQUENTIAL);
|
|
// start the schedule with 2nd item Flat Car
|
|
chelmsfordFreight1.setScheduleItemId(sch1.getItemsBySequenceList().get(1).getId());
|
|
|
|
Track chelmsfordFreight2;
|
|
chelmsfordFreight2 = newChelmsford.addTrack("Chelmsford Freight 2", Track.SPUR);
|
|
chelmsfordFreight2.setTrainDirections(Track.WEST + Track.EAST);
|
|
chelmsfordFreight2.setLength(900);
|
|
chelmsfordFreight2.deleteTypeName("Coil Car");
|
|
chelmsfordFreight2.setSchedule(sch1);
|
|
chelmsfordFreight2.setScheduleMode(Track.SEQUENTIAL);
|
|
// start the schedule with 3rd item Gon
|
|
chelmsfordFreight2.setScheduleItemId(sch1.getItemsBySequenceList().get(2).getId());
|
|
|
|
Track chelmsfordYard3;
|
|
chelmsfordYard3 = newChelmsford.addTrack("Chelmsford Yard 3", Track.YARD);
|
|
chelmsfordYard3.setTrainDirections(Track.WEST + Track.EAST);
|
|
chelmsfordYard3.setLength(900);
|
|
chelmsfordYard3.deleteTypeName("Gon");
|
|
chelmsfordYard3.deleteTypeName("Coil Car");
|
|
|
|
Track chelmsfordFreight4;
|
|
chelmsfordFreight4 = newChelmsford.addTrack("Chelmsford Freight 4", Track.SPUR);
|
|
chelmsfordFreight4.setTrainDirections(Track.WEST + Track.EAST);
|
|
chelmsfordFreight4.setLength(900);
|
|
chelmsfordFreight4.setSchedule(sch2);
|
|
chelmsfordFreight4.setScheduleMode(Track.SEQUENTIAL);
|
|
|
|
// Create route with 2 location
|
|
Route rte1;
|
|
rte1 = routeManager.newRoute("Two Location Route");
|
|
RouteLocation rl1 = rte1.addLocation(newWestford);
|
|
rl1.setTrainDirection(RouteLocation.EAST);
|
|
rl1.setMaxCarMoves(12);
|
|
|
|
RouteLocation rl2 = rte1.addLocation(newChelmsford);
|
|
rl2.setTrainDirection(RouteLocation.EAST);
|
|
rl2.setMaxCarMoves(12);
|
|
|
|
// Create train
|
|
Train train1;
|
|
train1 = trainManager.newTrain("NWNC");
|
|
train1.setRoute(rte1);
|
|
|
|
// Set up 13 cars
|
|
|
|
Car c1 = JUnitOperationsUtil.createAndPlaceCar("BM", "S1", "Gon", "90", westfordYard1, 13);
|
|
c1.setLoadName("L");
|
|
|
|
Car c2 = JUnitOperationsUtil.createAndPlaceCar("UP", "2", "Boxcar", "80", westfordYard1, 12);
|
|
Car c3 = JUnitOperationsUtil.createAndPlaceCar("XP", "S3", "Flat Car", "70", westfordYard1, 0);
|
|
c3.setLoadName("L");
|
|
c3.setDestination(newChelmsford, null); // force this car to Chelmsford
|
|
|
|
Car c4 = JUnitOperationsUtil.createAndPlaceCar("PU", "S4", "Boxcar", "60", westfordYard1, 10);
|
|
Car c5 = JUnitOperationsUtil.createAndPlaceCar("UP", "S5", "Gon", "50", westfordYard2, 9);
|
|
c5.setLoadName("L");
|
|
|
|
Car c6 = JUnitOperationsUtil.createAndPlaceCar("CP", "S6", "Boxcar", "40", westfordYard2, 8);
|
|
c6.setLoadName("L");
|
|
|
|
Car c7 = JUnitOperationsUtil.createAndPlaceCar("UP", "S7", "Boxcar", "50", westfordYard2, 7);
|
|
Car c8 = JUnitOperationsUtil.createAndPlaceCar("XP", "S8", "Gon", "60", westfordYard2, 6);
|
|
Car c9 = JUnitOperationsUtil.createAndPlaceCar("XP", "S9", "Flat Car", "90", westfordYard2, 5);
|
|
Car c10 = JUnitOperationsUtil.createAndPlaceCar("CP", "S10", "Coil Car", "40", westfordYard1, 2);
|
|
c10.setLoadName("L");
|
|
|
|
Car c11 = JUnitOperationsUtil.createAndPlaceCar("CP", "S11", "Coil Car", "40", westfordYard1, 3);
|
|
c11.setLoadName("Coils");
|
|
|
|
Car c12 = JUnitOperationsUtil.createAndPlaceCar("CP", "S12", "Coil Car", "40", westfordYard1, 4);
|
|
Car c13 = JUnitOperationsUtil.createAndPlaceCar("UP", "S13", "Gon", "50", westfordYard2, 1);
|
|
c13.setLoadName("L");
|
|
|
|
// place two cars in a kernel
|
|
Kernel k1 = InstanceManager.getDefault(KernelManager.class).newKernel("TwoCars");
|
|
c5.setKernel(k1);
|
|
c13.setKernel(k1);
|
|
|
|
Assert.assertTrue(train1.build());
|
|
|
|
// Schedule sch1 should cause c2 to be delivered to Chelmsford Freight 2
|
|
Assert.assertEquals("c2 destination", "Chelmsford Freight 2", c2.getDestinationTrackName());
|
|
// Schedule sch1 and sch2 should reject c3, to be delivered to Chelmsford Yard 3
|
|
Assert.assertEquals("c3 destination", "Chelmsford Yard 3", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination", "Chelmsford Yard 3", c4.getDestinationTrackName());
|
|
// Schedule sch1 should cause c5 & c13 to be delivered to Chelmsford Freight 2
|
|
Assert.assertEquals("c5 destination", "Chelmsford Freight 2", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination", "Chelmsford Yard 3", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination", "Chelmsford Freight 4", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c9 destination", "Chelmsford Freight 1", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination", "Chelmsford Freight 4", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination", "Chelmsford Freight 4", c11.getDestinationTrackName());
|
|
// C13 is part of kernel
|
|
Assert.assertEquals("c13 destination", "Chelmsford Freight 2", c13.getDestinationTrackName());
|
|
|
|
// move and terminate train
|
|
train1.move();
|
|
train1.move();
|
|
train1.move();
|
|
|
|
Assert.assertEquals("c1 track", "Chelmsford Freight 1", c1.getTrackName());
|
|
Assert.assertEquals("c1 load", "Tin", c1.getLoadName());
|
|
Assert.assertEquals("c2 track", "Chelmsford Freight 2", c2.getTrackName());
|
|
Assert.assertEquals("c2 load", "L", c2.getLoadName());
|
|
Assert.assertEquals("c3 track", "Chelmsford Yard 3", c3.getTrackName());
|
|
Assert.assertEquals("c3 load", "L", c3.getLoadName());
|
|
Assert.assertEquals("c4 track", "Chelmsford Yard 3", c4.getTrackName());
|
|
Assert.assertEquals("c4 load", "E", c4.getLoadName());
|
|
Assert.assertEquals("c5 track", "Chelmsford Freight 2", c5.getTrackName());
|
|
Assert.assertEquals("c5 load", "Tin", c5.getLoadName());
|
|
Assert.assertEquals("c6 track", "Chelmsford Yard 3", c6.getTrackName());
|
|
Assert.assertEquals("c6 load", "L", c6.getLoadName());
|
|
Assert.assertEquals("c7 track", "Chelmsford Freight 4", c7.getTrackName());
|
|
Assert.assertEquals("c7 load", "L", c7.getLoadName());
|
|
Assert.assertEquals("c8 track", "Westford Yard 2", c8.getTrackName());
|
|
Assert.assertEquals("c8 load", "E", c8.getLoadName());
|
|
Assert.assertEquals("c9 track", "Chelmsford Freight 1", c9.getTrackName());
|
|
Assert.assertEquals("c9 load", "Scrap", c9.getLoadName());
|
|
Assert.assertEquals("c10 track", "Chelmsford Freight 4", c10.getTrackName());
|
|
Assert.assertEquals("c10 load", "E", c10.getLoadName());
|
|
Assert.assertEquals("c11 track", "Chelmsford Freight 4", c11.getTrackName());
|
|
Assert.assertEquals("c11 load", "E", c11.getLoadName());
|
|
Assert.assertEquals("c12 track", "Westford Yard 1", c12.getTrackName());
|
|
Assert.assertEquals("c12 load", "E", c12.getLoadName());
|
|
Assert.assertEquals("c13 track", "Chelmsford Freight 2", c13.getTrackName());
|
|
Assert.assertEquals("c13 load", "Tin", c13.getLoadName());
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
|
|
/**
|
|
* tests cars with custom loads. train to staging, staging removes custom
|
|
* loads.
|
|
*/
|
|
@Test
|
|
public void testScheduleLoadsB() {
|
|
|
|
// Create locations used
|
|
Location newChelmsford = locationManager.newLocation("New Chelmsford");
|
|
Location newBedford = locationManager.newLocation("New Bedford");
|
|
|
|
Track chelmsfordFreight1;
|
|
chelmsfordFreight1 = newChelmsford.addTrack("Chelmsford Freight 1", Track.SPUR);
|
|
chelmsfordFreight1.setLength(900);
|
|
|
|
Track chelmsfordFreight2;
|
|
chelmsfordFreight2 = newChelmsford.addTrack("Chelmsford Freight 2", Track.SPUR);
|
|
chelmsfordFreight2.setLength(900);
|
|
|
|
Track chelmsfordYard3;
|
|
chelmsfordYard3 = newChelmsford.addTrack("Chelmsford Yard 3", Track.YARD);
|
|
chelmsfordYard3.setLength(900);
|
|
|
|
Track chelmsfordFreight4;
|
|
chelmsfordFreight4 = newChelmsford.addTrack("Chelmsford Freight 4", Track.SPUR);
|
|
chelmsfordFreight4.setLength(900);
|
|
|
|
Track bedfordYard1;
|
|
bedfordYard1 = newBedford.addTrack("Bedford Yard 1", Track.STAGING);
|
|
bedfordYard1.setLength(900);
|
|
bedfordYard1.setRemoveCustomLoadsEnabled(true);
|
|
|
|
// Set up 13 cars
|
|
Car c1 = JUnitOperationsUtil.createAndPlaceCar("BM", "S1", "Gon", "90", chelmsfordFreight1, 13);
|
|
c1.setLoadName("Tin");
|
|
Car c2 = JUnitOperationsUtil.createAndPlaceCar("UP", "2", "Boxcar", "80", chelmsfordFreight2, 12);
|
|
c2.setLoadName("L");
|
|
Car c3 = JUnitOperationsUtil.createAndPlaceCar("XP", "S3", "Flat Car", "70", chelmsfordYard3, 0);
|
|
c3.setLoadName("L");
|
|
Car c4 = JUnitOperationsUtil.createAndPlaceCar("PU", "S4", "Boxcar", "60", chelmsfordYard3, 10);
|
|
Car c5 = JUnitOperationsUtil.createAndPlaceCar("UP", "S5", "Gon", "50", chelmsfordFreight2, 9);
|
|
c5.setLoadName("Tin");
|
|
Car c6 = JUnitOperationsUtil.createAndPlaceCar("CP", "S6", "Boxcar", "40", chelmsfordYard3, 8);
|
|
c6.setLoadName("L");
|
|
Car c7 = JUnitOperationsUtil.createAndPlaceCar("UP", "S7", "Boxcar", "50", chelmsfordFreight4, 7);
|
|
c7.setLoadName("L");
|
|
|
|
Car c9 = JUnitOperationsUtil.createAndPlaceCar("XP", "S9", "Flat Car", "90", chelmsfordFreight1, 5);
|
|
c9.setLoadName("Scrap");
|
|
Car c10 = JUnitOperationsUtil.createAndPlaceCar("CP", "S10", "Coil Car", "40", chelmsfordFreight4, 2);
|
|
c10.setLoadName("E");
|
|
Car c11 = JUnitOperationsUtil.createAndPlaceCar("CP", "S11", "Coil Car", "40", chelmsfordFreight4, 3);
|
|
c11.setLoadName("E");
|
|
|
|
Car c13 = JUnitOperationsUtil.createAndPlaceCar("UP", "S13", "Gon", "50", chelmsfordFreight2, 1);
|
|
c13.setLoadName("Tin");
|
|
|
|
// place two cars in a kernel
|
|
Kernel k1 = InstanceManager.getDefault(KernelManager.class).newKernel("TwoCars");
|
|
c5.setKernel(k1);
|
|
c13.setKernel(k1);
|
|
|
|
// create a route to staging to test remove custom loads
|
|
// Create route with 2 location
|
|
Route rte2;
|
|
rte2 = routeManager.newRoute("Chelmsford to Staging");
|
|
RouteLocation r2rl1 = rte2.addLocation(newChelmsford);
|
|
r2rl1.setTrainDirection(RouteLocation.EAST);
|
|
r2rl1.setMaxCarMoves(12);
|
|
RouteLocation r2rl3 = rte2.addLocation(newBedford);
|
|
r2rl3.setTrainDirection(RouteLocation.EAST);
|
|
r2rl3.setMaxCarMoves(12);
|
|
|
|
// Create train
|
|
Train train1 = trainManager.newTrain("Chelmsford to Bedford");
|
|
train1.setRoute(rte2);
|
|
Assert.assertTrue(train1.build());
|
|
|
|
// move and terminate train
|
|
train1.move();
|
|
train1.move();
|
|
train1.move();
|
|
|
|
Assert.assertEquals("c1 track to staging", "Bedford Yard 1", c1.getTrackName());
|
|
Assert.assertEquals("c1 load to staging", "E", c1.getLoadName());
|
|
Assert.assertEquals("c2 track to staging", "Bedford Yard 1", c2.getTrackName());
|
|
Assert.assertEquals("c2 load to staging", "L", c2.getLoadName());
|
|
Assert.assertEquals("c3 track to staging", "Bedford Yard 1", c3.getTrackName());
|
|
Assert.assertEquals("c3 load to staging", "L", c3.getLoadName());
|
|
Assert.assertEquals("c4 track to staging", "Bedford Yard 1", c4.getTrackName());
|
|
Assert.assertEquals("c4 load to staging", "E", c4.getLoadName());
|
|
Assert.assertEquals("c5 track to staging", "Bedford Yard 1", c5.getTrackName());
|
|
Assert.assertEquals("c5 load to staging", "E", c5.getLoadName());
|
|
Assert.assertEquals("c6 track to staging", "Bedford Yard 1", c6.getTrackName());
|
|
Assert.assertEquals("c6 load to staging", "L", c6.getLoadName());
|
|
Assert.assertEquals("c7 track to staging", "Bedford Yard 1", c7.getTrackName());
|
|
Assert.assertEquals("c7 load to staging", "L", c7.getLoadName());
|
|
|
|
Assert.assertEquals("c9 track to staging", "Bedford Yard 1", c9.getTrackName());
|
|
Assert.assertEquals("c9 load to staging", "E", c9.getLoadName());
|
|
Assert.assertEquals("c10 track to staging", "Bedford Yard 1", c10.getTrackName());
|
|
Assert.assertEquals("c10 load to staging", "E", c10.getLoadName());
|
|
Assert.assertEquals("c11 track to staging", "Bedford Yard 1", c11.getTrackName());
|
|
Assert.assertEquals("c11 load to staging", "E", c11.getLoadName());
|
|
|
|
Assert.assertEquals("c13 track to staging", "Bedford Yard 1", c13.getTrackName());
|
|
Assert.assertEquals("c13 load to staging", "E", c13.getLoadName());
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
|
|
/**
|
|
* tests cars with custom loads. Train out of staging should generate custom
|
|
* loads.
|
|
*/
|
|
@Test
|
|
public void testScheduleLoadsC() {
|
|
|
|
ScheduleManager smanager = InstanceManager.getDefault(ScheduleManager.class);
|
|
|
|
// create schedules
|
|
Schedule sch1 = smanager.newSchedule("Schedule 1");
|
|
ScheduleItem sch1Item1 = sch1.addItem("Boxcar");
|
|
// request a UP Boxcar
|
|
sch1Item1.setRoadName("UP");
|
|
sch1Item1.setReceiveLoadName("Metal 1");
|
|
|
|
ScheduleItem sch1Item2 = sch1.addItem("Flat Car");
|
|
// request an empty car and load it with Scrap
|
|
sch1Item2.setReceiveLoadName("Metal 2");
|
|
sch1Item2.setShipLoadName("Scrap");
|
|
|
|
ScheduleItem sch1Item3 = sch1.addItem("Gon");
|
|
// request a loaded car and load it with Tin
|
|
sch1Item3.setReceiveLoadName("Metal 3");
|
|
sch1Item3.setShipLoadName("Tin");
|
|
|
|
InstanceManager.getDefault(CarLoads.class).addName("Boxcar", "Metal 1");
|
|
InstanceManager.getDefault(CarLoads.class).addName("Flat Car", "Metal 2");
|
|
InstanceManager.getDefault(CarLoads.class).addName("Gon", "Metal 3");
|
|
InstanceManager.getDefault(CarLoads.class).addName("Gon", "Tin");
|
|
|
|
Schedule sch2 = smanager.newSchedule("Schedule 2");
|
|
ScheduleItem sch2Item1 = sch2.addItem("Coil Car");
|
|
sch2Item1.setCount(2);
|
|
sch2.addItem("Boxcar");
|
|
|
|
// Create locations used
|
|
Location newWestford = locationManager.newLocation("New Westford");
|
|
Location newChelmsford = locationManager.newLocation("New Chelmsford");
|
|
Location newBedford = locationManager.newLocation("New Bedford");
|
|
|
|
Track westfordYard1;
|
|
westfordYard1 = newWestford.addTrack("Westford Yard 1", Track.YARD);
|
|
westfordYard1.setTrainDirections(Track.WEST + Track.EAST);
|
|
westfordYard1.setLength(900);
|
|
|
|
Track westfordYard2;
|
|
westfordYard2 = newWestford.addTrack("Westford Yard 2", Track.YARD);
|
|
westfordYard2.setTrainDirections(Track.WEST + Track.EAST);
|
|
westfordYard2.setLength(500);
|
|
westfordYard2.deleteTypeName("Coil Car");
|
|
|
|
Track westfordExpress3;
|
|
westfordExpress3 = newWestford.addTrack("Westford Express 3", Track.SPUR);
|
|
westfordExpress3.setTrainDirections(Track.WEST + Track.EAST);
|
|
westfordExpress3.setLength(300);
|
|
westfordExpress3.deleteTypeName("Gon");
|
|
westfordExpress3.deleteTypeName("Coil Car");
|
|
|
|
Track westfordExpress4;
|
|
westfordExpress4 = newWestford.addTrack("Westford Express 4", Track.SPUR);
|
|
westfordExpress4.setTrainDirections(Track.WEST + Track.EAST);
|
|
westfordExpress4.setLength(300);
|
|
westfordExpress4.deleteTypeName("Gon");
|
|
westfordExpress4.deleteTypeName("Coil Car");
|
|
|
|
Track chelmsfordFreight1;
|
|
chelmsfordFreight1 = newChelmsford.addTrack("Chelmsford Freight 1", Track.SPUR);
|
|
chelmsfordFreight1.setTrainDirections(Track.WEST + Track.EAST);
|
|
chelmsfordFreight1.setLength(900);
|
|
chelmsfordFreight1.deleteTypeName("Coil Car");
|
|
chelmsfordFreight1.setSchedule(sch1);
|
|
chelmsfordFreight1.setScheduleMode(Track.SEQUENTIAL);
|
|
// start the schedule with 2nd item Flat Car
|
|
chelmsfordFreight1.setScheduleItemId(sch1.getItemsBySequenceList().get(1).getId());
|
|
|
|
Track chelmsfordFreight2;
|
|
chelmsfordFreight2 = newChelmsford.addTrack("Chelmsford Freight 2", Track.SPUR);
|
|
chelmsfordFreight2.setTrainDirections(Track.WEST + Track.EAST);
|
|
chelmsfordFreight2.setLength(900);
|
|
chelmsfordFreight2.deleteTypeName("Coil Car");
|
|
chelmsfordFreight2.setSchedule(sch1);
|
|
chelmsfordFreight2.setScheduleMode(Track.SEQUENTIAL);
|
|
// start the schedule with 3rd item Gon
|
|
chelmsfordFreight2.setScheduleItemId(sch1.getItemsBySequenceList().get(2).getId());
|
|
|
|
Track chelmsfordYard3;
|
|
chelmsfordYard3 = newChelmsford.addTrack("Chelmsford Yard 3", Track.YARD);
|
|
chelmsfordYard3.setTrainDirections(Track.WEST + Track.EAST);
|
|
chelmsfordYard3.setLength(900);
|
|
chelmsfordYard3.deleteTypeName("Gon");
|
|
chelmsfordYard3.deleteTypeName("Coil Car");
|
|
|
|
Track chelmsfordFreight4;
|
|
chelmsfordFreight4 = newChelmsford.addTrack("Chelmsford Freight 4", Track.SPUR);
|
|
chelmsfordFreight4.setTrainDirections(Track.WEST + Track.EAST);
|
|
chelmsfordFreight4.setLength(900);
|
|
chelmsfordFreight4.setSchedule(sch2);
|
|
chelmsfordFreight4.setScheduleMode(Track.SEQUENTIAL);
|
|
|
|
Track bedfordYard1;
|
|
bedfordYard1 = newBedford.addTrack("Bedford Yard 1", Track.STAGING);
|
|
bedfordYard1.setTrainDirections(Track.WEST + Track.EAST);
|
|
bedfordYard1.setLength(900);
|
|
bedfordYard1.setRemoveCustomLoadsEnabled(true);
|
|
|
|
// create a route from staging to test generate schedule load
|
|
// Create route with 3 locations
|
|
Route rte3;
|
|
rte3 = routeManager.newRoute("Staging to Westford");
|
|
RouteLocation r3rl1 = rte3.addLocation(newBedford);
|
|
r3rl1.setTrainDirection(RouteLocation.EAST);
|
|
r3rl1.setMaxCarMoves(11); // there are 11 cars departing staging
|
|
RouteLocation r3rl2 = rte3.addLocation(newChelmsford);
|
|
r3rl2.setTrainDirection(RouteLocation.EAST);
|
|
r3rl2.setMaxCarMoves(12);
|
|
RouteLocation r3rl3 = rte3.addLocation(newWestford);
|
|
r3rl3.setTrainDirection(RouteLocation.EAST);
|
|
r3rl3.setMaxCarMoves(12);
|
|
|
|
// Create train
|
|
Train train1;
|
|
train1 = trainManager.newTrain("BCW");
|
|
train1.setRoute(rte3);
|
|
|
|
// Set up 13 cars
|
|
Car c1 = JUnitOperationsUtil.createAndPlaceCar("BM", "S1", "Gon", "90", bedfordYard1, 13);
|
|
c1.setLoadName("E");
|
|
Car c2 = JUnitOperationsUtil.createAndPlaceCar("UP", "2", "Boxcar", "80", bedfordYard1, 12);
|
|
c2.setLoadName("L");
|
|
Car c3 = JUnitOperationsUtil.createAndPlaceCar("XP", "S3", "Flat Car", "70", bedfordYard1, 0);
|
|
c3.setLoadName("L");
|
|
Car c4 = JUnitOperationsUtil.createAndPlaceCar("PU", "S4", "Boxcar", "60", bedfordYard1, 10);
|
|
Car c5 = JUnitOperationsUtil.createAndPlaceCar("UP", "S5", "Gon", "50", bedfordYard1, 9);
|
|
c5.setLoadName("E");
|
|
Car c6 = JUnitOperationsUtil.createAndPlaceCar("CP", "S6", "Boxcar", "40", bedfordYard1, 8);
|
|
c6.setLoadName("L");
|
|
Car c7 = JUnitOperationsUtil.createAndPlaceCar("UP", "S7", "Boxcar", "50", bedfordYard1, 7);
|
|
c7.setLoadName("L");
|
|
Car c8 = JUnitOperationsUtil.createAndPlaceCar("XP", "S8", "Gon", "60", westfordYard2, 6);
|
|
Car c9 = JUnitOperationsUtil.createAndPlaceCar("XP", "S9", "Flat Car", "90", bedfordYard1, 5);
|
|
Car c10 = JUnitOperationsUtil.createAndPlaceCar("CP", "S10", "Coil Car", "40", bedfordYard1, 2);
|
|
c10.setLoadName("E");
|
|
Car c11 = JUnitOperationsUtil.createAndPlaceCar("CP", "S11", "Coil Car", "40", bedfordYard1, 3);
|
|
c11.setLoadName("E");
|
|
Car c12 = JUnitOperationsUtil.createAndPlaceCar("CP", "S12", "Coil Car", "40", westfordYard1, 4);
|
|
Car c13 = JUnitOperationsUtil.createAndPlaceCar("UP", "S13", "Gon", "50", bedfordYard1, 1);
|
|
c13.setLoadName("E");
|
|
|
|
// place two cars in a kernel
|
|
Kernel k1 = InstanceManager.getDefault(KernelManager.class).newKernel("TwoCars");
|
|
c5.setKernel(k1);
|
|
c13.setKernel(k1);
|
|
|
|
Assert.assertEquals("c1 track to staging", "Bedford Yard 1", c1.getTrackName());
|
|
Assert.assertEquals("c1 load to staging", "E", c1.getLoadName());
|
|
Assert.assertEquals("c2 track to staging", "Bedford Yard 1", c2.getTrackName());
|
|
Assert.assertEquals("c2 load to staging", "L", c2.getLoadName());
|
|
Assert.assertEquals("c3 track to staging", "Bedford Yard 1", c3.getTrackName());
|
|
Assert.assertEquals("c3 load to staging", "L", c3.getLoadName());
|
|
Assert.assertEquals("c4 track to staging", "Bedford Yard 1", c4.getTrackName());
|
|
Assert.assertEquals("c4 load to staging", "E", c4.getLoadName());
|
|
Assert.assertEquals("c5 track to staging", "Bedford Yard 1", c5.getTrackName());
|
|
Assert.assertEquals("c5 load to staging", "E", c5.getLoadName());
|
|
Assert.assertEquals("c6 track to staging", "Bedford Yard 1", c6.getTrackName());
|
|
Assert.assertEquals("c6 load to staging", "L", c6.getLoadName());
|
|
Assert.assertEquals("c7 track to staging", "Bedford Yard 1", c7.getTrackName());
|
|
Assert.assertEquals("c7 load to staging", "L", c7.getLoadName());
|
|
Assert.assertEquals("c8 track to staging", "Westford Yard 2", c8.getTrackName());
|
|
Assert.assertEquals("c8 load to staging", "E", c8.getLoadName());
|
|
Assert.assertEquals("c9 track to staging", "Bedford Yard 1", c9.getTrackName());
|
|
Assert.assertEquals("c9 load to staging", "E", c9.getLoadName());
|
|
Assert.assertEquals("c10 track to staging", "Bedford Yard 1", c10.getTrackName());
|
|
Assert.assertEquals("c10 load to staging", "E", c10.getLoadName());
|
|
Assert.assertEquals("c11 track to staging", "Bedford Yard 1", c11.getTrackName());
|
|
Assert.assertEquals("c11 load to staging", "E", c11.getLoadName());
|
|
Assert.assertEquals("c12 track to staging", "Westford Yard 1", c12.getTrackName());
|
|
Assert.assertEquals("c12 load to staging", "E", c12.getLoadName());
|
|
Assert.assertEquals("c13 track to staging", "Bedford Yard 1", c13.getTrackName());
|
|
Assert.assertEquals("c13 load to staging", "E", c13.getLoadName());
|
|
|
|
bedfordYard1.setAddCustomLoadsAnySpurEnabled(true); // generate schedule loads
|
|
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train Bedford Chelmsford Westford build status", true, train1.isBuilt());
|
|
|
|
Assert.assertEquals("c1 load from staging", "Metal 3", c1.getLoadName());
|
|
Assert.assertEquals("c2 load from staging", "L", c2.getLoadName());
|
|
Assert.assertEquals("c3 load from staging", "L", c3.getLoadName());
|
|
Assert.assertEquals("c4 load from staging", "E", c4.getLoadName());
|
|
Assert.assertEquals("c5 load from staging", "Metal 3", c5.getLoadName());
|
|
Assert.assertEquals("c6 load from staging", "L", c6.getLoadName());
|
|
Assert.assertEquals("c7 load from staging", "L", c7.getLoadName());
|
|
Assert.assertEquals("c8 load from staging", "E", c8.getLoadName());
|
|
Assert.assertEquals("c9 load from staging", "Metal 2", c9.getLoadName());
|
|
Assert.assertEquals("c10 load from staging", "E", c10.getLoadName());
|
|
Assert.assertEquals("c11 load from staging", "E", c11.getLoadName());
|
|
Assert.assertEquals("c13 load from staging", "Metal 3", c13.getLoadName());
|
|
|
|
// move and terminate train
|
|
train1.move();
|
|
train1.move();
|
|
train1.move();
|
|
train1.move();
|
|
|
|
Assert.assertEquals("c1 track from staging terminated", "Chelmsford Freight 1", c1.getTrackName());
|
|
Assert.assertEquals("c1 load from staging terminated", "Tin", c1.getLoadName());
|
|
Assert.assertEquals("c2 track from staging terminated", "Westford Yard 2", c2.getTrackName());
|
|
Assert.assertEquals("c2 load from staging terminated", "L", c2.getLoadName());
|
|
Assert.assertEquals("c3 track from staging terminated", "Westford Yard 1", c3.getTrackName());
|
|
Assert.assertEquals("c3 load from staging terminated", "L", c3.getLoadName());
|
|
Assert.assertEquals("c4 track from staging terminated", "Westford Express 4", c4.getTrackName());
|
|
Assert.assertEquals("c4 load from staging terminated", "L", c4.getLoadName());
|
|
Assert.assertEquals("c5 track from staging terminated", "Chelmsford Freight 2", c5.getTrackName());
|
|
Assert.assertEquals("c5 load from staging terminated", "Tin", c5.getLoadName());
|
|
Assert.assertEquals("c6 track from staging terminated", "Westford Express 3", c6.getTrackName());
|
|
Assert.assertEquals("c6 load from staging terminated", "E", c6.getLoadName());
|
|
Assert.assertEquals("c7 track from staging terminated", "Westford Yard 2", c7.getTrackName());
|
|
Assert.assertEquals("c7 load from staging terminated", "L", c7.getLoadName());
|
|
Assert.assertEquals("c8 track from staging terminated", "Westford Yard 2", c8.getTrackName());
|
|
Assert.assertEquals("c8 load from staging terminated", "E", c8.getLoadName());
|
|
Assert.assertEquals("c9 track from staging terminated", "Chelmsford Freight 1", c9.getTrackName());
|
|
Assert.assertEquals("c9 load from staging terminated", "Scrap", c9.getLoadName());
|
|
Assert.assertEquals("c10 track from staging terminated", "Chelmsford Freight 4", c10.getTrackName());
|
|
Assert.assertEquals("c10 load from staging terminated", "L", c10.getLoadName());
|
|
Assert.assertEquals("c11 track from staging terminated", "Westford Yard 1", c11.getTrackName());
|
|
Assert.assertEquals("c11 load from staging terminated", "E", c11.getLoadName());
|
|
Assert.assertEquals("c12 track from staging terminated", "Westford Yard 1", c12.getTrackName());
|
|
Assert.assertEquals("c12 load from staging terminated", "E", c12.getLoadName());
|
|
Assert.assertEquals("c13 track from staging terminated", "Chelmsford Freight 2", c13.getTrackName());
|
|
Assert.assertEquals("c13 load from staging terminated", "Tin", c13.getLoadName());
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
|
|
@Test
|
|
public void testInterchange() {
|
|
|
|
Setup.setMaxTrainLength(500);
|
|
|
|
ct.addName("XCaboose");
|
|
|
|
// confirm no locations
|
|
Assert.assertEquals("number of locations", 0, locationManager.getNumberOfLocations());
|
|
// Create locations used
|
|
Location loc1 = locationManager.newLocation("Old Westford");
|
|
Location loc2 = locationManager.newLocation("Old Chelmsford");
|
|
Location loc3 = locationManager.newLocation("Old Bedford");
|
|
|
|
Track loc1trk1;
|
|
loc1trk1 = loc1.addTrack("Westford Yard 1", Track.YARD);
|
|
loc1trk1.setTrainDirections(Track.WEST + Track.EAST);
|
|
loc1trk1.setLength(900);
|
|
|
|
Track loc1trk2;
|
|
loc1trk2 = loc1.addTrack("Westford Yard 2", Track.YARD);
|
|
loc1trk2.setTrainDirections(Track.WEST + Track.EAST);
|
|
loc1trk2.setLength(500);
|
|
loc1trk2.deleteTypeName("Coil Car");
|
|
loc1trk2.deleteTypeName("XCaboose");
|
|
|
|
Track loc2trk1;
|
|
loc2trk1 = loc2.addTrack("Chelmsford Interchange 1", Track.INTERCHANGE);
|
|
loc2trk1.setTrainDirections(Track.WEST + Track.EAST);
|
|
loc2trk1.setLength(900);
|
|
loc2trk1.deleteTypeName("Coil Car");
|
|
loc2trk1.deleteTypeName("XCaboose");
|
|
|
|
Track loc2trk2;
|
|
loc2trk2 = loc2.addTrack("Chelmsford Interchange 2", Track.INTERCHANGE);
|
|
loc2trk2.setTrainDirections(Track.WEST + Track.EAST);
|
|
loc2trk2.setLength(900);
|
|
loc2trk2.deleteTypeName("XCaboose");
|
|
|
|
Track loc2trk3;
|
|
loc2trk3 = loc2.addTrack("Chelmsford Yard 3", Track.YARD);
|
|
loc2trk3.setTrainDirections(Track.WEST + Track.EAST);
|
|
loc2trk3.setLength(900);
|
|
loc2trk3.deleteTypeName("Gon");
|
|
loc2trk3.deleteTypeName("Coil Car");
|
|
loc2trk3.deleteTypeName("XCaboose");
|
|
|
|
Track loc2trk4;
|
|
loc2trk4 = loc2.addTrack("Chelmsford Freight 4", Track.SPUR);
|
|
loc2trk4.setTrainDirections(Track.WEST + Track.EAST);
|
|
loc2trk4.setLength(900);
|
|
loc2trk4.deleteTypeName("Gon");
|
|
loc2trk4.deleteTypeName("XCaboose");
|
|
|
|
loc2trk3.setMoves(20); // bias interchange tracks
|
|
loc2trk4.setMoves(20);
|
|
|
|
Track loc3trk1;
|
|
loc3trk1 = loc3.addTrack("Bedford Yard 1", Track.YARD);
|
|
loc3trk1.setTrainDirections(Track.WEST + Track.EAST);
|
|
loc3trk1.setLength(900);
|
|
|
|
// Create route with 3 location
|
|
Route rte1;
|
|
rte1 = routeManager.newRoute("Route 1 East");
|
|
RouteLocation r1l1 = rte1.addLocation(loc1);
|
|
r1l1.setTrainDirection(RouteLocation.EAST);
|
|
r1l1.setMaxCarMoves(4);
|
|
r1l1.setTrainIconX(125); // set the train icon coordinates
|
|
r1l1.setTrainIconY(100);
|
|
RouteLocation r1l2 = rte1.addLocation(loc2);
|
|
r1l2.setTrainDirection(RouteLocation.EAST);
|
|
r1l2.setMaxCarMoves(3);
|
|
r1l2.setTrainIconX(25); // set the train icon coordinates
|
|
r1l2.setTrainIconY(125);
|
|
RouteLocation r1l3 = rte1.addLocation(loc3);
|
|
r1l3.setTrainDirection(RouteLocation.EAST);
|
|
r1l3.setMaxCarMoves(3);
|
|
r1l3.setTrainIconX(75); // set the train icon coordinates
|
|
r1l3.setTrainIconY(125);
|
|
|
|
// Create route with 3 location
|
|
Route rte2;
|
|
rte2 = routeManager.newRoute("Route 2 East");
|
|
RouteLocation r2l1 = rte2.addLocation(loc1);
|
|
r2l1.setTrainDirection(RouteLocation.EAST);
|
|
r2l1.setMaxCarMoves(2);
|
|
r2l1.setTrainIconX(125); // set the train icon coordinates
|
|
r2l1.setTrainIconY(125);
|
|
RouteLocation r2l2 = rte2.addLocation(loc2);
|
|
r2l2.setTrainDirection(RouteLocation.EAST);
|
|
r2l2.setMaxCarMoves(6);
|
|
r2l2.setTrainIconX(175); // set the train icon coordinates
|
|
r2l2.setTrainIconY(125);
|
|
RouteLocation r2l3 = rte2.addLocation(loc3);
|
|
r2l3.setTrainDirection(RouteLocation.EAST);
|
|
r2l3.setMaxCarMoves(6);
|
|
r2l3.setTrainIconX(25); // set the train icon coordinates
|
|
r2l3.setTrainIconY(150);
|
|
|
|
// Create trains
|
|
Train train1;
|
|
train1 = trainManager.newTrain("TT1OWOB");
|
|
train1.setRoute(rte1);
|
|
|
|
Train train2;
|
|
train2 = trainManager.newTrain("TT2OWOB");
|
|
train2.setRoute(rte1);
|
|
|
|
Train train3;
|
|
train3 = trainManager.newTrain("TT3OWOB");
|
|
train3.setRoute(rte1);
|
|
|
|
// Set up 7 box cars and 2 flat cars
|
|
Car c1 = JUnitOperationsUtil.createAndPlaceCar("BM", "Q1", "Gon", "90", loc1trk1, 20);
|
|
c1.setLoadName("L");
|
|
c1.setWeightTons("10");
|
|
|
|
Car c2 = JUnitOperationsUtil.createAndPlaceCar("UP", "Q2", "Boxcar", "80", loc1trk1, 18);
|
|
c2.setWeightTons("20");
|
|
|
|
Car c3 = JUnitOperationsUtil.createAndPlaceCar("XP", "Q3", "Flat Car", "70", loc1trk1, 17);
|
|
c3.setWeightTons("30");
|
|
|
|
Car c4 = JUnitOperationsUtil.createAndPlaceCar("PU", "Q4", "Boxcar", "60", loc1trk1, 16);
|
|
c4.setWeightTons("40");
|
|
|
|
Car c5 = JUnitOperationsUtil.createAndPlaceCar("UP", "Q5", "Gon", "50", loc1trk2, 15);
|
|
c5.setLoadName("L");
|
|
c5.setWeightTons("50");
|
|
|
|
Car c6 = JUnitOperationsUtil.createAndPlaceCar("CP", "Q6", "Boxcar", "40", loc1trk2, 14);
|
|
c6.setLoadName("L");
|
|
c6.setWeightTons("60");
|
|
|
|
Car c7 = JUnitOperationsUtil.createAndPlaceCar("UP", "Q7", "Boxcar", "50", loc1trk2, 13);
|
|
c7.setWeightTons("70");
|
|
|
|
Car c8 = JUnitOperationsUtil.createAndPlaceCar("XP", "Q8", "Gon", "60", loc1trk2, 12);
|
|
c8.setWeightTons("80");
|
|
|
|
Car c9 = JUnitOperationsUtil.createAndPlaceCar("XP", "Q9", "Flat Car", "90", loc1trk2, 11);
|
|
c9.setLoadName("L");
|
|
c9.setWeightTons("90");
|
|
|
|
Car c10 = JUnitOperationsUtil.createAndPlaceCar("CP", "Q10", "Coil Car", "40", loc1trk1, 8);
|
|
c10.setLoadName("L");
|
|
c10.setWeightTons("100");
|
|
|
|
Car c11 = JUnitOperationsUtil.createAndPlaceCar("CP", "Q11", "Coil Car", "40", loc1trk1, 9);
|
|
c11.setLoadName("Coils");
|
|
c11.setWeightTons("110");
|
|
|
|
Car c12 = JUnitOperationsUtil.createAndPlaceCar("CP", "Q12", "Coil Car", "40", loc1trk1, 10);
|
|
c12.setWeightTons("120");
|
|
|
|
Car c13 = JUnitOperationsUtil.createAndPlaceCar("CP", "Q13", "XCaboose", "40", loc1trk1, 7);
|
|
c13.setCaboose(true);
|
|
c13.setWeightTons("130");
|
|
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertTrue(train2.build());
|
|
|
|
// now check to where cars are going to be delivered
|
|
Assert.assertEquals("c1 destination", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination", "", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination", "Chelmsford Interchange 1", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination", "Bedford Yard 1", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination", "Chelmsford Interchange 2", c11.getDestinationTrackName());
|
|
Assert.assertEquals("c12 destination", "Bedford Yard 1", c12.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination", "Chelmsford Interchange 2", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination", "Bedford Yard 1", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination", "Chelmsford Interchange 1", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination", "Bedford Yard 1", c8.getDestinationTrackName());
|
|
|
|
// now check which trains
|
|
Assert.assertEquals("c9 train", train1, c9.getTrain());
|
|
Assert.assertEquals("c10 train", train1, c10.getTrain());
|
|
Assert.assertEquals("c11 train", train1, c11.getTrain());
|
|
Assert.assertEquals("c12 train", train1, c12.getTrain());
|
|
|
|
Assert.assertEquals("c5 train", train2, c5.getTrain());
|
|
Assert.assertEquals("c6 train", train2, c6.getTrain());
|
|
Assert.assertEquals("c7 train", train2, c7.getTrain());
|
|
Assert.assertEquals("c8 train", train2, c8.getTrain());
|
|
|
|
// try restricting interchange 1 to train1 and interchange 2 to train2
|
|
loc2trk1.setDropOption(Track.TRAINS);
|
|
loc2trk1.addDropId(train1.getId());
|
|
loc2trk2.setDropOption(Track.TRAINS);
|
|
loc2trk2.addDropId(train2.getId());
|
|
|
|
c5.setMoves(16);
|
|
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertTrue(train2.build());
|
|
|
|
// now check to where cars are going to be delivered
|
|
Assert.assertEquals("c1 destination 2", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 2", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 2", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 2", "Chelmsford Interchange 2", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 2", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 2", "Bedford Yard 1", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 2", "Chelmsford Interchange 2", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 2", "Bedford Yard 1", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 2", "Chelmsford Interchange 1", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 2", "Bedford Yard 1", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 2", "Bedford Yard 1", c11.getDestinationTrackName());
|
|
Assert.assertEquals("c12 destination 2", "Chelmsford Freight 4", c12.getDestinationTrackName());
|
|
|
|
// now check which trains
|
|
Assert.assertEquals("c9 train", train1, c9.getTrain());
|
|
Assert.assertEquals("c10 train", train1, c10.getTrain());
|
|
Assert.assertEquals("c11 train", train1, c11.getTrain());
|
|
Assert.assertEquals("c12 train", train1, c12.getTrain());
|
|
|
|
Assert.assertEquals("c4 train", train2, c4.getTrain());
|
|
Assert.assertEquals("c6 train", train2, c6.getTrain());
|
|
Assert.assertEquals("c7 train", train2, c7.getTrain());
|
|
Assert.assertEquals("c8 train", train2, c8.getTrain());
|
|
|
|
// move and terminate
|
|
Assert.assertEquals("Check train 1 departure location name", "Old Westford", train1.getCurrentLocationName());
|
|
Assert.assertEquals("Check train 1 departure location", r1l1, train1.getCurrentRouteLocation());
|
|
train1.move(); // #1
|
|
Assert.assertEquals("Check train 1 location name", "Old Chelmsford", train1.getCurrentLocationName());
|
|
Assert.assertEquals("Check train 1 location", r1l2, train1.getCurrentRouteLocation());
|
|
train1.move(); // #2
|
|
Assert.assertEquals("Check train 1 location name", "Old Bedford", train1.getCurrentLocationName());
|
|
Assert.assertEquals("Check train 1 location", r1l3, train1.getCurrentRouteLocation());
|
|
train1.move(); // #3 terminate
|
|
Assert.assertEquals("Check train 1 location name", "", train1.getCurrentLocationName());
|
|
Assert.assertEquals("Check train 1 location", null, train1.getCurrentRouteLocation());
|
|
|
|
Assert.assertEquals("Check train 2 departure location name", "Old Westford", train2.getCurrentLocationName());
|
|
Assert.assertEquals("Check train 2 departure location", r1l1, train2.getCurrentRouteLocation());
|
|
train2.move(); // #1
|
|
Assert.assertEquals("Check train 2 location name", "Old Chelmsford", train2.getCurrentLocationName());
|
|
Assert.assertEquals("Check train 2 location", r1l2, train2.getCurrentRouteLocation());
|
|
train2.move(); // #2
|
|
Assert.assertEquals("Check train 2 location name", "Old Bedford", train2.getCurrentLocationName());
|
|
Assert.assertEquals("Check train 2 location", r1l3, train2.getCurrentRouteLocation());
|
|
train2.move(); // #3 terminate
|
|
Assert.assertEquals("Check train 2 location name", "", train2.getCurrentLocationName());
|
|
Assert.assertEquals("Check train 2 location", null, train2.getCurrentRouteLocation());
|
|
|
|
r1l1.setMaxCarMoves(2);
|
|
r1l2.setMaxCarMoves(6);
|
|
r1l3.setMaxCarMoves(6);
|
|
Assert.assertTrue(train3.build()); // note that train3 uses rte1, should not pickup cars at interchange
|
|
|
|
Assert.assertEquals("c1 destination 3", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 3", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 3", "Chelmsford Yard 3", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 3", "", c4.getDestinationTrackName());
|
|
Assert.assertEquals("c5 destination 3", "Bedford Yard 1", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 3", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 3", "", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 3", "", c8.getDestinationTrackName());
|
|
Assert.assertEquals("c9 destination 3", "", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c12 destination 3", "Bedford Yard 1", c12.getDestinationTrackName());
|
|
|
|
// Change the route to 2, should be able to pickup c4, c7, c9
|
|
train3.reset();
|
|
train3.setRoute(rte2);
|
|
|
|
Assert.assertEquals("c2 move count", 18, c2.getMoves());
|
|
Assert.assertEquals("c3 move count", 17, c3.getMoves());
|
|
Assert.assertEquals("c4 move count", 17, c4.getMoves());
|
|
|
|
Assert.assertTrue(train3.build());
|
|
|
|
Assert.assertEquals("c1 destination 4", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 4", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 4", "Chelmsford Yard 3", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 4", "Bedford Yard 1", c4.getDestinationTrackName());
|
|
Assert.assertEquals("c5 destination 4", "Bedford Yard 1", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 4", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 4", "Bedford Yard 1", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 4", "", c8.getDestinationTrackName());
|
|
Assert.assertEquals("c9 destination 4", "Bedford Yard 1", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c12 destination 4", "Bedford Yard 1", c12.getDestinationTrackName());
|
|
|
|
// bias c3
|
|
c3.setMoves(20);
|
|
|
|
// Change back to route to 1, should be able to pickup c4, c7
|
|
train3.reset();
|
|
train3.setRoute(rte1);
|
|
loc2trk2.setPickupOption(Track.TRAINS);
|
|
loc2trk2.addPickupId(train3.getId());
|
|
Assert.assertTrue(train3.build());
|
|
|
|
Assert.assertEquals("c1 destination 5", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 5", "Chelmsford Freight 4", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 5", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 5", "Bedford Yard 1", c4.getDestinationTrackName());
|
|
Assert.assertEquals("c5 destination 5", "Bedford Yard 1", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 5", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 5", "Bedford Yard 1", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 5", "", c8.getDestinationTrackName());
|
|
Assert.assertEquals("c9 destination 5", "", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c12 destination 5", "Bedford Yard 1", c12.getDestinationTrackName());
|
|
|
|
// check car move counts
|
|
Assert.assertEquals("c1 move count", 20, c1.getMoves());
|
|
Assert.assertEquals("c2 move count", 18, c2.getMoves());
|
|
Assert.assertEquals("c3 move count", 20, c3.getMoves());
|
|
Assert.assertEquals("c4 move count", 17, c4.getMoves());
|
|
Assert.assertEquals("c5 move count", 16, c5.getMoves());
|
|
Assert.assertEquals("c6 move count", 15, c6.getMoves());
|
|
Assert.assertEquals("c7 move count", 14, c7.getMoves());
|
|
Assert.assertEquals("c8 move count", 13, c8.getMoves());
|
|
Assert.assertEquals("c9 move count", 12, c9.getMoves());
|
|
Assert.assertEquals("c12 move count", 11, c12.getMoves());
|
|
|
|
c1.setMoves(18);
|
|
|
|
// Change back to route to 1, should be able to pickup c4, c7, and c9
|
|
train3.reset();
|
|
train3.setRoute(rte1);
|
|
loc2trk1.setPickupOption(Track.ROUTES);
|
|
loc2trk1.addPickupId(rte1.getId());
|
|
Assert.assertTrue(train3.build());
|
|
|
|
Assert.assertEquals("c1 destination 6", "Bedford Yard 1", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 6", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 6", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 6", "Bedford Yard 1", c4.getDestinationTrackName());
|
|
Assert.assertEquals("c5 destination 6", "Bedford Yard 1", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 6", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 6", "Bedford Yard 1", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 6", "", c8.getDestinationTrackName());
|
|
Assert.assertEquals("c9 destination 6", "Bedford Yard 1", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 6", "", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 6", "", c11.getDestinationTrackName());
|
|
Assert.assertEquals("c12 destination 6", "Bedford Yard 1", c12.getDestinationTrackName());
|
|
|
|
// now allow train 3 to drop
|
|
train3.reset();
|
|
loc2trk1.setDropOption(Track.ROUTES);
|
|
loc2trk1.addDropId(rte1.getId());
|
|
|
|
c5.setMoves(18);
|
|
c2.setMoves(19);
|
|
c1.setMoves(20);
|
|
Assert.assertTrue(train3.build());
|
|
|
|
Assert.assertEquals("c1 destination 7", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 7", "Chelmsford Interchange 1", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 7", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 7", "Bedford Yard 1", c4.getDestinationTrackName());
|
|
Assert.assertEquals("c5 destination 7", "Bedford Yard 1", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 7", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 7", "Bedford Yard 1", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 7", "", c8.getDestinationTrackName());
|
|
Assert.assertEquals("c9 destination 7", "Bedford Yard 1", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 7", "", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 7", "", c11.getDestinationTrackName());
|
|
Assert.assertEquals("c12 destination 7", "Bedford Yard 1", c12.getDestinationTrackName());
|
|
|
|
// move and terminate
|
|
train3.move();
|
|
train3.move();
|
|
train3.move();
|
|
train3.move();
|
|
|
|
// check tracks
|
|
Assert.assertEquals("c1 track", "Westford Yard 1", c1.getTrackName());
|
|
Assert.assertEquals("c2 track", "Chelmsford Interchange 1", c2.getTrackName());
|
|
Assert.assertEquals("c3 track", "Westford Yard 1", c3.getTrackName());
|
|
Assert.assertEquals("c4 track", "Bedford Yard 1", c4.getTrackName());
|
|
Assert.assertEquals("c5 track", "Bedford Yard 1", c5.getTrackName());
|
|
Assert.assertEquals("c6 track", "Bedford Yard 1", c6.getTrackName());
|
|
Assert.assertEquals("c7 track", "Bedford Yard 1", c7.getTrackName());
|
|
Assert.assertEquals("c8 track", "Bedford Yard 1", c8.getTrackName());
|
|
Assert.assertEquals("c9 track", "Bedford Yard 1", c9.getTrackName());
|
|
Assert.assertEquals("c10 track", "Bedford Yard 1", c10.getTrackName());
|
|
Assert.assertEquals("c11 track", "Bedford Yard 1", c11.getTrackName());
|
|
Assert.assertEquals("c12 track", "Bedford Yard 1", c12.getTrackName());
|
|
|
|
// check train length and tonnage
|
|
Assert.assertEquals("Depart Westford length", 138, r1l1.getTrainLength());
|
|
Assert.assertEquals("Depart Old Chelmsford length", 310, r1l2.getTrainLength());
|
|
|
|
// In train 2 cars, c2 E and c5 L car weight 20/3 + 50 = 56
|
|
Assert.assertEquals("Depart Old Westford tonnage", 56, r1l1.getTrainWeight());
|
|
// In train 5 cars, c4 E, c5 L, c7 E, c9 L, c12 L = 40/3 + 50 + 70/3 + 90 + 120
|
|
// = 296
|
|
Assert.assertEquals("Depart Old Chelmsford tonnage", 296, r1l2.getTrainWeight());
|
|
|
|
// test route pickup and drop controls
|
|
train3.setRequirements(Train.CABOOSE);
|
|
r1l1.setPickUpAllowed(false);
|
|
|
|
c1.setMoves(10);
|
|
c3.setMoves(21);
|
|
Assert.assertTrue(train3.build());
|
|
|
|
Assert.assertEquals("c1 destination 8", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c5 destination 8", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 8", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c13 destination 8", "Bedford Yard 1", c13.getDestinationTrackName());
|
|
|
|
r1l1.setPickUpAllowed(true);
|
|
r1l2.setPickUpAllowed(false);
|
|
Assert.assertTrue(train3.build());
|
|
|
|
Assert.assertEquals("c1 destination 9", "Chelmsford Interchange 1", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c5 destination 9", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 9", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c13 destination 9", "Bedford Yard 1", c13.getDestinationTrackName());
|
|
|
|
r1l2.setPickUpAllowed(true);
|
|
r1l2.setDropAllowed(false); // Old Chelmsford
|
|
Assert.assertTrue(train3.build());
|
|
|
|
Assert.assertEquals("c1 destination 10", "Bedford Yard 1", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c5 destination 10", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 10", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c13 destination 10", "Bedford Yard 1", c13.getDestinationTrackName());
|
|
|
|
train3.reset();
|
|
// try forcing c1 to Chelmsford
|
|
c1.setDestination(loc2, null);
|
|
Assert.assertTrue(train3.build());
|
|
Assert.assertEquals("c1 destination Old Chelmsford", "", c1.getDestinationTrackName());
|
|
|
|
// confirm that c1 isn't part of this train
|
|
Assert.assertNull("c1 isn't assigned to a train", c1.getTrain());
|
|
// code currently eliminates the car's destination TODO is this correct?
|
|
Assert.assertNull("c1 destination has been set to null", c1.getDestination());
|
|
Assert.assertNull("c1 next destination should be null", c1.getFinalDestination());
|
|
Assert.assertNull("c1 next destination track should be null", c1.getFinalDestinationTrack());
|
|
|
|
// try without moves
|
|
r1l2.setDropAllowed(true);
|
|
r1l2.setMaxCarMoves(0);
|
|
c1.setDestination(loc2, null);
|
|
Assert.assertTrue(train3.build());
|
|
Assert.assertEquals("c1 destination Old Chelmsford, no moves", "", c1.getDestinationTrackName());
|
|
|
|
c1.setDestination(null, null);
|
|
r1l2.setMaxCarMoves(6);
|
|
r1l3.setDropAllowed(false); // Should be able to drop off caboose
|
|
Assert.assertTrue(train3.build());
|
|
|
|
Assert.assertEquals("c1 destination 11", "Chelmsford Interchange 1", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c5 destination 11", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 11", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c13 destination 11", "Bedford Yard 1", c13.getDestinationTrackName());
|
|
|
|
// test to see if FRED also get delivered
|
|
train3.setRequirements(Train.FRED);
|
|
Assert.assertEquals("Place c2 at start of route", Track.OKAY, c2.setLocation(loc1, loc1trk2));
|
|
c2.setFred(true);
|
|
Assert.assertTrue(train3.build());
|
|
|
|
Assert.assertTrue("Train 3 built", train3.isBuilt());
|
|
Assert.assertEquals("c1 destination 12", "Chelmsford Interchange 1", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 12", "Bedford Yard 1", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 12", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c13 destination 12", "", c13.getDestinationTrackName());
|
|
|
|
// move and terminate
|
|
train3.move();
|
|
train3.move();
|
|
train3.move();
|
|
train3.move();
|
|
|
|
Assert.assertEquals("c1 track 12", "Chelmsford Interchange 1", c1.getTrackName());
|
|
Assert.assertEquals("c2 track 12", "Bedford Yard 1", c2.getTrackName());
|
|
Assert.assertEquals("c3 track 12", "Westford Yard 1", c3.getTrackName());
|
|
Assert.assertEquals("c13 track 12", "Westford Yard 1", c13.getTrackName());
|
|
|
|
// test previous car delivered pickup interchange operation
|
|
loc2trk1.setDropOption(Track.ANY);
|
|
loc2trk1.setPickupOption(Track.TRAINS);
|
|
loc2trk2.setDropOption(Track.ANY);
|
|
loc2trk2.setPickupOption(Track.TRAINS);
|
|
|
|
// Place car with FRED back at start of route
|
|
Assert.assertEquals("Place c2 again", Track.OKAY, c2.setLocation(loc1, loc1trk2));
|
|
|
|
Assert.assertTrue(train3.build());
|
|
Assert.assertTrue("train 3 should build", train3.isBuilt());
|
|
Assert.assertEquals("car BM Q1 should not be part of train", null, c1.getTrain());
|
|
Assert.assertEquals("car XP Q3 should be part of train", train3, c3.getTrain());
|
|
|
|
// put some cars at start of Route
|
|
Assert.assertEquals("Place c1 again", Track.OKAY, c1.setLocation(loc1, loc1trk2));
|
|
Assert.assertEquals("Place c2 again", Track.OKAY, c2.setLocation(loc1, loc1trk2));
|
|
Assert.assertEquals("Place c3 again", Track.OKAY, c3.setLocation(loc1, loc1trk2));
|
|
Assert.assertEquals("Place c4 again", Track.OKAY, c4.setLocation(loc1, loc1trk2));
|
|
Assert.assertEquals("Place c6 again", Track.OKAY, c6.setLocation(loc2, loc2trk1));
|
|
Assert.assertEquals("Place c7 again", Track.OKAY, c7.setLocation(loc2, loc2trk2));
|
|
|
|
r1l1.setMaxCarMoves(5);
|
|
loc2trk1.setDropOption(Track.ROUTES);
|
|
loc2trk1.setPickupOption(Track.ROUTES);
|
|
loc2trk2.setDropOption(Track.ROUTES);
|
|
loc2trk2.setPickupOption(Track.ROUTES);
|
|
|
|
Assert.assertTrue(train3.build());
|
|
Assert.assertTrue("train 3 should build", train3.isBuilt());
|
|
Assert.assertEquals("BM Q1 in train", null, c1.getTrain());
|
|
Assert.assertEquals("UP Q2 in train", train3, c2.getTrain());
|
|
Assert.assertEquals("XP Q3 in train", train3, c3.getTrain());
|
|
Assert.assertEquals("PU Q4 in train", train3, c4.getTrain());
|
|
Assert.assertEquals("UP Q5 in train", null, c5.getTrain());
|
|
Assert.assertEquals("CP Q6 in train", null, c6.getTrain());
|
|
Assert.assertEquals("UP Q7 in train", null, c7.getTrain());
|
|
|
|
Assert.assertEquals("UP Q2 destination", "Bedford Yard 1", c2.getDestinationTrackName());
|
|
Assert.assertEquals("XP Q3 destination", "Chelmsford Freight 4", c3.getDestinationTrackName());
|
|
Assert.assertEquals("PU Q4 destination", "Chelmsford Yard 3", c4.getDestinationTrackName());
|
|
Assert.assertEquals("UP Q5 destination", "", c5.getDestinationTrackName());
|
|
|
|
// interchange testing done, now test replace car type and road
|
|
Assert.assertTrue("loc1 should accept Boxcar", loc1.acceptsTypeName("Boxcar"));
|
|
Assert.assertTrue("loc2 should accept Boxcar", loc2.acceptsTypeName("Boxcar"));
|
|
|
|
// replace should modify locations and trains
|
|
ct.replaceName("Boxcar", "boxcar");
|
|
|
|
Assert.assertFalse("loc1 should not accept Boxcar", loc1.acceptsTypeName("Boxcar"));
|
|
Assert.assertFalse("loc2 should not accept Boxcar", loc2.acceptsTypeName("Boxcar"));
|
|
Assert.assertFalse("track loc1trk1 should not accept Boxcar", loc1trk1.isTypeNameAccepted("Boxcar"));
|
|
Assert.assertFalse("track loc2trk1 should not accept Boxcar", loc2trk1.isTypeNameAccepted("Boxcar"));
|
|
Assert.assertFalse("train 1 should not accept Boxcar", train1.isTypeNameAccepted("Boxcar"));
|
|
Assert.assertFalse("train 2 should not accept Boxcar", train2.isTypeNameAccepted("Boxcar"));
|
|
Assert.assertFalse("train 3 should not accept Boxcar", train3.isTypeNameAccepted("Boxcar"));
|
|
|
|
Assert.assertTrue("loc1 should accept boxcar", loc1.acceptsTypeName("boxcar"));
|
|
Assert.assertTrue("loc2 should accept boxcar", loc2.acceptsTypeName("boxcar"));
|
|
Assert.assertTrue("track loc1trk1 should accept boxcar", loc1trk1.isTypeNameAccepted("boxcar"));
|
|
Assert.assertTrue("track loc2trk1 should accept boxcar", loc2trk1.isTypeNameAccepted("boxcar"));
|
|
Assert.assertTrue("train 1 should accept boxcar", train1.isTypeNameAccepted("boxcar"));
|
|
Assert.assertTrue("train 2 should accept boxcar", train2.isTypeNameAccepted("boxcar"));
|
|
Assert.assertTrue("train 3 should accept boxcar", train3.isTypeNameAccepted("boxcar"));
|
|
|
|
ct.replaceName("boxcar", "Boxcar");
|
|
|
|
Assert.assertTrue("loc1 should accept Boxcar", loc1.acceptsTypeName("Boxcar"));
|
|
Assert.assertTrue("loc2 should accept Boxcar", loc2.acceptsTypeName("Boxcar"));
|
|
Assert.assertTrue("track loc1trk1 should accept Boxcar", loc1trk1.isTypeNameAccepted("Boxcar"));
|
|
Assert.assertTrue("track loc2trk1 should accept Boxcar", loc2trk1.isTypeNameAccepted("Boxcar"));
|
|
Assert.assertTrue("train 1 should accept Boxcar", train1.isTypeNameAccepted("Boxcar"));
|
|
Assert.assertTrue("train 2 should accept Boxcar", train2.isTypeNameAccepted("Boxcar"));
|
|
Assert.assertTrue("train 3 should accept Boxcar", train3.isTypeNameAccepted("Boxcar"));
|
|
|
|
// now test road name replace
|
|
CarRoads cr = InstanceManager.getDefault(CarRoads.class);
|
|
cr.addName("CP");
|
|
|
|
loc1trk1.setRoadOption(Track.INCLUDE_ROADS);
|
|
loc1trk1.addRoadName("CP");
|
|
loc1trk1.addRoadName("PC");
|
|
train1.setCarRoadOption(Train.INCLUDE_ROADS);
|
|
train1.addCarRoadName("CP");
|
|
train1.addCarRoadName("PC");
|
|
train1.setCabooseRoad("CP");
|
|
train1.setEngineRoad("CP");
|
|
|
|
Assert.assertTrue("track loc1trk1 should accept road CP", loc1trk1.isRoadNameAccepted("CP"));
|
|
Assert.assertTrue("track loc1trk1 should accept road PC", loc1trk1.isRoadNameAccepted("PC"));
|
|
Assert.assertFalse("track loc1trk1 should Not accept road PC", loc1trk1.isRoadNameAccepted("UP"));
|
|
Assert.assertTrue("Train 1 should accept road CP", train1.isCarRoadNameAccepted("CP"));
|
|
Assert.assertTrue("Train 1 should accept road PC", train1.isCarRoadNameAccepted("PC"));
|
|
Assert.assertFalse("Train 1 should Not accept road UP", train1.isCarRoadNameAccepted("UP"));
|
|
Assert.assertEquals("Caboose road", "CP", train1.getCabooseRoad());
|
|
Assert.assertEquals("Engine road", "CP", train1.getEngineRoad());
|
|
|
|
cr.replaceName("CP", "UP");
|
|
|
|
Assert.assertFalse("after replace track loc1trk1 should Not accept road CP", loc1trk1.isRoadNameAccepted("CP"));
|
|
Assert.assertTrue("after replace track loc1trk1 should accept road PC", loc1trk1.isRoadNameAccepted("PC"));
|
|
Assert.assertTrue("after replace track loc1trk1 should accept road PC", loc1trk1.isRoadNameAccepted("UP"));
|
|
Assert.assertFalse("after replace Train 1 should Not accept road CP", train1.isCarRoadNameAccepted("CP"));
|
|
Assert.assertTrue("after replace Train 1 should accept road PC", train1.isCarRoadNameAccepted("PC"));
|
|
Assert.assertTrue("after replace Train 1 should accept road UP", train1.isCarRoadNameAccepted("UP"));
|
|
Assert.assertEquals("Caboose road", "UP", train1.getCabooseRoad());
|
|
Assert.assertEquals("Engine road", "UP", train1.getEngineRoad());
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
|
|
@Test
|
|
public void testCabooseAndCarWithFred() {
|
|
|
|
// register the road names used
|
|
CarRoads cr = InstanceManager.getDefault(CarRoads.class);
|
|
cr.addName("UP");
|
|
cr.addName("SP");
|
|
cr.addName("NH");
|
|
|
|
// place two engines in a consist
|
|
Consist con1 = InstanceManager.getDefault(ConsistManager.class).newConsist("C1");
|
|
|
|
Engine e1 = engineManager.newRS("UP", "1");
|
|
e1.setModel("GP40");
|
|
e1.setConsist(con1);
|
|
Engine e2 = engineManager.newRS("SP", "2");
|
|
e2.setModel("GP40");
|
|
e2.setConsist(con1);
|
|
|
|
// Create 3 locations
|
|
Location loc1 = locationManager.newLocation("Harvard");
|
|
Track loc1trk1 = loc1.addTrack("Harvard Yard", Track.YARD);
|
|
loc1trk1.setLength(1000);
|
|
|
|
Location loc2 = locationManager.newLocation("Arlington");
|
|
Track loc2trk1 = loc2.addTrack("Arlington Yard", Track.YARD);
|
|
loc2trk1.setLength(1000);
|
|
|
|
Location loc3 = locationManager.newLocation("Boston");
|
|
Track loc3trk1 = loc3.addTrack("Boston Yard", Track.YARD);
|
|
loc3trk1.setLength(1000);
|
|
loc3trk1.deleteTypeName("Diesel");
|
|
Track loc3trk2 = loc3.addTrack("Boston Engine Yard", Track.YARD);
|
|
loc3trk2.setLength(200);
|
|
loc3trk2.deleteTypeName("Boxcar");
|
|
loc3trk2.deleteTypeName("Flat");
|
|
loc3trk2.deleteTypeName(Bundle.getMessage("Caboose"));
|
|
|
|
// Create route with 3 location
|
|
Route rte1 = routeManager.newRoute("Route 2 Boston");
|
|
RouteLocation rl1 = rte1.addLocation(loc1);
|
|
RouteLocation rl2 = rte1.addLocation(loc2);
|
|
rl2.setTrainIconX(75); // set the train icon coordinates
|
|
rl2.setTrainIconY(150);
|
|
RouteLocation rl3 = rte1.addLocation(loc3);
|
|
rl3.setTrainIconX(125); // set the train icon coordinates
|
|
rl3.setTrainIconY(150);
|
|
|
|
// Create train
|
|
Train train1 = trainManager.newTrain("HTB");
|
|
train1.setRoute(rte1);
|
|
|
|
// Place cars
|
|
// Set up three cabooses and six box cars
|
|
Car c1 = JUnitOperationsUtil.createAndPlaceCar("UP", "1", Bundle.getMessage("Caboose"), "32", loc1trk1, 10);
|
|
c1.setCaboose(true);
|
|
|
|
Car c2 = JUnitOperationsUtil.createAndPlaceCar("SP", "2", Bundle.getMessage("Caboose"), "30", loc1trk1, 5);
|
|
c2.setCaboose(true);
|
|
|
|
Car c3 = JUnitOperationsUtil.createAndPlaceCar("NH", "3", Bundle.getMessage("Caboose"), "33", loc1trk1, 0);
|
|
c3.setCaboose(true);
|
|
|
|
Car c4 = JUnitOperationsUtil.createAndPlaceCar("UP", "4", "Boxcar", "40", loc1trk1, 16);
|
|
c4.setFred(true);
|
|
|
|
Car c5 = JUnitOperationsUtil.createAndPlaceCar("SP", "5", "Boxcar", "40", loc1trk1, 8);
|
|
c5.setFred(true);
|
|
|
|
Car c6 = JUnitOperationsUtil.createAndPlaceCar("NH", "6", "Boxcar", "40", loc1trk1, 2);
|
|
c6.setFred(true);
|
|
|
|
Car c7 = JUnitOperationsUtil.createAndPlaceCar("UP", "7", "Flat", "40", loc1trk1, 5);
|
|
Car c8 = JUnitOperationsUtil.createAndPlaceCar("SP", "8", "Boxcar", "40", loc1trk1, 4);
|
|
Car c9 = JUnitOperationsUtil.createAndPlaceCar("NH", "9", "Boxcar", "40", loc1trk1, 3);
|
|
Car c10 = JUnitOperationsUtil.createAndPlaceCar("NH", "10", "Boxcar", "40", loc2trk1, 10);
|
|
Car c11 = JUnitOperationsUtil.createAndPlaceCar("SP", "11", "Boxcar", "40", loc2trk1, 3);
|
|
|
|
// Place engines
|
|
Assert.assertEquals("Place e1", Track.OKAY, e1.setLocation(loc1, loc1trk1));
|
|
Assert.assertEquals("Place e2", Track.OKAY, e2.setLocation(loc1, loc1trk1));
|
|
|
|
// no requirements, so no caboose or FRED or engines
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 1", true, train1.isBuilt());
|
|
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 1", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 1", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 1", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 1", "", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 1", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 1", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 1", "Boston Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 1", "Arlington Yard", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 1", "Boston Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 1", "Boston Yard", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 1", "Boston Yard", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 1", "", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 1", "", e2.getDestinationTrackName());
|
|
|
|
// no engines, so the caboose with least moves should be used
|
|
train1.setRequirements(Train.CABOOSE);
|
|
// don't allow pickups at second location Arlington
|
|
rl2.setPickUpAllowed(false);
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 2", true, train1.isBuilt());
|
|
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 2", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 2", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 2", "Boston Yard", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 2", "", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 2", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 2", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 2", "Boston Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 2", "Boston Yard", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 2", "Arlington Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 2", "", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 2", "", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 2", "", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 2", "", e2.getDestinationTrackName());
|
|
|
|
// there's a caboose c1 that matches lead engine
|
|
train1.setNumberEngines("2");
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 3", true, train1.isBuilt());
|
|
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 3", "Boston Yard", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 3", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 3", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 3", "", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 3", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 3", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 3", "Boston Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 3", "Boston Yard", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 3", "Arlington Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 3", "", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 3", "", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 3", "Boston Engine Yard", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 3", "Boston Engine Yard", e2.getDestinationTrackName());
|
|
|
|
// should default to the caboose with the least moves
|
|
e1.setRoadName("X");
|
|
// allow pickups at Arlington
|
|
rl2.setPickUpAllowed(true);
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 4", true, train1.isBuilt());
|
|
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 4", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 4", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 4", "Boston Yard", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 4", "", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 4", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 4", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 4", "Boston Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 4", "Boston Yard", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 4", "Arlington Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 4", "Boston Yard", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 4", "Boston Yard", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 4", "Boston Engine Yard", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 4", "Boston Engine Yard", e2.getDestinationTrackName());
|
|
|
|
// don't allow drops at Boston, caboose and engines should still drop there
|
|
rl3.setDropAllowed(false);
|
|
// should not take NH caboose
|
|
e1.setRoadName("NH");
|
|
// now require a SP caboose
|
|
train1.setCabooseRoad("SP");
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 5", true, train1.isBuilt());
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 5", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 5", "Boston Yard", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 5", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 5", "", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 5", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 5", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 5", "Arlington Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 5", "Arlington Yard", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 5", "Arlington Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 5", "", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 5", "", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 5", "Boston Engine Yard", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 5", "Boston Engine Yard", e2.getDestinationTrackName());
|
|
|
|
// allow drops at Boston
|
|
rl3.setDropAllowed(true);
|
|
// should take car with FRED and road SP
|
|
train1.setRequirements(Train.FRED);
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 6", true, train1.isBuilt());
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 6", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 6", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 6", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 6", "", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 6", "Boston Yard", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 6", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 6", "Boston Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 6", "Boston Yard", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 6", "Arlington Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 6", "Boston Yard", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 6", "Boston Yard", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 6", "Boston Engine Yard", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 6", "Boston Engine Yard", e2.getDestinationTrackName());
|
|
|
|
// should take car with FRED least number of moves
|
|
train1.setCabooseRoad("");
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 7", true, train1.isBuilt());
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 7", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 7", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 7", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 7", "", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 7", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 7", "Boston Yard", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 7", "Boston Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 7", "Boston Yard", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 7", "Arlington Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 7", "Boston Yard", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 7", "Boston Yard", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 7", "Boston Engine Yard", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 7", "Boston Engine Yard", e2.getDestinationTrackName());
|
|
|
|
// now exclude road NH, engine road is NH and should be rejected
|
|
train1.addLocoRoadName("NH");
|
|
train1.setLocoRoadOption(Train.EXCLUDE_ROADS);
|
|
Assert.assertFalse(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 7a", false, train1.isBuilt());
|
|
// now override by setting a road for the engine
|
|
train1.setLocoRoadOption(Train.ALL_ROADS);
|
|
train1.addCarRoadName("NH");
|
|
train1.setCarRoadOption(Train.EXCLUDE_ROADS);
|
|
train1.setEngineRoad("NH");
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 8", true, train1.isBuilt());
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 8", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 8", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 8", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 8", "", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 8", "Boston Yard", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 8", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 8", "Boston Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 8", "Arlington Yard", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 8", "", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 8", "", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 8", "Boston Yard", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 8", "Boston Engine Yard", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 8", "Boston Engine Yard", e2.getDestinationTrackName());
|
|
|
|
// now only include NH
|
|
train1.setCarRoadOption(Train.INCLUDE_ROADS);
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 9", true, train1.isBuilt());
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 9", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 9", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 9", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 9", "", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 9", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 9", "Boston Yard", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 9", "", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 9", "", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 9", "Arlington Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 9", "Boston Yard", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 9", "", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 9", "Boston Engine Yard", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 9", "Boston Engine Yard", e2.getDestinationTrackName());
|
|
|
|
// don't allow boxcar, car with FRED required, build should fail
|
|
loc3.deleteTypeName("Boxcar");
|
|
Assert.assertFalse(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 9a", false, train1.isBuilt());
|
|
loc3.addTypeName("Boxcar");
|
|
|
|
// add staging
|
|
Track loc1trk2 = loc1.addTrack("Harvard Staging", Track.STAGING);
|
|
loc1trk2.setLength(1000);
|
|
// now depart staging, must take all cars in staging
|
|
rl1.setMaxCarMoves(9); // there are nine cars departing staging
|
|
// Place cars
|
|
Assert.assertEquals("Move c1", Track.OKAY, c1.setLocation(loc1, loc1trk2));
|
|
Assert.assertEquals("Move c2", Track.OKAY, c2.setLocation(loc1, loc1trk2));
|
|
Assert.assertEquals("Move c3", Track.OKAY, c3.setLocation(loc1, loc1trk2));
|
|
Assert.assertEquals("Move c4", Track.OKAY, c4.setLocation(loc1, loc1trk2));
|
|
|
|
Assert.assertEquals("Move c5", Track.OKAY, c5.setLocation(loc1, loc1trk2));
|
|
Assert.assertEquals("Move c6", Track.OKAY, c6.setLocation(loc1, loc1trk2));
|
|
Assert.assertEquals("Move c7", Track.OKAY, c7.setLocation(loc1, loc1trk2));
|
|
Assert.assertEquals("Move c8", Track.OKAY, c8.setLocation(loc1, loc1trk2));
|
|
Assert.assertEquals("Move c9", Track.OKAY, c9.setLocation(loc1, loc1trk2));
|
|
|
|
// Place engines
|
|
Assert.assertEquals("Place e1", Track.OKAY, e1.setLocation(loc1, loc1trk2));
|
|
Assert.assertEquals("Place e2", Track.OKAY, e2.setLocation(loc1, loc1trk2));
|
|
|
|
// program requires only staging at any location, so we don't test with yard
|
|
loc1.deleteTrack(loc1trk1);
|
|
// All engines and cars in staging must move! Cabooses and cars with FRED to
|
|
// terminal
|
|
train1.setNumberEngines("0");
|
|
Assert.assertFalse(train1.build());
|
|
// train only accepted engine and cars with NH road therefore build should fail
|
|
Assert.assertEquals("Train 1 After Build from staging", false, train1.isBuilt());
|
|
// try again but now accept all roads
|
|
train1.setCarRoadOption(Train.ALL_ROADS);
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 10", true, train1.isBuilt());
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 10", "Boston Yard", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 10", "Boston Yard", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 10", "Boston Yard", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 10", "Boston Yard", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 10", "Boston Yard", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 10", "Boston Yard", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 10", "Arlington Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 10", "Arlington Yard", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 10", "Arlington Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 10", "", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 10", "Boston Yard", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 10", "Boston Engine Yard", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 10", "Boston Engine Yard", e2.getDestinationTrackName());
|
|
|
|
// exclude road NH
|
|
train1.setCarRoadOption(Train.EXCLUDE_ROADS);
|
|
Assert.assertFalse(train1.build());
|
|
// should fail since there are NH roads in staging
|
|
Assert.assertEquals("Train 1 After Build 11", false, train1.isBuilt());
|
|
|
|
// reduce Boston moves to 6, to force non caboose and FRED cars to Arlington
|
|
rl3.setMaxCarMoves(6);
|
|
train1.setCarRoadOption(Train.ALL_ROADS);
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 12", true, train1.isBuilt());
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 12", "Boston Yard", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 12", "Boston Yard", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 12", "Boston Yard", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 12", "Boston Yard", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 12", "Boston Yard", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 12", "Boston Yard", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 12", "Arlington Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 12", "Arlington Yard", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 12", "Arlington Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 12", "", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 12", "", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 12", "Boston Engine Yard", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 12", "Boston Engine Yard", e2.getDestinationTrackName());
|
|
|
|
// Reduce Arlington to only two moves, this should cause train build to fail
|
|
rl2.setMaxCarMoves(2);
|
|
|
|
Assert.assertFalse(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 13", false, train1.isBuilt());
|
|
|
|
// restore number of moves
|
|
rl2.setMaxCarMoves(7);
|
|
rl3.setMaxCarMoves(7);
|
|
// don't allow drops at Boston
|
|
rl3.setDropAllowed(false);
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 14", true, train1.isBuilt());
|
|
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 14", "Boston Yard", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 14", "Boston Yard", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 14", "Boston Yard", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 14", "Boston Yard", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 14", "Boston Yard", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 14", "Boston Yard", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 14", "Arlington Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 14", "Arlington Yard", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 14", "Arlington Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 14", "", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 14", "", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 14", "Boston Engine Yard", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 14", "Boston Engine Yard", e2.getDestinationTrackName());
|
|
|
|
// Reduce Arlington to only two moves, this should cause train build to fail
|
|
rl2.setMaxCarMoves(2);
|
|
Assert.assertFalse(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 15", false, train1.isBuilt());
|
|
|
|
// Don't allow cabooses at Boston, should cause build failure
|
|
rl2.setMaxCarMoves(7);
|
|
loc3.deleteTypeName(Bundle.getMessage("Caboose"));
|
|
Assert.assertFalse(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 16", false, train1.isBuilt());
|
|
|
|
// Don't allow boxcars, should also cause build failure
|
|
loc3.addTypeName(Bundle.getMessage("Caboose"));
|
|
loc3.deleteTypeName("Boxcar");
|
|
train1.setRequirements(Train.NO_CABOOSE_OR_FRED);
|
|
Assert.assertFalse(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 17", false, train1.isBuilt());
|
|
|
|
// allow the three road names we're testing
|
|
loc3.addTypeName("Boxcar");
|
|
loc3trk1.addRoadName("NH");
|
|
loc3trk1.addRoadName("SP");
|
|
loc3trk1.addRoadName("UP");
|
|
loc3trk1.setRoadOption(Track.INCLUDE_ROADS);
|
|
loc3trk2.addRoadName("NH");
|
|
loc3trk2.addRoadName("SP");
|
|
loc3trk2.addRoadName("UP");
|
|
loc3trk2.setRoadOption(Track.INCLUDE_ROADS);
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 18", true, train1.isBuilt());
|
|
|
|
// now remove type Diesel, this should cause a failure
|
|
loc3trk2.deleteTypeName("Diesel");
|
|
Assert.assertFalse(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 19", false, train1.isBuilt());
|
|
|
|
// now restore type Diesel
|
|
loc3trk2.addTypeName("Diesel");
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 20", true, train1.isBuilt());
|
|
|
|
// Set the track length too short missing one set of couplers, two engines
|
|
loc3trk2.setLength(Integer.parseInt(e1.getLength()) + Integer.parseInt(e2.getLength()) + Engine.COUPLERS);
|
|
Assert.assertFalse(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 20.1", false, train1.isBuilt());
|
|
|
|
// restore track length
|
|
loc3trk2.setLength(Integer.parseInt(e1.getLength()) + Integer.parseInt(e2.getLength()) + 2 * Engine.COUPLERS);
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 20.2", true, train1.isBuilt());
|
|
|
|
// change lead engine road name, should cause build failure since Boston only
|
|
// accepts NH, SP, and UP.
|
|
train1.setEngineRoad(""); // reset engine road requirements, was "NH"
|
|
e1.setRoadName("X"); // was "NH"
|
|
Assert.assertFalse(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 21", false, train1.isBuilt());
|
|
|
|
e1.setRoadName("UP");
|
|
loc3trk1.deleteRoadName("NH"); // this test that a caboose fails
|
|
Assert.assertFalse(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 22", false, train1.isBuilt());
|
|
|
|
loc3trk1.addRoadName("NH");
|
|
c6.setRoadName("X"); // this test that a car with FRED fails
|
|
Assert.assertFalse(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 23", false, train1.isBuilt());
|
|
|
|
loc3trk1.addRoadName("X");
|
|
loc2trk1.deleteTypeName("Flat"); // this test that an ordinary car must move
|
|
Assert.assertFalse(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 24", false, train1.isBuilt());
|
|
|
|
loc2trk1.addTypeName("Flat"); // restore
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 25", true, train1.isBuilt());
|
|
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 25", "Boston Yard", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 25", "Boston Yard", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 25", "Boston Yard", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 25", "Boston Yard", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 25", "Boston Yard", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 25", "Boston Yard", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 25", "Arlington Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 25", "Arlington Yard", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 25", "Arlington Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 25", "", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 25", "", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 25", "Boston Engine Yard", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 25", "Boston Engine Yard", e2.getDestinationTrackName());
|
|
|
|
train1.reset();
|
|
// send caboose SP 2 from staging to track that will not service it
|
|
loc3trk2.addTypeName(Bundle.getMessage("Caboose"));
|
|
loc3trk2.setLength(200);
|
|
c2.setDestination(loc3, loc3trk2);
|
|
loc3trk2.deleteTypeName(Bundle.getMessage("Caboose"));
|
|
Assert.assertFalse(train1.build());
|
|
|
|
Assert.assertEquals("Train 1 After Build with caboose bad destination", false, train1.isBuilt());
|
|
c2.setDestination(null, null);
|
|
Assert.assertTrue(train1.build());
|
|
|
|
train1.move();
|
|
train1.move();
|
|
train1.move();
|
|
|
|
// check final locations
|
|
Assert.assertEquals("c1 location 24", "Boston Yard", c1.getTrackName());
|
|
Assert.assertEquals("c2 location 24", "Boston Yard", c2.getTrackName());
|
|
Assert.assertEquals("c3 location 24", "Boston Yard", c3.getTrackName());
|
|
Assert.assertEquals("c4 location 24", "Boston Yard", c4.getTrackName());
|
|
|
|
Assert.assertEquals("c5 location 24", "Boston Yard", c5.getTrackName());
|
|
Assert.assertEquals("c6 location 24", "Boston Yard", c6.getTrackName());
|
|
Assert.assertEquals("c7 location 24", "Arlington Yard", c7.getTrackName());
|
|
Assert.assertEquals("c8 location 24", "Arlington Yard", c8.getTrackName());
|
|
|
|
Assert.assertEquals("c9 location 24", "Arlington Yard", c9.getTrackName());
|
|
Assert.assertEquals("c10 location 24", "Arlington Yard", c10.getTrackName());
|
|
Assert.assertEquals("c11 location 24", "Arlington Yard", c11.getTrackName());
|
|
|
|
Assert.assertEquals("e1 location 24", "Boston Engine Yard", e1.getTrackName());
|
|
Assert.assertEquals("e2 location 24", "Boston Engine Yard", e2.getTrackName());
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
|
|
@Test
|
|
public void testCarWithFred() {
|
|
|
|
Setup.setStagingTrainCheckEnabled(false);
|
|
|
|
// register the road names used
|
|
CarRoads cr = InstanceManager.getDefault(CarRoads.class);
|
|
cr.addName("UP");
|
|
cr.addName("SP");
|
|
cr.addName("NH");
|
|
|
|
CarLoads cl = InstanceManager.getDefault(CarLoads.class);
|
|
cl.addName("Boxcar", "boxes");
|
|
cl.addName("Caboose", "Crew");
|
|
|
|
Engine e1 = engineManager.newRS("UP", "1");
|
|
e1.setModel("GP40");
|
|
|
|
// Create 3 locations
|
|
Location harvard = locationManager.newLocation("Harvard");
|
|
Track harvardTrack = harvard.addTrack("Harvard Yard", Track.YARD);
|
|
harvardTrack.setLength(1000);
|
|
|
|
Location arlington = locationManager.newLocation("Arlington");
|
|
Track loc2trk1 = arlington.addTrack("Arlington Yard", Track.YARD);
|
|
loc2trk1.setLength(1000);
|
|
|
|
Location boston = locationManager.newLocation("Boston");
|
|
Track bostonTrack = boston.addTrack("Boston Yard", Track.STAGING);
|
|
bostonTrack.setLength(1000);
|
|
|
|
// Create route with 3 location
|
|
Route rte1 = routeManager.newRoute("Route 2 Boston");
|
|
RouteLocation rl1 = rte1.addLocation(harvard);
|
|
rl1.setMaxCarMoves(15);
|
|
rte1.addLocation(arlington);
|
|
RouteLocation rl3 = rte1.addLocation(boston);
|
|
rl3.setMaxCarMoves(15);
|
|
|
|
// Create train
|
|
Train train1 = trainManager.newTrain("HTB with FRED");
|
|
train1.setRoute(rte1);
|
|
|
|
// Place cars
|
|
// Set up three cabooses and six box cars, three with FREDs
|
|
Car c1 = JUnitOperationsUtil.createAndPlaceCar("UP", "1", "Caboose", "32", harvardTrack, 10);
|
|
c1.setCaboose(true);
|
|
|
|
Car c2 = JUnitOperationsUtil.createAndPlaceCar("SP", "2", "Caboose", "30", harvardTrack, 5);
|
|
c2.setCaboose(true);
|
|
|
|
Car c3 = JUnitOperationsUtil.createAndPlaceCar("NH", "3", "Caboose", "33", harvardTrack, 0);
|
|
c3.setCaboose(true);
|
|
|
|
Car c4 = JUnitOperationsUtil.createAndPlaceCar("UP", "4", "Boxcar", "40", harvardTrack, 16);
|
|
c4.setFred(true);
|
|
|
|
Car c5 = JUnitOperationsUtil.createAndPlaceCar("SP", "5", "Boxcar", "40", harvardTrack, 8);
|
|
c5.setFred(true);
|
|
|
|
Car c6 = JUnitOperationsUtil.createAndPlaceCar("NH", "6", "Boxcar", "40", harvardTrack, 2);
|
|
c6.setFred(true);
|
|
|
|
Car c7 = JUnitOperationsUtil.createAndPlaceCar("UP", "7", "Flat", "40", harvardTrack, 5);
|
|
Car c8 = JUnitOperationsUtil.createAndPlaceCar("SP", "8", "Boxcar", "40", harvardTrack, 4);
|
|
Car c9 = JUnitOperationsUtil.createAndPlaceCar("NH", "9", "Boxcar", "40", harvardTrack, 3);
|
|
Car c10 = JUnitOperationsUtil.createAndPlaceCar("NH", "10", "Boxcar", "40", loc2trk1, 10);
|
|
Car c11 = JUnitOperationsUtil.createAndPlaceCar("SP", "11", "Boxcar", "40", loc2trk1, 3);
|
|
|
|
// Place engines
|
|
Assert.assertEquals("Place e1", Track.OKAY, e1.setLocation(harvard, harvardTrack));
|
|
|
|
// no requirements, so no caboose or FRED or engines
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 1", true, train1.isBuilt());
|
|
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 1", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 1", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 1", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 1", "", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 1", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 1", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 1", "Boston Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 1", "Arlington Yard", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 1", "Boston Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 1", "Boston Yard", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 1", "Boston Yard", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 1", "", e1.getDestinationTrackName());
|
|
|
|
// should take car with FRED and road SP
|
|
train1.setRequirements(Train.FRED);
|
|
train1.setCabooseRoad("SP");
|
|
train1.setNumberEngines("1");
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 2", true, train1.isBuilt());
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 2", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 2", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 2", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 2", "", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 2", "Boston Yard", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 2", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 2", "Boston Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 2", "Boston Yard", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 2", "Arlington Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 2", "Boston Yard", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 2", "Boston Yard", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 2", "Boston Yard", e1.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 load name 2", "E", c5.getLoadName());
|
|
|
|
// should take car with FRED least number of moves
|
|
train1.setCabooseRoad("");
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 3", true, train1.isBuilt());
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 3", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 3", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 3", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 3", "", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 3", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 3", "Boston Yard", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 3", "Boston Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 3", "Boston Yard", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 3", "Arlington Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 3", "Boston Yard", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 3", "Boston Yard", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 3", "Boston Yard", e1.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("load name 3", "E", c6.getLoadName());
|
|
|
|
// now depart staging, all cars must go!
|
|
harvardTrack.setTrackType(Track.STAGING);
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 4", true, train1.isBuilt());
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 4", "Boston Yard", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 4", "Boston Yard", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 4", "Boston Yard", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 4", "Boston Yard", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 4", "Boston Yard", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 4", "Boston Yard", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 4", "Boston Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 4", "Arlington Yard", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 4", "Arlington Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 4", "Boston Yard", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 4", "Boston Yard", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 4", "Boston Yard", e1.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c1 load name 4", "E", c1.getLoadName());
|
|
Assert.assertEquals("c2 load name 4", "E", c2.getLoadName());
|
|
Assert.assertEquals("c3 load name 4", "E", c3.getLoadName());
|
|
Assert.assertEquals("c4 load name 4", "E", c4.getLoadName());
|
|
Assert.assertEquals("c5 load name 4", "E", c5.getLoadName());
|
|
Assert.assertEquals("c6 load name 4", "E", c6.getLoadName());
|
|
|
|
// don't allow cars with "E" into staging. build should fail
|
|
bostonTrack.addLoadName("E");
|
|
bostonTrack.setLoadOption(Track.EXCLUDE_LOADS);
|
|
train1.build();
|
|
Assert.assertFalse(train1.build());
|
|
|
|
// generate custom loads out of staging
|
|
harvardTrack.setAddCustomLoadsAnyStagingTrackEnabled(true);
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 4", true, train1.isBuilt());
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 5", "Boston Yard", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 5", "Boston Yard", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 5", "Boston Yard", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 5", "Boston Yard", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 5", "Boston Yard", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 5", "Boston Yard", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 5", "Arlington Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 5", "Boston Yard", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 5", "Boston Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 5", "", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 5", "", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 5", "Boston Yard", e1.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c1 load name 5", "Crew", c1.getLoadName());
|
|
Assert.assertEquals("c2 load name 5", "Crew", c2.getLoadName());
|
|
Assert.assertEquals("c3 load name 5", "Crew", c3.getLoadName());
|
|
Assert.assertEquals("c4 load name 5", "boxes", c4.getLoadName());
|
|
Assert.assertEquals("c5 load name 5", "boxes", c5.getLoadName());
|
|
Assert.assertEquals("c6 load name 5", "boxes", c6.getLoadName());
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
|
|
@Test
|
|
public void testCabooseAndCarWithFredOutOfStaging() {
|
|
|
|
// register the road names used
|
|
CarRoads cr = InstanceManager.getDefault(CarRoads.class);
|
|
cr.addName("UP");
|
|
cr.addName("SP");
|
|
cr.addName("NH");
|
|
|
|
CarLoads cl = InstanceManager.getDefault(CarLoads.class);
|
|
cl.addName("Boxcar", "boxes");
|
|
cl.addName("Boxcar", "Bolts");
|
|
cl.addName("Caboose", "Crew");
|
|
cl.addName("Caboose", "crew");
|
|
|
|
Engine e1 = engineManager.newRS("UP", "1");
|
|
e1.setModel("GP40");
|
|
|
|
// Create 3 locations
|
|
Location harvard = locationManager.newLocation("Harvard");
|
|
Track harvardTrack = harvard.addTrack("Harvard Staging", Track.STAGING);
|
|
harvardTrack.setLength(1000);
|
|
|
|
Location arlington = locationManager.newLocation("Arlington");
|
|
Track arlingtonTrack = arlington.addTrack("Arlington Spur", Track.SPUR);
|
|
arlingtonTrack.setLength(1000);
|
|
|
|
Location boston = locationManager.newLocation("Boston");
|
|
Track bostonTrack = boston.addTrack("Boston Spur", Track.SPUR);
|
|
bostonTrack.setLength(1000);
|
|
|
|
// Create route with 3 location
|
|
Route rte1 = routeManager.newRoute("Route 2 Boston");
|
|
RouteLocation rl1 = rte1.addLocation(harvard);
|
|
rl1.setMaxCarMoves(15);
|
|
RouteLocation rl2 = rte1.addLocation(arlington);
|
|
RouteLocation rl3 = rte1.addLocation(boston);
|
|
rl3.setMaxCarMoves(15);
|
|
|
|
// Create train
|
|
Train train1 = trainManager.newTrain("HTB out of staging");
|
|
train1.setRoute(rte1);
|
|
|
|
// Place cars
|
|
// Set up three cabooses and six box cars, three with FREDs
|
|
Car c1 = JUnitOperationsUtil.createAndPlaceCar("UP", "1", "Caboose", "32", harvardTrack, 10);
|
|
c1.setCaboose(true);
|
|
|
|
Car c2 = JUnitOperationsUtil.createAndPlaceCar("SP", "2", "Caboose", "30", harvardTrack, 5);
|
|
c2.setCaboose(true);
|
|
|
|
Car c3 = JUnitOperationsUtil.createAndPlaceCar("NH", "3", "Caboose", "33", harvardTrack, 0);
|
|
c3.setCaboose(true);
|
|
|
|
Car c4 = JUnitOperationsUtil.createAndPlaceCar("UP", "4", "Boxcar", "40", harvardTrack, 16);
|
|
c4.setFred(true);
|
|
|
|
Car c5 = JUnitOperationsUtil.createAndPlaceCar("SP", "5", "Boxcar", "40", harvardTrack, 8);
|
|
c5.setFred(true);
|
|
|
|
Car c6 = JUnitOperationsUtil.createAndPlaceCar("NH", "6", "Boxcar", "40", harvardTrack, 2);
|
|
c6.setFred(true);
|
|
|
|
Car c7 = JUnitOperationsUtil.createAndPlaceCar("UP", "7", "Boxcar", "40", harvardTrack, 5);
|
|
Car c8 = JUnitOperationsUtil.createAndPlaceCar("SP", "8", "Boxcar", "40", harvardTrack, 4);
|
|
Car c9 = JUnitOperationsUtil.createAndPlaceCar("NH", "9", "Boxcar", "40", harvardTrack, 3);
|
|
Car c10 = JUnitOperationsUtil.createAndPlaceCar("NH", "10", "Boxcar", "40", arlingtonTrack, 10);
|
|
Car c11 = JUnitOperationsUtil.createAndPlaceCar("SP", "11", "Boxcar", "40", arlingtonTrack, 3);
|
|
|
|
// Place engines
|
|
Assert.assertEquals("Place e1", Track.OKAY, e1.setLocation(harvard, harvardTrack));
|
|
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 1", true, train1.isBuilt());
|
|
|
|
// check destinations, all cars in staging must depart
|
|
Assert.assertEquals("c1 destination 1", "Boston Spur", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 1", "Boston Spur", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 1", "Boston Spur", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 1", "Boston Spur", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 1", "Boston Spur", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 1", "Boston Spur", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 1", "Boston Spur", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 1", "Arlington Spur", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 1", "Arlington Spur", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 1", "Boston Spur", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 1", "Boston Spur", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 1", "Boston Spur", e1.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c1 load name 1", "E", c1.getLoadName());
|
|
Assert.assertEquals("c2 load name 1", "E", c2.getLoadName());
|
|
Assert.assertEquals("c3 load name 1", "E", c3.getLoadName());
|
|
Assert.assertEquals("c4 load name 1", "E", c4.getLoadName());
|
|
Assert.assertEquals("c5 load name 1", "E", c5.getLoadName());
|
|
Assert.assertEquals("c6 load name 1", "E", c6.getLoadName());
|
|
|
|
// don't allow cars with "E" into Boston. build should fail
|
|
bostonTrack.addLoadName("E");
|
|
bostonTrack.setLoadOption(Track.EXCLUDE_LOADS);
|
|
train1.build();
|
|
Assert.assertFalse(train1.build());
|
|
|
|
// generate custom loads out of staging to staging
|
|
harvardTrack.setAddCustomLoadsAnyStagingTrackEnabled(true);
|
|
Assert.assertFalse(train1.build()); // should still fail
|
|
|
|
harvardTrack.setAddCustomLoadsEnabled(true);
|
|
Assert.assertFalse(train1.build()); // should still fail no schedule demanding custom loads
|
|
|
|
ScheduleManager smanager = InstanceManager.getDefault(ScheduleManager.class);
|
|
Schedule schedule1 = smanager.newSchedule("Schedule 1");
|
|
ScheduleItem sch1Item1 = schedule1.addItem("Boxcar");
|
|
sch1Item1.setReceiveLoadName("boxes");
|
|
ScheduleItem sch1Item2 = schedule1.addItem("Caboose");
|
|
sch1Item2.setReceiveLoadName("Crew");
|
|
bostonTrack.setSchedule(schedule1);
|
|
|
|
Schedule schedule2 = smanager.newSchedule("Schedule 2");
|
|
ScheduleItem sch2Item1 = schedule2.addItem("Boxcar");
|
|
sch2Item1.setReceiveLoadName("Bolts");
|
|
ScheduleItem sch2Item2 = schedule2.addItem("Caboose");
|
|
sch2Item2.setReceiveLoadName("crew");
|
|
arlingtonTrack.setSchedule(schedule2);
|
|
|
|
train1.build();
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 2", true, train1.isBuilt());
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 2", "Boston Spur", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 2", "Boston Spur", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 2", "Boston Spur", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 2", "Boston Spur", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 2", "Boston Spur", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 2", "Boston Spur", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 2", "Arlington Spur", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 2", "Arlington Spur", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 2", "Arlington Spur", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 2", "", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 2", "", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 2", "Boston Spur", e1.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c1 load name 2", "Crew", c1.getLoadName());
|
|
Assert.assertEquals("c2 load name 2", "Crew", c2.getLoadName());
|
|
Assert.assertEquals("c3 load name 2", "Crew", c3.getLoadName());
|
|
Assert.assertEquals("c4 load name 2", "boxes", c4.getLoadName());
|
|
Assert.assertEquals("c5 load name 2", "boxes", c5.getLoadName());
|
|
Assert.assertEquals("c6 load name 2", "boxes", c6.getLoadName());
|
|
|
|
// now remove caboose at Arlington
|
|
train1.setSecondLegOptions(Train.REMOVE_CABOOSE);
|
|
train1.setSecondLegStartRouteLocation(rl2);
|
|
|
|
train1.build();
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 3", true, train1.isBuilt());
|
|
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 3", "Arlington Spur", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 3", "Arlington Spur", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 3", "Arlington Spur", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 3", "Arlington Spur", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 3", "Arlington Spur", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 3", "Arlington Spur", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 3", "Boston Spur", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 3", "Boston Spur", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 3", "Arlington Spur", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 3", "", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 3", "", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 3", "Boston Spur", e1.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c1 load name 3", "crew", c1.getLoadName());
|
|
Assert.assertEquals("c2 load name 3", "crew", c2.getLoadName());
|
|
Assert.assertEquals("c3 load name 3", "crew", c3.getLoadName());
|
|
Assert.assertEquals("c4 load name 3", "Bolts", c4.getLoadName());
|
|
Assert.assertEquals("c5 load name 3", "Bolts", c5.getLoadName());
|
|
Assert.assertEquals("c6 load name 3", "Bolts", c6.getLoadName());
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
|
|
/**
|
|
* Test owner names, built dates, engine type, cabooses, route drops &
|
|
* pulls, car unreachable destination out of staging, train / route
|
|
* direction control.
|
|
*/
|
|
@Test
|
|
public void testTrainBuildOptions() {
|
|
|
|
// create 2 consists and a single engine for testing
|
|
Consist con1 = InstanceManager.getDefault(ConsistManager.class).newConsist("C1");
|
|
|
|
Engine e1 = engineManager.newRS("UP", "1");
|
|
e1.setModel("GP30");
|
|
e1.setOwnerName("AT");
|
|
e1.setBuilt("1957");
|
|
e1.setConsist(con1);
|
|
e1.setMoves(5);
|
|
Engine e2 = engineManager.newRS("SP", "2");
|
|
e2.setModel("GP30");
|
|
e2.setOwnerName("AT");
|
|
e2.setBuilt("1957");
|
|
e2.setConsist(con1);
|
|
e2.setMoves(5);
|
|
|
|
// single engine
|
|
Engine e3 = engineManager.newRS("SP", "3");
|
|
e3.setModel("GP40");
|
|
e3.setOwnerName("DAB");
|
|
e3.setBuilt("1957");
|
|
|
|
Consist con2 = InstanceManager.getDefault(ConsistManager.class).newConsist("C2");
|
|
|
|
Engine e4 = engineManager.newRS("UP", "10");
|
|
e4.setModel("GP40");
|
|
e4.setOwnerName("DAB");
|
|
e4.setBuilt("1944");
|
|
e4.setConsist(con2);
|
|
e4.setMoves(20);
|
|
Engine e5 = engineManager.newRS("SP", "20");
|
|
e5.setModel("GP40");
|
|
e5.setOwnerName("DAB");
|
|
e5.setBuilt("1944");
|
|
e5.setConsist(con2);
|
|
e5.setMoves(20);
|
|
|
|
// 3 engine consist
|
|
Consist con3 = InstanceManager.getDefault(ConsistManager.class).newConsist("C3");
|
|
|
|
Engine e6 = engineManager.newRS("UP", "100");
|
|
e6.setModel("GP40");
|
|
e6.setOwnerName("DAB");
|
|
e6.setBuilt("1944");
|
|
e6.setConsist(con3);
|
|
e6.setMoves(2);
|
|
Engine e7 = engineManager.newRS("SP", "200");
|
|
e7.setModel("GP40");
|
|
e7.setOwnerName("DAB");
|
|
e7.setBuilt("1944");
|
|
e7.setConsist(con3);
|
|
e7.setMoves(2);
|
|
Engine e8 = engineManager.newRS("SP", "300");
|
|
e8.setModel("GP40");
|
|
e8.setOwnerName("DAB");
|
|
e8.setBuilt("1944");
|
|
e8.setConsist(con3);
|
|
e8.setMoves(2);
|
|
|
|
// Create 5 locations
|
|
Location loc1 = locationManager.newLocation("Harvard");
|
|
Track loc1trk1 = loc1.addTrack("Harvard Yard", Track.YARD);
|
|
loc1trk1.setLength(1000);
|
|
Track loc1trk2 = loc1.addTrack("Harvard Yard 2", Track.YARD);
|
|
loc1trk2.setLength(1000);
|
|
|
|
Location loc2 = locationManager.newLocation("Arlington");
|
|
Track loc2trk1 = loc2.addTrack("Arlington Yard", Track.YARD);
|
|
loc2trk1.setLength(1000);
|
|
|
|
Location loc3 = locationManager.newLocation("Boston");
|
|
Track loc3trk1 = loc3.addTrack("Boston Yard", Track.YARD);
|
|
loc3trk1.setLength(1000);
|
|
Track loc3trk2 = loc3.addTrack("Boston Yard 2", Track.YARD);
|
|
loc3trk2.setLength(1000);
|
|
|
|
Location loc4 = locationManager.newLocation("Chelmsford");
|
|
Track loc4trk1 = loc4.addTrack("Chelmsford Yard", Track.YARD);
|
|
loc4trk1.setLength(1000);
|
|
Track loc4trk2 = loc4.addTrack("Chelmsford Yard 2", Track.YARD);
|
|
loc4trk2.setLength(1000);
|
|
|
|
Location loc5 = locationManager.newLocation("Westford");
|
|
Track loc5trk1 = loc5.addTrack("Westford Yard", Track.YARD);
|
|
loc5trk1.setLength(1000);
|
|
Track loc5trk2 = loc5.addTrack("Westford Yard 2", Track.YARD);
|
|
loc5trk2.setLength(1000);
|
|
|
|
// Create route with 4 locations
|
|
Setup.setCarMoves(7); // set default to 7 moves per location
|
|
Route rte1 = routeManager.newRoute("Route 2 Chelmsford");
|
|
rte1.addLocation(loc1);
|
|
RouteLocation rl2 = rte1.addLocation(loc2);
|
|
rl2.setTrainIconX(175); // set the train icon coordinates
|
|
rl2.setTrainIconY(150);
|
|
RouteLocation rl3 = rte1.addLocation(loc3);
|
|
rl3.setTrainIconX(25); // set the train icon coordinates
|
|
rl3.setTrainIconY(175);
|
|
RouteLocation rl4 = rte1.addLocation(loc4);
|
|
rl4.setTrainIconX(75); // set the train icon coordinates
|
|
rl4.setTrainIconY(175);
|
|
|
|
// don't allow pickup or drops at Arlington
|
|
rl2.setDropAllowed(false);
|
|
rl2.setPickUpAllowed(false);
|
|
|
|
// Create train
|
|
Train train1 = trainManager.newTrain("Harvard to Chelmsford");
|
|
train1.setRoute(rte1);
|
|
|
|
// train skips Boston
|
|
train1.addTrainSkipsLocation(rl3);
|
|
|
|
// Place cars
|
|
// Set up 3 cabooses, 1 Flat, and 7 boxcars
|
|
Car c1 = JUnitOperationsUtil.createAndPlaceCar("PU", "1", Bundle.getMessage("Caboose"), "32", "AT", "1943",
|
|
loc1trk1, 10);
|
|
c1.setCaboose(true);
|
|
Car c2 = JUnitOperationsUtil.createAndPlaceCar("SP", "2", Bundle.getMessage("Caboose"), "30", "DAB", "1957",
|
|
loc1trk2, 5);
|
|
c2.setCaboose(true);
|
|
Car c3 = JUnitOperationsUtil.createAndPlaceCar("UP", "3", Bundle.getMessage("Caboose"), "33", "DAB", "1944",
|
|
loc2trk1, 0);
|
|
c3.setCaboose(true);
|
|
Car c4 = JUnitOperationsUtil.createAndPlaceCar("UP", "4", "Boxcar", "40", "DAB", "1958", loc5trk1, 16);
|
|
c4.setFred(true);
|
|
|
|
Car c5 = JUnitOperationsUtil.createAndPlaceCar("SP", "5", "Boxcar", "40", "DAB", "1958", loc1trk1, 8);
|
|
c5.setFred(true);
|
|
Car c6 = JUnitOperationsUtil.createAndPlaceCar("NH", "6", "Boxcar", "40", "DAB", "1958", loc1trk1, 2);
|
|
c6.setFred(true);
|
|
Car c7 = JUnitOperationsUtil.createAndPlaceCar("UP", "7", "Flat", "40", "DAB", "1958", loc1trk1, 5);
|
|
Car c8 = JUnitOperationsUtil.createAndPlaceCar("SP", "8", "Boxcar", "40", "DAB", "1958", loc1trk1, 4);
|
|
Car c9 = JUnitOperationsUtil.createAndPlaceCar("NH", "9", "Boxcar", "40", "DAB", "1944", loc1trk1, 3);
|
|
Car c10 = JUnitOperationsUtil.createAndPlaceCar("NH", "10", "Boxcar", "40", "DAB", "1958", loc2trk1, 10);
|
|
Car c11 = JUnitOperationsUtil.createAndPlaceCar("SP", "11", "Boxcar", "40", "DAB", "1958", loc2trk1, 3);
|
|
|
|
// set c9 destination not part of train's route
|
|
Assert.assertEquals("Destination c9", Track.OKAY, c9.setDestination(loc5, loc5trk1));
|
|
|
|
// Place engines
|
|
Assert.assertEquals("Place e1", Track.OKAY, e1.setLocation(loc1, loc1trk1));
|
|
Assert.assertEquals("Place e2", Track.OKAY, e2.setLocation(loc1, loc1trk1));
|
|
Assert.assertEquals("Place e3", Track.OKAY, e3.setLocation(loc1, loc1trk1));
|
|
Assert.assertEquals("Place e4", Track.OKAY, e4.setLocation(loc1, loc1trk1));
|
|
Assert.assertEquals("Place e5", Track.OKAY, e5.setLocation(loc1, loc1trk1));
|
|
Assert.assertEquals("Place e6", Track.OKAY, e6.setLocation(loc1, loc1trk1));
|
|
Assert.assertEquals("Place e7", Track.OKAY, e7.setLocation(loc1, loc1trk1));
|
|
Assert.assertEquals("Place e8", Track.OKAY, e8.setLocation(loc1, loc1trk1));
|
|
|
|
train1.setRequirements(Train.CABOOSE);
|
|
train1.setNumberEngines("2");
|
|
train1.setOwnerOption(Train.ALL_OWNERS);
|
|
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 1", true, train1.isBuilt());
|
|
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 1", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 1", "Chelmsford Yard 2", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 1", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 1", "", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 1", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 1", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 1", "Chelmsford Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 1", "Chelmsford Yard 2", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 1", "Westford Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 1", "", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 1", "", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 1", "Chelmsford Yard", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 1", "Chelmsford Yard", e2.getDestinationTrackName());
|
|
Assert.assertEquals("e3 destination 1", "", e3.getDestinationTrackName());
|
|
Assert.assertEquals("e4 destination 1", "", e4.getDestinationTrackName());
|
|
Assert.assertEquals("e5 destination 1", "", e5.getDestinationTrackName());
|
|
Assert.assertEquals("e6 destination 1", "", e6.getDestinationTrackName());
|
|
Assert.assertEquals("e7 destination 1", "", e7.getDestinationTrackName());
|
|
Assert.assertEquals("e8 destination 1", "", e8.getDestinationTrackName());
|
|
|
|
// Allow c9 to be used
|
|
// set c9 destination Chelmsford
|
|
Assert.assertEquals("Destination c9", Track.OKAY, c9.setDestination(loc4, null));
|
|
|
|
// check that train direction and track direction feature works properly
|
|
loc1trk2.setTrainDirections(Location.SOUTH);
|
|
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build test track direction", true, train1.isBuilt());
|
|
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 1a", "Chelmsford Yard", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 1a", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 1a", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 1a", "", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 1a", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 1a", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 1a", "Chelmsford Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 1a", "Chelmsford Yard 2", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 1a", "Chelmsford Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 1a", "", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 1a", "", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 1a", "Chelmsford Yard 2", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 1a", "Chelmsford Yard 2", e2.getDestinationTrackName());
|
|
Assert.assertEquals("e3 destination 1a", "", e3.getDestinationTrackName());
|
|
Assert.assertEquals("e4 destination 1a", "", e4.getDestinationTrackName());
|
|
Assert.assertEquals("e5 destination 1a", "", e5.getDestinationTrackName());
|
|
Assert.assertEquals("e6 destination 1a", "", e6.getDestinationTrackName());
|
|
Assert.assertEquals("e7 destination 1a", "", e7.getDestinationTrackName());
|
|
Assert.assertEquals("e8 destination 1a", "", e8.getDestinationTrackName());
|
|
|
|
loc1trk2.setTrainDirections(Location.NORTH);
|
|
|
|
Assert.assertTrue(train1.addOwnerName("DAB"));
|
|
Assert.assertFalse(train1.addOwnerName("DAB")); // returns false if name already exists
|
|
train1.setOwnerOption(Train.INCLUDE_OWNERS);
|
|
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 2", true, train1.isBuilt());
|
|
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 2", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 2", "Chelmsford Yard", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 2", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 2", "", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 2", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 2", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 2", "Chelmsford Yard", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 2", "Chelmsford Yard 2", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 2", "Chelmsford Yard", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 2", "", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 2", "", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 2", "", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 2", "", e2.getDestinationTrackName());
|
|
Assert.assertEquals("e3 destination 2", "", e3.getDestinationTrackName());
|
|
Assert.assertEquals("e4 destination 2", "Chelmsford Yard 2", e4.getDestinationTrackName());
|
|
Assert.assertEquals("e5 destination 2", "Chelmsford Yard 2", e5.getDestinationTrackName());
|
|
Assert.assertEquals("e6 destination 2", "", e6.getDestinationTrackName());
|
|
Assert.assertEquals("e7 destination 2", "", e7.getDestinationTrackName());
|
|
Assert.assertEquals("e8 destination 2", "", e8.getDestinationTrackName());
|
|
|
|
// test that build fails if Diesel type is not allowed
|
|
train1.deleteTypeName("Diesel");
|
|
Assert.assertFalse(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 3", false, train1.isBuilt());
|
|
|
|
// restore type Diesel and allow all owners
|
|
train1.addTypeName("Diesel");
|
|
train1.setOwnerOption(Train.ALL_OWNERS);
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 4", true, train1.isBuilt());
|
|
|
|
// Only allow rolling stock built after 1956
|
|
train1.setBuiltStartYear("1956");
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 5", true, train1.isBuilt());
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 5", "", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 5", "Chelmsford Yard", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 5", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 5", "", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 5", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 5", "", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 5", "Chelmsford Yard 2", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 5", "Chelmsford Yard", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 5", "", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 5", "", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 5", "", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 5", "Chelmsford Yard 2", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 5", "Chelmsford Yard 2", e2.getDestinationTrackName());
|
|
Assert.assertEquals("e3 destination 5", "", e3.getDestinationTrackName());
|
|
Assert.assertEquals("e4 destination 5", "", e4.getDestinationTrackName());
|
|
Assert.assertEquals("e5 destination 5", "", e5.getDestinationTrackName());
|
|
Assert.assertEquals("e6 destination 5", "", e6.getDestinationTrackName());
|
|
Assert.assertEquals("e7 destination 5", "", e7.getDestinationTrackName());
|
|
Assert.assertEquals("e8 destination 5", "", e8.getDestinationTrackName());
|
|
|
|
train1.reset();
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
|
|
/**
|
|
* Test build using aggressive mode. Train departs regular location and
|
|
* staging. Test number of engines, caboose. Train movement and car location
|
|
* updates. Alternate track feature. Cars in a kernel departing staging.
|
|
*/
|
|
@Test
|
|
public void testAggressiveBuildOption() {
|
|
|
|
Setup.setBuildAggressive(true);
|
|
|
|
// create 2 consists and a single engine for testing
|
|
Consist con1 = InstanceManager.getDefault(ConsistManager.class).newConsist("C1");
|
|
|
|
Engine e1 = engineManager.newRS("UP", "1");
|
|
e1.setModel("GP30");
|
|
e1.setOwnerName("AT");
|
|
e1.setBuilt("1957");
|
|
e1.setConsist(con1);
|
|
e1.setMoves(5);
|
|
Engine e2 = engineManager.newRS("SP", "2");
|
|
e2.setModel("GP30");
|
|
e2.setOwnerName("AT");
|
|
e2.setBuilt("1957");
|
|
e2.setConsist(con1);
|
|
e2.setMoves(5);
|
|
|
|
// single engine
|
|
Engine e3 = engineManager.newRS("SP", "3");
|
|
e3.setModel("GP40");
|
|
e3.setOwnerName("DAB");
|
|
e3.setBuilt("1957");
|
|
|
|
Consist con2 = InstanceManager.getDefault(ConsistManager.class).newConsist("C2");
|
|
|
|
Engine e4 = engineManager.newRS("UP", "10");
|
|
e4.setModel("GP40");
|
|
e4.setOwnerName("DAB");
|
|
e4.setBuilt("1944");
|
|
e4.setConsist(con2);
|
|
e4.setMoves(20);
|
|
Engine e5 = engineManager.newRS("SP", "20");
|
|
e5.setModel("GP40");
|
|
e5.setOwnerName("DAB");
|
|
e5.setBuilt("1944");
|
|
e5.setConsist(con2);
|
|
e5.setMoves(20);
|
|
|
|
// 3 engine consist
|
|
Consist con3 = InstanceManager.getDefault(ConsistManager.class).newConsist("C3");
|
|
|
|
Engine e6 = engineManager.newRS("UP", "100");
|
|
e6.setModel("GP40");
|
|
e6.setOwnerName("DAB");
|
|
e6.setBuilt("1944");
|
|
e6.setConsist(con3);
|
|
e6.setMoves(2);
|
|
Engine e7 = engineManager.newRS("SP", "200");
|
|
e7.setModel("GP40");
|
|
e7.setOwnerName("DAB");
|
|
e7.setBuilt("1944");
|
|
e7.setConsist(con3);
|
|
e7.setMoves(2);
|
|
Engine e8 = engineManager.newRS("SP", "300");
|
|
e8.setModel("GP40");
|
|
e8.setOwnerName("DAB");
|
|
e8.setBuilt("1944");
|
|
e8.setConsist(con3);
|
|
e8.setMoves(2);
|
|
|
|
// Create 5 locations
|
|
Location loc1 = locationManager.newLocation("New Harvard");
|
|
Track loc1trk1 = loc1.addTrack("Harvard Yard 1", Track.YARD);
|
|
loc1trk1.setLength(1000);
|
|
Track loc1trk2 = loc1.addTrack("Harvard Yard 2", Track.YARD);
|
|
loc1trk2.setLength(1000);
|
|
|
|
Location loc2 = locationManager.newLocation("New Arlington");
|
|
Track loc2trk1 = loc2.addTrack("Arlington Spur", Track.SPUR);
|
|
loc2trk1.setLength(50);
|
|
|
|
Location loc3 = locationManager.newLocation("New Boston");
|
|
Track loc3trk1 = loc3.addTrack("Boston Yard 1", Track.YARD);
|
|
loc3trk1.setLength(50);
|
|
Track loc3trk2 = loc3.addTrack("Boston Yard 2", Track.YARD);
|
|
loc3trk2.setLength(50);
|
|
|
|
Location loc4 = locationManager.newLocation("New Chelmsford");
|
|
Track loc4trk1 = loc4.addTrack("Chelmsford Yard 1", Track.YARD);
|
|
loc4trk1.setLength(50);
|
|
Track loc4trk2 = loc4.addTrack("Chelmsford Yard 2", Track.YARD);
|
|
loc4trk2.setLength(50);
|
|
|
|
Location loc5 = locationManager.newLocation("New Westford");
|
|
Track loc5trk1 = loc5.addTrack("Westford Yard 1", Track.YARD);
|
|
loc5trk1.setLength(1000);
|
|
Track loc5trk2 = loc5.addTrack("Westford Yard 2", Track.YARD);
|
|
loc5trk2.setLength(1000);
|
|
|
|
Car c1 = JUnitOperationsUtil.createAndPlaceCar("PU", "13", "Caboose", "32", "AT", "1943", loc1trk1, 10);
|
|
c1.setCaboose(true);
|
|
Car c2 = JUnitOperationsUtil.createAndPlaceCar("SP", "23", "Boxcar", "30", "DAB", "1957", loc1trk2, 5);
|
|
Car c3 = JUnitOperationsUtil.createAndPlaceCar("UP", "33", "Boxcar", "33", "DAB", "1944", loc2trk1, 0);
|
|
Car c4 = JUnitOperationsUtil.createAndPlaceCar("UP", "43", "Boxcar", "40", "DAB", "1958", loc1trk1, 16);
|
|
Car c5 = JUnitOperationsUtil.createAndPlaceCar("SP", "53", "Boxcar", "40", "DAB", "1958", loc1trk2, 8);
|
|
Car c6 = JUnitOperationsUtil.createAndPlaceCar("NH", "63", "Boxcar", "40", "DAB", "1958", loc1trk1, 2);
|
|
Car c7 = JUnitOperationsUtil.createAndPlaceCar("UP", "73", "Flat", "40", "DAB", "1958", loc3trk1, 5);
|
|
Car c8 = JUnitOperationsUtil.createAndPlaceCar("SP", "83", "Boxcar", "40", "DAB", "1958", loc3trk2, 4);
|
|
Car c9 = JUnitOperationsUtil.createAndPlaceCar("NH", "93", "Boxcar", "40", "DAB", "1944", loc4trk1, 3);
|
|
Car c10 = JUnitOperationsUtil.createAndPlaceCar("NH", "103", "Boxcar", "40", "DAB", "1958", loc4trk2, 10);
|
|
Car c11 = JUnitOperationsUtil.createAndPlaceCar("SP", "113", "Boxcar", "40", "DAB", "1958", loc1trk1, 3);
|
|
|
|
// Create route with 5 location
|
|
Route rte1 = routeManager.newRoute("Route 3 Westford");
|
|
rte1.addLocation(loc1);
|
|
rte1.addLocation(loc2);
|
|
rte1.addLocation(loc3);
|
|
rte1.addLocation(loc4);
|
|
rte1.addLocation(loc5);
|
|
|
|
// Create train
|
|
Train train1 = trainManager.newTrain("Harvard to Westford Aggressive");
|
|
train1.setRoute(rte1);
|
|
|
|
// Place engines
|
|
Assert.assertEquals("Place e1", Track.OKAY, e1.setLocation(loc1, loc1trk1));
|
|
Assert.assertEquals("Place e2", Track.OKAY, e2.setLocation(loc1, loc1trk1));
|
|
Assert.assertEquals("Place e3", Track.OKAY, e3.setLocation(loc1, loc1trk1));
|
|
Assert.assertEquals("Place e4", Track.OKAY, e4.setLocation(loc1, loc1trk1));
|
|
Assert.assertEquals("Place e5", Track.OKAY, e5.setLocation(loc1, loc1trk1));
|
|
Assert.assertEquals("Place e6", Track.OKAY, e6.setLocation(loc1, loc1trk1));
|
|
Assert.assertEquals("Place e7", Track.OKAY, e7.setLocation(loc1, loc1trk1));
|
|
Assert.assertEquals("Place e8", Track.OKAY, e8.setLocation(loc1, loc1trk1));
|
|
|
|
train1.setRequirements(Train.CABOOSE);
|
|
train1.setNumberEngines("3");
|
|
|
|
// confirm default
|
|
Assert.assertEquals("All owners allowed", Train.ALL_OWNERS, train1.getOwnerOption());
|
|
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 1", true, train1.isBuilt());
|
|
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 1", "Westford Yard 2", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 1", "Westford Yard 1", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 1", "Westford Yard 2", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 1", "Boston Yard 1", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 1", "Arlington Spur", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 1", "Westford Yard 2", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 1", "Westford Yard 2", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 1", "Westford Yard 1", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 1", "", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 1", "", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 1", "Westford Yard 2", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 1", "", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 1", "", e2.getDestinationTrackName());
|
|
Assert.assertEquals("e3 destination 1", "", e3.getDestinationTrackName());
|
|
Assert.assertEquals("e4 destination 1", "", e4.getDestinationTrackName());
|
|
Assert.assertEquals("e5 destination 1", "", e5.getDestinationTrackName());
|
|
Assert.assertEquals("e6 destination 1", "Westford Yard 1", e6.getDestinationTrackName());
|
|
Assert.assertEquals("e7 destination 1", "Westford Yard 1", e7.getDestinationTrackName());
|
|
Assert.assertEquals("e8 destination 1", "Westford Yard 1", e8.getDestinationTrackName());
|
|
|
|
// test departing from staging in aggressive mode
|
|
Assert.assertTrue(train1.reset());
|
|
loc1trk1.setTrackType(Track.STAGING);
|
|
loc1trk2.setTrackType(Track.STAGING);
|
|
Assert.assertFalse(train1.build());
|
|
Assert.assertFalse("Train 1 After Build from staging, eight loco on departure track", train1.isBuilt());
|
|
|
|
// move locos to other departure track
|
|
Assert.assertEquals("Place e1", Track.OKAY, e1.setLocation(loc1, loc1trk2));
|
|
Assert.assertEquals("Place e2", Track.OKAY, e2.setLocation(loc1, loc1trk2));
|
|
Assert.assertEquals("Place e3", Track.OKAY, e3.setLocation(loc1, loc1trk2));
|
|
Assert.assertEquals("Place e4", Track.OKAY, e4.setLocation(loc1, loc1trk2));
|
|
Assert.assertEquals("Place e5", Track.OKAY, e5.setLocation(loc1, loc1trk2));
|
|
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertTrue("Train 1 After Build from staging, three loco on departure track", train1.isBuilt());
|
|
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 2", "Westford Yard 2", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 2", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 2", "Westford Yard 2", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 2", "Boston Yard 2", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 2", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 2", "Arlington Spur", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 2", "Westford Yard 1", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 2", "Westford Yard 2", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 2", "Westford Yard 2", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 2", "Westford Yard 1", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 2", "Chelmsford Yard 1", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 2", "", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 2", "", e2.getDestinationTrackName());
|
|
Assert.assertEquals("e3 destination 2", "", e3.getDestinationTrackName());
|
|
Assert.assertEquals("e4 destination 2", "", e4.getDestinationTrackName());
|
|
Assert.assertEquals("e5 destination 2", "", e5.getDestinationTrackName());
|
|
Assert.assertEquals("e6 destination 2", "Westford Yard 1", e6.getDestinationTrackName());
|
|
Assert.assertEquals("e7 destination 2", "Westford Yard 1", e7.getDestinationTrackName());
|
|
Assert.assertEquals("e8 destination 2", "Westford Yard 1", e8.getDestinationTrackName());
|
|
|
|
// test train move to a specific location
|
|
Assert.assertFalse("Old Harvard is not part of this trains route", train1.move("Old Harvard"));
|
|
Assert.assertFalse("Train departs New Harvard already there", train1.move("New Harvard"));
|
|
Assert.assertTrue("Next location in train's route is New Arlington", train1.move("New Arlington"));
|
|
Assert.assertFalse("Train is at New Arlington", train1.move("New Arlington"));
|
|
// next location is New Boston, skip it and go directly to New Chelmsford
|
|
Assert.assertTrue("New Chelmsford is in train's route", train1.move("New Chelmsford"));
|
|
Assert.assertTrue("Next location in train's route is New Westford", train1.move("New Westford"));
|
|
Assert.assertFalse("Train is at New Westford last location in train's route", train1.move("New Westford"));
|
|
|
|
train1.move(); // terminate train
|
|
|
|
// now try with a train returning to staging, test alternate track feature
|
|
// Create train
|
|
Train train2 = trainManager.newTrain("Westford to Harvard Aggressive");
|
|
Route rte2 = routeManager.copyRoute(rte1, "Route 4 Harvard", true);
|
|
train2.setRoute(rte2);
|
|
train2.setRequirements(Train.CABOOSE);
|
|
train2.setNumberEngines("3");
|
|
|
|
// add 2 yard tracks to spur at Arlington
|
|
Track loc2trk2 = loc2.addTrack("Arlington Yard 1", Track.YARD);
|
|
loc2trk2.setLength(50); // only enough room for one car
|
|
Track loc2trk3 = loc2.addTrack("Arlington Alternate Track", Track.SPUR);
|
|
loc2trk3.setLength(100); // only enough room for two cars
|
|
|
|
// set the alternate for Arlington spur
|
|
loc2trk1.setAlternateTrack(loc2trk3);
|
|
|
|
// send cars to Arlington spur
|
|
c3.setFinalDestination(loc2);
|
|
c3.setFinalDestinationTrack(loc2trk1);
|
|
c8.setFinalDestination(loc2);
|
|
c8.setFinalDestinationTrack(loc2trk1);
|
|
c9.setFinalDestination(loc2);
|
|
c9.setFinalDestinationTrack(loc2trk1);
|
|
c11.setFinalDestination(loc2);
|
|
c11.setFinalDestinationTrack(loc2trk1);
|
|
|
|
Assert.assertTrue(train2.build());
|
|
Assert.assertTrue("Train 2 returns to staging", train2.isBuilt());
|
|
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 3", "Harvard Yard 1", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 3", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 3", "Arlington Alternate Track", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 3", "Harvard Yard 1", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 3", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 3", "Harvard Yard 1", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 3", "Chelmsford Yard 2", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 3", "Arlington Yard 1", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 3", "Arlington Alternate Track", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 3", "Boston Yard 1", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 3", "Arlington Spur", c11.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("e1 destination 3", "", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 3", "", e2.getDestinationTrackName());
|
|
Assert.assertEquals("e3 destination 3", "", e3.getDestinationTrackName());
|
|
Assert.assertEquals("e4 destination 3", "", e4.getDestinationTrackName());
|
|
Assert.assertEquals("e5 destination 3", "", e5.getDestinationTrackName());
|
|
Assert.assertEquals("e6 destination 3", "Harvard Yard 1", e6.getDestinationTrackName());
|
|
Assert.assertEquals("e7 destination 3", "Harvard Yard 1", e7.getDestinationTrackName());
|
|
Assert.assertEquals("e8 destination 3", "Harvard Yard 1", e8.getDestinationTrackName());
|
|
|
|
// check that cars on alternate track are sent to Arlington Spur
|
|
Assert.assertEquals("next dest Arlingtion", loc2, c3.getFinalDestination());
|
|
Assert.assertEquals("next dest track Arlingtion Spur", loc2trk1, c3.getFinalDestinationTrack());
|
|
Assert.assertEquals("next dest Arlingtion", loc2, c8.getFinalDestination());
|
|
Assert.assertEquals("next dest track Arlingtion Spur", loc2trk1, c8.getFinalDestinationTrack());
|
|
Assert.assertEquals("next dest Arlingtion", loc2, c9.getFinalDestination());
|
|
Assert.assertEquals("next dest track Arlingtion Spur", loc2trk1, c9.getFinalDestinationTrack());
|
|
Assert.assertEquals("next dest null", null, c11.getFinalDestination());
|
|
Assert.assertEquals("next dest track null", null, c11.getFinalDestinationTrack());
|
|
|
|
// test train move to a an exact location
|
|
Assert.assertFalse("Old Harvard is not part of this trains route", train2.moveToNextLocation("Old Harvard"));
|
|
Assert.assertFalse("New Harvard is the last location in this trains route",
|
|
train2.moveToNextLocation("New Harvard"));
|
|
Assert.assertFalse("New Boston is the 3rd to last location in this trains route",
|
|
train2.moveToNextLocation("New Boston"));
|
|
Assert.assertFalse("New Westford is the current location in this trains route",
|
|
train2.moveToNextLocation("New Westford"));
|
|
Assert.assertFalse("New Arlington is the 2nd to last location in this trains route",
|
|
train2.moveToNextLocation("New Arlington"));
|
|
Assert.assertTrue("New Chelmsford is the next location in this trains route",
|
|
train2.moveToNextLocation("New Chelmsford"));
|
|
Assert.assertTrue("New Boston is the next location in this trains route",
|
|
train2.moveToNextLocation("New Boston"));
|
|
Assert.assertTrue("New Arlington is the next location in this trains route",
|
|
train2.moveToNextLocation("New Arlington"));
|
|
Assert.assertTrue("New Harvard is the next location in this trains route",
|
|
train2.moveToNextLocation("New Harvard"));
|
|
Assert.assertFalse("Train is at New Harvard", train2.moveToNextLocation("New Harvard"));
|
|
|
|
train2.move(); // terminate train
|
|
|
|
// put C6 and C12 into a kernel
|
|
Car c12 = JUnitOperationsUtil.createAndPlaceCar("SP", "123", "Boxcar", "40", "DAB", "1958", loc1trk1, 3);
|
|
Kernel kernel = InstanceManager.getDefault(KernelManager.class).newKernel("C6andC12");
|
|
c6.setKernel(kernel);
|
|
c12.setKernel(kernel);
|
|
|
|
// place car in staging but not on a track
|
|
Car c13 = JUnitOperationsUtil.createAndPlaceCar("SP", "133", "Boxcar", "40", "DAB", "1958", loc1trk1, 3);
|
|
c13.setLocation(loc1, null);
|
|
|
|
// now test train returning to staging
|
|
Setup.setStagingTrackImmediatelyAvail(false);
|
|
rte1.addLocation(loc1); // return to staging
|
|
Assert.assertFalse(train1.build());
|
|
// should fail, can't return to staging track
|
|
Assert.assertEquals("Train 1 deaprting and returning to staging", false, train1.isBuilt());
|
|
// change mode
|
|
Setup.setStagingTrackImmediatelyAvail(true);
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 departing and returning to staging", true, train1.isBuilt());
|
|
Assert.assertEquals("check departure track name", "Harvard Yard 1", train1.getDepartureTrack().getName());
|
|
Assert.assertEquals("check departure and arrival track", train1.getDepartureTrack(),
|
|
train1.getTerminationTrack());
|
|
|
|
// check destinations
|
|
Assert.assertEquals("c1 destination 3", "Harvard Yard 1", c1.getDestinationTrackName());
|
|
Assert.assertEquals("c2 destination 3", "", c2.getDestinationTrackName());
|
|
Assert.assertEquals("c3 destination 3", "", c3.getDestinationTrackName());
|
|
Assert.assertEquals("c4 destination 3", "Boston Yard 2", c4.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c5 destination 3", "", c5.getDestinationTrackName());
|
|
Assert.assertEquals("c6 destination 3", "Westford Yard 1", c6.getDestinationTrackName());
|
|
Assert.assertEquals("c7 destination 3", "Harvard Yard 1", c7.getDestinationTrackName());
|
|
Assert.assertEquals("c8 destination 3", "Arlington Spur", c8.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c9 destination 3", "", c9.getDestinationTrackName());
|
|
Assert.assertEquals("c10 destination 3", "Chelmsford Yard 1", c10.getDestinationTrackName());
|
|
Assert.assertEquals("c11 destination 3", "Westford Yard 2", c11.getDestinationTrackName());
|
|
Assert.assertEquals("c12 destination 3", "Westford Yard 1", c12.getDestinationTrackName());
|
|
|
|
Assert.assertEquals("c13 destination 3", "", c13.getDestinationTrackName());
|
|
Assert.assertNull("track should be null", c13.getTrack());
|
|
|
|
Assert.assertEquals("e1 destination 3", "", e1.getDestinationTrackName());
|
|
Assert.assertEquals("e2 destination 3", "", e2.getDestinationTrackName());
|
|
Assert.assertEquals("e3 destination 3", "", e3.getDestinationTrackName());
|
|
Assert.assertEquals("e4 destination 3", "", e4.getDestinationTrackName());
|
|
Assert.assertEquals("e5 destination 3", "", e5.getDestinationTrackName());
|
|
Assert.assertEquals("e6 destination 3", "Harvard Yard 1", e6.getDestinationTrackName());
|
|
Assert.assertEquals("e7 destination 3", "Harvard Yard 1", e7.getDestinationTrackName());
|
|
Assert.assertEquals("e8 destination 3", "Harvard Yard 1", e8.getDestinationTrackName());
|
|
|
|
train1.terminate();
|
|
|
|
// check car locations
|
|
Assert.assertEquals("c1 location", "Harvard Yard 1", c1.getTrackName());
|
|
Assert.assertEquals("c2 location", "Harvard Yard 2", c2.getTrackName());
|
|
Assert.assertEquals("c3 location", "Arlington Alternate Track", c3.getTrackName());
|
|
Assert.assertEquals("c4 location", "Boston Yard 2", c4.getTrackName());
|
|
|
|
Assert.assertEquals("c5 location", "Harvard Yard 2", c5.getTrackName());
|
|
Assert.assertEquals("c6 location", "Westford Yard 1", c6.getTrackName());
|
|
Assert.assertEquals("c7 location", "Harvard Yard 1", c7.getTrackName());
|
|
Assert.assertEquals("c8 location", "Arlington Spur", c8.getTrackName());
|
|
|
|
Assert.assertEquals("c9 location", "Arlington Alternate Track", c9.getTrackName());
|
|
Assert.assertEquals("c10 location", "Chelmsford Yard 1", c10.getTrackName());
|
|
Assert.assertEquals("c11 location", "Westford Yard 2", c11.getTrackName());
|
|
|
|
Assert.assertEquals("e1 location", "Harvard Yard 2", e1.getTrackName());
|
|
Assert.assertEquals("e2 location", "Harvard Yard 2", e2.getTrackName());
|
|
Assert.assertEquals("e3 location", "Harvard Yard 2", e3.getTrackName());
|
|
Assert.assertEquals("e4 location", "Harvard Yard 2", e4.getTrackName());
|
|
Assert.assertEquals("e5 location", "Harvard Yard 2", e5.getTrackName());
|
|
Assert.assertEquals("e6 location", "Harvard Yard 1", e6.getTrackName());
|
|
Assert.assertEquals("e7 location", "Harvard Yard 1", e7.getTrackName());
|
|
Assert.assertEquals("e8 location", "Harvard Yard 1", e8.getTrackName());
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
|
|
/**
|
|
* Test build using on time mode. Train departs staging and terminates into
|
|
* staging. Test number of engines, caboose. Train movement and car location
|
|
* updates. Cars in a kernel, engines in a consist.
|
|
*/
|
|
@Test
|
|
public void testBuildOnTimeOption() {
|
|
|
|
Setup.setBuildAggressive(true);
|
|
Setup.setBuildOnTime(true);
|
|
|
|
// create consist and a single engine for testing
|
|
Consist con1 = InstanceManager.getDefault(ConsistManager.class).newConsist("C1");
|
|
|
|
Engine e1 = engineManager.newRS("UP", "1");
|
|
e1.setModel("GP30");
|
|
e1.setOwnerName("AT");
|
|
e1.setBuilt("1957");
|
|
e1.setConsist(con1);
|
|
e1.setMoves(5);
|
|
Engine e2 = engineManager.newRS("SP", "2");
|
|
e2.setModel("GP30");
|
|
e2.setOwnerName("AT");
|
|
e2.setBuilt("1957");
|
|
e2.setConsist(con1);
|
|
e2.setMoves(5);
|
|
|
|
// single engine
|
|
Engine e3 = engineManager.newRS("SP", "3");
|
|
e3.setModel("GP40");
|
|
e3.setOwnerName("DAB");
|
|
e3.setBuilt("1957");
|
|
|
|
Assert.assertEquals("number of engines", 3, engineManager.getNumEntries());
|
|
|
|
// Create 2 staging locations
|
|
Location harvardStaging = locationManager.newLocation("Harvard Staging");
|
|
Track harvardTrk1 = harvardStaging.addTrack("Harvard Staging 1", Track.STAGING);
|
|
harvardTrk1.setLength(1000);
|
|
harvardTrk1.setQuickServiceEnabled(true);
|
|
Track harvardTrk2 = harvardStaging.addTrack("Harvard Staging 2", Track.STAGING);
|
|
harvardTrk2.setLength(1000);
|
|
harvardTrk2.setQuickServiceEnabled(true);
|
|
|
|
Location arlingtonStaging = locationManager.newLocation("Arlington Staging");
|
|
Track arlingtonTrk1 = arlingtonStaging.addTrack("Arlington Staging 1", Track.STAGING);
|
|
arlingtonTrk1.setLength(1000);
|
|
arlingtonTrk1.setQuickServiceEnabled(true);
|
|
|
|
// place all cars in Harvard
|
|
Car c1 = JUnitOperationsUtil.createAndPlaceCar("PU", "13", "Caboose", "32", "AT", "1943", harvardTrk1, 0);
|
|
c1.setCaboose(true);
|
|
Car c2 = JUnitOperationsUtil.createAndPlaceCar("SP", "23", "Boxcar", "30", "DAB", "1957", harvardTrk1, 1);
|
|
Car c3 = JUnitOperationsUtil.createAndPlaceCar("UP", "33", "Boxcar", "33", "DAB", "1944", harvardTrk1, 2);
|
|
Car c4 = JUnitOperationsUtil.createAndPlaceCar("UP", "43", "Boxcar", "40", "DAB", "1958", harvardTrk1, 3);
|
|
Car c5 = JUnitOperationsUtil.createAndPlaceCar("SP", "53", "Boxcar", "40", "DAB", "1958", harvardTrk1, 4);
|
|
Car c6 = JUnitOperationsUtil.createAndPlaceCar("NH", "63", "Boxcar", "40", "DAB", "1958", harvardTrk1, 5);
|
|
Car c7 = JUnitOperationsUtil.createAndPlaceCar("UP", "73", "Flat", "40", "DAB", "1958", harvardTrk2, 5);
|
|
Car c8 = JUnitOperationsUtil.createAndPlaceCar("SP", "83", "Boxcar", "40", "DAB", "1958", harvardTrk2, 4);
|
|
Car c9 = JUnitOperationsUtil.createAndPlaceCar("NH", "93", "Boxcar", "40", "DAB", "1944", harvardTrk2, 3);
|
|
Car c10 = JUnitOperationsUtil.createAndPlaceCar("NH", "103", "Boxcar", "40", "DAB", "1958", harvardTrk2, 2);
|
|
Car c11 = JUnitOperationsUtil.createAndPlaceCar("SP", "113", "Boxcar", "40", "DAB", "1958", harvardTrk2, 1);
|
|
|
|
CarManager carManager = InstanceManager.getDefault(CarManager.class);
|
|
Assert.assertEquals("number of cars", 11, carManager.getNumEntries());
|
|
|
|
Kernel k1 = InstanceManager.getDefault(KernelManager.class).newKernel("K1");
|
|
c2.setKernel(k1);
|
|
c3.setKernel(k1);
|
|
|
|
Kernel k2 = InstanceManager.getDefault(KernelManager.class).newKernel("K2");
|
|
c8.setKernel(k2);
|
|
c9.setKernel(k2);
|
|
c10.setKernel(k2);
|
|
|
|
// Create two routes with 2 location
|
|
Route rte1 = routeManager.newRoute("Harvard to Arlington");
|
|
rte1.addLocation(harvardStaging);
|
|
rte1.addLocation(arlingtonStaging);
|
|
|
|
Route rte2 = routeManager.newRoute("Arlington to Harvard");
|
|
rte2.addLocation(arlingtonStaging);
|
|
rte2.addLocation(harvardStaging);
|
|
|
|
// Create trains
|
|
Train train1 = trainManager.newTrain("Harvard to Arlington On Time 1");
|
|
train1.setRoute(rte1);
|
|
Train train2 = trainManager.newTrain("Harvard to Arlington On Time 2");
|
|
train2.setRoute(rte1);
|
|
|
|
Train train3 = trainManager.newTrain("Arlington to Harvard On Time 3");
|
|
train3.setRoute(rte2);
|
|
train3.setDepartureTime("0", "02", "00");
|
|
Train train4 = trainManager.newTrain("Arlington to Harvard On Time 4");
|
|
train4.setRoute(rte2);
|
|
train4.setDepartureTime("0", "04", "00");
|
|
|
|
// Place engines
|
|
Assert.assertEquals("Place e1", Track.OKAY, e1.setLocation(harvardStaging, harvardTrk1));
|
|
Assert.assertEquals("Place e2", Track.OKAY, e2.setLocation(harvardStaging, harvardTrk1));
|
|
Assert.assertEquals("Place e3", Track.OKAY, e3.setLocation(harvardStaging, harvardTrk2));
|
|
|
|
train1.setRequirements(Train.CABOOSE);
|
|
train1.setNumberEngines("2");
|
|
|
|
Assert.assertTrue(train1.build());
|
|
Assert.assertEquals("Train 1 After Build 1", true, train1.isBuilt());
|
|
|
|
// check that engines and cars have been moved
|
|
Assert.assertEquals("e1 destination", "Arlington Staging 1", e1.getTrackName());
|
|
Assert.assertEquals("e2 destination", "Arlington Staging 1", e2.getTrackName());
|
|
Assert.assertEquals("e3 destination", "Harvard Staging 2", e3.getTrackName());
|
|
|
|
Assert.assertEquals("c1 destination", "Arlington Staging 1", c1.getTrackName());
|
|
Assert.assertEquals("c2 destination", "Arlington Staging 1", c2.getTrackName());
|
|
Assert.assertEquals("c3 destination", "Arlington Staging 1", c3.getTrackName());
|
|
Assert.assertEquals("c4 destination", "Arlington Staging 1", c4.getTrackName());
|
|
Assert.assertEquals("c5 destination", "Arlington Staging 1", c5.getTrackName());
|
|
Assert.assertEquals("c6 destination", "Arlington Staging 1", c6.getTrackName());
|
|
|
|
Assert.assertEquals("c7 destination", "Harvard Staging 2", c7.getTrackName());
|
|
Assert.assertEquals("c8 destination", "Harvard Staging 2", c8.getTrackName());
|
|
Assert.assertEquals("c9 destination", "Harvard Staging 2", c9.getTrackName());
|
|
Assert.assertEquals("c10 destination", "Harvard Staging 2", c10.getTrackName());
|
|
Assert.assertEquals("c11 destination", "Harvard Staging 2", c11.getTrackName());
|
|
|
|
// confirm clone creation
|
|
Assert.assertEquals("number of cars", 17, carManager.getNumEntries());
|
|
Assert.assertEquals("number of engines", 5, engineManager.getNumEntries());
|
|
|
|
// only one staging track at Arlington build for train 2 should fail
|
|
Assert.assertFalse(train2.build());
|
|
Assert.assertEquals("Train 2 After Build", false, train2.isBuilt());
|
|
|
|
// return cars to Harvard staging
|
|
Assert.assertTrue(train3.build());
|
|
Assert.assertEquals("Train 3 After Build", true, train3.isBuilt());
|
|
|
|
// note that train2 departure time is before train3, build should fail
|
|
Assert.assertFalse(train2.build());
|
|
jmri.util.JUnitAppender.assertErrorMessage(
|
|
"Train (Harvard to Arlington On Time 2) departs at 0:00:00, train (Arlington to Harvard On Time 3) already built departs at 0:02:00");
|
|
// now have train2 depart at the same time as train3
|
|
train2.setDepartureTime("0", "02", "00");
|
|
|
|
Assert.assertTrue(train2.build());
|
|
Assert.assertEquals("Train 2 After Build", true, train2.isBuilt());
|
|
|
|
// check that engines and cars have been moved
|
|
Assert.assertEquals("e1 destination", "Harvard Staging 1", e1.getTrackName());
|
|
Assert.assertEquals("e2 destination", "Harvard Staging 1", e2.getTrackName());
|
|
Assert.assertEquals("e3 destination", "Arlington Staging 1", e3.getTrackName());
|
|
|
|
Assert.assertEquals("c1 destination", "Harvard Staging 1", c1.getTrackName());
|
|
Assert.assertEquals("c2 destination", "Harvard Staging 1", c2.getTrackName());
|
|
Assert.assertEquals("c3 destination", "Harvard Staging 1", c3.getTrackName());
|
|
Assert.assertEquals("c4 destination", "Harvard Staging 1", c4.getTrackName());
|
|
Assert.assertEquals("c5 destination", "Harvard Staging 1", c5.getTrackName());
|
|
Assert.assertEquals("c6 destination", "Harvard Staging 1", c6.getTrackName());
|
|
|
|
Assert.assertEquals("c7 destination", "Arlington Staging 1", c7.getTrackName());
|
|
Assert.assertEquals("c8 destination", "Arlington Staging 1", c8.getTrackName());
|
|
Assert.assertEquals("c9 destination", "Arlington Staging 1", c9.getTrackName());
|
|
Assert.assertEquals("c10 destination", "Arlington Staging 1", c10.getTrackName());
|
|
Assert.assertEquals("c11 destination", "Arlington Staging 1", c11.getTrackName());
|
|
|
|
// confirm clone creation
|
|
Assert.assertEquals("number of cars", 28, carManager.getNumEntries());
|
|
Assert.assertEquals("number of engines", 8, engineManager.getNumEntries());
|
|
|
|
Assert.assertTrue(train4.build());
|
|
Assert.assertEquals("Train 4 After Build", true, train4.isBuilt());
|
|
|
|
// check that engines and cars have been moved
|
|
Assert.assertEquals("e1 destination", "Harvard Staging 1", e1.getTrackName());
|
|
Assert.assertEquals("e2 destination", "Harvard Staging 1", e2.getTrackName());
|
|
Assert.assertEquals("e3 destination", "Harvard Staging 2", e3.getTrackName());
|
|
|
|
Assert.assertEquals("c1 destination", "Harvard Staging 1", c1.getTrackName());
|
|
Assert.assertEquals("c2 destination", "Harvard Staging 1", c2.getTrackName());
|
|
Assert.assertEquals("c3 destination", "Harvard Staging 1", c3.getTrackName());
|
|
Assert.assertEquals("c4 destination", "Harvard Staging 1", c4.getTrackName());
|
|
Assert.assertEquals("c5 destination", "Harvard Staging 1", c5.getTrackName());
|
|
Assert.assertEquals("c6 destination", "Harvard Staging 1", c6.getTrackName());
|
|
|
|
Assert.assertEquals("c7 destination", "Harvard Staging 2", c7.getTrackName());
|
|
Assert.assertEquals("c8 destination", "Harvard Staging 2", c8.getTrackName());
|
|
Assert.assertEquals("c9 destination", "Harvard Staging 2", c9.getTrackName());
|
|
Assert.assertEquals("c10 destination", "Harvard Staging 2", c10.getTrackName());
|
|
Assert.assertEquals("c11 destination", "Harvard Staging 2", c11.getTrackName());
|
|
|
|
// confirm clone creation
|
|
Assert.assertEquals("number of cars", 33, carManager.getNumEntries());
|
|
Assert.assertEquals("number of engines", 9, engineManager.getNumEntries());
|
|
|
|
// now terminate trains
|
|
train1.terminate();
|
|
train2.terminate();
|
|
train3.terminate();
|
|
train4.terminate();
|
|
|
|
// confirm clone destruction
|
|
Assert.assertEquals("number of cars", 11, carManager.getNumEntries());
|
|
Assert.assertEquals("number of engines", 3, engineManager.getNumEntries());
|
|
|
|
JUnitOperationsUtil.checkOperationsShutDownTask();
|
|
}
|
|
|
|
@Test
|
|
public void testTrainServicesCar() {
|
|
|
|
Route route = JUnitOperationsUtil.createFiveLocationRoute();
|
|
|
|
// to increase test coverage place the two cars in a kernel
|
|
Car c1 = JUnitOperationsUtil.createAndPlaceCar("A", "1", "Boxcar", "40", null, 0);
|
|
Car c2 = JUnitOperationsUtil.createAndPlaceCar("A", "2", "Boxcar", "40", null, 0);
|
|
Kernel k2 = InstanceManager.getDefault(KernelManager.class).newKernel("2 cars");
|
|
c1.setKernel(k2);
|
|
c2.setKernel(k2);
|
|
|
|
Train train1 = trainManager.newTrain("testTrainServicesCar");
|
|
|
|
// no route
|
|
Assert.assertFalse(train1.isServiceable(c1));
|
|
|
|
train1.setRoute(route);
|
|
// car not on track
|
|
Assert.assertFalse(train1.isServiceable(c1));
|
|
|
|
Location boston = locationManager.getLocationByName("Boston");
|
|
Track bostonSpur1 = boston.getTrackByName("Boston Spur 1", null);
|
|
|
|
Assert.assertEquals("Place car on track", Track.OKAY, c1.setLocation(boston, bostonSpur1));
|
|
|
|
// should be serviced by train
|
|
Assert.assertTrue(train1.isServiceable(c1));
|
|
|
|
// test road name option
|
|
train1.setCarRoadOption(Train.EXCLUDE_ROADS);
|
|
train1.addCarRoadName("A");
|
|
|
|
// should be not be serviced by train
|
|
Assert.assertFalse(train1.isServiceable(c1));
|
|
|
|
train1.setCarRoadOption(Train.INCLUDE_ROADS);
|
|
|
|
// should be serviced by train
|
|
Assert.assertTrue(train1.isServiceable(c1));
|
|
|
|
// test caboose road name option
|
|
train1.setCabooseRoadOption(Train.EXCLUDE_ROADS);
|
|
train1.addCabooseRoadName("A");
|
|
// should be serviced by train
|
|
Assert.assertTrue(train1.isServiceable(c1));
|
|
|
|
// make car a caboose
|
|
c1.setCaboose(true);
|
|
// should be not be serviced by train
|
|
Assert.assertFalse(train1.isServiceable(c1));
|
|
c1.setCaboose(false);
|
|
|
|
// give the car a destination
|
|
Location chelmsford = locationManager.getLocationByName("Chelmsford");
|
|
c1.setDestination(chelmsford, null);
|
|
|
|
// should be serviced by train
|
|
Assert.assertTrue(train1.isServiceable(c1));
|
|
|
|
// don't allow boxcars
|
|
chelmsford.deleteTypeName("Boxcar");
|
|
Assert.assertFalse(train1.isServiceable(c1));
|
|
chelmsford.addTypeName("Boxcar");
|
|
Assert.assertTrue(train1.isServiceable(c1));
|
|
|
|
// don't allow Boston spur to service train
|
|
bostonSpur1.setPickupOption(Track.EXCLUDE_TRAINS);
|
|
bostonSpur1.addPickupId(train1.getId());
|
|
Assert.assertFalse(train1.isServiceable(c1));
|
|
bostonSpur1.setPickupOption(Track.ANY);
|
|
Assert.assertTrue(train1.isServiceable(c1));
|
|
|
|
// train is to skip Boston
|
|
RouteLocation bostonRl = route.getLastLocationByName("Boston");
|
|
train1.addTrainSkipsLocation(bostonRl);
|
|
Assert.assertFalse(train1.isServiceable(c1));
|
|
train1.deleteTrainSkipsLocation(bostonRl);
|
|
Assert.assertTrue(train1.isServiceable(c1));
|
|
|
|
// train is to skip Chelmsford
|
|
RouteLocation chelmsfordRl = route.getLastLocationByName("Chelmsford");
|
|
train1.addTrainSkipsLocation(chelmsfordRl);
|
|
Assert.assertFalse(train1.isServiceable(c1));
|
|
train1.deleteTrainSkipsLocation(chelmsfordRl);
|
|
Assert.assertTrue(train1.isServiceable(c1));
|
|
|
|
// only allow car to terminal
|
|
train1.setSendCarsToTerminalEnabled(true);
|
|
Assert.assertFalse(train1.isServiceable(c1));
|
|
train1.setSendCarsToTerminalEnabled(false);
|
|
Assert.assertTrue(train1.isServiceable(c1));
|
|
|
|
// don't allow destination track to service train
|
|
Track chelmsfordSpur1 = chelmsford.getTrackByName("Chelmsford Spur 1", null);
|
|
c1.setDestination(chelmsford, chelmsfordSpur1);
|
|
chelmsfordSpur1.setDropOption(Track.EXCLUDE_TRAINS);
|
|
chelmsfordSpur1.addDropId(train1.getId());
|
|
Assert.assertFalse(train1.isServiceable(c1));
|
|
chelmsfordSpur1.setDropOption(Track.ANY);
|
|
Assert.assertTrue(train1.isServiceable(c1));
|
|
|
|
// give car a destination that can't be reached
|
|
Location acton = locationManager.getLocationByName("Acton");
|
|
Track actonSpur1 = acton.getTrackByName("Acton Spur 1", null);
|
|
|
|
c1.setDestination(acton, actonSpur1);
|
|
Assert.assertFalse(train1.isServiceable(c1));
|
|
}
|
|
|
|
@Test
|
|
public void testTrainServicesCarNoThrough() {
|
|
|
|
Route route = JUnitOperationsUtil.createFiveLocationRoute();
|
|
Train train1 = trainManager.newTrain("testTrainServicesCar");
|
|
train1.setRoute(route);
|
|
|
|
Car c1 = JUnitOperationsUtil.createAndPlaceCar("A", "1", "Boxcar", "40", null, 0);
|
|
|
|
// place car at start of route, send to last location of route
|
|
Location acton = locationManager.getLocationByName("Acton");
|
|
Track actonSpur1 = acton.getTrackByName("Acton Spur 1", null);
|
|
// give the car a destination
|
|
Location essex = locationManager.getLocationByName("Essex");
|
|
c1.setDestination(essex, null);
|
|
|
|
Assert.assertEquals("Place car on track", Track.OKAY, c1.setLocation(acton, actonSpur1));
|
|
|
|
// should be serviced by train
|
|
Assert.assertTrue(train1.isServiceable(c1));
|
|
|
|
// don't allow through cars
|
|
train1.setAllowThroughCarsEnabled(false);
|
|
Assert.assertFalse(train1.isServiceable(c1));
|
|
|
|
// caboose, car with FRED, and passenger cars are exceptions
|
|
c1.setCaboose(true);
|
|
Assert.assertTrue(train1.isServiceable(c1));
|
|
c1.setCaboose(false);
|
|
Assert.assertFalse(train1.isServiceable(c1));
|
|
|
|
c1.setFred(true);
|
|
Assert.assertTrue(train1.isServiceable(c1));
|
|
c1.setFred(false);
|
|
Assert.assertFalse(train1.isServiceable(c1));
|
|
|
|
c1.setPassenger(true);
|
|
Assert.assertTrue(train1.isServiceable(c1));
|
|
c1.setPassenger(false);
|
|
Assert.assertFalse(train1.isServiceable(c1));
|
|
}
|
|
|
|
@Test
|
|
public void testTrainServicesCarLocal() {
|
|
|
|
Route route = JUnitOperationsUtil.createFiveLocationRoute();
|
|
Train train1 = trainManager.newTrain("testTrainServicesCar");
|
|
train1.setRoute(route);
|
|
|
|
Car c1 = JUnitOperationsUtil.createAndPlaceCar("A", "1", "Boxcar", "40", null, 0);
|
|
Car c2 = JUnitOperationsUtil.createAndPlaceCar("A", "2", "Boxcar", "40", null, 0);
|
|
|
|
// place car at start of route
|
|
Location acton = locationManager.getLocationByName("Acton");
|
|
Track actonSpur1 = acton.getTrackByName("Acton Spur 1", null);
|
|
// give the car a destination
|
|
Track actonYard1 = acton.getTrackByName("Acton Yard 1", null);
|
|
c1.setDestination(acton, actonYard1);
|
|
|
|
Assert.assertEquals("Place car on track", Track.OKAY, c1.setLocation(acton, actonSpur1));
|
|
|
|
// place car middle of route
|
|
Location chelmsford = locationManager.getLocationByName("Chelmsford");
|
|
Track chelmsfordSpur1 = chelmsford.getTrackByName("Chelmsford Spur 1", null);
|
|
// give the car a destination
|
|
Track chelmsfordYard1 = chelmsford.getTrackByName("Chelmsford Yard 1", null);
|
|
c2.setDestination(chelmsford, chelmsfordYard1);
|
|
|
|
Assert.assertEquals("Place car on track", Track.OKAY, c2.setLocation(chelmsford, chelmsfordSpur1));
|
|
|
|
// local move should override
|
|
train1.setSendCarsToTerminalEnabled(true);
|
|
|
|
// should be serviced by train
|
|
Assert.assertTrue(train1.isServiceable(c1));
|
|
Assert.assertTrue(train1.isServiceable(c2));
|
|
|
|
// don't allow local moves
|
|
train1.setAllowLocalMovesEnabled(false);
|
|
Assert.assertFalse(train1.isServiceable(c1));
|
|
|
|
// caboose, car with FRED, and passenger cars are exceptions
|
|
c1.setCaboose(true);
|
|
Assert.assertTrue(train1.isServiceable(c1));
|
|
c1.setCaboose(false);
|
|
Assert.assertFalse(train1.isServiceable(c1));
|
|
|
|
c1.setFred(true);
|
|
Assert.assertTrue(train1.isServiceable(c1));
|
|
c1.setFred(false);
|
|
Assert.assertFalse(train1.isServiceable(c1));
|
|
|
|
c1.setPassenger(true);
|
|
Assert.assertTrue(train1.isServiceable(c1));
|
|
c1.setPassenger(false);
|
|
Assert.assertFalse(train1.isServiceable(c1));
|
|
}
|
|
|
|
private void placeFourEngines(Track track) {
|
|
// place 4 engines at the start of the route
|
|
Engine e1 = engineManager.newRS("E", "1");
|
|
e1.setModel("GP40");
|
|
Engine e2 = engineManager.newRS("E", "2");
|
|
e2.setModel("GP40");
|
|
Engine e3 = engineManager.newRS("E", "3");
|
|
e3.setModel("GP40");
|
|
Engine e4 = engineManager.newRS("E", "4");
|
|
e4.setModel("GP40");
|
|
|
|
Assert.assertEquals("confirm placement", Track.OKAY, e1.setLocation(track.getLocation(), track));
|
|
Assert.assertEquals("confirm placement", Track.OKAY, e2.setLocation(track.getLocation(), track));
|
|
Assert.assertEquals("confirm placement", Track.OKAY, e3.setLocation(track.getLocation(), track));
|
|
Assert.assertEquals("confirm placement", Track.OKAY, e4.setLocation(track.getLocation(), track));
|
|
}
|
|
|
|
private String getTrainStatus(Train train) {
|
|
String[] status = train.getStatus().split(" ");
|
|
return status[0];
|
|
}
|
|
|
|
// from here down is testing infrastructure
|
|
// Ensure minimal setup for log4J
|
|
@Override
|
|
@BeforeEach
|
|
public void setUp() {
|
|
super.setUp();
|
|
|
|
trainManager = InstanceManager.getDefault(TrainManager.class);
|
|
routeManager = InstanceManager.getDefault(RouteManager.class);
|
|
locationManager = InstanceManager.getDefault(LocationManager.class);
|
|
engineManager = InstanceManager.getDefault(EngineManager.class);
|
|
ct = InstanceManager.getDefault(CarTypes.class);
|
|
|
|
// turn off build fail messages
|
|
trainManager.setBuildMessagesEnabled(false);
|
|
// disable build reports
|
|
trainManager.setBuildReportEnabled(false);
|
|
|
|
ct.addName("Boxcar");
|
|
ct.addName("Flat");
|
|
ct.addName("Flat Car");
|
|
ct.addName("Gon");
|
|
ct.addName("Coil Car");
|
|
ct.addName(Bundle.getMessage("Caboose"));
|
|
|
|
Setup.setRouterBuildReportLevel(Setup.BUILD_REPORT_VERY_DETAILED);
|
|
Setup.setCarMoves(7); // set default to 7 moves per location
|
|
}
|
|
|
|
@Override
|
|
@AfterEach
|
|
public void tearDown() {
|
|
super.tearDown();
|
|
}
|
|
|
|
}
|