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

140 lines
6.6 KiB
Java

package jmri.jmrit.operations;
import org.junit.Assert;
import org.junit.jupiter.api.*;
import jmri.InstanceManager;
import jmri.jmrit.operations.locations.LocationManager;
import jmri.jmrit.operations.locations.LocationManagerXml;
import jmri.jmrit.operations.rollingstock.cars.CarManager;
import jmri.jmrit.operations.rollingstock.cars.CarManagerXml;
import jmri.jmrit.operations.rollingstock.engines.EngineManager;
import jmri.jmrit.operations.rollingstock.engines.EngineManagerXml;
import jmri.jmrit.operations.routes.RouteManager;
import jmri.jmrit.operations.routes.RouteManagerXml;
import jmri.jmrit.operations.setup.OperationsSetupXml;
import jmri.jmrit.operations.trains.TrainManager;
import jmri.jmrit.operations.trains.TrainManagerXml;
import jmri.util.JUnitUtil;
/**
* Tests to make sure the demo files load and the managers are properly
* configured once they are loaded.
* <p>
* Still to do: Everything
*
* @author Paul Bender Copyright (C) 2015
*/
public class XmlLoadTest extends OperationsTestCase {
// load a set of operations files. These are the default
// demo files.
@Test
public void testDemoLoad() {
runTest("java/test/jmri/jmrit/operations/xml/DemoFiles/", 12, 12, 10, 210, 19);
Assertions.assertDoesNotThrow( () -> {
//shut down the AutoSave thread as it is running.
jmri.jmrit.operations.setup.Setup.setAutoSaveEnabled(false);
JUnitUtil.waitThreadTerminated("Operations Auto Save");
});
}
// load a set of operations files with trains that have been built.
// these are the demo files, but they were stored after building trains.
// This test fails intermittently
// XmlLoadTest.testDemoWithBuildLoad:51 Unexpected exception thrown: java.lang.NullPointerException
@Test
public void testDemoWithBuildLoad() {
runTest("java/test/jmri/jmrit/operations/xml/DemoFilesWithBuiltTrains/", 12, 12, 10, 210, 19);
Assertions.assertDoesNotThrow( () -> {
//shut down the AutoSave thread as it is running.
jmri.jmrit.operations.setup.Setup.setAutoSaveEnabled(false);
JUnitUtil.waitThreadTerminated("Operations Auto Save");
});
}
/*
* Private function to actually run the test
*
* @param directory String directory location of the files to load
*
* @param locs number of locations expected after load
*
* @param routes number of routes expected after load
*
* @param trains number of trains expected after load
*
* @param cars number of cars expected after load
*
* @param engines number of engines expected after load
*/
private void runTest(String directory, int locs, int routes, int trains,
int cars, int engines) {
Assert.assertEquals("Before read Number of Locations", 0,
InstanceManager.getDefault(LocationManager.class).getList().size());
Assert.assertEquals("Before read Number of Routes", 0,
InstanceManager.getDefault(RouteManager.class).getRoutesByNameList().size());
Assert.assertEquals("Before read Number of Trains", 0,
InstanceManager.getDefault(TrainManager.class).getTrainsByNameList().size());
Assert.assertEquals("Before read Number of Cars", 0,
InstanceManager.getDefault(CarManager.class).getList().size());
Assert.assertEquals("Before read Number of Engines", 0,
InstanceManager.getDefault(EngineManager.class).getList().size());
InstanceManager.getDefault(OperationsSetupXml.class);
OperationsSetupXml.setOperationsDirectoryName(directory.substring(0, directory.length() - 1));
Assertions.assertDoesNotThrow( () -> {
// use readFile, because load wraps readFile with a try catch.
InstanceManager.getDefault(OperationsSetupXml.class)
.readFile(OperationsSetupXml.getOperationsDirectoryName() +
"/" +
InstanceManager.getDefault(OperationsSetupXml.class).getOperationsFileName());
InstanceManager.getDefault(LocationManagerXml.class)
.readFile(OperationsSetupXml.getOperationsDirectoryName() +
"/" +
InstanceManager.getDefault(LocationManagerXml.class).getOperationsFileName());
InstanceManager.getDefault(RouteManagerXml.class)
.readFile(OperationsSetupXml.getOperationsDirectoryName() +
"/" +
InstanceManager.getDefault(RouteManagerXml.class).getOperationsFileName());
InstanceManager.getDefault(TrainManagerXml.class)
.readFile(OperationsSetupXml.getOperationsDirectoryName() +
"/" +
InstanceManager.getDefault(TrainManagerXml.class).getOperationsFileName());
InstanceManager.getDefault(CarManagerXml.class)
.readFile(OperationsSetupXml.getOperationsDirectoryName() +
"/" +
InstanceManager.getDefault(CarManagerXml.class).getOperationsFileName());
InstanceManager.getDefault(EngineManagerXml.class)
.readFile(OperationsSetupXml.getOperationsDirectoryName() +
"/" +
InstanceManager.getDefault(EngineManagerXml.class).getOperationsFileName());
},"Exception reading operations files");
// spot check to make sure the correct number of items were created.
Assert.assertEquals("Number of Locations", locs,
InstanceManager.getDefault(LocationManager.class).getList().size());
Assert.assertEquals("Number of Routes", routes,
InstanceManager.getDefault(RouteManager.class).getRoutesByNameList().size());
Assert.assertEquals("Number of Trains", trains,
InstanceManager.getDefault(TrainManager.class).getTrainsByNameList().size());
Assert.assertEquals("Number of Cars", cars, InstanceManager.getDefault(CarManager.class).getList().size());
Assert.assertEquals("Number of Engines", engines,
InstanceManager.getDefault(EngineManager.class).getList().size());
}
// from here down is testing infrastructure
// Ensure minimal setup for log4J
@BeforeEach
@Override
public void setUp() {
JUnitUtil.setUp();
reset();
// clear the operations directory name.
OperationsSetupXml.setOperationsDirectoryName("operations");
OperationsSetupXml.setFileLocation("temp" + java.io.File.separator);
}
}