1003 lines
58 KiB
Java
1003 lines
58 KiB
Java
package jmri;
|
|
|
|
import jmri.util.JUnitAppender;
|
|
import jmri.util.JUnitUtil;
|
|
import jmri.implementation.VirtualSignalHead;
|
|
import jmri.jmrit.logix.OBlockManager;
|
|
import jmri.jmrit.logix.WarrantManager;
|
|
|
|
import org.junit.jupiter.api.*;
|
|
|
|
import static jmri.Conditional.*;
|
|
import static jmri.ConditionalVariable.*;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
|
|
/**
|
|
* Tests for the ConditionalVariable class
|
|
*
|
|
* @author Bob Jacobsen Copyright (C) 2016
|
|
*/
|
|
public class ConditionalVariableTest {
|
|
|
|
@Test
|
|
public void testCtor() {
|
|
|
|
NamedBean bean;
|
|
NamedBean otherBean;
|
|
String deviceName = "3";
|
|
String otherDeviceName = "4";
|
|
|
|
// Start with testing the exception handling in the constructor
|
|
JUnitUtil.resetInstanceManager();
|
|
JUnitUtil.initInternalTurnoutManagerThrowException();
|
|
JUnitUtil.initLightManagerThrowException();
|
|
JUnitUtil.initMemoryManagerThrowException();
|
|
JUnitUtil.initInternalSensorManagerThrowException();
|
|
JUnitUtil.initSignalHeadManagerThrowException();
|
|
JUnitUtil.initSignalMastManagerThrowException();
|
|
JUnitUtil.initWarrantManagerThrowException();
|
|
JUnitUtil.initOBlockManagerThrowException();
|
|
|
|
ConditionalVariable cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.SENSOR_ACTIVE, deviceName, false);
|
|
assertNull( cv.getNamedBean(), "getNamedBean() returns null");
|
|
JUnitAppender.assertErrorMessage("invalid sensor name= \"3\" in state variable");
|
|
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.TURNOUT_THROWN, deviceName, false);
|
|
assertNull( cv.getNamedBean(), "getNamedBean() returns null");
|
|
JUnitAppender.assertErrorMessage("invalid turnout name= \"3\" in state variable");
|
|
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.MEMORY_EQUALS, deviceName, false);
|
|
assertNull( cv.getNamedBean(), "getNamedBean() returns null");
|
|
JUnitAppender.assertErrorMessage("invalid memory name= \"3\" in state variable");
|
|
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.LIGHT_ON, deviceName, false);
|
|
assertNull( cv.getNamedBean(), "getNamedBean() returns null");
|
|
JUnitAppender.assertErrorMessage("invalid light name= \"3\" in state variable");
|
|
|
|
// Note that the signal head IH1 created here are also used to test the signal mast.
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.SIGNAL_HEAD_RED, "IH1", false);
|
|
assertNull( cv.getNamedBean(), "getNamedBean() returns null");
|
|
JUnitAppender.assertWarnMessage("could not provide \"IH1\" in constructor");
|
|
|
|
// The signal head IH1 created above is also used here in signal mast IF$shsm:AAR-1946:CPL(IH1)
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS, "IF$shsm:AAR-1946:CPL(IH1)", false);
|
|
assertNull( cv.getNamedBean(), "getNamedBean() returns null");
|
|
JUnitAppender.assertErrorMessage("invalid signalmast name= \"IF$shsm:AAR-1946:CPL(IH1)\" in state variable");
|
|
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.CONDITIONAL_TRUE, "IX:AUTO:0001C1", false);
|
|
assertNull( cv.getNamedBean(), "getNamedBean() returns null");
|
|
JUnitAppender.assertErrorMessage("invalid conditional; name= \"IX:AUTO:0001C1\" in state variable");
|
|
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.ROUTE_OCCUPIED, "IW3", false);
|
|
assertNull( cv.getNamedBean(), "getNamedBean() returns null");
|
|
JUnitAppender.assertWarnMessage("could not provide \"IW3\" in constructor");
|
|
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.BLOCK_STATUS_EQUALS, "OB3", false);
|
|
assertNull( cv.getNamedBean(), "getNamedBean() returns null");
|
|
JUnitAppender.assertWarnMessage("could not provide \"OB3\" in constructor");
|
|
|
|
|
|
JUnitUtil.resetInstanceManager();
|
|
JUnitUtil.initInternalTurnoutManager();
|
|
JUnitUtil.initInternalLightManager();
|
|
JUnitUtil.initInternalSensorManager();
|
|
JUnitUtil.initDebugThrottleManager();
|
|
JUnitUtil.initLogixManager();
|
|
JUnitUtil.initIdTagManager();
|
|
|
|
bean = InstanceManager.getDefault(SensorManager.class).provideSensor(deviceName);
|
|
otherBean = InstanceManager.getDefault(SensorManager.class).provideSensor(otherDeviceName);
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.SENSOR_ACTIVE, deviceName, false);
|
|
assertTrue( bean.equals(cv.getNamedBean().getBean()), "getNamedBean() returns correct bean");
|
|
cv.setName(otherDeviceName);
|
|
assertTrue( otherBean.equals(cv.getNamedBean().getBean()), "setName() sets correct bean");
|
|
assertTrue( "Sensor \"4\" state is \"Sensor Active\"".equals(cv.toString()),
|
|
"toString() returns correct value");
|
|
|
|
bean = InstanceManager.getDefault(TurnoutManager.class).provideTurnout(deviceName);
|
|
otherBean = InstanceManager.getDefault(TurnoutManager.class).provideTurnout(otherDeviceName);
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.TURNOUT_THROWN, deviceName, false);
|
|
assertTrue( bean.equals(cv.getNamedBean().getBean()), "getNamedBean() returns correct bean");
|
|
cv.setName(otherDeviceName);
|
|
assertTrue( otherBean.equals(cv.getNamedBean().getBean()), "setName() sets correct bean");
|
|
assertTrue( "Turnout \"4\" state is \"Turnout Thrown\"".equals(cv.toString()),
|
|
"toString() returns correct value");
|
|
|
|
bean = InstanceManager.getDefault(MemoryManager.class).provideMemory(deviceName);
|
|
otherBean = InstanceManager.getDefault(MemoryManager.class).provideMemory(otherDeviceName);
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.MEMORY_EQUALS, deviceName, false);
|
|
assertTrue( bean.equals(cv.getNamedBean().getBean()), "getNamedBean() returns correct bean");
|
|
cv.setName(otherDeviceName);
|
|
assertTrue( otherBean.equals(cv.getNamedBean().getBean()), "setName() sets correct bean");
|
|
cv.setDataString("A desired memory value");
|
|
assertTrue( "Memory \"4\" = value \"A desired memory value\"".equals(cv.toString()),
|
|
"toString() returns correct value");
|
|
cv.setType(Conditional.Type.MEMORY_COMPARE);
|
|
cv.setDataString("MemoryVariable");
|
|
assertTrue( "Memory \"4\" = Memory \"MemoryVariable\"".equals(cv.toString()),
|
|
"toString() returns correct value");
|
|
|
|
bean = InstanceManager.getDefault(LightManager.class).provideLight(deviceName);
|
|
otherBean = InstanceManager.getDefault(LightManager.class).provideLight(otherDeviceName);
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.LIGHT_ON, deviceName, false);
|
|
assertTrue( bean.equals(cv.getNamedBean().getBean()), "getNamedBean() returns correct bean");
|
|
cv.setName(otherBean.getSystemName());
|
|
assertTrue( otherBean.equals(cv.getNamedBean().getBean()), "setName() sets correct bean");
|
|
assertTrue( "Light \"IL4\" state is \"Light On\"".equals(cv.toString()),
|
|
"toString() returns correct value");
|
|
|
|
// Note that the signal head IH1 created here are also used to test the signal mast.
|
|
SignalHead signalHeadIH1 = new VirtualSignalHead("IH1");
|
|
SignalHead signalHeadIH2 = new VirtualSignalHead("IH2");
|
|
InstanceManager.getDefault(SignalHeadManager.class).register(signalHeadIH1);
|
|
InstanceManager.getDefault(SignalHeadManager.class).register(signalHeadIH2);
|
|
bean = InstanceManager.getDefault(SignalHeadManager.class).getSignalHead("IH1");
|
|
otherBean = InstanceManager.getDefault(SignalHeadManager.class).getSignalHead("IH2");
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.SIGNAL_HEAD_RED, "IH1", false);
|
|
assertEquals( bean, cv.getNamedBean().getBean(), "getNamedBean() returns correct bean");
|
|
cv.setName("IH2");
|
|
assertEquals( otherBean, cv.getNamedBean().getBean(),"setName() sets correct bean");
|
|
assertTrue( "Signal Head \"IH2\" Appearance is \"Red\"".equals(cv.toString()),
|
|
"toString() returns correct value");
|
|
cv.setType(Conditional.Type.SIGNAL_HEAD_LIT);
|
|
assertTrue( "Signal Head \"IH2\" state is \"Lit\"".equals(cv.toString()),
|
|
"toString() returns correct value");
|
|
|
|
// The signal head IH1 created above is also used here in signal mast IF$shsm:AAR-1946:CPL(IH1)
|
|
bean = InstanceManager.getDefault(SignalMastManager.class).provideSignalMast("IF$shsm:AAR-1946:CPL(IH1)");
|
|
otherBean = InstanceManager.getDefault(SignalMastManager.class).provideSignalMast("IF$shsm:AAR-1946:CPL(IH2)");
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS, "IF$shsm:AAR-1946:CPL(IH1)", false);
|
|
assertTrue( bean.equals(cv.getNamedBean().getBean()), "getNamedBean() returns correct bean");
|
|
cv.setName("IF$shsm:AAR-1946:CPL(IH2)");
|
|
assertTrue( otherBean.equals(cv.getNamedBean().getBean()), "setName() sets correct bean");
|
|
cv.setDataString("Approach");
|
|
assertTrue( "Signal Mast \"IF$shsm:AAR-1946:CPL(IH2)\" Aspect is \"Approach\"".equals(cv.toString()),
|
|
"toString() returns correct value");
|
|
cv.setType(Conditional.Type.SIGNAL_MAST_LIT);
|
|
assertTrue( "Signal Mast \"IF$shsm:AAR-1946:CPL(IH2)\" state is \"Lit\"".equals(cv.toString()),
|
|
"toString() returns correct value");
|
|
|
|
InstanceManager.getDefault(LogixManager.class).createNewLogix("IX:AUTO:0002");
|
|
bean = InstanceManager.getDefault(ConditionalManager.class).createNewConditional("IX:AUTO:0001C1", "Conditional");
|
|
otherBean = InstanceManager.getDefault(ConditionalManager.class).createNewConditional("IX:AUTO:0001C2", "Conditional");
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.CONDITIONAL_TRUE, "IX:AUTO:0001C1", false);
|
|
assertTrue( bean.equals(cv.getNamedBean().getBean()), "getNamedBean() returns correct bean");
|
|
cv.setName("IX:AUTO:0001C2");
|
|
assertTrue( otherBean.equals(cv.getNamedBean().getBean()), "setName() sets correct bean");
|
|
cv.setGuiName("A Gui name");
|
|
assertTrue( "Conditional \"A Gui name\" state is \"Conditional True\"".equals(cv.toString()),
|
|
"toString() returns correct value");
|
|
|
|
bean = InstanceManager.getDefault(WarrantManager.class).provideWarrant("IW3");
|
|
otherBean = InstanceManager.getDefault(WarrantManager.class).provideWarrant("IW4");
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.ROUTE_OCCUPIED, "IW3", false);
|
|
assertTrue( bean.equals(cv.getNamedBean().getBean()), "getNamedBean() returns correct bean");
|
|
cv.setName("IW4");
|
|
assertTrue( otherBean.equals(cv.getNamedBean().getBean()), "setName() sets correct bean");
|
|
assertTrue( "WarrantRoute \"IW4\" state is \"Occupied\"".equals(cv.toString()),
|
|
"toString() returns correct value");
|
|
|
|
bean = InstanceManager.getDefault(OBlockManager.class).provideOBlock("OB3");
|
|
otherBean = InstanceManager.getDefault(OBlockManager.class).provideOBlock("OB4");
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.BLOCK_STATUS_EQUALS, "OB3", false);
|
|
assertTrue( bean.equals(cv.getNamedBean().getBean()), "getNamedBean() returns correct bean");
|
|
cv.setName("OB4");
|
|
assertTrue( otherBean.equals(cv.getNamedBean().getBean()), "setName() sets correct bean");
|
|
cv.setDataString("block error");
|
|
assertTrue( "OBlock Status \"OB4\" state is \"block error\"".equals(cv.toString()),
|
|
"toString() returns correct value");
|
|
|
|
// Test a bad device name
|
|
cv.setName("A bad device name");
|
|
// setName should not change the bean if called with wrong name. For example, it should not set the bean to null.
|
|
assertTrue( otherBean.equals(cv.getNamedBean().getBean()), "getName() still has correct bean");
|
|
}
|
|
|
|
@Test
|
|
public void testEnumOperator() {
|
|
// OPERATOR_NONE = 4;
|
|
assertEquals( 4, Operator.NONE.getIntValue(), "Operator.getIntValue() returns correct value");
|
|
// OPERATOR_AND = 1;
|
|
assertEquals( 1, Operator.AND.getIntValue(), "Operator.getIntValue() returns correct value");
|
|
// OPERATOR_OR = 5;
|
|
assertEquals( 5, Operator.OR.getIntValue(), "Operator.getIntValue() returns correct value");
|
|
|
|
// OPERATOR_AND = 1;
|
|
assertTrue( Operator.getOperatorFromIntValue(1) == Operator.AND, "Operator.getOperatorFromIntValue() returns correct value");
|
|
// OPERATOR_NONE = 4;
|
|
assertTrue( Operator.getOperatorFromIntValue(4) == Operator.NONE, "Operator.getOperatorFromIntValue() returns correct value");
|
|
// OPERATOR_OR = 5;
|
|
assertTrue( Operator.getOperatorFromIntValue(5) == Operator.OR, "Operator.getOperatorFromIntValue() returns correct value");
|
|
|
|
// Test illegal operator
|
|
Exception ex = assertThrows( IllegalArgumentException.class,
|
|
() -> Operator.getOperatorFromIntValue(-1),
|
|
"Operator.getOperatorFromIntValue(-1) throws IllegalArgumentException");
|
|
assertNotNull(ex);
|
|
}
|
|
|
|
@Test
|
|
public void testConstants() {
|
|
// It might be a good idea to change constants into enums.
|
|
// These tests ensures that the values of the constants stay the same
|
|
// if that change is done.
|
|
|
|
assertEquals( 5, ConditionalVariable.NUM_COMPARE_OPERATIONS);
|
|
assertEquals( 1, ConditionalVariable.LESS_THAN);
|
|
assertEquals( 2, ConditionalVariable.LESS_THAN_OR_EQUAL);
|
|
assertEquals( 3, ConditionalVariable.EQUAL);
|
|
assertEquals( 4, ConditionalVariable.GREATER_THAN_OR_EQUAL);
|
|
assertEquals( 5, ConditionalVariable.GREATER_THAN);
|
|
}
|
|
|
|
@Test
|
|
public void testEquals() {
|
|
ConditionalVariable c1 = new ConditionalVariable(false, Operator.AND, Conditional.Type.SENSOR_INACTIVE, "name", false);
|
|
ConditionalVariable c2 = new ConditionalVariable(false, Operator.AND, Conditional.Type.SENSOR_INACTIVE, "name", false);
|
|
|
|
assertTrue( c1.equals(c1), "identity");
|
|
assertFalse( c1.equals(c2), "object equals, not content equals");
|
|
}
|
|
|
|
@Test
|
|
public void testDataString() {
|
|
NamedBean bean;
|
|
NamedBean otherBean;
|
|
String deviceName = "3";
|
|
String otherDeviceName = "4";
|
|
|
|
bean = InstanceManager.getDefault(MemoryManager.class).provideMemory(deviceName);
|
|
bean.setUserName("BeanUserName");
|
|
otherBean = InstanceManager.getDefault(MemoryManager.class).provideMemory(otherDeviceName);
|
|
otherBean.setUserName("OtherBeanUserName");
|
|
ConditionalVariable cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.MEMORY_EQUALS, deviceName, false);
|
|
assertEquals( "", cv.getDataString(), "getDataString() returns empty string");
|
|
assertNull( cv.getNamedBeanData(), "getNamedBeanData() returns null");
|
|
cv.setDataString(otherBean.getUserName());
|
|
cv.setName(otherDeviceName);
|
|
assertEquals( otherBean.getUserName(), cv.getDataString(), "getDataString() returns correct string");
|
|
assertTrue( otherBean.equals(cv.getNamedBeanData()), "getNamedBeanData() returns correct bean");
|
|
}
|
|
|
|
@Test
|
|
public void testState() {
|
|
String deviceName = "3";
|
|
InstanceManager.getDefault(MemoryManager.class).provideMemory(deviceName);
|
|
ConditionalVariable cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.MEMORY_EQUALS, deviceName, false);
|
|
assertTrue( cv.getState() == Conditional.State.UNKNOWN.getIntValue(), "state is unknown");
|
|
cv.setState(Conditional.State.TRUE.getIntValue());
|
|
assertTrue( cv.getState() == Conditional.State.TRUE.getIntValue(), "state is TRUE");
|
|
cv.setState(Conditional.State.FALSE.getIntValue());
|
|
assertTrue( cv.getState() == Conditional.State.FALSE.getIntValue(), "state is FALSE");
|
|
cv.setState(true);
|
|
assertTrue( cv.getState() == Conditional.State.TRUE.getIntValue(), "state is TRUE");
|
|
cv.setState(false);
|
|
assertTrue( cv.getState() == Conditional.State.FALSE.getIntValue(), "state is FALSE");
|
|
}
|
|
|
|
@Test
|
|
public void testGetOpernString() {
|
|
String deviceName = "3";
|
|
InstanceManager.getDefault(MemoryManager.class).provideMemory(deviceName);
|
|
ConditionalVariable cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.MEMORY_EQUALS, deviceName, false);
|
|
assertEquals( "Memory Compare to Value (Case Sensitive)",cv.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
|
|
cv.setNegation(false);
|
|
cv.setOpern(Operator.AND);
|
|
assertEquals( "AND", cv.getOpernString(),
|
|
"getOpernString() returns correct value");
|
|
assertFalse( cv.isNegated(), "isNegated() returns false");
|
|
|
|
cv.setNegation(true);
|
|
cv.setOpern(Operator.NONE);
|
|
assertTrue( "".equals(cv.getOpernString()),
|
|
"getOpernString() returns correct value");
|
|
assertTrue( cv.isNegated(), "isNegated() returns true");
|
|
|
|
cv.setNegation(true);
|
|
cv.setOpern(Operator.AND);
|
|
assertEquals( "AND", cv.getOpernString(),
|
|
"getOpernString() returns correct value");
|
|
assertTrue( cv.isNegated(), "isNegated() returns true");
|
|
|
|
cv.setNegation(false);
|
|
cv.setOpern(Operator.NONE);
|
|
assertTrue( "".equals(cv.getOpernString()),
|
|
"getOpernString() returns correct value");
|
|
assertFalse( cv.isNegated(), "isNegated() returns false");
|
|
|
|
cv.setNegation(false);
|
|
cv.setOpern(Operator.OR);
|
|
assertEquals( "OR", cv.getOpernString(),
|
|
"getOpernString() returns correct value");
|
|
assertFalse( cv.isNegated(), "isNegated() returns false");
|
|
|
|
cv.setNegation(true);
|
|
cv.setOpern(Operator.OR);
|
|
assertEquals( "OR", cv.getOpernString(),
|
|
"getOpernString() returns correct value");
|
|
assertTrue( cv.isNegated(), "isNegated() returns true");
|
|
}
|
|
|
|
@Test
|
|
public void testGetTestTypeString() {
|
|
String deviceName = "3";
|
|
InstanceManager.getDefault(MemoryManager.class).provideMemory(deviceName);
|
|
ConditionalVariable cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.MEMORY_EQUALS, deviceName, false);
|
|
assertEquals( "Memory Compare to Value (Case Sensitive)", cv.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
|
|
assertEquals( "Sensor Active", Conditional.Type.SENSOR_ACTIVE.getTestTypeString(),
|
|
"Sensor Active");
|
|
assertEquals( "Sensor Inactive", Conditional.Type.SENSOR_INACTIVE.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Turnout Thrown", Conditional.Type.TURNOUT_THROWN.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Turnout Closed", Conditional.Type.TURNOUT_CLOSED.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Conditional True", Conditional.Type.CONDITIONAL_TRUE.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Conditional False", Conditional.Type.CONDITIONAL_FALSE.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Light On", Conditional.Type.LIGHT_ON.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Light Off", Conditional.Type.LIGHT_OFF.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Memory Compare to Value (Case Sensitive)", Conditional.Type.MEMORY_EQUALS.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Memory Compare to Memory (Case Sensitive)", Conditional.Type.MEMORY_COMPARE.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Fast Clock Range", Conditional.Type.FAST_CLOCK_RANGE.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Red", Conditional.Type.SIGNAL_HEAD_RED.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Yellow", Conditional.Type.SIGNAL_HEAD_YELLOW.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Green", Conditional.Type.SIGNAL_HEAD_GREEN.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Dark", Conditional.Type.SIGNAL_HEAD_DARK.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Flashing Red", Conditional.Type.SIGNAL_HEAD_FLASHRED.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Flashing Yellow", Conditional.Type.SIGNAL_HEAD_FLASHYELLOW.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Flashing Green", Conditional.Type.SIGNAL_HEAD_FLASHGREEN.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Lit", Conditional.Type.SIGNAL_HEAD_LIT.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Held", Conditional.Type.SIGNAL_HEAD_HELD.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Lunar", Conditional.Type.SIGNAL_HEAD_LUNAR.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Flashing Lunar", Conditional.Type.SIGNAL_HEAD_FLASHLUNAR.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Memory Compare to Value (Case Insensitive)",
|
|
Conditional.Type.MEMORY_EQUALS_INSENSITIVE.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Memory Compare to Memory (Case Insensitive)",
|
|
Conditional.Type.MEMORY_COMPARE_INSENSITIVE.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Free", Conditional.Type.ROUTE_FREE.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Occupied", Conditional.Type.ROUTE_OCCUPIED.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Allocated", Conditional.Type.ROUTE_ALLOCATED.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Set", Conditional.Type.ROUTE_SET.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Running", Conditional.Type.TRAIN_RUNNING.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Signal Mast Aspect equals",
|
|
Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Signal Head Appearance equals",
|
|
Conditional.Type.SIGNAL_HEAD_APPEARANCE_EQUALS.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Lit", Conditional.Type.SIGNAL_MAST_LIT.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Held", Conditional.Type.SIGNAL_MAST_HELD.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Active", Conditional.Type.ENTRYEXIT_ACTIVE.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
assertEquals( "Inactive", Conditional.Type.ENTRYEXIT_INACTIVE.getTestTypeString(),
|
|
"getTestTypeString() returns correct value");
|
|
|
|
// Test invalid value
|
|
// Assert.assertTrue("getTestTypeString() returns correct value",
|
|
// "(None)".equals(ConditionalVariable.getTestTypeString(-1)));
|
|
}
|
|
|
|
@Test
|
|
public void testGetCompareOperationString() {
|
|
assertEquals( "Less Than",
|
|
ConditionalVariable.getCompareOperationString(ConditionalVariable.LESS_THAN),
|
|
"getCompareOperationString() returns correct value");
|
|
assertEquals( "Less Than Or Equal",
|
|
ConditionalVariable.getCompareOperationString(ConditionalVariable.LESS_THAN_OR_EQUAL),
|
|
"getCompareOperationString() returns correct value");
|
|
assertEquals( "Equal",
|
|
ConditionalVariable.getCompareOperationString(0),
|
|
"getCompareOperationString() returns correct value");
|
|
assertEquals( "Equal",
|
|
ConditionalVariable.getCompareOperationString(ConditionalVariable.EQUAL),
|
|
"getCompareOperationString() returns correct value");
|
|
assertEquals( "Greater Than Or Equal",
|
|
ConditionalVariable.getCompareOperationString(ConditionalVariable.GREATER_THAN_OR_EQUAL),
|
|
"getCompareOperationString() returns correct value");
|
|
assertEquals( "Greater Than",
|
|
ConditionalVariable.getCompareOperationString(ConditionalVariable.GREATER_THAN),
|
|
"getCompareOperationString() returns correct value");
|
|
}
|
|
|
|
@Test
|
|
public void testEvaluate() throws JmriException {
|
|
String deviceName = "3";
|
|
String otherDeviceName = "5";
|
|
|
|
Sensor sensor = InstanceManager.getDefault(SensorManager.class).provideSensor(deviceName);
|
|
ConditionalVariable cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.SENSOR_ACTIVE, deviceName, false);
|
|
sensor.setState(Sensor.ACTIVE);
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
sensor.setState(Sensor.INACTIVE);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
cv = new ConditionalVariable_BeanAlwaysNull(false, Conditional.Operator.AND, Conditional.Type.SENSOR_ACTIVE, deviceName, false);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
JUnitAppender.assertErrorMessage("invalid sensor name= \"3\" in state variable");
|
|
|
|
|
|
Turnout turnout = InstanceManager.getDefault(TurnoutManager.class).provideTurnout(deviceName);
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.TURNOUT_THROWN, deviceName, false);
|
|
turnout.setState(Turnout.THROWN);
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
turnout.setState(Turnout.CLOSED);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.TURNOUT_CLOSED, deviceName, false);
|
|
turnout.setState(Turnout.THROWN);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
turnout.setState(Turnout.CLOSED);
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
|
|
cv = new ConditionalVariable_BeanAlwaysNull(false, Conditional.Operator.AND, Conditional.Type.TURNOUT_CLOSED, deviceName, false);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
JUnitAppender.assertErrorMessage("invalid turnout name= \"3\" in state variable");
|
|
|
|
|
|
Memory memory = InstanceManager.getDefault(MemoryManager.class).provideMemory(deviceName);
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.MEMORY_EQUALS, deviceName, false);
|
|
cv.setDataString("2");
|
|
memory.setState(Sensor.ACTIVE); // Sensor.ACTIVE = 0x02
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
memory.setState(Sensor.INACTIVE);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
|
|
Memory otherMemory = InstanceManager.getDefault(MemoryManager.class).provideMemory(otherDeviceName);
|
|
otherMemory.setState(Sensor.ACTIVE); // Remove this???
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.MEMORY_COMPARE, deviceName, false);
|
|
cv.setDataString(otherDeviceName);
|
|
memory.setState(Sensor.ACTIVE); // Sensor.ACTIVE = 0x02
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
memory.setState(Sensor.INACTIVE);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
|
|
cv = new ConditionalVariable_BeanAlwaysNull(false, Conditional.Operator.AND, Conditional.Type.MEMORY_EQUALS, deviceName, false);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
JUnitAppender.assertErrorMessage("invalid memory name= \"3\" in state variable");
|
|
|
|
|
|
Light light = InstanceManager.getDefault(LightManager.class).provideLight(deviceName);
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.LIGHT_ON, deviceName, false);
|
|
light.setState(Light.ON);
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
light.setState(Light.OFF);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.LIGHT_OFF, deviceName, false);
|
|
light.setState(Light.ON);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
light.setState(Light.OFF);
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
|
|
cv = new ConditionalVariable_BeanAlwaysNull(false, Conditional.Operator.AND, Conditional.Type.LIGHT_OFF, deviceName, false);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
JUnitAppender.assertErrorMessage("invalid light name= \"3\" in state variable");
|
|
|
|
|
|
// Note that the signal head IH1 created here are also used to test the signal mast.
|
|
SignalHead signalHeadIH1 = new VirtualSignalHead("IH1");
|
|
InstanceManager.getDefault(SignalHeadManager.class).register(signalHeadIH1);
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.SIGNAL_HEAD_YELLOW, "IH1", false);
|
|
|
|
cv.setType(Conditional.Type.SIGNAL_HEAD_RED);
|
|
signalHeadIH1.setAppearance(SignalHead.RED);
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
signalHeadIH1.setAppearance(SignalHead.DARK);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
|
|
cv.setType(Conditional.Type.SIGNAL_HEAD_YELLOW);
|
|
signalHeadIH1.setAppearance(SignalHead.YELLOW);
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
signalHeadIH1.setAppearance(SignalHead.DARK);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
|
|
cv.setType(Conditional.Type.SIGNAL_HEAD_GREEN);
|
|
signalHeadIH1.setAppearance(SignalHead.GREEN);
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
signalHeadIH1.setAppearance(SignalHead.DARK);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
|
|
cv.setType(Conditional.Type.SIGNAL_HEAD_DARK);
|
|
signalHeadIH1.setAppearance(SignalHead.DARK);
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
signalHeadIH1.setAppearance(SignalHead.GREEN);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
|
|
cv.setType(Conditional.Type.SIGNAL_HEAD_FLASHRED);
|
|
signalHeadIH1.setAppearance(SignalHead.FLASHRED);
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
signalHeadIH1.setAppearance(SignalHead.DARK);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
|
|
cv.setType(Conditional.Type.SIGNAL_HEAD_FLASHYELLOW);
|
|
signalHeadIH1.setAppearance(SignalHead.FLASHYELLOW);
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
signalHeadIH1.setAppearance(SignalHead.DARK);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
|
|
cv.setType(Conditional.Type.SIGNAL_HEAD_FLASHGREEN);
|
|
signalHeadIH1.setAppearance(SignalHead.FLASHGREEN);
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
signalHeadIH1.setAppearance(SignalHead.DARK);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
|
|
cv.setType(Conditional.Type.SIGNAL_HEAD_LUNAR);
|
|
signalHeadIH1.setAppearance(SignalHead.LUNAR);
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
signalHeadIH1.setAppearance(SignalHead.DARK);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
|
|
cv.setType(Conditional.Type.SIGNAL_HEAD_FLASHLUNAR);
|
|
signalHeadIH1.setAppearance(SignalHead.FLASHLUNAR);
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
signalHeadIH1.setAppearance(SignalHead.DARK);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
|
|
cv.setType(Conditional.Type.SIGNAL_HEAD_LIT);
|
|
signalHeadIH1.setLit(true);
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
signalHeadIH1.setLit(false);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
|
|
cv.setType(Conditional.Type.SIGNAL_HEAD_HELD);
|
|
signalHeadIH1.setHeld(true);
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
signalHeadIH1.setHeld(false);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
|
|
cv = new ConditionalVariable_BeanAlwaysNull(false, Conditional.Operator.AND, Conditional.Type.SIGNAL_HEAD_RED, "IH1", false);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
JUnitAppender.assertErrorMessage("invalid signalhead name= \"IH1\" in state variable");
|
|
|
|
|
|
// The signal head IH1 created above is also used here in signal mast IF$shsm:AAR-1946:CPL(IH1)
|
|
SignalMast signalMast = InstanceManager.getDefault(SignalMastManager.class).provideSignalMast("IF$shsm:AAR-1946:CPL(IH1)");
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.SIGNAL_MAST_LIT, "IF$shsm:AAR-1946:CPL(IH1)", false);
|
|
|
|
cv.setDataString("Clear");
|
|
cv.setType(Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS);
|
|
// The null check is only to ensure that the evaluate() tests aspect == null
|
|
assertNull( signalMast.getAspect(), "aspect is null");
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
signalMast.setAspect("Clear");
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
signalMast.setAspect("Approach");
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
|
|
cv.setType(Conditional.Type.SIGNAL_MAST_LIT);
|
|
signalMast.setLit(true);
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
signalMast.setLit(false);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
|
|
cv.setType(Conditional.Type.SIGNAL_MAST_HELD);
|
|
signalMast.setHeld(true);
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
signalMast.setHeld(false);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
|
|
|
|
InstanceManager.getDefault(LogixManager.class).createNewLogix("IX:AUTO:0002");
|
|
Conditional conditional = InstanceManager.getDefault(ConditionalManager.class).createNewConditional("IX:AUTO:0001C1", "Conditional");
|
|
cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.CONDITIONAL_TRUE, "IX:AUTO:0001C1", false);
|
|
conditional.setState(Conditional.TRUE);
|
|
assertTrue( cv.evaluate(), "evaluate() returns true");
|
|
conditional.setState(Conditional.FALSE);
|
|
assertFalse( cv.evaluate(), "evaluate() returns false");
|
|
|
|
|
|
// This is not yet implemented. The code below is only a non working sketch.
|
|
// Warrant warrant = InstanceManager.getDefault(WarrantManager.class).provideWarrant("IW3");
|
|
// cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.ROUTE_OCCUPIED, "IW3", false);
|
|
// cv.setType(Conditional.Type.ROUTE_FREE);
|
|
// warrant.setState(Sensor.ACTIVE);
|
|
// Assert.assertTrue("evaluate() returns true", cv.evaluate());
|
|
// warrant.setState(Sensor.INACTIVE);
|
|
// Assert.assertFalse("evaluate() returns false", cv.evaluate());
|
|
|
|
|
|
// This is not yet implemented. The code below is only a non working sketch.
|
|
// OBlock oblock = InstanceManager.getDefault(OBlockManager.class).provideOBlock("OB3");
|
|
// cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.BLOCK_STATUS_EQUALS, "OB3", false);
|
|
// cv.setDataString("TRUE");
|
|
// oblock.setState(Sensor.ACTIVE);
|
|
// Assert.assertTrue("evaluate() returns true", cv.evaluate());
|
|
// oblock.setState(Sensor.INACTIVE);
|
|
// Assert.assertFalse("evaluate() returns false", cv.evaluate());
|
|
}
|
|
|
|
@Test
|
|
public void testCompare() {
|
|
String deviceName = "3";
|
|
InstanceManager.getDefault(SensorManager.class).provideSensor(deviceName);
|
|
ConditionalVariable cv = new ConditionalVariable(false, Conditional.Operator.AND, Conditional.Type.SENSOR_ACTIVE, deviceName, false);
|
|
|
|
assertTrue( cv.compare(null, null, false), "evaluate() returns true");
|
|
assertFalse( cv.compare("10", null, false), "evaluate() returns false");
|
|
assertFalse( cv.compare(null, "20", false), "evaluate() returns false");
|
|
|
|
cv.setNum1(LESS_THAN);
|
|
assertTrue( cv.compare("10", "20", false), "evaluate() returns true");
|
|
assertFalse( cv.compare("15", "15", false), "evaluate() returns false");
|
|
assertFalse( cv.compare("20", "10", false), "evaluate() returns false");
|
|
|
|
cv.setNum1(LESS_THAN_OR_EQUAL);
|
|
assertTrue( cv.compare("10", "20", false), "evaluate() returns true");
|
|
assertTrue( cv.compare("15", "15", false), "evaluate() returns true");
|
|
assertFalse( cv.compare("20", "10", false), "evaluate() returns false");
|
|
|
|
cv.setNum1(EQUAL);
|
|
assertFalse( cv.compare("10", "20", false), "evaluate() returns false");
|
|
assertTrue( cv.compare("15", "15", false), "evaluate() returns true");
|
|
assertFalse( cv.compare("20", "10", false), "evaluate() returns false");
|
|
|
|
cv.setNum1(GREATER_THAN_OR_EQUAL);
|
|
assertFalse( cv.compare("10", "20", false), "evaluate() returns false");
|
|
assertTrue( cv.compare("15", "15", false), "evaluate() returns true");
|
|
assertTrue( cv.compare("20", "10", false), "evaluate() returns true");
|
|
|
|
cv.setNum1(GREATER_THAN);
|
|
assertFalse( cv.compare("10", "20", false), "evaluate() returns false");
|
|
assertFalse( cv.compare("15", "15", false), "evaluate() returns false");
|
|
assertTrue( cv.compare("20", "10", false), "evaluate() returns true");
|
|
|
|
|
|
cv.setNum1(LESS_THAN);
|
|
assertTrue( cv.compare("aaa", "ccc", false), "evaluate() returns true");
|
|
assertFalse( cv.compare("bbb", "bbb", false), "evaluate() returns false");
|
|
assertFalse( cv.compare("ccc", "aaa", false), "evaluate() returns false");
|
|
|
|
cv.setNum1(LESS_THAN_OR_EQUAL);
|
|
assertTrue( cv.compare("aaa", "ccc", false), "evaluate() returns true");
|
|
assertTrue( cv.compare("bbb", "bbb", false), "evaluate() returns true");
|
|
assertFalse( cv.compare("ccc", "aaa", false), "evaluate() returns false");
|
|
|
|
cv.setNum1(EQUAL);
|
|
assertFalse( cv.compare("aaa", "ccc", false), "evaluate() returns false");
|
|
assertTrue( cv.compare("bbb", "bbb", false), "evaluate() returns true");
|
|
assertFalse( cv.compare("ccc", "aaa", false), "evaluate() returns false");
|
|
|
|
cv.setNum1(GREATER_THAN_OR_EQUAL);
|
|
assertFalse( cv.compare("aaa", "ccc", false), "evaluate() returns false");
|
|
assertTrue( cv.compare("bbb", "bbb", false), "evaluate() returns true");
|
|
assertTrue( cv.compare("ccc", "aaa", false), "evaluate() returns true");
|
|
|
|
cv.setNum1(GREATER_THAN);
|
|
assertFalse( cv.compare("aaa", "ccc", false), "evaluate() returns false");
|
|
assertFalse( cv.compare("bbb", "bbb", false), "evaluate() returns false");
|
|
assertTrue( cv.compare("ccc", "aaa", false), "evaluate() returns true");
|
|
|
|
// Test case
|
|
cv.setNum1(GREATER_THAN);
|
|
assertTrue( cv.compare("aaa", "Ccc", false), "evaluate() returns true");
|
|
assertTrue( cv.compare("bbb", "Bbb", false), "evaluate() returns true");
|
|
assertFalse( cv.compare("Ccc", "aaa", false), "evaluate() returns false");
|
|
|
|
// Test case
|
|
cv.setNum1(GREATER_THAN);
|
|
assertFalse( cv.compare("aaa", "Ccc", true), "evaluate() returns false");
|
|
assertFalse( cv.compare("bbb", "Bbb", true), "evaluate() returns false");
|
|
assertTrue( cv.compare("Ccc", "aaa", true), "evaluate() returns true");
|
|
}
|
|
|
|
@Test
|
|
public void testGetItemTypeString() {
|
|
assertEquals( "Sensor", ConditionalVariable.getItemTypeString(ItemType.SENSOR),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Turnout", ConditionalVariable.getItemTypeString(ItemType.TURNOUT),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Light", ConditionalVariable.getItemTypeString(ItemType.LIGHT),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Signal Head", ConditionalVariable.getItemTypeString(ItemType.SIGNALHEAD),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Signal Mast", ConditionalVariable.getItemTypeString(ItemType.SIGNALMAST),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Memory", ConditionalVariable.getItemTypeString(ItemType.MEMORY),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Conditional", ConditionalVariable.getItemTypeString(ItemType.CONDITIONAL),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Warrant", ConditionalVariable.getItemTypeString(ItemType.WARRANT),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Fast Clock", ConditionalVariable.getItemTypeString(ItemType.CLOCK),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Occupancy Block", ConditionalVariable.getItemTypeString(ItemType.OBLOCK),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Entry Exit", ConditionalVariable.getItemTypeString(ItemType.ENTRYEXIT),
|
|
"getItemTypeString() returns correct value");
|
|
|
|
// Test wrong value
|
|
// Assert.assertTrue("getItemTypeString() returns correct value",
|
|
// "".equals(ConditionalVariable.getItemTypeString(-1)));
|
|
}
|
|
|
|
@Test
|
|
public void testConditionalType_toString() {
|
|
assertEquals( "", Conditional.Type.NONE.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Active", Conditional.Type.SENSOR_ACTIVE.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Inactive", Conditional.Type.SENSOR_INACTIVE.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Thrown", Conditional.Type.TURNOUT_THROWN.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Closed", Conditional.Type.TURNOUT_CLOSED.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "True", Conditional.Type.CONDITIONAL_TRUE.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "False", Conditional.Type.CONDITIONAL_FALSE.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "On", Conditional.Type.LIGHT_ON.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Off", Conditional.Type.LIGHT_OFF.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "(case sensitive) Value", Conditional.Type.MEMORY_EQUALS.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "(case sensitive) Memory", Conditional.Type.MEMORY_COMPARE.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Fast Clock Range", Conditional.Type.FAST_CLOCK_RANGE.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Red", Conditional.Type.SIGNAL_HEAD_RED.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Yellow", Conditional.Type.SIGNAL_HEAD_YELLOW.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Green", Conditional.Type.SIGNAL_HEAD_GREEN.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Dark", Conditional.Type.SIGNAL_HEAD_DARK.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Flashing Red", Conditional.Type.SIGNAL_HEAD_FLASHRED.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Flashing Yellow", Conditional.Type.SIGNAL_HEAD_FLASHYELLOW.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Flashing Green", Conditional.Type.SIGNAL_HEAD_FLASHGREEN.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Held", Conditional.Type.SIGNAL_HEAD_HELD.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Lunar", Conditional.Type.SIGNAL_HEAD_LUNAR.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Flashing Lunar", Conditional.Type.SIGNAL_HEAD_FLASHLUNAR.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Lit", Conditional.Type.SIGNAL_HEAD_LIT.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "(case insensitive) Value", Conditional.Type.MEMORY_EQUALS_INSENSITIVE.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "(case insensitive) Memory", Conditional.Type.MEMORY_COMPARE_INSENSITIVE.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Route Free", Conditional.Type.ROUTE_FREE.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Route Occupied", Conditional.Type.ROUTE_OCCUPIED.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Route Allocated", Conditional.Type.ROUTE_ALLOCATED.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Route Set", Conditional.Type.ROUTE_SET.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Train Running", Conditional.Type.TRAIN_RUNNING.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Signal Mast Aspect equals", Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Signal Head Appearance equals", Conditional.Type.SIGNAL_HEAD_APPEARANCE_EQUALS.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Lit", Conditional.Type.SIGNAL_MAST_LIT.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Held", Conditional.Type.SIGNAL_MAST_HELD.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Active", Conditional.Type.ENTRYEXIT_ACTIVE.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "Inactive", Conditional.Type.ENTRYEXIT_INACTIVE.toString(),
|
|
"getItemTypeString() returns correct value");
|
|
|
|
// Test invalid value
|
|
// Assert.assertTrue("getItemTypeString() returns correct value",
|
|
// "<none>".equals(-1)));
|
|
// jmri.util.JUnitAppender.assertWarnMessage("Unhandled condition type: -1");
|
|
}
|
|
/*
|
|
@Test
|
|
public void testDescribeState() {
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"".equals(ConditionalVariable.describeState(Conditional.Type.NONE)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Active".equals(ConditionalVariable.describeState(Conditional.Type.SENSOR_ACTIVE)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Inactive".equals(ConditionalVariable.describeState(Conditional.Type.SENSOR_INACTIVE)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Thrown".equals(ConditionalVariable.describeState(Conditional.Type.TURNOUT_THROWN)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Closed".equals(ConditionalVariable.describeState(Conditional.Type.TURNOUT_CLOSED)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"True".equals(ConditionalVariable.describeState(Conditional.Type.CONDITIONAL_TRUE)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"False".equals(ConditionalVariable.describeState(Conditional.Type.CONDITIONAL_FALSE)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"On".equals(ConditionalVariable.describeState(Conditional.Type.LIGHT_ON)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Off".equals(ConditionalVariable.describeState(Conditional.Type.LIGHT_OFF)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"(case sensitive) Value".equals(ConditionalVariable.describeState(Conditional.Type.MEMORY_EQUALS)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"(case sensitive) Memory".equals(ConditionalVariable.describeState(Conditional.Type.MEMORY_COMPARE)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"".equals(ConditionalVariable.describeState(Conditional.Type.FAST_CLOCK_RANGE)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Red".equals(ConditionalVariable.describeState(Conditional.Type.SIGNAL_HEAD_RED)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Yellow".equals(ConditionalVariable.describeState(Conditional.Type.SIGNAL_HEAD_YELLOW)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Green".equals(ConditionalVariable.describeState(Conditional.Type.SIGNAL_HEAD_GREEN)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Dark".equals(ConditionalVariable.describeState(Conditional.Type.SIGNAL_HEAD_DARK)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Flashing Red".equals(ConditionalVariable.describeState(Conditional.Type.SIGNAL_HEAD_FLASHRED)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Flashing Yellow".equals(ConditionalVariable.describeState(Conditional.Type.SIGNAL_HEAD_FLASHYELLOW)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Flashing Green".equals(ConditionalVariable.describeState(Conditional.Type.SIGNAL_HEAD_FLASHGREEN)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Held".equals(ConditionalVariable.describeState(Conditional.Type.SIGNAL_HEAD_HELD)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Lunar".equals(ConditionalVariable.describeState(Conditional.Type.SIGNAL_HEAD_LUNAR)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Flashing Lunar".equals(ConditionalVariable.describeState(Conditional.Type.SIGNAL_HEAD_FLASHLUNAR)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Lit".equals(ConditionalVariable.describeState(Conditional.Type.SIGNAL_HEAD_LIT)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"(case insensitive) Value".equals(ConditionalVariable.describeState(Conditional.Type.MEMORY_EQUALS_INSENSITIVE)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"(case insensitive) Memory".equals(ConditionalVariable.describeState(Conditional.Type.MEMORY_COMPARE_INSENSITIVE)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Route Free".equals(ConditionalVariable.describeState(Conditional.Type.ROUTE_FREE)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Route Occupied".equals(ConditionalVariable.describeState(Conditional.Type.ROUTE_OCCUPIED)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Route Allocated".equals(ConditionalVariable.describeState(Conditional.Type.ROUTE_ALLOCATED)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Route Set".equals(ConditionalVariable.describeState(Conditional.Type.ROUTE_SET)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Train Running".equals(ConditionalVariable.describeState(Conditional.Type.TRAIN_RUNNING)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Signal Mast Aspect equals".equals(ConditionalVariable.describeState(Conditional.Type.SIGNAL_MAST_ASPECT_EQUALS)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Signal Head Appearance equals".equals(ConditionalVariable.describeState(Conditional.Type.SIGNAL_HEAD_APPEARANCE_EQUALS)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Lit".equals(ConditionalVariable.describeState(Conditional.Type.SIGNAL_MAST_LIT)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Held".equals(ConditionalVariable.describeState(Conditional.Type.SIGNAL_MAST_HELD)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Active".equals(ConditionalVariable.describeState(Conditional.Type.ENTRYEXIT_ACTIVE)));
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"Inactive".equals(ConditionalVariable.describeState(Conditional.Type.ENTRYEXIT_INACTIVE)));
|
|
|
|
// Test invalid value
|
|
Assert.assertTrue("getItemTypeString() returns correct value",
|
|
"<none>".equals(ConditionalVariable.describeState(-1)));
|
|
jmri.util.JUnitAppender.assertWarnMessage("Unhandled condition type: -1");
|
|
}
|
|
*/
|
|
@Test
|
|
public void testGetCompareSymbols() {
|
|
assertEquals( "<", ConditionalVariable.getCompareSymbols(LESS_THAN),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "<=", ConditionalVariable.getCompareSymbols(LESS_THAN_OR_EQUAL),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( "=", ConditionalVariable.getCompareSymbols(EQUAL),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( ">=", ConditionalVariable.getCompareSymbols(GREATER_THAN_OR_EQUAL),
|
|
"getItemTypeString() returns correct value");
|
|
assertEquals( ">", ConditionalVariable.getCompareSymbols(GREATER_THAN),
|
|
"getItemTypeString() returns correct value");
|
|
}
|
|
|
|
@Test
|
|
public void testStringToVariableTest() {
|
|
assertTrue( ConditionalVariable.stringToVariableTest("Red") == Conditional.Type.SIGNAL_HEAD_RED,
|
|
"getItemTypeString() returns correct value");
|
|
assertTrue( ConditionalVariable.stringToVariableTest("Yellow") == Conditional.Type.SIGNAL_HEAD_YELLOW,
|
|
"getItemTypeString() returns correct value");
|
|
assertTrue( ConditionalVariable.stringToVariableTest("Green") == Conditional.Type.SIGNAL_HEAD_GREEN,
|
|
"getItemTypeString() returns correct value");
|
|
assertTrue( ConditionalVariable.stringToVariableTest("Dark") == Conditional.Type.SIGNAL_HEAD_DARK,
|
|
"getItemTypeString() returns correct value");
|
|
assertTrue( ConditionalVariable.stringToVariableTest("Flashing Red") == Conditional.Type.SIGNAL_HEAD_FLASHRED,
|
|
"getItemTypeString() returns correct value");
|
|
assertTrue( ConditionalVariable.stringToVariableTest("Flashing Yellow") == Conditional.Type.SIGNAL_HEAD_FLASHYELLOW,
|
|
"getItemTypeString() returns correct value");
|
|
assertTrue( ConditionalVariable.stringToVariableTest("Flashing Green") == Conditional.Type.SIGNAL_HEAD_FLASHGREEN,
|
|
"getItemTypeString() returns correct value");
|
|
assertTrue( ConditionalVariable.stringToVariableTest("Lunar") == Conditional.Type.SIGNAL_HEAD_LUNAR,
|
|
"getItemTypeString() returns correct value");
|
|
assertTrue( ConditionalVariable.stringToVariableTest("Flashing Lunar") == Conditional.Type.SIGNAL_HEAD_FLASHLUNAR,
|
|
"getItemTypeString() returns correct value");
|
|
|
|
// Check bad string. This gives a warning message.
|
|
assertTrue( ConditionalVariable.stringToVariableTest("Bad signal head") == Conditional.Type.ERROR,
|
|
"getItemTypeString() returns -1 for wrong string");
|
|
JUnitAppender.assertWarnMessage("Unexpected parameter to stringToVariableTest(Bad signal head)");
|
|
|
|
// Check empty string. This doesn't give any warning.
|
|
assertTrue( ConditionalVariable.stringToVariableTest("") == Conditional.Type.ERROR,
|
|
"getItemTypeString() returns -1 for wrong string");
|
|
}
|
|
|
|
|
|
// from here down is testing infrastructure
|
|
|
|
@BeforeEach
|
|
public void setUp() {
|
|
JUnitUtil.setUp();
|
|
JUnitUtil.resetInstanceManager();
|
|
JUnitUtil.initInternalTurnoutManager();
|
|
JUnitUtil.initInternalLightManager();
|
|
JUnitUtil.initInternalSensorManager();
|
|
JUnitUtil.initInternalSignalHeadManager();
|
|
JUnitUtil.initDebugThrottleManager();
|
|
JUnitUtil.initLogixManager();
|
|
JUnitUtil.initIdTagManager();
|
|
InstanceManager.store(new NamedBeanHandleManager(), NamedBeanHandleManager.class);
|
|
}
|
|
|
|
@AfterEach
|
|
public void tearDown() {
|
|
JUnitUtil.deregisterBlockManagerShutdownTask();
|
|
JUnitUtil.tearDown();
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* A conditional variable there the method getBean() always return null.
|
|
* Used to test ConditionalVariable.evaluate().
|
|
*/
|
|
private static class ConditionalVariable_BeanAlwaysNull extends ConditionalVariable {
|
|
|
|
ConditionalVariable_BeanAlwaysNull(boolean not, Operator opern, Conditional.Type type, String name, boolean trigger) {
|
|
super(not, opern, type, name, trigger);
|
|
}
|
|
|
|
/**
|
|
* This method always return null in order to test the caller methods.
|
|
* @return null always
|
|
*/
|
|
@Override
|
|
public NamedBean getBean() {
|
|
return null;
|
|
}
|
|
|
|
}
|
|
|
|
}
|