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

228 lines
8.0 KiB
Java

package jmri.jmrit.operations.trains.trainbuilder;
import org.junit.Assert;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import jmri.InstanceManager;
import jmri.jmrit.operations.OperationsTestCase;
import jmri.jmrit.operations.locations.*;
import jmri.jmrit.operations.rollingstock.cars.Car;
import jmri.jmrit.operations.rollingstock.cars.CarManager;
/**
* Tests for the TrainBuilderBase class
*
* @author Daniel Boudreau Copyright (C) 2021
*/
public class TrainBuilderBaseTest extends OperationsTestCase {
private LocationManager lmanager;
private CarManager cmanager;
TrainBuilderBase tbb;
// NOTE: this test uses reflection to test a protected method.
java.lang.reflect.Method sortCarsOnFifoLifoTracks = null;
@Test
public void testCtor() {
TrainBuilderBase tb = new TrainBuilderBase();
Assert.assertNotNull("Train Builder Constructor", tb);
}
// test protected method sortCarsOnFifoLifoTracks
@Test
public void testCarOrderNORMAL() {
String carTypes[] = Bundle.getMessage("carTypeNames").split(",");
// start by creating a track
Location A = lmanager.newLocation("A");
Track interchangeTrack = A.addTrack("track", Track.INTERCHANGE);
interchangeTrack.setLength(1000);
interchangeTrack.setServiceOrder(Track.NORMAL);
java.util.Calendar cal = java.util.Calendar.getInstance();
java.util.Date date = cal.getTime();
// place 3 cars on the track.
Car a = cmanager.newRS("ABC", "123");
a.setTypeName(carTypes[1]);
a.setLength("50");
a.setLastDate(date);
a.setLocation(A, interchangeTrack);
cal.add(java.util.Calendar.MINUTE, 2);
date = cal.getTime();
Car b = cmanager.newRS("ABC", "321");
b.setTypeName(carTypes[1]);
b.setLength("50");
b.setLastDate(date);
b.setLocation(A, interchangeTrack);
cal.add(java.util.Calendar.MINUTE, 2);
date = cal.getTime();
Car c = cmanager.newRS("ABC", "111");
c.setTypeName(carTypes[1]);
c.setLength("50");
c.setLastDate(date);
c.setLocation(A, interchangeTrack);
// and set the car list up.
tbb.setCarList(new java.util.ArrayList<>());
tbb.getCarList().add(a);
tbb.getCarList().add(b);
tbb.getCarList().add(c);
try {
// with Track.NORMAL order, the car you ask for is the
// car you get.
sortCarsOnFifoLifoTracks.invoke(tbb);
Assert.assertEquals("NORMAL Order, 123 first", a, tbb.getCarList().get(0));
Assert.assertEquals("NORMAL Order, 321 second", b, tbb.getCarList().get(1));
Assert.assertEquals("NORMAL Order, 111 last", c, tbb.getCarList().get(2));
} catch (java.lang.IllegalAccessException iae) {
Assert.fail("Could not access method getCarOrder in TrackBuilder class");
} catch (java.lang.reflect.InvocationTargetException ite) {
Throwable cause = ite.getCause();
Assert.fail("getCarOrder executon failed reason: " + cause.getMessage());
}
}
@Test
public void testCarOrderFIFO() {
String carTypes[] = Bundle.getMessage("carTypeNames").split(",");
// start by creating a track
Location A = lmanager.newLocation("A");
Track interchangeTrack = A.addTrack("track", Track.INTERCHANGE);
interchangeTrack.setLength(1000);
interchangeTrack.setServiceOrder(Track.FIFO);
java.util.Calendar cal = java.util.Calendar.getInstance();
java.util.Date date = cal.getTime();
// and placing 3 cars on the track.
Car a = cmanager.newRS("ABC", "123");
a.setTypeName(carTypes[1]);
a.setLength("50");
a.setLastDate(date);
a.setLocation(A, interchangeTrack);
cal.add(java.util.Calendar.MINUTE, 2);
date = cal.getTime();
Car b = cmanager.newRS("ABC", "321");
b.setTypeName(carTypes[1]);
b.setLength("50");
b.setLastDate(date);
b.setLocation(A, interchangeTrack);
cal.add(java.util.Calendar.MINUTE, 2);
date = cal.getTime();
Car c = cmanager.newRS("ABC", "111");
c.setTypeName(carTypes[1]);
c.setLength("50");
c.setLastDate(date);
c.setLocation(A, interchangeTrack);
// and set the car list up.
tbb.setCarList(new java.util.ArrayList<>());
tbb.getCarList().add(c);
tbb.getCarList().add(a);
tbb.getCarList().add(b);
try {
// FIFO
sortCarsOnFifoLifoTracks.invoke(tbb);
Assert.assertEquals("FIFO Order, 123 first", a, tbb.getCarList().get(0));
Assert.assertEquals("FIFO Order, 321 second", b, tbb.getCarList().get(1));
Assert.assertEquals("FIFO Order, 111 last", c, tbb.getCarList().get(2));
} catch (java.lang.IllegalAccessException iae) {
Assert.fail("Could not access method getCarOrder in TrackBuilder class");
} catch (java.lang.reflect.InvocationTargetException ite) {
Throwable cause = ite.getCause();
Assert.fail("getCarOrder executon failed reason: " + cause.getMessage());
}
}
@Test
public void testCarOrderLIFO() {
String carTypes[] = Bundle.getMessage("carTypeNames").split(",");
// start by creating a track
Location A = lmanager.newLocation("A");
Track interchangeTrack = A.addTrack("track", Track.INTERCHANGE);
interchangeTrack.setLength(1000);
interchangeTrack.setServiceOrder(Track.LIFO);
java.util.Calendar cal = java.util.Calendar.getInstance();
java.util.Date date = cal.getTime();
// and placing 3 cars on the track.
Car a = cmanager.newRS("ABC", "123");
a.setTypeName(carTypes[1]);
a.setLength("50");
a.setLastDate(date);
a.setLocation(A, interchangeTrack);
cal.add(java.util.Calendar.MINUTE, 2);
date = cal.getTime();
Car b = cmanager.newRS("ABC", "321");
b.setTypeName(carTypes[1]);
b.setLength("50");
b.setLastDate(date);
b.setLocation(A, interchangeTrack);
cal.add(java.util.Calendar.MINUTE, 2);
date = cal.getTime();
Car c = cmanager.newRS("ABC", "111");
c.setTypeName(carTypes[1]);
c.setLength("50");
c.setLastDate(date);
c.setLocation(A, interchangeTrack);
// and set the car list up.
tbb.setCarList(new java.util.ArrayList<>());
tbb.getCarList().add(c);
tbb.getCarList().add(a);
tbb.getCarList().add(b);
try {
// LIFO
sortCarsOnFifoLifoTracks.invoke(tbb);
Assert.assertEquals("LIFO Order, 123 first", c, tbb.getCarList().get(0));
Assert.assertEquals("LIFO Order, 321 second", b, tbb.getCarList().get(1));
Assert.assertEquals("LIFO Order, 111 last", a, tbb.getCarList().get(2));
} catch (java.lang.IllegalAccessException iae) {
Assert.fail("Could not access method getCarOrder in TrackBuilder class");
} catch (java.lang.reflect.InvocationTargetException ite) {
Throwable cause = ite.getCause();
Assert.fail("getCarOrder executon failed reason: " + cause.getMessage());
}
}
@Override
@BeforeEach
public void setUp() {
super.setUp();
// setup managers
lmanager = InstanceManager.getDefault(LocationManager.class);
cmanager = InstanceManager.getDefault(CarManager.class);
tbb = new TrainBuilderBase();
try {
sortCarsOnFifoLifoTracks = tbb.getClass().getDeclaredMethod("sortCarsOnFifoLifoTracks");
} catch (java.lang.NoSuchMethodException nsm) {
Assert.fail("Could not find method sortCarsOnFifoLifoTracks in TrackBuilder class: ");
}
// override the default permissions.
Assert.assertNotNull(sortCarsOnFifoLifoTracks);
sortCarsOnFifoLifoTracks.setAccessible(true);
}
}