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. *
* 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); } }