209 lines
7.8 KiB
Java
209 lines
7.8 KiB
Java
package jmri.jmrit.logixng.tools;
|
|
|
|
import static org.junit.jupiter.api.Assertions.fail;
|
|
|
|
import java.util.Arrays;
|
|
|
|
import jmri.*;
|
|
import jmri.implementation.VirtualSignalHead;
|
|
|
|
/**
|
|
* Test import of Logix to LogixNG.
|
|
* <P>
|
|
* This class creates a Logix, test that it works, imports it to LogixNG,
|
|
* deletes the original Logix and then test that the new LogixNG works.
|
|
* <P>
|
|
* This test tests expression signalMast
|
|
*
|
|
* @author Daniel Bergqvist (C) 2020
|
|
*/
|
|
public class ImportExpressionSignalMastTest extends ImportExpressionComplexTestBase {
|
|
|
|
private SignalHead signalHead;
|
|
private SignalMast signalMast;
|
|
private ConditionalVariable cv;
|
|
|
|
private enum SignalMastEnum {
|
|
EqualsClear(Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS, "Approach Medium", "Medium Clear", "Clear"),
|
|
EqualsApproachMedium(Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS, "Clear", "Medium Clear", "Approach Medium"),
|
|
EqualsMediumClear(Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS, "Clear", "Approach Medium", "Medium Clear"),
|
|
EqualsMediumApproachSlow(Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS, "Clear", "Approach Medium", "Medium Approach Slow"),
|
|
EqualsApproachSlow(Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS, "Clear", "Approach Medium", "Approach Slow"),
|
|
EqualsApproach(Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS, "Clear", "Approach Medium", "Approach"),
|
|
EqualsMediumApproach(Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS, "Clear", "Approach Medium", "Medium Approach"),
|
|
EqualsSlowClear(Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS, "Clear", "Approach Medium", "Slow Clear"),
|
|
EqualsSlowApproach(Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS, "Clear", "Approach Medium", "Slow Approach"),
|
|
EqualsPermissive(Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS, "Clear", "Approach Medium", "Permissive"),
|
|
EqualsPermissiveMedium(Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS, "Clear", "Approach Medium", "Permissive Medium"),
|
|
EqualsRestricting(Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS, "Clear", "Approach Medium", "Restricting"),
|
|
EqualsStopAndProceed(Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS, "Clear", "Approach Medium", "Stop and Proceed"),
|
|
EqualsStopAndProceedMedium(Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS, "Clear", "Approach Medium", "Stop and Proceed Medium"),
|
|
EqualsStop(Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS, "Clear", "Approach Medium", "Stop"),
|
|
SIGNAL_MAST_LIT(Conditional.Type.SIGNAL_MAST_LIT, null, null, null),
|
|
SIGNAL_MAST_HELD(Conditional.Type.SIGNAL_MAST_HELD, null, null, null);
|
|
|
|
final Conditional.Type type;
|
|
final String initAspect;
|
|
final String failAspect;
|
|
final String successAspect;
|
|
|
|
SignalMastEnum(Conditional.Type type, String initAspect, String failAspect, String successAspect) {
|
|
this.type = type;
|
|
this.initAspect = initAspect;
|
|
this.failAspect = failAspect;
|
|
this.successAspect = successAspect;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected Enum<?>[] getEnums() {
|
|
return SignalMastEnum.values();
|
|
}
|
|
|
|
@Override
|
|
public void setNamedBeanState(Enum<?> e, Setup setup) throws JmriException {
|
|
SignalMastEnum me = SignalMastEnum.valueOf(e.name());
|
|
|
|
cv.setType(me.type);
|
|
cv.setDataString(me.successAspect);
|
|
|
|
switch (me) {
|
|
case EqualsClear:
|
|
case EqualsApproachMedium:
|
|
case EqualsMediumClear:
|
|
case EqualsMediumApproachSlow:
|
|
case EqualsApproachSlow:
|
|
case EqualsApproach:
|
|
case EqualsMediumApproach:
|
|
case EqualsSlowClear:
|
|
case EqualsSlowApproach:
|
|
case EqualsPermissive:
|
|
case EqualsPermissiveMedium:
|
|
case EqualsRestricting:
|
|
case EqualsStopAndProceed:
|
|
case EqualsStopAndProceedMedium:
|
|
case EqualsStop:
|
|
switch (setup) {
|
|
case Init: signalMast.setAspect(me.initAspect); break;
|
|
case Fail1:
|
|
case Fail2:
|
|
case Fail3: signalMast.setAspect(me.failAspect); break;
|
|
case Succeed1:
|
|
case Succeed2:
|
|
case Succeed3:
|
|
case Succeed4: signalMast.setAspect(me.successAspect); break;
|
|
default: fail("Unknown enum: "+e.name());
|
|
}
|
|
break;
|
|
|
|
case SIGNAL_MAST_LIT:
|
|
switch (setup) {
|
|
case Init:
|
|
case Fail1:
|
|
case Fail2:
|
|
case Fail3: signalMast.setLit(false); break;
|
|
case Succeed1:
|
|
case Succeed2:
|
|
case Succeed3:
|
|
case Succeed4: signalMast.setLit(true); break;
|
|
default: fail("Unknown enum: "+e.name());
|
|
}
|
|
break;
|
|
|
|
case SIGNAL_MAST_HELD:
|
|
switch (setup) {
|
|
case Init:
|
|
case Fail1:
|
|
case Fail2:
|
|
case Fail3: signalMast.setHeld(false); break;
|
|
case Succeed1:
|
|
case Succeed2:
|
|
case Succeed3:
|
|
case Succeed4: signalMast.setHeld(true); break;
|
|
default: fail("Unknown enum: "+e.name());
|
|
}
|
|
break;
|
|
|
|
default:
|
|
fail("Unknown enum: "+e.name());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public ConditionalVariable newConditionalVariable() {
|
|
// Note that the signal head IH1 created here are also used to test the signal mast.
|
|
signalHead = new MySignalHead("IH1");
|
|
InstanceManager.getDefault(SignalHeadManager.class).register(signalHead);
|
|
|
|
// The signal head IH1 created above is also used here in signal mast IF$shsm:AAR-1946:CPL(IH1)
|
|
signalMast = InstanceManager.getDefault(SignalMastManager.class).provideSignalMast("IF$shsm:AAR-1946:CPL(IH1)");
|
|
|
|
cv = new ConditionalVariable();
|
|
cv.setName("IF$shsm:AAR-1946:CPL(IH1)");
|
|
return cv;
|
|
}
|
|
|
|
|
|
|
|
private static class MySignalHead extends VirtualSignalHead {
|
|
|
|
MySignalHead(String sys) {
|
|
super(sys);
|
|
}
|
|
|
|
private static final int[] VALID_STATES = new int[]{
|
|
DARK,
|
|
RED,
|
|
YELLOW,
|
|
GREEN,
|
|
LUNAR,
|
|
FLASHRED,
|
|
FLASHYELLOW,
|
|
FLASHGREEN,
|
|
FLASHLUNAR,
|
|
}; // No int for Lunar
|
|
|
|
private static final String[] VALID_STATE_KEYS = new String[]{
|
|
"SignalHeadStateDark",
|
|
"SignalHeadStateRed",
|
|
"SignalHeadStateYellow",
|
|
"SignalHeadStateGreen",
|
|
"SignalHeadStateLunar",
|
|
"SignalHeadStateFlashingRed",
|
|
"SignalHeadStateFlashingYellow",
|
|
"SignalHeadStateFlashingGreen",
|
|
"SignalHeadStateFlashingLunar",
|
|
};
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
@Override
|
|
public int[] getValidStates() {
|
|
return Arrays.copyOf(VALID_STATES, VALID_STATES.length);
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
@Override
|
|
public String[] getValidStateKeys() {
|
|
return Arrays.copyOf(VALID_STATE_KEYS, VALID_STATE_KEYS.length);
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
@Override
|
|
public String[] getValidStateNames() {
|
|
String[] stateNames = new String[VALID_STATE_KEYS.length];
|
|
int i = 0;
|
|
for (String stateKey : VALID_STATE_KEYS) {
|
|
stateNames[i++] = stateKey; // No need to use Bundle for this test
|
|
}
|
|
return stateNames;
|
|
}
|
|
}
|
|
|
|
}
|