package jmri.implementation; import static jmri.Conditional.*; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import jmri.*; import jmri.jmrit.logix.OBlockManager; import jmri.jmrit.logix.Warrant; import jmri.jmrit.logix.WarrantManager; import jmri.util.JUnitUtil; import jmri.util.JUnitAppender; import org.junit.jupiter.api.*; /** * Test the DefaultConditionalAction implementation class * * @author Bob Jacobsen Copyright (C) 2015 */ public class DefaultConditionalActionTest { @Test public void testCtor() { DefaultConditionalAction t = new DefaultConditionalAction(); Assertions.assertNotNull(t); } @Test public void testBasicBeanOperations() { final String deviceName = "3"; final String otherDeviceName = "8"; final String actionStr = "5"; ConditionalAction ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_TURNOUT, deviceName, Turnout.THROWN, actionStr); ConditionalAction ix2 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_TURNOUT, deviceName, Turnout.THROWN, actionStr); ConditionalAction ix3 = new DefaultConditionalAction(0, Conditional.Action.SET_TURNOUT, deviceName, Turnout.THROWN, actionStr); ConditionalAction ix4 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.NONE, deviceName, Turnout.THROWN, actionStr); ConditionalAction ix5 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_TURNOUT, "0", Turnout.THROWN, actionStr); ConditionalAction ix6 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_TURNOUT, deviceName, 0, actionStr); ConditionalAction ix7 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_TURNOUT, deviceName, Turnout.THROWN, "0"); ConditionalAction ix8 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_TURNOUT, otherDeviceName, Turnout.THROWN, "0"); ConditionalAction ix9 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_TURNOUT, deviceName, Turnout.THROWN, "1"); ConditionalAction ix10 = new DefaultConditionalAction(0, Conditional.Action.NONE, null, Turnout.THROWN, actionStr); assertNotNull(ix1); assertTrue(ix1.equals(ix1)); assertTrue(ix1.equals(ix2)); assertTrue(!ix1.equals(ix3)); assertTrue(!ix1.equals(ix4)); assertTrue(!ix1.equals(ix5)); assertTrue(!ix1.equals(ix6)); assertTrue(!ix1.equals(ix7)); assertTrue(!ix1.equals(ix8)); assertTrue(!ix1.equals(ix9)); // Test equal with different class assertTrue(!ix1.equals(new Object())); // Test deviceName == null assertTrue(!ix1.equals(ix10)); assertTrue(!ix10.equals(ix1)); assertTrue(ix1.hashCode() == ix2.hashCode()); } @Test public void testSetType() { final String deviceName = "3"; final String actionStr = "5"; ConditionalAction ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_TURNOUT, deviceName, Turnout.THROWN, actionStr); ix1.setType("None"); assertTrue( ix1.getType() == Conditional.Action.NONE, "setType() sets correct value"); JUnitAppender.assertWarnMessage("Unexpected parameter to stringToActionType(None)"); ix1.setType("Set Turnout"); assertTrue( ix1.getType() == Conditional.Action.SET_TURNOUT, "setType() sets correct value"); ix1.setType("Set Signal Head Appearance"); assertTrue( ix1.getType() == Conditional.Action.SET_SIGNAL_APPEARANCE, "setType() sets correct value"); ix1.setType("Set Signal Head Held"); assertTrue( ix1.getType() == Conditional.Action.SET_SIGNAL_HELD, "setType() sets correct value"); ix1.setType("Clear Signal Head Held"); assertTrue( ix1.getType() == Conditional.Action.CLEAR_SIGNAL_HELD, "setType() sets correct value"); ix1.setType("Set Signal Head Dark"); assertTrue( ix1.getType() == Conditional.Action.SET_SIGNAL_DARK, "setType() sets correct value"); ix1.setType("Set Signal Head Lit"); assertTrue( ix1.getType() == Conditional.Action.SET_SIGNAL_LIT, "setType() sets correct value"); ix1.setType("Trigger Route"); assertTrue( ix1.getType() == Conditional.Action.TRIGGER_ROUTE, "setType() sets correct value"); ix1.setType("Set Sensor"); assertTrue( ix1.getType() == Conditional.Action.SET_SENSOR, "setType() sets correct value"); ix1.setType("Delayed Set Sensor"); assertTrue( ix1.getType() == Conditional.Action.DELAYED_SENSOR, "setType() sets correct value"); ix1.setType("Set Light"); assertTrue( ix1.getType() == Conditional.Action.SET_LIGHT, "setType() sets correct value"); ix1.setType("Set Memory"); assertTrue( ix1.getType() == Conditional.Action.SET_MEMORY, "setType() sets correct value"); ix1.setType("Enable Logix"); assertTrue( ix1.getType() == Conditional.Action.ENABLE_LOGIX, "setType() sets correct value"); ix1.setType("Disable Logix"); assertTrue( ix1.getType() == Conditional.Action.DISABLE_LOGIX, "setType() sets correct value"); ix1.setType("Play Sound File"); assertTrue( ix1.getType() == Conditional.Action.PLAY_SOUND, "setType() sets correct value"); ix1.setType("Run Script"); assertTrue( ix1.getType() == Conditional.Action.RUN_SCRIPT, "setType() sets correct value"); ix1.setType("Delayed Set Turnout"); assertTrue( ix1.getType() == Conditional.Action.DELAYED_TURNOUT, "setType() sets correct value"); ix1.setType("Turnout Lock"); assertTrue( ix1.getType() == Conditional.Action.LOCK_TURNOUT, "setType() sets correct value"); ix1.setType("Reset Delayed Set Sensor"); assertTrue( ix1.getType() == Conditional.Action.RESET_DELAYED_SENSOR, "setType() sets correct value"); ix1.setType("Cancel Timers for Sensor"); assertTrue( ix1.getType() == Conditional.Action.CANCEL_SENSOR_TIMERS, "setType() sets correct value"); ix1.setType("Reset Delayed Set Turnout"); assertTrue( ix1.getType() == Conditional.Action.RESET_DELAYED_TURNOUT, "setType() sets correct value"); ix1.setType("Cancel Timers for Turnout"); assertTrue( ix1.getType() == Conditional.Action.CANCEL_TURNOUT_TIMERS, "setType() sets correct value"); ix1.setType("Set Fast Clock Time"); assertTrue( ix1.getType() == Conditional.Action.SET_FAST_CLOCK_TIME, "setType() sets correct value"); ix1.setType("Start Fast Clock"); assertTrue( ix1.getType() == Conditional.Action.START_FAST_CLOCK, "setType() sets correct value"); ix1.setType("Stop Fast Clock"); assertTrue( ix1.getType() == Conditional.Action.STOP_FAST_CLOCK, "setType() sets correct value"); ix1.setType("Copy Memory To Memory"); assertTrue( ix1.getType() == Conditional.Action.COPY_MEMORY, "setType() sets correct value"); ix1.setType("Set Light Intensity"); assertTrue( ix1.getType() == Conditional.Action.SET_LIGHT_INTENSITY, "setType() sets correct value"); ix1.setType("Set Light Transition Time"); assertTrue( ix1.getType() == Conditional.Action.SET_LIGHT_TRANSITION_TIME, "setType() sets correct value"); ix1.setType("Control Audio object"); assertTrue( ix1.getType() == Conditional.Action.CONTROL_AUDIO, "setType() sets correct value"); ix1.setType("Execute Jython Command"); assertTrue( ix1.getType() == Conditional.Action.JYTHON_COMMAND, "setType() sets correct value"); ix1.setType("Allocate Warrant Route"); assertTrue( ix1.getType() == Conditional.Action.ALLOCATE_WARRANT_ROUTE, "setType() sets correct value"); ix1.setType("Deallocate Warrant"); assertTrue( ix1.getType() == Conditional.Action.DEALLOCATE_WARRANT_ROUTE, "setType() sets correct value"); ix1.setType("Set Route Turnouts"); assertTrue( ix1.getType() == Conditional.Action.SET_ROUTE_TURNOUTS, "setType() sets correct value"); ix1.setType("Auto Run Train"); assertTrue( ix1.getType() == Conditional.Action.AUTO_RUN_WARRANT, "setType() sets correct value"); ix1.setType("Manually Run Train"); assertTrue( ix1.getType() == Conditional.Action.MANUAL_RUN_WARRANT, "setType() sets correct value"); ix1.setType("Control Auto Train"); assertTrue( ix1.getType() == Conditional.Action.CONTROL_TRAIN, "setType() sets correct value"); ix1.setType("Set Train ID"); assertTrue( ix1.getType() == Conditional.Action.SET_TRAIN_ID, "setType() sets correct value"); ix1.setType("Set Train Name"); assertTrue( ix1.getType() == Conditional.Action.SET_TRAIN_NAME, "setType() sets correct value"); ix1.setType("Set Signal Mast Aspect"); assertTrue( ix1.getType() == Conditional.Action.SET_SIGNALMAST_ASPECT, "setType() sets correct value"); ix1.setType("Put Location of Warrant"); assertTrue( ix1.getType() == Conditional.Action.GET_TRAIN_LOCATION, "setType() sets correct value"); ix1.setType("Set Signal Mast Held"); assertTrue( ix1.getType() == Conditional.Action.SET_SIGNALMAST_HELD, "setType() sets correct value"); ix1.setType("Clear Signal Mast Held"); assertTrue( ix1.getType() == Conditional.Action.CLEAR_SIGNALMAST_HELD, "setType() sets correct value"); ix1.setType("Set Signal Mast Dark"); assertTrue( ix1.getType() == Conditional.Action.SET_SIGNALMAST_DARK, "setType() sets correct value"); ix1.setType("Clear Signal Mast Dark"); assertTrue( ix1.getType() == Conditional.Action.SET_SIGNALMAST_LIT, "setType() sets correct value"); ix1.setType("Set Block Value"); assertTrue( ix1.getType() == Conditional.Action.SET_BLOCK_VALUE, "setType() sets correct value"); ix1.setType("Set Block Error"); assertTrue( ix1.getType() == Conditional.Action.SET_BLOCK_ERROR, "setType() sets correct value"); ix1.setType("Clear Block Error"); assertTrue( ix1.getType() == Conditional.Action.CLEAR_BLOCK_ERROR, "setType() sets correct value"); ix1.setType("Deallocate Block"); assertTrue( ix1.getType() == Conditional.Action.DEALLOCATE_BLOCK, "setType() sets correct value"); ix1.setType("Set Block OutOfService"); assertTrue( ix1.getType() == Conditional.Action.SET_BLOCK_OUT_OF_SERVICE, "setType() sets correct value"); ix1.setType("Clear Block OutOfService"); assertTrue( ix1.getType() == Conditional.Action.SET_BLOCK_IN_SERVICE, "setType() sets correct value"); ix1.setType("Set NX Pair Enabled"); assertTrue( ix1.getType() == Conditional.Action.SET_NXPAIR_ENABLED, "setType() sets correct value"); ix1.setType("Set NX Pair Disabled"); assertTrue( ix1.getType() == Conditional.Action.SET_NXPAIR_DISABLED, "setType() sets correct value"); ix1.setType("Set NX Pair Segment Active / Inactive"); assertTrue( ix1.getType() == Conditional.Action.SET_NXPAIR_SEGMENT, "setType() sets correct value"); ix1.setType("This is a bad string"); JUnitAppender.assertWarnMessage("Unexpected parameter to stringToActionType(This is a bad string)"); ix1.setType("Put Warrant occupying Block"); assertTrue( ix1.getType() == Conditional.Action.GET_BLOCK_WARRANT, "setType() sets correct value"); ix1.setType("Put Train Name occupying Block"); assertTrue( ix1.getType() == Conditional.Action.GET_BLOCK_TRAIN_NAME, "setType() sets correct value"); } @Test public void testStringToActionData() { assertTrue( DefaultConditionalAction.stringToActionData("Closed") == Turnout.CLOSED, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Thrown") == Turnout.THROWN, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Active") == Sensor.ACTIVE, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Inactive") == Sensor.INACTIVE, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("On") == Light.ON, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Off") == Light.OFF, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Unlock") == Turnout.UNLOCKED, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Lock") == Turnout.LOCKED, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Red") == SignalHead.RED, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Yellow") == SignalHead.YELLOW, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Green") == SignalHead.GREEN, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Dark") == SignalHead.DARK, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Flashing Red") == SignalHead.FLASHRED, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Flashing Yellow") == SignalHead.FLASHYELLOW, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Flashing Green") == SignalHead.FLASHGREEN, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Lunar") == SignalHead.LUNAR, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Flashing Lunar") == SignalHead.FLASHLUNAR, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Play") == Audio.CMD_PLAY, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Stop") == Audio.CMD_STOP, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Toggle Play") == Audio.CMD_PLAY_TOGGLE, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Pause") == Audio.CMD_PAUSE, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Resume") == Audio.CMD_RESUME, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Toggle Pause") == Audio.CMD_PAUSE_TOGGLE, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Rewind") == Audio.CMD_REWIND, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Fade-in") == Audio.CMD_FADE_IN, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Fade-out") == Audio.CMD_FADE_OUT, "stringToActionData() returns correct value"); assertTrue( DefaultConditionalAction.stringToActionData("Reset Position") == Audio.CMD_RESET_POSITION, "stringToActionData() returns correct value"); DefaultConditionalAction.stringToActionData("This is a bad string"); JUnitAppender.assertWarnMessage("Unexpected parameter to stringToActionData(This is a bad string)"); } @Test public void testGetActionDataString() { assertEquals( "",DefaultConditionalAction.getActionDataString( Conditional.Action.NONE, 0),"getActionDataString() returns correct value"); assertEquals( "Closed", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_TURNOUT, Turnout.CLOSED),"getActionDataString() returns correct value"); assertEquals( "Thrown", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_TURNOUT, Turnout.THROWN), "getActionDataString() returns correct value"); assertEquals( "Toggle", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_TURNOUT, Route.TOGGLE), "getActionDataString() returns correct value"); assertEquals( "Closed", DefaultConditionalAction.getActionDataString( Conditional.Action.DELAYED_TURNOUT, Turnout.CLOSED), "getActionDataString() returns correct value"); assertEquals( "Thrown", DefaultConditionalAction.getActionDataString( Conditional.Action.DELAYED_TURNOUT, Turnout.THROWN), "getActionDataString() returns correct value"); assertEquals( "Toggle", DefaultConditionalAction.getActionDataString( Conditional.Action.DELAYED_TURNOUT, Route.TOGGLE), "getActionDataString() returns correct value"); assertEquals( "Closed", DefaultConditionalAction.getActionDataString( Conditional.Action.RESET_DELAYED_TURNOUT, Turnout.CLOSED), "getActionDataString() returns correct value"); assertEquals( "Thrown", DefaultConditionalAction.getActionDataString( Conditional.Action.RESET_DELAYED_TURNOUT, Turnout.THROWN), "getActionDataString() returns correct value"); assertEquals( "Toggle", DefaultConditionalAction.getActionDataString( Conditional.Action.RESET_DELAYED_TURNOUT, Route.TOGGLE), "getActionDataString() returns correct value"); // Test invalid data assertEquals( "", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_TURNOUT, 0), "getActionDataString() returns correct value"); assertEquals( "Red", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_SIGNAL_APPEARANCE, SignalHead.RED), "getActionDataString() returns correct value"); assertEquals( "Yellow", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_SIGNAL_APPEARANCE, SignalHead.YELLOW), "getActionDataString() returns correct value"); assertEquals( "Green", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_SIGNAL_APPEARANCE, SignalHead.GREEN), "getActionDataString() returns correct value"); assertEquals( "Dark", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_SIGNAL_APPEARANCE, SignalHead.DARK), "getActionDataString() returns correct value"); assertEquals( "Flashing Red", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_SIGNAL_APPEARANCE, SignalHead.FLASHRED), "getActionDataString() returns correct value"); assertEquals( "Flashing Yellow", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_SIGNAL_APPEARANCE, SignalHead.FLASHYELLOW), "getActionDataString() returns correct value"); assertEquals( "Flashing Green", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_SIGNAL_APPEARANCE, SignalHead.FLASHGREEN), "getActionDataString() returns correct value"); assertEquals( "Lunar", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_SIGNAL_APPEARANCE, SignalHead.LUNAR), "getActionDataString() returns correct value"); assertEquals( "Flashing Lunar", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_SIGNAL_APPEARANCE, SignalHead.FLASHLUNAR), "getActionDataString() returns correct value"); // Test invalid data assertEquals( "", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_SIGNAL_APPEARANCE, -1), "getActionDataString() returns correct value"); assertEquals( "Active", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_SENSOR, Sensor.ACTIVE), "getActionDataString() returns correct value"); assertEquals( "Inactive", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_SENSOR, Sensor.INACTIVE), "getActionDataString() returns correct value"); assertEquals( "Toggle", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_SENSOR, Route.TOGGLE), "getActionDataString() returns correct value"); assertEquals( "Active", DefaultConditionalAction.getActionDataString( Conditional.Action.DELAYED_SENSOR, Sensor.ACTIVE), "getActionDataString() returns correct value"); assertEquals( "Inactive", DefaultConditionalAction.getActionDataString( Conditional.Action.DELAYED_SENSOR, Sensor.INACTIVE), "getActionDataString() returns correct value"); assertEquals( "Toggle", DefaultConditionalAction.getActionDataString( Conditional.Action.DELAYED_SENSOR, Route.TOGGLE), "getActionDataString() returns correct value"); assertEquals( "Active", DefaultConditionalAction.getActionDataString( Conditional.Action.RESET_DELAYED_SENSOR, Sensor.ACTIVE), "getActionDataString() returns correct value"); assertEquals( "Inactive", DefaultConditionalAction.getActionDataString( Conditional.Action.RESET_DELAYED_SENSOR, Sensor.INACTIVE), "getActionDataString() returns correct value"); assertEquals( "Toggle", DefaultConditionalAction.getActionDataString( Conditional.Action.RESET_DELAYED_SENSOR, Route.TOGGLE), "getActionDataString() returns correct value"); // Test invalid data assertEquals( "", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_SENSOR, 0), "getActionDataString() returns correct value"); assertEquals( "On", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_LIGHT, Light.ON), "getActionDataString() returns correct value"); assertEquals( "Off", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_LIGHT, Light.OFF), "getActionDataString() returns correct value"); assertEquals( "Toggle", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_LIGHT, Route.TOGGLE), "getActionDataString() returns correct value"); // Test invalid data assertEquals( "", DefaultConditionalAction.getActionDataString( Conditional.Action.SET_LIGHT, 0), "getActionDataString() returns correct value"); assertEquals( "Unlock", DefaultConditionalAction.getActionDataString( Conditional.Action.LOCK_TURNOUT, Turnout.UNLOCKED), "getActionDataString() returns correct value"); assertEquals( "Lock", DefaultConditionalAction.getActionDataString( Conditional.Action.LOCK_TURNOUT, Turnout.LOCKED), "getActionDataString() returns correct value"); assertEquals( "Toggle", DefaultConditionalAction.getActionDataString( Conditional.Action.LOCK_TURNOUT, Route.TOGGLE), "getActionDataString() returns correct value"); // Test invalid data assertEquals( "", DefaultConditionalAction.getActionDataString( Conditional.Action.LOCK_TURNOUT, -1), "getActionDataString() returns correct value"); assertEquals( "Play", DefaultConditionalAction.getActionDataString( Conditional.Action.CONTROL_AUDIO, Audio.CMD_PLAY), "getActionDataString() returns correct value"); assertEquals( "Stop", DefaultConditionalAction.getActionDataString( Conditional.Action.CONTROL_AUDIO, Audio.CMD_STOP), "getActionDataString() returns correct value"); assertEquals( "Toggle Play", DefaultConditionalAction.getActionDataString( Conditional.Action.CONTROL_AUDIO, Audio.CMD_PLAY_TOGGLE), "getActionDataString() returns correct value"); assertEquals( "Pause", DefaultConditionalAction.getActionDataString( Conditional.Action.CONTROL_AUDIO, Audio.CMD_PAUSE), "getActionDataString() returns correct value"); assertEquals( "Resume", DefaultConditionalAction.getActionDataString( Conditional.Action.CONTROL_AUDIO, Audio.CMD_RESUME), "getActionDataString() returns correct value"); assertEquals( "Toggle Pause", DefaultConditionalAction.getActionDataString( Conditional.Action.CONTROL_AUDIO, Audio.CMD_PAUSE_TOGGLE), "getActionDataString() returns correct value"); assertEquals( "Rewind", DefaultConditionalAction.getActionDataString( Conditional.Action.CONTROL_AUDIO, Audio.CMD_REWIND), "getActionDataString() returns correct value"); assertEquals( "Fade-in", DefaultConditionalAction.getActionDataString( Conditional.Action.CONTROL_AUDIO, Audio.CMD_FADE_IN), "getActionDataString() returns correct value"); assertEquals( "Fade-out", DefaultConditionalAction.getActionDataString( Conditional.Action.CONTROL_AUDIO, Audio.CMD_FADE_OUT), "getActionDataString() returns correct value"); assertEquals( "Reset Position", DefaultConditionalAction.getActionDataString( Conditional.Action.CONTROL_AUDIO, Audio.CMD_RESET_POSITION), "getActionDataString() returns correct value"); // Test invalid data assertEquals( "", DefaultConditionalAction.getActionDataString( Conditional.Action.CONTROL_AUDIO, 0), "getActionDataString() returns correct value"); JUnitAppender.assertErrorMessage("Unhandled Audio operation command: 0"); assertEquals( "Slow to Halt", DefaultConditionalAction.getActionDataString( Conditional.Action.CONTROL_TRAIN, Warrant.HALT), "getActionDataString() returns correct value"); assertEquals( "Resume", DefaultConditionalAction.getActionDataString( Conditional.Action.CONTROL_TRAIN, Warrant.RESUME), "getActionDataString() returns correct value"); assertEquals( "Move into next block", DefaultConditionalAction.getActionDataString( Conditional.Action.CONTROL_TRAIN, Warrant.RETRY_FWD), "getActionDataString() returns correct value"); // Assert.assertTrue("getActionDataString() returns correct value", // "Abort".equals(DefaultConditionalAction.getActionDataString(Conditional.Action.CONTROL_TRAIN, -1))); // Test invalid type // Assert.assertTrue("getActionDataString() returns correct value", // "".equals(DefaultConditionalAction.getActionDataString(-1, -1))); } @Test public void testSetActionData() { final String deviceName = "3"; final String actionStr = "5"; ConditionalAction ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_TURNOUT, deviceName, Turnout.THROWN, actionStr); assertTrue( ix1.getActionData() == Turnout.THROWN, "getActionData() gets correct value"); ix1.setActionData(Turnout.CLOSED); assertTrue( ix1.getActionData() == Turnout.CLOSED, "getActionData() gets correct value"); ix1.setActionData("Thrown"); assertTrue( ix1.getActionData() == Turnout.THROWN, "getActionData() gets correct value"); } @Test public void testGetActionBean() { ConditionalAction ix1; NamedBean bean; String deviceName = "3"; // Start with testing the exception handling in getActionBean() JUnitUtil.resetInstanceManager(); JUnitUtil.initInternalTurnoutManagerThrowException(); JUnitUtil.initLightManagerThrowException(); JUnitUtil.initMemoryManagerThrowException(); JUnitUtil.initInternalSensorManagerThrowException(); JUnitUtil.initSignalHeadManagerThrowException(); JUnitUtil.initSignalMastManagerThrowException(); JUnitUtil.initWarrantManagerThrowException(); JUnitUtil.initOBlockManagerThrowException(); JUnitUtil.initRouteManagerThrowException(); ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_SENSOR, deviceName, 4, "5"); JUnitAppender.assertErrorMessage("invalid sensor name= \"3\" in conditional action"); // getBean() tries to set the bean if bean == null. This generates a new error message. assertNull( ix1.getBean(), "getActionBean() returns null"); JUnitAppender.assertErrorMessage("invalid sensor name= \"3\" in conditional action"); ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_TURNOUT, deviceName, 4, "5"); JUnitAppender.assertErrorMessage("invalid turnout name= \"3\" in conditional action"); // getBean() tries to set the bean if bean == null. This generates a new error message. assertNull( ix1.getBean(), "getActionBean() returns null"); JUnitAppender.assertErrorMessage("invalid turnout name= \"3\" in conditional action"); ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_MEMORY, deviceName, 4, "5"); JUnitAppender.assertErrorMessage("invalid memory name= \"3\" in conditional action"); // getBean() tries to set the bean if bean == null. This generates a new error message. assertNull( ix1.getBean(), "getActionBean() returns null"); JUnitAppender.assertErrorMessage("invalid memory name= \"3\" in conditional action"); ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_LIGHT, deviceName, 4, "5"); JUnitAppender.assertErrorMessage("invalid light name= \"3\" in conditional action"); // getBean() tries to set the bean if bean == null. This generates a new error message. assertNull( ix1.getBean(), "getActionBean() returns null"); JUnitAppender.assertErrorMessage("invalid light name= \"3\" in conditional action"); ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_SIGNAL_APPEARANCE, "IH1", 4, "5"); JUnitAppender.assertErrorMessage("invalid signal head name= \"IH1\" in conditional action"); // getBean() tries to set the bean if bean == null. This generates a new error message. assertNull( ix1.getBean(), "getActionBean() returns null"); JUnitAppender.assertErrorMessage("invalid signal head name= \"IH1\" in conditional action"); ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_SIGNALMAST_HELD, "IF$shsm:AAR-1946:CPL(IH1)", 4, "5"); JUnitAppender.assertErrorMessage("invalid signal mast name= \"IF$shsm:AAR-1946:CPL(IH1)\" in conditional action"); // getBean() tries to set the bean if bean == null. This generates a new error message. assertNull( ix1.getBean(), "getActionBean() returns null"); JUnitAppender.assertErrorMessage("invalid signal mast name= \"IF$shsm:AAR-1946:CPL(IH1)\" in conditional action"); ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.MANUAL_RUN_WARRANT, "IW3", 4, "5"); JUnitAppender.assertErrorMessage("invalid Warrant name= \"IW3\" in conditional action"); // getBean() tries to set the bean if bean == null. This generates a new error message. assertNull( ix1.getBean(), "getActionBean() returns null"); JUnitAppender.assertErrorMessage("invalid Warrant name= \"IW3\" in conditional action"); ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_BLOCK_VALUE, "OB3", 4, "5"); JUnitAppender.assertErrorMessage("invalid OBlock name= \"OB3\" in conditional action"); // getBean() tries to set the bean if bean == null. This generates a new error message. assertNull( ix1.getBean(), "getActionBean() returns null"); JUnitAppender.assertErrorMessage("invalid OBlock name= \"OB3\" in conditional action"); ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.TRIGGER_ROUTE, deviceName, 4, "5"); JUnitAppender.assertErrorMessage("invalid Route name= \"3\" in conditional action"); // getBean() tries to set the bean if bean == null. This generates a new error message. assertNull( ix1.getBean(), "getActionBean() returns null"); JUnitAppender.assertErrorMessage("invalid Route name= \"3\" in conditional action"); JUnitUtil.resetInstanceManager(); JUnitUtil.initInternalTurnoutManager(); JUnitUtil.initInternalLightManager(); JUnitUtil.initInternalSensorManager(); JUnitUtil.initDefaultSignalMastManager(); JUnitUtil.initSignalMastLogicManager(); JUnitUtil.initWarrantManager(); JUnitUtil.initOBlockManager(); JUnitUtil.initRouteManager(); JUnitUtil.initIdTagManager(); ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_SENSOR, deviceName, 4, "5"); bean = InstanceManager.getDefault(SensorManager.class).provideSensor(deviceName); assertEquals( bean, ix1.getBean(), "getActionBean() returns correct bean"); ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_TURNOUT, deviceName, 4, "5"); bean = InstanceManager.getDefault(TurnoutManager.class).provideTurnout(deviceName); assertEquals( bean, ix1.getBean(), "getActionBean() returns correct bean"); ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_MEMORY, deviceName, 4, "5"); bean = InstanceManager.getDefault(MemoryManager.class).provideMemory(deviceName); assertEquals( bean, ix1.getBean(), "getActionBean() returns correct bean"); bean = InstanceManager.getDefault(LightManager.class).provideLight(deviceName); ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_LIGHT, bean.getSystemName(), 4, "5"); assertEquals( bean, ix1.getBean(), "getActionBean() returns correct bean"); // Note that the signal head IH1 created here are also used to test the signal mast. SignalHead signalHead = new VirtualSignalHead("IH1"); InstanceManager.getDefault(SignalHeadManager.class).register(signalHead); bean = InstanceManager.getDefault(SignalHeadManager.class).getSignalHead("IH1"); ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_SIGNAL_APPEARANCE, "IH1", 4, "5"); assertEquals( bean, ix1.getBean(), "getActionBean() returns correct bean"); // 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)"); ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_SIGNALMAST_HELD, "IF$shsm:AAR-1946:CPL(IH1)", 4, "5"); assertEquals( bean, ix1.getBean(), "getActionBean() returns correct bean"); bean = InstanceManager.getDefault(WarrantManager.class).provideWarrant("IW3"); ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.MANUAL_RUN_WARRANT, "IW3", 4, "5"); assertEquals( bean, ix1.getBean(), "getActionBean() returns correct bean"); bean = InstanceManager.getDefault(OBlockManager.class).provideOBlock("OB3"); ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_BLOCK_VALUE, "OB3", 4, "5"); assertEquals( bean, ix1.getBean(), "getActionBean() returns correct bean"); bean = InstanceManager.getDefault(RouteManager.class).newRoute(deviceName); ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.TRIGGER_ROUTE, deviceName, 4, "5"); assertEquals( bean, ix1.getBean(), "getActionBean() returns correct bean"); } @Test public void testDescription() { final String deviceName = "3"; final String actionStr = "5"; ConditionalAction ix1 = new DefaultConditionalAction(ACTION_OPTION_ON_CHANGE_TO_TRUE, Conditional.Action.SET_TURNOUT, deviceName, Turnout.THROWN, actionStr); ix1.setType(Conditional.Action.CANCEL_TURNOUT_TIMERS); ix1.setActionData(Turnout.INDIRECT); assertEquals( "When Triggered True, Cancel Timers for Turnout, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Cancel Timers for Turnout, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_SIGNAL_HELD); ix1.setActionData(SignalHead.YELLOW); assertEquals( "When Triggered True, Set Signal Head Held, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Set Signal Head Held, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.CLEAR_SIGNAL_HELD); ix1.setActionData(SignalHead.YELLOW); assertEquals( "When Triggered True, Clear Signal Head Held, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Clear Signal Head Held, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_SIGNAL_DARK); ix1.setActionData(SignalHead.YELLOW); assertEquals( "When Triggered True, Set Signal Head Dark, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Set Signal Head Dark, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_SIGNAL_LIT); ix1.setActionData(SignalHead.YELLOW); assertEquals( "When Triggered True, Set Signal Head Lit, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Set Signal Head Lit, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.TRIGGER_ROUTE); ix1.setActionData(Route.ONTHROWN); assertEquals( "When Triggered True, Trigger Route, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Trigger Route, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.CANCEL_SENSOR_TIMERS); ix1.setActionData(Sensor.INACTIVE); assertEquals( "When Triggered True, Cancel Timers for Sensor, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Cancel Timers for Sensor, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_MEMORY); ix1.setActionData(Memory.INCONSISTENT); assertEquals( "When Triggered True, Set Memory, \"3\". to 5.", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Set Memory, \"3\". to 5.", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.ENABLE_LOGIX); ix1.setActionData(Logix.LISTENER_TYPE_CONDITIONAL); assertEquals( "When Triggered True, Enable Logix, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Enable Logix, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.DISABLE_LOGIX); ix1.setActionData(Logix.LISTENER_TYPE_CONDITIONAL); assertEquals( "When Triggered True, Disable Logix, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Disable Logix, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.COPY_MEMORY); ix1.setActionData(Memory.INCONSISTENT); assertEquals( "When Triggered True, Copy Memory To Memory, \"3\". to 5.", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Copy Memory To Memory, \"3\". to 5.", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_LIGHT_INTENSITY); ix1.setActionData(Light.TIMED_ON_CONTROL); assertEquals( "When Triggered True, Set Light Intensity, \"3\". to 5. to 4.", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Set Light Intensity, \"3\". to 5. to 4.", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_LIGHT_TRANSITION_TIME); ix1.setActionData(Light.TIMED_ON_CONTROL); assertEquals( "When Triggered True, Set Light Transition Time, \"3\". to 5. to 4.", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Set Light Transition Time, \"3\". to 5. to 4.", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.ALLOCATE_WARRANT_ROUTE); ix1.setActionData(Warrant.RETRY_FWD); assertEquals( "When Triggered True, Allocate Warrant Route, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Allocate Warrant Route, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.DEALLOCATE_WARRANT_ROUTE); ix1.setActionData(Warrant.RETRY_FWD); assertEquals( "When Triggered True, Deallocate Warrant, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Deallocate Warrant, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_SIGNALMAST_HELD); ix1.setActionData(SignalMast.INCONSISTENT); assertEquals( "When Triggered True, Set Signal Mast Held, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Set Signal Mast Held, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.CLEAR_SIGNALMAST_HELD); ix1.setActionData(SignalMast.INCONSISTENT); assertEquals( "When Triggered True, Clear Signal Mast Held, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Clear Signal Mast Held, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_SIGNALMAST_DARK); ix1.setActionData(SignalMast.INCONSISTENT); assertEquals( "When Triggered True, Set Signal Mast Dark, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Set Signal Mast Dark, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_SIGNALMAST_LIT); ix1.setActionData(SignalMast.INCONSISTENT); assertEquals( "When Triggered True, Clear Signal Mast Dark, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Clear Signal Mast Dark, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_BLOCK_ERROR); ix1.setActionData(Block.INCONSISTENT); assertEquals( "When Triggered True, Set Block Error, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Set Block Error, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.CLEAR_BLOCK_ERROR); ix1.setActionData(Block.INCONSISTENT); assertEquals( "When Triggered True, Clear Block Error, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Clear Block Error, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.DEALLOCATE_BLOCK); ix1.setActionData(Block.INCONSISTENT); assertEquals( "When Triggered True, Deallocate Block, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Deallocate Block, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_BLOCK_OUT_OF_SERVICE); ix1.setActionData(Block.INCONSISTENT); assertEquals( "When Triggered True, Set Block OutOfService, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Set Block OutOfService, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_BLOCK_IN_SERVICE); ix1.setActionData(Block.INCONSISTENT); assertEquals( "When Triggered True, Clear Block OutOfService, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Clear Block OutOfService, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_NXPAIR_ENABLED); assertEquals( "When Triggered True, Set NX Pair Enabled, \"null\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Set NX Pair Enabled, \"null\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_NXPAIR_DISABLED); assertEquals( "When Triggered True, Set NX Pair Disabled, \"null\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Set NX Pair Disabled, \"null\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_NXPAIR_SEGMENT); assertEquals( "When Triggered True, Set NX Pair Segment Active / Inactive, \"null\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Set NX Pair Segment Active / Inactive, \"null\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_ROUTE_TURNOUTS); ix1.setActionData(Route.INCONSISTENT); assertEquals( "When Triggered True, Set Route Turnouts of Warrant, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Set Route Turnouts of Warrant, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.AUTO_RUN_WARRANT); ix1.setActionData(Warrant.INCONSISTENT); assertEquals( "When Triggered True, Auto Run Train of Warrant, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Auto Run Train of Warrant, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.MANUAL_RUN_WARRANT); ix1.setActionData(Warrant.INCONSISTENT); assertEquals( "When Triggered True, Manually Run Train of Warrant, \"3\".", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Manually Run Train of Warrant, \"3\".", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_SENSOR); ix1.setActionData(Sensor.INACTIVE); assertEquals( "When Triggered True, Set Sensor, \"3\" to Inactive", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Set Sensor, \"3\" to Inactive", ix1.description(true)); ix1.setType(Conditional.Action.SET_TURNOUT); ix1.setActionData(Turnout.THROWN); assertEquals( "When Triggered True, Set Turnout, \"3\" to Thrown", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Set Turnout, \"3\" to Thrown", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_LIGHT); ix1.setActionData(Light.OFF); assertEquals( "When Triggered True, Set Light, \"3\" to Off", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Set Light, \"3\" to Off", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.LOCK_TURNOUT); ix1.setActionData(Turnout.LOCKED); assertEquals( "When Triggered True, Turnout Lock, \"3\" to Lock", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Turnout Lock, \"3\" to Lock", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.RESET_DELAYED_SENSOR); ix1.setActionData(Sensor.INACTIVE); assertEquals( "When Triggered True, Reset Delayed Set Sensor, \"3\" to Inactive, after 5 seconds.", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Reset Delayed Set Sensor, \"3\" to Inactive, after 5 seconds.", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_SIGNAL_APPEARANCE); ix1.setActionData(SignalHead.YELLOW); assertEquals( "When Triggered True, Set Signal Head Appearance, \"3\" to Yellow", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Set Signal Head Appearance, \"3\" to Yellow", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.RESET_DELAYED_TURNOUT); ix1.setActionData(Turnout.THROWN); assertEquals( "When Triggered True, Reset Delayed Set Turnout, \"3\" to Thrown, after 5 seconds.", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Reset Delayed Set Turnout, \"3\" to Thrown, after 5 seconds.", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.DELAYED_TURNOUT); ix1.setActionData(Turnout.THROWN); assertEquals( "When Triggered True, Delayed Set Turnout, \"3\" to Thrown, after 5 seconds.", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Delayed Set Turnout, \"3\" to Thrown, after 5 seconds.", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.DELAYED_SENSOR); ix1.setActionData(Sensor.INACTIVE); assertEquals( "When Triggered True, Delayed Set Sensor, \"3\" to Inactive, after 5 seconds.", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Delayed Set Sensor, \"3\" to Inactive, after 5 seconds.", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.CONTROL_AUDIO); ix1.setActionData(Audio.CMD_PLAY); assertEquals( "When Triggered True, Control Audio object, \"3\" to Play", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Control Audio object, \"3\" to Play", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.SET_SIGNALMAST_ASPECT); ix1.setActionData(SignalMast.INCONSISTENT); assertEquals( "When Triggered True, Set Signal Mast Aspect, \"3\" to 5", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Set Signal Mast Aspect, \"3\" to 5", ix1.description(true), "description() returns correct value"); ix1.setType(Conditional.Action.CONTROL_TRAIN); ix1.setActionData(Warrant.ABORT); assertEquals( "When Triggered True, Control Auto Train of Warrant \"3\" to Abort", ix1.description(false), "description() returns correct value"); assertEquals( "On Change To True, Control Auto Train of Warrant \"3\" to Abort", ix1.description(true), "description() returns correct value"); // ix1.setType(-1); // ix1.setActionData(NamedBean.INCONSISTENT); // Assert.assertTrue("description() returns correct value", // "When Triggered True, ".equals(ix1.description(false))); // JUnitAppender.assertWarnMessage("Unexpected parameter to getActionTypeString(-1)"); // Assert.assertTrue("description() returns correct value", // "On Change To True, ".equals(ix1.description(true))); // JUnitAppender.assertWarnMessage("Unexpected parameter to getActionTypeString(-1)"); } // from here down is testing infrastructure @BeforeEach public void setUp() { JUnitUtil.setUp(); JUnitUtil.resetInstanceManager(); JUnitUtil.initInternalTurnoutManager(); JUnitUtil.initInternalLightManager(); JUnitUtil.initInternalSensorManager(); JUnitUtil.initDefaultSignalMastManager(); JUnitUtil.initSignalMastLogicManager(); JUnitUtil.initWarrantManager(); JUnitUtil.initOBlockManager(); JUnitUtil.initRouteManager(); JUnitUtil.initIdTagManager(); } @AfterEach public void tearDown() { JUnitUtil.tearDown(); } }