package jmri.jmrix.loconet.configurexml;
import jmri.jmrix.loconet.*;
import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.util.stream.Stream;
import jmri.JmriException;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.io.TempDir;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
/**
* Test that configuration files can be read and then stored again consistently.
* When done across various versions of schema, this checks ability to read
* older files in newer versions; completeness of reading code; etc.
*
* Functional checks, that e.g. check the details of a specific type are being
* read properly, should go into another type-specific test class.
*
* The functionality comes from the common base class, this is just here to
* insert the test suite into the JUnit hierarchy at the right place.
*
* @author Bob Jacobsen Copyright 2009, 2014
* @since 2.5.5 (renamed & reworked in 3.9 series)
*/
public class LoadAndStoreTest extends jmri.configurexml.LoadAndStoreTestBase {
public static Stream data() {
return getFiles(new File("java/test/jmri/jmrix/loconet/configurexml"), false, true);
}
@ParameterizedTest(name = "{index}: {0} (pass={1})")
@MethodSource("data")
public void loadAndStoreTest(File file, boolean pass) throws IOException, JmriException, ParseException {
super.loadLoadStoreFileCheck(file);
}
public LoadAndStoreTest() {
super(SaveType.Config, false);
}
LocoNetSystemConnectionMemo memo1;
LocoNetInterfaceScaffold lnis1;
LocoNetSystemConnectionMemo memo2;
LocoNetInterfaceScaffold lnis2;
/**
* {@inheritDoc}
* Ensure that a LocoNet connection is available
*/
@BeforeEach
@Override
public void setUp(@TempDir java.io.File tempDir) throws IOException {
super.setUp(tempDir);
// 1st LocoNet connection L
memo1 = new LocoNetSystemConnectionMemo();
lnis1 = new LocoNetInterfaceScaffold(memo1);
memo1.setLnTrafficController(lnis1);
jmri.InstanceManager.store(lnis1, jmri.jmrix.loconet.LnTrafficController.class);
memo1.configureCommandStation(LnCommandStationType.COMMAND_STATION_DCS100,false,false,false,false,false);
memo1.configureManagers(); // Does this generate autonomous loconet traffic? Needs a wait?
jmri.InstanceManager.store(memo1,LocoNetSystemConnectionMemo.class);
// 2nd LocoNet connection L2
memo2 = new LocoNetSystemConnectionMemo();
lnis2 = new LocoNetInterfaceScaffold(memo1);
memo2.setLnTrafficController(lnis2);
jmri.InstanceManager.store(lnis2, jmri.jmrix.loconet.LnTrafficController.class);
memo2.configureCommandStation(LnCommandStationType.COMMAND_STATION_DCS100,false,false,false,false,false);
memo2.configureManagers(); // Does this generate autonomous loconet traffic? Needs a wait?
jmri.InstanceManager.store(memo2,LocoNetSystemConnectionMemo.class);
jmri.InstanceManager.setDefault(jmri.jmrix.loconet.LnTrafficController.class, lnis1);
}
/**
* {@inheritDoc}
* Ensure that a LocoNet connection is available
*/
@AfterEach
@Override
public void tearDown() {
memo1.dispose();
memo2.dispose();
jmri.util.JUnitUtil.removeMatchingThreads("LnPowerManager LnTrackStatusUpdateThread");
jmri.util.JUnitUtil.removeMatchingThreads("LnSensorUpdateThread");
super.tearDown();
}
}