Files
JIMRI/java/test/jmri/managers/AbstractThrottleManagerTestBase.java
2026-06-17 14:00:51 +02:00

224 lines
7.9 KiB
Java

package jmri.managers;
import jmri.LocoAddress;
import jmri.DccLocoAddress;
import jmri.DccThrottle;
import jmri.Throttle;
import jmri.ThrottleListener;
import jmri.ThrottleManager;
import jmri.util.JUnitUtil;
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;
/**
* Base for ThrottleManager tests in specific jmrix.packages
* <p>
* This is not itself a test class, e.g. should not be added to a suite.
* Instead, this forms the base for test classes, including providing some
* common tests
*
* @author Bob Jacobsen
* @author Paul Bender Copyright (C) 2016
*/
public abstract class AbstractThrottleManagerTestBase {
/**
* Overload to load tm with actual object; create scaffolds as needed
*/
abstract public void setUp();
protected ThrottleManager tm = null; // holds objects under test
protected boolean throttleFoundResult = false;
protected boolean throttleNotFoundResult = false;
protected boolean throttleStealResult = false;
public class ThrottleListen implements ThrottleListener {
private DccThrottle foundThrottle = null;
private String failedReason;
public int flagGotStealRequest = -1;
@Override
public void notifyThrottleFound(DccThrottle t){
throttleFoundResult = true;
foundThrottle = t;
}
@Override
public void notifyFailedThrottleRequest(LocoAddress address, String reason){
throttleNotFoundResult = true;
failedReason = reason;
}
@Override
public void notifyDecisionRequired(LocoAddress address, DecisionType question) {
if ( question == DecisionType.STEAL ){
throttleStealResult = true;
flagGotStealRequest = address.getNumber();
}
}
public DccThrottle getThrottle() {
return foundThrottle;
}
public String getFailedReason() {
return failedReason;
}
public int getFlagGotStealRequest() {
return flagGotStealRequest;
}
}
@AfterEach
public void postTestReset(){
throttleFoundResult = false;
throttleNotFoundResult = false;
throttleStealResult = false;
}
// start of common tests
// test creation - real work is in the setup() routine
@Test
public void testCreate() {
assertNotNull(tm);
}
@Test
public void getUserName() {
assertNotNull(tm.getUserName());
}
@Test
public void hasDispatchFunction() {
assertNotNull(tm.hasDispatchFunction());
}
@Test
public void addressTypeUnique() {
assertNotNull(tm.addressTypeUnique());
}
@Test
public void canBeLongAddress() {
assertNotNull(tm.canBeLongAddress(50));
}
@Test
public void canBeShortAddress() {
assertNotNull(tm.canBeShortAddress(50));
}
@Test
public void supportedSpeedModes() {
assertNotNull(tm.supportedSpeedModes());
}
@Test
public void getAddressTypes() {
assertNotNull(tm.getAddressTypes());
}
@Test
public void getAddressProtocolTypes() {
assertNotNull(tm.getAddressProtocolTypes());
}
@Test
public void testGetAddressNullValue() {
assertNull( tm.getAddress(null, ""), "null address value");
}
@Test
public void testGetAddressNullProtocol() {
assertNull( tm.getAddress("42", (String)null), "null protocol");
}
@Test
public void testGetAddressShort() {
assertNotNull( tm.getAddress("42", LocoAddress.Protocol.DCC), "short address value");
}
@Test
public void testGetAddressLong() {
assertNotNull( tm.getAddress("4200", LocoAddress.Protocol.DCC), "long address value");
}
@Test
public void testGetAddressShortString() {
assertNotNull( tm.getAddress("42", "DCC"), "short address value from strings");
}
@Test
public void testGetAddressLongString() {
assertNotNull( tm.getAddress("4200", "DCC"), "long address value from strings");
}
@Test
@SuppressWarnings({"deprecation"})
public void testGetThrottleInfo() {
DccLocoAddress addr = new DccLocoAddress(42, false);
assertEquals( 0, tm.getThrottleUsageCount(addr), "throttle use 0");
assertEquals( 0, tm.getThrottleUsageCount(42, false), "throttle use 0");
assertNull( tm.getThrottleInfo(addr, Throttle.F28), "NULL");
ThrottleListen throtListen = new ThrottleListen();
tm.requestThrottle(addr, throtListen, true);
JUnitUtil.waitFor(()-> (tm.getThrottleInfo(addr, Throttle.ISFORWARD) != null), "reply didn't arrive");
assertTrue(throttleFoundResult);
assertFalse( throttleNotFoundResult );
assertFalse( throttleStealResult );
assertNotNull( tm.getThrottleInfo(addr, Throttle.ISFORWARD), "is forward");
assertNotNull( tm.getThrottleInfo(addr, Throttle.SPEEDSETTING), "speed setting");
assertNotNull( tm.getThrottleInfo(addr, Throttle.SPEEDINCREMENT), "speed increment");
assertNotNull( tm.getThrottleInfo(addr, Throttle.SPEEDSTEPMODE), "speed step mode");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F0), "F0");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F1), "F1");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F2), "F2");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F3), "F3");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F4), "F4");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F5), "F5");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F6), "F6");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F7), "F7");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F8), "F8");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F9), "F9");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F10), "F10");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F11), "F11");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F12), "F12");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F13), "F13");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F14), "F14");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F15), "F15");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F16), "F16");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F17), "F17");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F18), "F18");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F19), "F19");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F20), "F20");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F21), "F21");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F22), "F22");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F23), "F23");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F24), "F24");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F25), "F25");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F26), "F26");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F27), "F27");
assertNotNull( tm.getThrottleInfo(addr, Throttle.F28), "F28");
assertNull( tm.getThrottleInfo(addr, "NOT A VARIABLE"), "NULL");
assertEquals( 1, tm.getThrottleUsageCount(addr), "throttle use 1 addr");
assertEquals( 1, tm.getThrottleUsageCount(42, false), "throttle use 1 int b");
assertEquals( 0, tm.getThrottleUsageCount(77, true), "throttle use 0");
// remove listener on throttle created in process
DccThrottle throttle = throtListen.getThrottle();
assertNotNull(throttle);
tm.releaseThrottle(throttle, throtListen);
JUnitUtil.waitFor(()-> (tm.getThrottleUsageCount(addr) == 0), "throttle still in use after release");
}
// private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(AbstractThrottleManagerTestBase.class);
}