944 lines
50 KiB
Java
944 lines
50 KiB
Java
package jmri.jmrit.dispatcher;
|
|
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
import java.nio.file.StandardCopyOption;
|
|
|
|
import jmri.*;
|
|
import jmri.configurexml.JmriConfigureXmlException;
|
|
import jmri.implementation.SignalSpeedMap;
|
|
import jmri.jmrit.logix.WarrantPreferences;
|
|
import jmri.util.*;
|
|
|
|
import org.junit.jupiter.api.*;
|
|
import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
|
|
import org.netbeans.jemmy.operators.JButtonOperator;
|
|
import org.netbeans.jemmy.operators.JFrameOperator;
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
|
|
/**
|
|
*
|
|
* @author SG 2020
|
|
*
|
|
* Tests Auto Active Trains Stopping
|
|
* There are four reasons trains stop normally.
|
|
* The track ahead is not allocated to the train.
|
|
* They have come to the end of the transit.
|
|
* The controlling signal is Zero speed (not tested here)
|
|
* They are paused by train action (not tested here)
|
|
* They are sent to manual mode. (not test here)
|
|
* There is one abnormal reason (not test here)
|
|
* The train has no occupied section that has been allocated to it.
|
|
* Stopping is cancelled when the train is stopping for a zero speed which then goes to a greater than zero speed before the train has
|
|
* completely stopped.
|
|
*
|
|
* This test is using SML. The loco is not speed profiled.
|
|
* We test stopping by sensor, stopping by previous block going vacant (train fits)
|
|
* and stopping by entering block (train does not fit)
|
|
* We test start to end no stops, start to end with a stop,
|
|
* and start to end with a stop that is aborted dues to conditions ahead changing.
|
|
*
|
|
*/
|
|
@DisabledIfSystemProperty(named ="java.awt.headless", matches ="true")
|
|
public class AutoActiveTrainsSMLStoppingTest {
|
|
|
|
// Only one aat at a time
|
|
private AutoActiveTrain aat = null;
|
|
|
|
private static final double TOLERANCE = 0.0001;
|
|
|
|
@SuppressWarnings("null") // spec says cannot happen, everything defined in test data.
|
|
@Test
|
|
public void testShowAndClose() throws JmriConfigureXmlException {
|
|
Assumptions.assumeFalse( Boolean.getBoolean("jmri.skipTestsRequiringSeparateRunning"),
|
|
"Ignoring intermittent test");
|
|
jmri.configurexml.ConfigXmlManager cm = new jmri.configurexml.ConfigXmlManager() {
|
|
};
|
|
WarrantPreferences.getDefault().setShutdown(WarrantPreferences.Shutdown.NO_MERGE);
|
|
|
|
// load layout file
|
|
java.io.File f = new java.io.File("java/test/jmri/jmrit/dispatcher/DispatcherSMLStoppingLayout3.xml");
|
|
Assertions.assertTrue(cm.load(f));
|
|
|
|
// insure logix etc fire up (This is an SSL Layout)
|
|
// InstanceManager.getDefault(jmri.LogixManager.class).activateAllLogixs();
|
|
InstanceManager.getDefault(jmri.jmrit.display.layoutEditor.LayoutBlockManager.class).initializeLayoutBlockPaths();
|
|
|
|
// load dispatcher, with all the correct options
|
|
OptionsFile.setDefaultFileName("java/test/jmri/jmrit/dispatcher/TestTrainDispatcherOptions.xml");
|
|
DispatcherFrame d = InstanceManager.getDefault(DispatcherFrame.class);
|
|
JFrameOperator dw = new JFrameOperator(Bundle.getMessage("TitleDispatcher"));
|
|
// signal mast manager
|
|
SignalMastManager smm = InstanceManager.getDefault(SignalMastManager.class);
|
|
|
|
checkAndSetSpeedsSSL();
|
|
SensorManager sm = InstanceManager.getDefault(SensorManager.class);
|
|
BlockManager bm = InstanceManager.getDefault(BlockManager.class);
|
|
//set sensors inactive
|
|
//for (Sensor s : sm.getNamedBeanSet()) {
|
|
// s.setState( Block.UNOCCUPIED);
|
|
//}
|
|
// place train on layout
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block South 1"), Block.OCCUPIED);
|
|
|
|
// *******************************************************************************
|
|
// Here start South - West - North -East South - Stop - using stopping sensors
|
|
// *******************************************************************************
|
|
d.loadTrainFromTrainInfo("SSL3TestTrain.xml");
|
|
|
|
assertThat(d.getActiveTrainsList().size()).withFailMessage("Train Loaded").isEqualTo(1);
|
|
|
|
ActiveTrain at = d.getActiveTrainsList().get(0);
|
|
aat = at.getAutoActiveTrain();
|
|
|
|
// trains loads and runs, 4 allocated sections, the one we are in and 3 ahead.
|
|
JUnitUtil.waitFor(() -> {
|
|
return(d.getAllocatedSectionsList().size()==4);
|
|
},"Allocated sections should be 4");
|
|
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Clear".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Signal West End Div now Clear");
|
|
JUnitUtil.waitFor(() -> {
|
|
return aat.getThrottle().getSpeedSetting() >= speedMedium;
|
|
}, "Failed to Start South - West - North -East South - Stop - using stopping sensors");
|
|
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West Switch"),Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block South 1"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Signal West End Div now Red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West Switch"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Clear".equals(smm.provideSignalMast("West-North").getAspect());
|
|
}, "West-North Clear");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block North"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Approach".equals(smm.provideSignalMast("North-East").getAspect());
|
|
}, "Signal West End Div now Clear");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block North"), Block.UNOCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block North"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("North-East").getAspect());
|
|
}, "Signal West End Div now red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East Switch"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.UNOCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block South 1"), Block.OCCUPIED);
|
|
//JUnitUtil.setBeanStateAndWait(sm.provideBlock("South 1"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East Switch"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("Sw-East-Cont").getAspect());
|
|
}, "Signal Sw-East-Cont Should go red");
|
|
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() - speedStopping ) < TOLERANCE );
|
|
}, "Failed to slow entering south. begin - end - stop - stopping sensors.");
|
|
// Set Stop Sensor
|
|
JUnitUtil.setBeanStateAndWait(sm.provideSensor("Stop South 1 Rev"), Sensor.ACTIVE);
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() ) < TOLERANCE );
|
|
}, "Failed to Stop at end - begin - end - stop - stopping sensors.");
|
|
|
|
// cancel (terminate) the train. The train is set not to terminate at end
|
|
// as we dont see the throttle go to zero if we do that.
|
|
|
|
JButtonOperator bo = new JButtonOperator(dw, Bundle.getMessage("TerminateTrain"));
|
|
bo.push();
|
|
// wait for cleanup to finish
|
|
JUnitUtil.waitFor(200);
|
|
|
|
assertThat((d.getActiveTrainsList().isEmpty())).withFailMessage("All trains terminated").isTrue();
|
|
|
|
|
|
// *******************************************************************************
|
|
// Here start South - West - North - Stop -East South - Stop - using stopping sensors
|
|
// *******************************************************************************
|
|
|
|
// block track at East.
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.OCCUPIED);
|
|
|
|
d.loadTrainFromTrainInfo("SSL3TestTrain.xml");
|
|
|
|
// trains loads and runs, 3 (east blocked) allocated sections, the one we are in and 2 ahead.
|
|
JUnitUtil.waitFor(() -> {
|
|
return(d.getAllocatedSectionsList().size()==3);
|
|
},"Allocated sections should be 3");
|
|
|
|
at = d.getActiveTrainsList().get(0);
|
|
aat = at.getAutoActiveTrain();
|
|
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Clear".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Signal West End Div now Clear");
|
|
assertEquals(sm.provideSensor("Dir West Fwd").getState(),Sensor.ACTIVE);
|
|
assertEquals(sm.provideSensor("Dir West Rev").getState(),Sensor.INACTIVE);
|
|
JUnitUtil.waitFor(() -> {
|
|
return aat.getThrottle().getSpeedSetting() >= speedMedium;
|
|
}, "Failed to Start South - West - North - Stop -East South - Stop - using stopping sensors");
|
|
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West Switch"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block South 1"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Sw-West-Cont no red");
|
|
JUnitUtil.setBeanStateAndWait(sm.provideSensor("Stop South 1 Rev"), Sensor.INACTIVE); // and stopping sensor
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West Switch"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Approach".equals(smm.provideSignalMast("West-North").getAspect());
|
|
}, "West-North Yellow");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block North"), Block.OCCUPIED);
|
|
// slows to stopping speed
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() - speedStopping ) < TOLERANCE );
|
|
}, "Failed to slow entering north. begin - stop north - go - end - stop");
|
|
// set stopping sensor
|
|
JUnitUtil.setBeanStateAndWait(sm.provideSensor("Stop North Rev"), Sensor.ACTIVE);
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() ) < TOLERANCE );
|
|
}, "Failed to Stop at North. end - North stop - end - stopping sensors.");
|
|
// free up block ahead
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Approach".equals(smm.provideSignalMast("North-East").getAspect());
|
|
}, "Signal West End Div now Clear");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West"), Block.UNOCCUPIED); // tail moves out
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.OCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("North-East").getAspect());
|
|
}, "Signal West End Div now Red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block North"), Block.UNOCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(sm.provideSensor("Stop North Rev"), Sensor.INACTIVE); // and stopping sensor
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East Switch"), Block.OCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("Sw-East-Cont").getAspect());
|
|
}, "Signal West End Div now Yellow");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.UNOCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block South 1"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East Switch"), Block.UNOCCUPIED);
|
|
assertEquals(bm.provideBlock("Block South 1").getState(),Block.OCCUPIED);
|
|
assertEquals(bm.provideBlock("Block East Switch").getState(),Block.UNOCCUPIED);
|
|
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() - speedStopping ) < TOLERANCE );
|
|
}, "Failed to slow entering south. begin - end - no stop - stopping sensors.");
|
|
// Set Stop Sensor
|
|
JUnitUtil.setBeanStateAndWait(sm.provideSensor("Stop South 1 Rev"),Sensor.ACTIVE);
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() ) < TOLERANCE );
|
|
}, "Failed to Stop at end - begin - end - no stops - stopping sensors.");
|
|
|
|
// cancel (terminate) the train. The train is set not to terminate at end
|
|
// as we dont see the throttle go to zero if we do that.
|
|
|
|
bo.push();
|
|
// wait for cleanup to finish
|
|
JUnitUtil.waitFor(200);
|
|
|
|
assertThat((d.getActiveTrainsList().isEmpty())).withFailMessage("All trains terminated").isTrue();
|
|
|
|
// *********************************************************************************************************
|
|
// Here start South - West - North - Start Stop - Cancel Stop -East South - Stop - using stopping sensors
|
|
// *********************************************************************************************************
|
|
|
|
// block track at East.
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.OCCUPIED);
|
|
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Signal West End Div now Clear");
|
|
|
|
d.loadTrainFromTrainInfo("SSL3TestTrain.xml");
|
|
|
|
at = d.getActiveTrainsList().get(0);
|
|
aat = at.getAutoActiveTrain();
|
|
|
|
// trains loads and runs, 3 (East Blocked) allocated sections, the one we are in and 2 ahead.
|
|
JUnitUtil.waitFor(() -> {
|
|
return(d.getAllocatedSectionsList().size()==3);
|
|
},"Allocated sections should be 3");
|
|
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Clear".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Signal West End Div now Clear");
|
|
assertEquals(sm.provideSensor("Dir West Fwd").getState(),Sensor.ACTIVE);
|
|
assertEquals(sm.provideSensor("Dir West Rev").getState(),Sensor.INACTIVE);
|
|
|
|
JUnitUtil.waitFor(100);
|
|
|
|
JUnitUtil.waitFor(() -> {
|
|
return aat.getThrottle().getSpeedSetting() >= speedMedium;
|
|
}, Float.toString(aat.getThrottle().getSpeedSetting()) + ":" + Float.toString(speedNormal));
|
|
// "Failed to Start South - West - North - Start Stop - Cancel Stop -East South - Stop - using stopping sensors[{}]",
|
|
// aat.getThrottle().getSpeedSetting());
|
|
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West Switch"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block South 1"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Sw-West-Cont no red");
|
|
JUnitUtil.setBeanStateAndWait(sm.provideSensor("Stop South 1 Rev"), Sensor.INACTIVE); // and stopping sensor
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West Switch"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Approach".equals(smm.provideSignalMast("West-North").getAspect());
|
|
}, "West-North Yellow");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block North"), Block.OCCUPIED);
|
|
// slows to stopping speed
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() - speedStopping ) < TOLERANCE );
|
|
}, "Failed to slow entering north. begin - stop north - go - end - stop");
|
|
|
|
// free up block ahead
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Approach".equals(smm.provideSignalMast("North-East").getAspect());
|
|
}, "Signal West End Div now Approach");
|
|
// Accelerates to
|
|
JUnitUtil.waitFor(() -> {
|
|
return aat.getThrottle().getSpeedSetting() >= speedMedium;
|
|
}, "Failed to slow entering north. begin - stop north - go - end - stop");
|
|
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West"), Block.UNOCCUPIED); // tail moves out
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block North"), Block.UNOCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(sm.provideSensor("Stop North Rev"), Sensor.INACTIVE); // and stopping sensor
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("North-East").getAspect());
|
|
}, "Signal West End Div now Red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East Switch"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Signal West End Cont now red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block South 1"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East Switch"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() - speedStopping ) < TOLERANCE );
|
|
}, "Failed to slow entering south. begin - end - no stop - stopping sensors.");
|
|
// Set Stop Sensor
|
|
JUnitUtil.setBeanStateAndWait(sm.provideSensor("Stop South 1 Rev"), Sensor.ACTIVE);
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() ) < TOLERANCE );
|
|
}, "Failed to Stop at end - begin - end - no stops - stopping sensors.");
|
|
|
|
// cancel (terminate) the train. The train is set not to terminate at end
|
|
// as we don't see the throttle go to zero if we do that.
|
|
|
|
bo.push();
|
|
// wait for cleanup to finish
|
|
JUnitUtil.waitFor(200);
|
|
|
|
assertThat((d.getActiveTrainsList().isEmpty())).withFailMessage("All trains terminated").isTrue();
|
|
|
|
// Clear the stopping sensors from the blocks. - TRain will fit so speed goes to zero when previous block goes inactive
|
|
|
|
Section ss1 = InstanceManager.getDefault(SectionManager.class).getSection("Section South 1");
|
|
Section sn = InstanceManager.getDefault(SectionManager.class).getSection("Section North");
|
|
Assertions.assertNotNull(ss1);
|
|
Assertions.assertNotNull(sn);
|
|
|
|
ss1.setReverseStoppingSensorName("");
|
|
ss1.setForwardStoppingSensorName("");
|
|
sn.setReverseStoppingSensorName("");
|
|
sn.setForwardStoppingSensorName("");
|
|
|
|
// *******************************************************************************
|
|
// Here start South - West - North -East South - Stop - using stop by previous block going inactive
|
|
// *******************************************************************************
|
|
d.loadTrainFromTrainInfo("SSL3TestTrain.xml");
|
|
|
|
assertThat(d.getActiveTrainsList().size()).withFailMessage("Train Loaded").isEqualTo(1);
|
|
|
|
at = d.getActiveTrainsList().get(0);
|
|
aat = at.getAutoActiveTrain();
|
|
|
|
// trains loads and runs, 4 allocated sections, the one we are in and 3 ahead.
|
|
JUnitUtil.waitFor(() -> {
|
|
return(d.getAllocatedSectionsList().size()==4);
|
|
},"Allocated sections should be 4");
|
|
|
|
// set up loco address
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Clear".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Signal West End Div now Clear begin - end - no stops - prev block inactive.");
|
|
JUnitUtil.waitFor(() -> {
|
|
return aat.getThrottle().getSpeedSetting() >= speedMedium;
|
|
}, "Failed to Start begin - begin - end - no stops - prev block inactive.");
|
|
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West Switch"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block South 1"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Sw-West-Cont no red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West Switch"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Clear".equals(smm.provideSignalMast("West-North").getAspect());
|
|
}, "West-North Clear");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block North"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West"), Block.UNOCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block North"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("North-East").getAspect());
|
|
}, "Signal West End Div now Red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East Switch"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Signal West End Div now Red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block South 1"), Block.OCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() - speedStopping ) < TOLERANCE );
|
|
}, "Failed to slow entering south. begin - end - no stops - prev block inactive.");
|
|
// clear penultimate Section.
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East Switch"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() ) < TOLERANCE );
|
|
}, "Failed to Stop at end - begin - end - no stops - prev block inactive.");
|
|
|
|
// cancel (terminate) the train. The train is set not to terminate at end
|
|
// as we dont see the throttle go to zero if we do that.
|
|
|
|
bo = new JButtonOperator(dw, Bundle.getMessage("TerminateTrain"));
|
|
bo.push();
|
|
// wait for cleanup to finish
|
|
JUnitUtil.waitFor(200);
|
|
|
|
// *******************************************************************************
|
|
// Here start South - West - North - Stop -East South - Stop - using prev block inactive.
|
|
// *******************************************************************************
|
|
|
|
// block track at East.
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.OCCUPIED);
|
|
|
|
d.loadTrainFromTrainInfo("SSL3TestTrain.xml");
|
|
|
|
assertThat(d.getActiveTrainsList().size()).withFailMessage("Train Loaded").isEqualTo(1);
|
|
|
|
at = d.getActiveTrainsList().get(0);
|
|
aat = at.getAutoActiveTrain();
|
|
|
|
// trains loads and runs, 3 (east Blocked) allocated sections, the one we are in and 2 ahead.
|
|
JUnitUtil.waitFor(() -> {
|
|
return(d.getAllocatedSectionsList().size()==3);
|
|
},"Allocated sections should be 3");
|
|
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Clear".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Signal West End Div now Clear");
|
|
|
|
JUnitUtil.waitFor(() -> {
|
|
return aat.getThrottle().getSpeedSetting() >= speedMedium;
|
|
}, "DFailed to Start begin - stop north - go - end - stop");
|
|
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West Switch"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block South 1"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Sw-West-Cont no red");
|
|
JUnitUtil.setBeanStateAndWait(sm.provideSensor("Stop South 1 Rev"), Sensor.INACTIVE); // and stopping sensor
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West Switch"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Approach".equals(smm.provideSignalMast("West-North").getAspect());
|
|
}, "West-North Yellow");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block North"), Block.OCCUPIED);
|
|
// slows to stopping speed
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("North-East").getAspect());
|
|
}, "Signal West End Div now Red");
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() - speedStopping ) < TOLERANCE );
|
|
}, "Failed to slow entering north. begin - stop north - go - end - prev block inactive.");
|
|
// free previous block
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() ) < TOLERANCE );
|
|
}, "Failed to Stop at North. begin - North stop - go - end prev block inactive.");
|
|
|
|
// free up block ahead
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Approach".equals(smm.provideSignalMast("North-East").getAspect());
|
|
}, "Signal West End Div now Approach");
|
|
JUnitUtil.waitFor(() -> {
|
|
return aat.getThrottle().getSpeedSetting() >= speedMedium;
|
|
}, "Failed to restart in north. begin - stop north - go - end - prev block inactive.");
|
|
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block North"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("North-East").getAspect());
|
|
}, "Signal West End Div now Red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East Switch"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Signal West End Cont is Red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block South 1"), Block.OCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() - speedStopping ) < TOLERANCE );
|
|
}, "Failed to slow entering south. begin - North stop - go - end prev block inactive.");
|
|
// Set Stop Sensor
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East Switch"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() ) < TOLERANCE );
|
|
}, "Failed to Stop at end - begin - North stop - go - end prev block inactive.");
|
|
|
|
// cancel (terminate) the train. The train is set not to terminate at end
|
|
// as we dont see the throttle go to zero if we do that.
|
|
|
|
bo.push();
|
|
// wait for cleanup to finish
|
|
JUnitUtil.waitFor(200);
|
|
|
|
assertThat((d.getActiveTrainsList().isEmpty())).withFailMessage("All trains terminated").isTrue();
|
|
|
|
// *********************************************************************************************************
|
|
// Here start South - West - North - Start Stop - Cancel Stop -East South - Stop - using previous block
|
|
// *********************************************************************************************************
|
|
|
|
// block track at East.
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.OCCUPIED);
|
|
|
|
d.loadTrainFromTrainInfo("SSL3TestTrain.xml");
|
|
|
|
assertThat(d.getActiveTrainsList().size()).withFailMessage("Train Loaded").isEqualTo(1);
|
|
|
|
at = d.getActiveTrainsList().get(0);
|
|
aat = at.getAutoActiveTrain();
|
|
|
|
// trains loads and runs, 3 (east Blocked) allocated sections, the one we are in and 2 ahead.
|
|
JUnitUtil.waitFor(() -> {
|
|
return(d.getAllocatedSectionsList().size()==3);
|
|
},"Allocated sections should be 3");
|
|
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Clear".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Signal West End Div now Clear begin - start stop north - go - end - stop on previous block");
|
|
|
|
JUnitUtil.waitFor(() -> {
|
|
return aat.getThrottle().getSpeedSetting() >= speedMedium;
|
|
}, "Failed to Start begin - start stop north - go - end - stop");
|
|
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West Switch"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block South 1"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Sw-West-Cont no red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West Switch"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Approach".equals(smm.provideSignalMast("West-North").getAspect());
|
|
}, "West-North Yellow");
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() - speedMedium ) < TOLERANCE );
|
|
}, "Failed to slow for yellow entering north. begin - start stop north - go - end - stop on previous block");
|
|
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block North"), Block.OCCUPIED);
|
|
// slows to stopping speed
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() - speedStopping ) < TOLERANCE );
|
|
}, "Failed to slow entering north. begin - start stop north - go - end - stop on previous block");
|
|
|
|
// free up block ahead
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Approach".equals(smm.provideSignalMast("North-East").getAspect());
|
|
}, "Signal West End Div now Clear");
|
|
// Accelerates to
|
|
JUnitUtil.waitFor(() -> {
|
|
return aat.getThrottle().getSpeedSetting() >= speedMedium;
|
|
}, "Failed to accelerate. begin - start stop north - go - end - stop on previous block");
|
|
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West"), Block.UNOCCUPIED); // tail moves out
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block North"), Block.UNOCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.OCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("North-East").getAspect());
|
|
}, "Signal West End Div now Red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East Switch"), Block.OCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Signal West End Div is Red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.UNOCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block South 1"), Block.OCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() - speedStopping ) < TOLERANCE );
|
|
}, "Failed to slow entering south. begin - start stop north - go - end - stop on previous block");
|
|
// Set Stop Sensor
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East Switch"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() ) < TOLERANCE );
|
|
}, "Failed to Stop at end -begin - start stop north - go - end - stop on previous block");
|
|
|
|
// cancel (terminate) the train. The train is set not to terminate at end
|
|
// as we don't see the throttle go to zero if we do that.
|
|
|
|
bo.push();
|
|
// wait for cleanup to finish
|
|
JUnitUtil.waitFor(200);
|
|
|
|
// *******************************************************************************
|
|
// Here start South - West - North -East South - Stop - - on entry train dont fit
|
|
// *******************************************************************************
|
|
|
|
// make all blocks zero length
|
|
for (Block b : bm.getNamedBeanSet()) {
|
|
b.setLength(0.0f);
|
|
}
|
|
|
|
d.loadTrainFromTrainInfo("SSL3TestTrain.xml");
|
|
|
|
assertThat(d.getActiveTrainsList().size()).withFailMessage("Train Loaded").isEqualTo(1);
|
|
|
|
at = d.getActiveTrainsList().get(0);
|
|
aat = at.getAutoActiveTrain();
|
|
|
|
// trains loads and runs, 4 allocated sections, the one we are in and 3 ahead.
|
|
JUnitUtil.waitFor(() -> {
|
|
return(d.getAllocatedSectionsList().size()==4);
|
|
},"Allocated sections should be 4");
|
|
|
|
// set up loco address
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Clear".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Signal West End Div now Clear");
|
|
JUnitUtil.waitFor(() -> {
|
|
return aat.getThrottle().getSpeedSetting() >= speedMedium;
|
|
}, "Failed to Start begin - begin - end - no stops - train dont fit.");
|
|
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West Switch"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block South 1"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Sw-West-Cont no red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West Switch"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Clear".equals(smm.provideSignalMast("West-North").getAspect());
|
|
}, "West-North Clear");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block North"), Block.OCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Approach".equals(smm.provideSignalMast("North-East").getAspect());
|
|
}, "Signal West End Div now Clear");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West"), Block.UNOCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block North"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("North-East").getAspect());
|
|
}, "Signal West End Div now Red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East Switch"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Signal West End cont red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block South 1"), Block.OCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() ) < TOLERANCE );
|
|
}, "Failed to Stop at end - begin - end - no stops - train dont fit.");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East Switch"), Block.UNOCCUPIED);
|
|
|
|
// cancel (terminate) the train. The train is set not to terminate at end
|
|
// as we dont see the throttle go to zero if we do that.
|
|
|
|
bo = new JButtonOperator(dw, Bundle.getMessage("TerminateTrain"));
|
|
bo.push();
|
|
// wait for cleanup to finish
|
|
JUnitUtil.waitFor(200);
|
|
|
|
// *******************************************************************************
|
|
// Here start South - West - North - Stop -East South - Stop - train dont fit
|
|
// *******************************************************************************
|
|
|
|
// block track at East.
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.OCCUPIED);
|
|
|
|
d.loadTrainFromTrainInfo("SSL3TestTrain.xml");
|
|
|
|
assertThat(d.getActiveTrainsList().size()).withFailMessage("Train Loaded").isEqualTo(1);
|
|
|
|
at = d.getActiveTrainsList().get(0);
|
|
aat = at.getAutoActiveTrain();
|
|
|
|
// trains loads and runs, 3 (East Blocked) allocated sections, the one we are in and 2 ahead.
|
|
JUnitUtil.waitFor(() -> {
|
|
return(d.getAllocatedSectionsList().size()==3);
|
|
},"Allocated sections should be 3");
|
|
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Clear".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Signal West End Div now Clear");
|
|
|
|
JUnitUtil.waitFor(() -> {
|
|
return aat.getThrottle().getSpeedSetting() >= speedMedium;
|
|
}, "Failed to start South - West - North - Stop -East South - Stop - train dont fit");
|
|
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West Switch"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block South 1"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Sw-West-Cont no red");
|
|
JUnitUtil.setBeanStateAndWait(sm.provideSensor("Stop South 1 Rev"), Sensor.INACTIVE); // and stopping sensor
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West Switch"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Approach".equals(smm.provideSignalMast("West-North").getAspect());
|
|
}, "West-North Yellow");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block North"), Block.OCCUPIED);
|
|
// slows to stopping speed
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() ) < TOLERANCE );
|
|
}, "Failed to Stop at North. begin - North stop - go - end train dont fit.");
|
|
|
|
// free up block ahead
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Approach".equals(smm.provideSignalMast("North-East").getAspect());
|
|
}, "Signal West End Div now Clear");
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() - speedMedium ) < TOLERANCE );
|
|
}, "Failed to restart in north. begin - stop north - go - end - train dont fit.");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West"), Block.UNOCCUPIED); // free block behind
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block North"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("North-East").getAspect());
|
|
}, "Signal West End Div now Red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East Switch"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Signal West End Div now Yellow");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block South 1"), Block.OCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() ) < TOLERANCE );
|
|
}, "Failed to Stop at end - begin - North stop - go - end train dont fit");
|
|
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East Switch"), Block.UNOCCUPIED); // clean up to add next go round
|
|
|
|
// cancel (terminate) the train. The train is set not to terminate at end
|
|
// as we dont see the throttle go to zero if we do that.
|
|
|
|
bo.push();
|
|
// wait for cleanup to finish
|
|
JUnitUtil.waitFor(200);
|
|
|
|
assertThat((d.getActiveTrainsList().isEmpty())).withFailMessage("All trains terminated").isTrue();
|
|
|
|
// *********************************************************************************************************
|
|
// Here start South - West - North - Start Stop - Cancel Stop -East South - Stop - on entry train dont fit
|
|
// *********************************************************************************************************
|
|
|
|
// block track at East.
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.OCCUPIED);
|
|
|
|
d.loadTrainFromTrainInfo("SSL3TestTrain.xml");
|
|
|
|
assertThat(d.getActiveTrainsList().size()).withFailMessage("Train Loaded").isEqualTo(1);
|
|
|
|
at = d.getActiveTrainsList().get(0);
|
|
aat = at.getAutoActiveTrain();
|
|
|
|
// trains loads and runs, 3 (east Blocked) allocated sections, the one we are in and 2 ahead.
|
|
JUnitUtil.waitFor(() -> {
|
|
return(d.getAllocatedSectionsList().size()==3);
|
|
},"Allocated sections should be 3");
|
|
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Clear".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Signal West End Div now Clear");
|
|
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Clear".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Signal West End Div now Clear begin - start stop north - go - end - stop on previous block");
|
|
|
|
JUnitUtil.waitFor(() -> {
|
|
return aat.getThrottle().getSpeedSetting() >= speedMedium;
|
|
}, "Failed to Start begin - start stop north - go - end - stop");
|
|
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West Switch"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block South 1"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Sw-West-Cont no red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West"), Block.OCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() - speedMedium ) < TOLERANCE );
|
|
}, "Failed to slow for yellow - start stop north - go - end - Stop - on entry train dont fit");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West Switch"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Approach".equals(smm.provideSignalMast("West-North").getAspect());
|
|
}, "West-North Yellow");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block North"), Block.OCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("North-East").getAspect());
|
|
}, "Signal West End Div now Red");
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() ) < TOLERANCE );
|
|
}, "Failed to stop - start stop north - go - end - Stop - on entry train dont fit");
|
|
|
|
// free up block ahead
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Approach".equals(smm.provideSignalMast("North-East").getAspect());
|
|
}, "Signal West End Div now Approach");
|
|
// Accelerates to
|
|
JUnitUtil.waitFor(() -> {
|
|
return aat.getThrottle().getSpeedSetting() >= speedMedium;
|
|
}, "Failed to accelerate. begin - start stop north - go - end - Stop - on entry train dont fit");
|
|
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block West"), Block.UNOCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block North"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("North-East").getAspect());
|
|
}, "Signal West End Div now Red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East Switch"), Block.OCCUPIED);
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East"), Block.UNOCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return "Stop".equals(smm.provideSignalMast("Sw-West-Cont").getAspect());
|
|
}, "Signal West End Div now Red");
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block South 1"), Block.OCCUPIED);
|
|
JUnitUtil.waitFor(() -> {
|
|
return (Math.abs(aat.getThrottle().getSpeedSetting() ) < TOLERANCE );
|
|
}, "Failed to Stop at end -begin - start stop north - go - end - Stop - on entry train dont fit");
|
|
|
|
JUnitUtil.setBeanStateAndWait(bm.provideBlock("Block East Switch"), Block.UNOCCUPIED); // clean up
|
|
|
|
// cancel (terminate) the train. The train is set not to terminate at end
|
|
// as we don't see the throttle go to zero if we do that.
|
|
|
|
bo.push();
|
|
// wait for cleanup to finish
|
|
JUnitUtil.waitFor(200);
|
|
|
|
assertThat((d.getActiveTrainsList().isEmpty())).withFailMessage("All trains terminated").isTrue();
|
|
JFrameOperator aw = new JFrameOperator("AutoTrains");
|
|
|
|
aw.requestClose();
|
|
dw.requestClose();
|
|
|
|
// cleanup window
|
|
JUnitUtil.dispose(d);
|
|
InstanceManager.getDefault(jmri.SignalMastManager.class).dispose();
|
|
InstanceManager.getDefault(jmri.SignalMastLogicManager.class).dispose();
|
|
|
|
JUnitAppender.assertWarnMessage("This Logic North-East to Sw-West-Cont is not using the Layout Editor or its Blocks, "
|
|
+ "the associated Section will not be populated correctly");
|
|
JUnitAppender.assertWarnMessage("This Logic Sw-West-Cont to West-North is not using the Layout Editor or its Blocks, "
|
|
+ "the associated Section will not be populated correctly");
|
|
JUnitAppender.assertWarnMessage("This Logic West-North to North-East is not using the Layout Editor or its Blocks, "
|
|
+ "the associated Section will not be populated correctly");
|
|
|
|
|
|
}
|
|
|
|
private float speedMedium = 0.0f;
|
|
private float speedStopping = 0.0f;
|
|
private float speedSlow = 0.0f;
|
|
private float speedRestrictedSlow = 0.0f;
|
|
private float speedRestricted = 0.0f;
|
|
private float speedNormal = 0.0f;
|
|
|
|
private void checkAndSetSpeedsSSL() {
|
|
// Check we have got the right signal map
|
|
speedStopping = InstanceManager.getDefault(SignalSpeedMap.class)
|
|
.getSpeed(InstanceManager.getDefault(DispatcherFrame.class).getStoppingSpeedName())/100.0f;
|
|
assertEquals(0.1f, speedStopping, TOLERANCE);
|
|
speedNormal = InstanceManager.getDefault(SignalSpeedMap.class)
|
|
.getSpeed("Normal")/100.0f;
|
|
assertEquals(1.0f, speedNormal, TOLERANCE );
|
|
speedMedium = InstanceManager.getDefault(SignalSpeedMap.class)
|
|
.getSpeed("Medium")/100.0f;
|
|
assertEquals(0.5f, speedMedium, TOLERANCE);
|
|
speedSlow = InstanceManager.getDefault(SignalSpeedMap.class)
|
|
.getSpeed("Slow")/100.0f;
|
|
assertEquals(0.31f, speedSlow, TOLERANCE);
|
|
speedRestricted = InstanceManager.getDefault(SignalSpeedMap.class)
|
|
.getSpeed("Restricted")/100.0f;
|
|
assertEquals(0.35f, speedRestricted, TOLERANCE);
|
|
speedRestrictedSlow = InstanceManager.getDefault(SignalSpeedMap.class)
|
|
.getSpeed("RestrictedSlow")/100.0f;
|
|
assertEquals(0.1f, speedRestrictedSlow, TOLERANCE);
|
|
assertEquals(SignalSpeedMap.PERCENT_THROTTLE, InstanceManager.getDefault(SignalSpeedMap.class)
|
|
.getInterpretation(), TOLERANCE);
|
|
}
|
|
|
|
// Where in user space the "signals" file tree should live
|
|
private static File outBaseTrainInfo = null;
|
|
private static File outBaseSignal = null;
|
|
|
|
// the file we create that we will delete
|
|
private static Path outPathTrainInfo1 = null;
|
|
private static Path outPathWarrentPreferences = null;
|
|
|
|
@BeforeAll
|
|
public static void doOnce() throws IOException {
|
|
JUnitUtil.setUp();
|
|
JUnitUtil.resetFileUtilSupport();
|
|
// set up users files in temp tst area
|
|
outBaseTrainInfo = new File(FileUtil.getUserFilesPath(), "dispatcher/traininfo");
|
|
outBaseSignal = new File(FileUtil.getUserFilesPath(), "signal");
|
|
|
|
FileUtil.createDirectory(outBaseTrainInfo);
|
|
{
|
|
Path inPath = new File(new File(FileUtil.getProgramPath(), "java/test/jmri/jmrit/dispatcher/traininfo"),
|
|
"SSL3TestTrain.xml").toPath();
|
|
outPathTrainInfo1 = new File(outBaseTrainInfo, "SSL3TestTrain.xml").toPath();
|
|
Files.copy(inPath, outPathTrainInfo1, StandardCopyOption.REPLACE_EXISTING);
|
|
}
|
|
FileUtil.createDirectory(outBaseSignal);
|
|
{
|
|
Path inPath = new File(new File(FileUtil.getProgramPath(), "java/test/jmri/jmrit/dispatcher/signal"),
|
|
"WarrantPreferences.xml").toPath();
|
|
outPathWarrentPreferences = new File(outBaseSignal, "WarrantPreferences.xml").toPath();
|
|
Files.copy(inPath, outPathWarrentPreferences, StandardCopyOption.REPLACE_EXISTING);
|
|
}
|
|
|
|
}
|
|
|
|
@AfterAll
|
|
public static void unDoOnce() {
|
|
try {
|
|
Files.delete(outPathTrainInfo1);
|
|
} catch (IOException e) {
|
|
// doesnt matter its gonezo
|
|
}
|
|
try {
|
|
Files.delete(outPathWarrentPreferences);
|
|
} catch (IOException e) {
|
|
// doesnt matter its gonezo
|
|
}
|
|
}
|
|
|
|
@BeforeEach
|
|
public void setUp() {
|
|
JUnitUtil.setUp();
|
|
JUnitUtil.resetFileUtilSupport();
|
|
JUnitUtil.resetProfileManager();
|
|
JUnitUtil.resetInstanceManager();
|
|
JUnitUtil.initRosterConfigManager();
|
|
JUnitUtil.initDebugThrottleManager();
|
|
}
|
|
|
|
@AfterEach
|
|
public void tearDown() {
|
|
JUnitUtil.clearShutDownManager();
|
|
JUnitUtil.resetWindows(false,false);
|
|
JUnitUtil.resetFileUtilSupport();
|
|
JUnitUtil.tearDown();
|
|
}
|
|
}
|