Files
JIMRI/java/test/jmri/jmrix/loconet/LocoNetThrottleTest.java
T
2026-06-17 14:00:51 +02:00

955 lines
36 KiB
Java

package jmri.jmrix.loconet;
import jmri.CommandStation;
import jmri.util.JUnitUtil;
import jmri.SpeedStepMode;
import org.junit.Assert;
import org.junit.jupiter.api.*;
public class LocoNetThrottleTest extends jmri.jmrix.AbstractThrottleTest {
@Test
public void testCTor() {
Assert.assertNotNull(instance);
}
// test the speed setting code.
@Test
public void testSpeedSetting() {
// we have 4 cases to check
// Case 1: The locomotive is not consisted.
LocoNetSlot s1 = new LocoNetSlot(0) {
@Override
public int consistStatus() {
return LnConstants.CONSIST_NO;
}
@Override
public int speed() {
return 0;
}
};
LocoNetThrottle t1 = new LocoNetThrottle(memo, s1);
Assert.assertEquals(0.0f, t1.getSpeedSetting(), 0.0);
t1.setSpeedSetting(0.5f);
// the speed change SHOULD be changed.
Assert.assertEquals(0.5f, t1.getSpeedSetting(), 0.0);
// Case 2: The locomotive is a consist top.
LocoNetSlot s2 = new LocoNetSlot(1) {
@Override
public int consistStatus() {
return LnConstants.CONSIST_TOP;
}
@Override
public int speed() {
return 0;
}
};
LocoNetThrottle t2 = new LocoNetThrottle(memo, s2);
Assert.assertEquals(0.0f, t2.getSpeedSetting(), 0.0);
t2.setSpeedSetting(0.5f);
// the speed change SHOULD be changed.
Assert.assertEquals(0.5f, t2.getSpeedSetting(), 0.0);
// Case 3: The locomotive is a consist mid.
LocoNetSlot s3 = new LocoNetSlot(2) {
@Override
public int consistStatus() {
return LnConstants.CONSIST_MID;
}
@Override
public int speed() {
return 0;
}
};
LocoNetThrottle t3 = new LocoNetThrottle(memo, s3);
Assert.assertEquals(0.0f, t3.getSpeedSetting(), 0.0);
t3.setSpeedSetting(0.5f);
// the speed change SHOULD NOT be changed.
Assert.assertEquals(0.0f, t3.getSpeedSetting(), 0.0);
// Case 3: The locomotive is a consist mid.
// make sure the speed does NOT change for a consist sub
LocoNetSlot s4 = new LocoNetSlot(3) {
@Override
public int consistStatus() {
return LnConstants.CONSIST_SUB;
}
@Override
public int speed() {
return 0;
}
};
LocoNetThrottle t4 = new LocoNetThrottle(memo, s4);
Assert.assertEquals(0.0f, t4.getSpeedSetting(), 0.0);
t4.setSpeedSetting(0.5f);
// the speed change SHOULD be ignored.
Assert.assertEquals(0.0f, t4.getSpeedSetting(), 0.0);
}
/**
* Test of getIsForward method, of class AbstractThrottle.
*/
@Test
@Override
public void testGetIsForward() {
boolean expResult = true;
boolean result = instance.getIsForward();
Assert.assertEquals(expResult, result);
}
/**
* Test of getSpeedStepMode method, of class AbstractThrottle.
*/
@Test
@Override
public void testGetSpeedStepMode() {
SpeedStepMode expResult = SpeedStepMode.NMRA_DCC_28;
SpeedStepMode result = instance.getSpeedStepMode();
Assert.assertEquals(expResult, result);
}
/**
* Test of getSpeedIncrement method, of class AbstractThrottle.
*/
@Test
@Override
public void testGetSpeedIncrement() {
float expResult = 1.0F/28.0F;
float result = instance.getSpeedIncrement();
Assert.assertEquals(expResult, result, 0.0);
}
/**
* Test of intSpeed method, of class AbstractThrottle.
*/
@Test
@Override
public void testGetSpeed_float() {
// set speed step mode to 128.
instance.setSpeedStepMode(jmri.SpeedStepMode.NMRA_DCC_128);
super.testGetSpeed_float();
// set speed step mode to 28
instance.setSpeedStepMode(jmri.SpeedStepMode.NMRA_DCC_28);
Assert.assertEquals("Idle", 0, ((LocoNetThrottle)instance).intSpeed(0.0F));
Assert.assertEquals("Emergency", 1, ((LocoNetThrottle)instance).intSpeed(-1.0F));
Assert.assertEquals("Emergency", 1, ((LocoNetThrottle)instance).intSpeed(-0.001F));
Assert.assertEquals("Full Speed", 124, ((LocoNetThrottle)instance).intSpeed(1.0F)); // 124 from class source
float incre = 1.F/111F;
float speed = incre;
for ( int i=1; i < 112; i++ ) {
int result = ((LocoNetThrottle)instance).intSpeed(speed);
// System.out.println("speed="+speed+" step="+result+" i="+i);
Assert.assertNotSame(speed + "(28 steps) should not idle", 0, result);
Assert.assertNotSame(speed + "(28 steps) should not eStop", 1, result);
Assert.assertTrue(speed + " should be 16 or larger ", result >= 16);
if(i>4)
{
Assert.assertEquals("loconet speed from " + speed, i+12, result);
}
else
{
Assert.assertEquals("loconet speed from " + speed, 16, result);
}
speed += incre;
}
}
/**
* Test of setF0 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF0() {
lnis.outbound.clear();
lnis.resetStatistics();
boolean f0 = false;
instance.setF0(f0);
Assert.assertEquals(f0, instance.getF0());
Assert.assertEquals("number of messages is 1", 1, lnis.outbound.size());
Assert.assertEquals("opcode is OPC_LOCO_DIRF", LnConstants.OPC_LOCO_DIRF, lnis.outbound.get(0).getOpCode());
Assert.assertEquals("sent f0 in correct state", 0, lnis.outbound.get(0).getElement(2) & 0x10);
f0 = true;
instance.setF0(f0);
Assert.assertEquals(f0, instance.getF0());
Assert.assertEquals("number of messages is 2", 2, lnis.outbound.size());
Assert.assertEquals("opcode is OPC_LOCO_DIRF", LnConstants.OPC_LOCO_DIRF, lnis.outbound.get(1).getOpCode());
Assert.assertEquals("sent f0 in correct state", 0x10, lnis.outbound.get(1).getElement(2) & 0x10);
}
/**
* Test of setF1 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF1() {
lnis.outbound.clear();
lnis.resetStatistics();
boolean f1 = false;
instance.setF1(f1);
Assert.assertEquals(f1, instance.getF1());
Assert.assertEquals("number of messages is 1", 1, lnis.outbound.size());
Assert.assertEquals("opcode is OPC_LOCO_DIRF", LnConstants.OPC_LOCO_DIRF, lnis.outbound.get(0).getOpCode());
Assert.assertEquals("sent f1 in correct state", 0, lnis.outbound.get(0).getElement(2) & 1);
f1 = true;
instance.setF1(f1);
Assert.assertEquals(f1, instance.getF1());
Assert.assertEquals("number of messages is 2", 2, lnis.outbound.size());
Assert.assertEquals("opcode is OPC_LOCO_DIRF", LnConstants.OPC_LOCO_DIRF, lnis.outbound.get(1).getOpCode());
Assert.assertEquals("sent f1 in correct state", 1, lnis.outbound.get(1).getElement(2) & 1);
}
/**
* Test of setF2 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF2() {
lnis.outbound.clear();
lnis.resetStatistics();
boolean f2 = false;
instance.setF2(f2);
Assert.assertEquals(f2, instance.getF2());
Assert.assertEquals("number of messages is 1", 1, lnis.outbound.size());
Assert.assertEquals("opcode is OPC_LOCO_DIRF", LnConstants.OPC_LOCO_DIRF, lnis.outbound.get(0).getOpCode());
Assert.assertEquals("sent f2 in correct state", 0, lnis.outbound.get(0).getElement(2) & 2);
f2 = true;
instance.setF2(f2);
Assert.assertEquals(f2, instance.getF2());
Assert.assertEquals("number of messages is 2", 2, lnis.outbound.size());
Assert.assertEquals("opcode is OPC_LOCO_DIRF", LnConstants.OPC_LOCO_DIRF, lnis.outbound.get(1).getOpCode());
Assert.assertEquals("sent f2 in correct state", 2, lnis.outbound.get(1).getElement(2) & 2);
}
/**
* Test of setF3 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF3() {
lnis.outbound.clear();
lnis.resetStatistics();
boolean f3 = false;
instance.setF3(f3);
Assert.assertEquals(f3, instance.getF3());
Assert.assertEquals("number of messages is 1", 1, lnis.outbound.size());
Assert.assertEquals("opcode is OPC_LOCO_DIRF", LnConstants.OPC_LOCO_DIRF, lnis.outbound.get(0).getOpCode());
Assert.assertEquals("sent f2 in correct state", 0, lnis.outbound.get(0).getElement(2) & 4);
f3 = true;
instance.setF3(f3);
Assert.assertEquals(f3, instance.getF3());
Assert.assertEquals("number of messages is 2", 2, lnis.outbound.size());
Assert.assertEquals("opcode is OPC_LOCO_DIRF", LnConstants.OPC_LOCO_DIRF, lnis.outbound.get(1).getOpCode());
Assert.assertEquals("sent f3 in correct state", 4, lnis.outbound.get(1).getElement(2) & 4);
}
/**
* Test of setF4 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF4() {
lnis.outbound.clear();
lnis.resetStatistics();
boolean f4 = false;
instance.setF4(f4);
Assert.assertEquals(f4, instance.getF4());
Assert.assertEquals("number of messages is 1", 1, lnis.outbound.size());
Assert.assertEquals("opcode is OPC_LOCO_DIRF", LnConstants.OPC_LOCO_DIRF, lnis.outbound.get(0).getOpCode());
Assert.assertEquals("sent f4 in correct state", 0, lnis.outbound.get(0).getElement(2) & 8);
f4 = true;
instance.setF4(f4);
Assert.assertEquals(f4, instance.getF4());
Assert.assertEquals("number of messages is 2", 2, lnis.outbound.size());
Assert.assertEquals("opcode is OPC_LOCO_DIRF", LnConstants.OPC_LOCO_DIRF, lnis.outbound.get(1).getOpCode());
Assert.assertEquals("sent f4 in correct state", 8, lnis.outbound.get(1).getElement(2) & 8);
}
/**
* Test of setF5 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF5() {
lnis.outbound.clear();
lnis.resetStatistics();
boolean f5 = false;
instance.setF5(f5);
Assert.assertEquals(f5, instance.getF5());
Assert.assertEquals("number of messages is 1", 1, lnis.outbound.size());
Assert.assertEquals("opcode is OPC_LOCO_SND", LnConstants.OPC_LOCO_SND, lnis.outbound.get(0).getOpCode());
Assert.assertEquals("sent f5 in correct state", 0, lnis.outbound.get(0).getElement(2) & 1);
f5 = true;
instance.setF5(f5);
Assert.assertEquals(f5, instance.getF5());
Assert.assertEquals("number of messages is 2", 2, lnis.outbound.size());
Assert.assertEquals("opcode is OPC_LOCO_SND", LnConstants.OPC_LOCO_SND, lnis.outbound.get(1).getOpCode());
Assert.assertEquals("sent f5 in correct state", 1, lnis.outbound.get(1).getElement(2) & 1);
}
/**
* Test of setF6 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF6() {
lnis.outbound.clear();
lnis.resetStatistics();
boolean f6 = false;
instance.setF6(f6);
Assert.assertEquals(f6, instance.getF6());
Assert.assertEquals("number of messages is 1", 1, lnis.outbound.size());
Assert.assertEquals("opcode is OPC_LOCO_SND", LnConstants.OPC_LOCO_SND, lnis.outbound.get(0).getOpCode());
Assert.assertEquals("sent f6 in correct state", 0, lnis.outbound.get(0).getElement(2) & 2);
f6 = true;
instance.setF6(f6);
Assert.assertEquals(f6, instance.getF6());
Assert.assertEquals("number of messages is 2", 2, lnis.outbound.size());
Assert.assertEquals("opcode is OPC_LOCO_SND", LnConstants.OPC_LOCO_SND, lnis.outbound.get(1).getOpCode());
Assert.assertEquals("sent f6 in correct state", 2, lnis.outbound.get(1).getElement(2) & 2);
}
/**
* Test of setF7 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF7() {
lnis.outbound.clear();
lnis.resetStatistics();
boolean f7 = false;
instance.setF7(f7);
Assert.assertEquals(f7, instance.getF7());
Assert.assertEquals("number of messages is 1", 1, lnis.outbound.size());
Assert.assertEquals("opcode is OPC_LOCO_SND", LnConstants.OPC_LOCO_SND, lnis.outbound.get(0).getOpCode());
Assert.assertEquals("sent f7 in correct state", 0, lnis.outbound.get(0).getElement(2) & 4);
f7 = true;
instance.setF7(f7);
Assert.assertEquals(f7, instance.getF7());
Assert.assertEquals("number of messages is 2", 2, lnis.outbound.size());
Assert.assertEquals("opcode is OPC_LOCO_SND", LnConstants.OPC_LOCO_SND, lnis.outbound.get(1).getOpCode());
Assert.assertEquals("sent f7 in correct state", 4, lnis.outbound.get(1).getElement(2) & 4);
}
/**
* Test of setF8 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF8() {
lnis.outbound.clear();
lnis.resetStatistics();
boolean f8 = false;
instance.setF8(f8);
Assert.assertEquals(f8, instance.getF8());
Assert.assertEquals("number of messages is 1", 1, lnis.outbound.size());
Assert.assertEquals("opcode is OPC_LOCO_SND", LnConstants.OPC_LOCO_SND, lnis.outbound.get(0).getOpCode());
Assert.assertEquals("sent f8 in correct state", 0, lnis.outbound.get(0).getElement(2) & 8);
f8 = true;
instance.setF8(f8);
Assert.assertEquals(f8, instance.getF8());
Assert.assertEquals("number of messages is 2", 2, lnis.outbound.size());
Assert.assertEquals("opcode is OPC_LOCO_SND", LnConstants.OPC_LOCO_SND, lnis.outbound.get(1).getOpCode());
Assert.assertEquals("sent f8 in correct state", 8, lnis.outbound.get(1).getElement(2) & 8);
}
/**
* Test of setF9 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF9() {
boolean f9 = false;
instance.setF9(f9);
Assert.assertEquals(f9, instance.getF9());
f9 = true;
instance.setF9(f9);
Assert.assertEquals(f9, instance.getF9());
}
/**
* Test of setF10 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF10() {
boolean f10 = false;
instance.setF10(f10);
Assert.assertEquals(f10, instance.getF10());
f10 = true;
instance.setF10(f10);
Assert.assertEquals(f10, instance.getF10());
}
/**
* Test of setF11 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF11() {
boolean f11 = false;
instance.setF11(f11);
Assert.assertEquals(f11, instance.getF11());
f11 = true;
instance.setF11(f11);
Assert.assertEquals(f11, instance.getF11());
}
/**
* Test of setF12 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF12() {
boolean f12 = false;
instance.setF12(f12);
Assert.assertEquals(f12, instance.getF12());
f12 = true;
instance.setF12(f12);
Assert.assertEquals(f12, instance.getF12());
}
/**
* Test of setF13 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF13() {
boolean f13 = false;
instance.setF13(f13);
Assert.assertEquals(f13, instance.getF13());
f13 = true;
instance.setF13(f13);
Assert.assertEquals(f13, instance.getF13());
}
/**
* Test of setF14 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF14() {
boolean f14 = false;
instance.setF14(f14);
Assert.assertEquals(f14, instance.getF14());
f14 = true;
instance.setF14(f14);
Assert.assertEquals(f14, instance.getF14());
}
/**
* Test of setF15 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF15() {
boolean f15 = false;
instance.setF15(f15);
Assert.assertEquals(f15, instance.getF15());
f15 = true;
instance.setF15(f15);
Assert.assertEquals(f15, instance.getF15());
}
/**
* Test of setF16 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF16() {
boolean f16 = false;
instance.setF16(f16);
Assert.assertEquals(f16, instance.getF16());
f16 = true;
instance.setF16(f16);
Assert.assertEquals(f16, instance.getF16());
}
/**
* Test of setF17 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF17() {
boolean f17 = false;
instance.setF17(f17);
Assert.assertEquals(f17, instance.getF17());
f17 = true;
instance.setF17(f17);
Assert.assertEquals(f17, instance.getF17());
}
/**
* Test of setF18 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF18() {
boolean f18 = false;
instance.setF18(f18);
Assert.assertEquals(f18, instance.getF18());
f18 = true;
instance.setF18(f18);
Assert.assertEquals(f18, instance.getF18());
}
/**
* Test of setF19 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF19() {
boolean f19 = false;
instance.setF19(f19);
Assert.assertEquals(f19, instance.getF19());
f19 = true;
instance.setF19(f19);
Assert.assertEquals(f19, instance.getF19());
}
/**
* Test of setF20 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF20() {
boolean f20 = false;
instance.setF20(f20);
Assert.assertEquals(f20, instance.getF20());
f20 = true;
instance.setF20(f20);
Assert.assertEquals(f20, instance.getF20());
}
/**
* Test of setF21 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF21() {
boolean f21 = false;
instance.setF21(f21);
Assert.assertEquals(f21, instance.getF21());
f21 = true;
instance.setF21(f21);
Assert.assertEquals(f21, instance.getF21());
}
/**
* Test of setF22 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF22() {
boolean f22 = false;
instance.setF22(f22);
Assert.assertEquals(f22, instance.getF22());
f22 = true;
instance.setF22(f22);
Assert.assertEquals(f22, instance.getF22());
}
/**
* Test of setF23 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF23() {
boolean f23 = false;
instance.setF23(f23);
Assert.assertEquals(f23, instance.getF23());
f23 = true;
instance.setF23(f23);
Assert.assertEquals(f23, instance.getF23());
}
/**
* Test of setF24 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF24() {
boolean f24 = false;
instance.setF24(f24);
Assert.assertEquals(f24, instance.getF24());
f24 = true;
instance.setF24(f24);
Assert.assertEquals(f24, instance.getF24());
}
/**
* Test of setF25 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF25() {
boolean f25 = false;
instance.setF25(f25);
Assert.assertEquals(f25, instance.getF25());
f25 = true;
instance.setF25(f25);
Assert.assertEquals(f25, instance.getF25());
}
/**
* Test of setF26 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF26() {
boolean f26 = false;
instance.setF26(f26);
Assert.assertEquals(f26, instance.getF26());
f26 = true;
instance.setF26(f26);
Assert.assertEquals(f26, instance.getF26());
}
/**
* Test of setF27 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF27() {
boolean f27 = false;
instance.setF27(f27);
Assert.assertEquals(f27, instance.getF27());
f27 = true;
instance.setF27(f27);
Assert.assertEquals(f27, instance.getF27());
}
/**
* Test of setF28 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSetF28() {
boolean f28 = false;
instance.setF28(f28);
Assert.assertEquals(f28, instance.getF28());
f28 = true;
instance.setF28(f28);
Assert.assertEquals(f28, instance.getF28());
}
@Test
public void testSendFunctionF29() {
lnis.outbound.clear();
lnis.resetStatistics();
int func = 29;
LocoNetMessage funcOnMess = new LocoNetMessage(new int[] {0xED, 0x0B, 0x7f, 0x33, 0x02, 0x00, 0x58, 0x01, 0x00, 0x00, 0x00});
LocoNetMessage funcOffMess = new LocoNetMessage(new int [] {0xED, 0x0B, 0x7F, 0x33, 0x02, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00});
Assert.assertEquals("check send of function exp f" + func, 0, lnis.outbound.size());
instance.setFunction(func,true);
Assert.assertEquals("check send of function" + func, 1, lnis.outbound.size());
Assert.assertTrue("check opcode",funcOnMess.equals(lnis.outbound.get(0)));
instance.setFunction(func,false);
Assert.assertEquals("check send OFF function" + func, 2, lnis.outbound.size());
Assert.assertTrue("check opcode",funcOffMess.equals(lnis.outbound.get(1)));
}
/**
* Test of sendFunctionGroup1 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSendFunctionGroup1() {
lnis.outbound.clear();
lnis.resetStatistics();
instance.setF0(false);
instance.setF1(true);
instance.setF2(true);
instance.setF3(false);
instance.setIsForward(true);
lnis.outbound.clear();
lnis.resetStatistics();
Assert.assertEquals("check send of function group 1 (0)", 0, lnis.outbound.size());
((LocoNetThrottle)instance).sendFunctionGroup1();
Assert.assertEquals("check send of function group 1 (1)", 1, lnis.outbound.size());
Assert.assertEquals("check opcode",LnConstants.OPC_LOCO_DIRF, lnis.outbound.get(0).getOpCode());
Assert.assertEquals("check dirf byte", 0x03, lnis.outbound.get(0).getElement(2));
lnis.outbound.clear();
lnis.resetStatistics();
instance.setIsForward(false);
Assert.assertEquals("check send of function group 1 (2)", 1, lnis.outbound.size());
((LocoNetThrottle)instance).sendFunctionGroup1();
Assert.assertEquals("check send of function group 1 (3)", 2, lnis.outbound.size());
Assert.assertEquals("check opcode",LnConstants.OPC_LOCO_DIRF, lnis.outbound.get(1).getOpCode());
Assert.assertEquals("check dirf byte {4}", 0x023, lnis.outbound.get(1).getElement(2));
}
/**
* Test of sendFunctionGroup2 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSendFunctionGroup2() {
for (int i = 5; i <9; ++i ) {
instance.setF5(i==5);
instance.setF6(i==6);
instance.setF7(i==7);
instance.setF8(i==8);
lnis.outbound.clear();
lnis.resetStatistics();
((LocoNetThrottle)instance).sendFunctionGroup2();
Assert.assertEquals("check send of function group 2 for F"+i+" (0)", 1, lnis.outbound.size());
Assert.assertEquals("check opcode is OPC_LOCO_SND for F"+i+"",LnConstants.OPC_LOCO_SND, lnis.outbound.get(0).getOpCode());
Assert.assertEquals("check byte 2 for F"+i+"{0}", 1<<(i-5), lnis.outbound.get(0).getElement(2));
instance.setF5(!(i==5));
instance.setF6(!(i==6));
instance.setF7(!(i==7));
instance.setF8(!(i==8));
lnis.outbound.clear();
lnis.resetStatistics();
((LocoNetThrottle)instance).sendFunctionGroup2();
Assert.assertEquals("check send of function group 2 for !F"+i+"(1)", 1, lnis.outbound.size());
Assert.assertEquals("check opcode is OPC_LOCO_SND for F"+i+"",LnConstants.OPC_LOCO_SND, lnis.outbound.get(0).getOpCode());
Assert.assertEquals("check byte 2 for !F"+i+"{1}", 0x0f - (1<<(i-5)), lnis.outbound.get(0).getElement(2));
}
}
/**
* Test of sendFunctionGroup3 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSendFunctionGroup3() {
for (int i = 9; i <13; ++i ) {
instance.setF9(i==9);
instance.setF10(i==10);
instance.setF11(i==11);
instance.setF12(i==12);
lnis.outbound.clear();
lnis.resetStatistics();
((LocoNetThrottle)instance).sendFunctionGroup3();
Assert.assertEquals("check send of function group 3 for F"+i+" (0)", 1, lnis.outbound.size());
Assert.assertEquals("check opcode is OPC_IMM_PACKET for F"+i+"",LnConstants.OPC_IMM_PACKET, lnis.outbound.get(0).getOpCode());
Assert.assertEquals("check byte 1 for F"+i+"{0}", 0x0b, lnis.outbound.get(0).getElement(1));
Assert.assertEquals("check byte 2 for F"+i+"{0}", 0x7f, lnis.outbound.get(0).getElement(2));
Assert.assertEquals("check byte 3 for F"+i+"{0}", 0x23, lnis.outbound.get(0).getElement(3));
Assert.assertEquals("check byte 4 for F"+i+"{0}", 0x02, lnis.outbound.get(0).getElement(4));
Assert.assertEquals("check byte 5 for F"+i+"{0}", 0x00, lnis.outbound.get(0).getElement(5));
Assert.assertEquals("check byte 6 for F"+i+"{0}", 0x20+(1<<(i-9)), lnis.outbound.get(0).getElement(6));
Assert.assertEquals("check byte 7 for F"+i+"{0}", 0x00, lnis.outbound.get(0).getElement(7));
Assert.assertEquals("check byte 8 for F"+i+"{0}", 0x00, lnis.outbound.get(0).getElement(8));
Assert.assertEquals("check byte 9 for F"+i+"{0}", 0x00, lnis.outbound.get(0).getElement(9));
instance.setF9(!(i==9));
instance.setF10(!(i==10));
instance.setF11(!(i==11));
instance.setF12(!(i==12));
lnis.outbound.clear();
lnis.resetStatistics();
((LocoNetThrottle)instance).sendFunctionGroup3();
Assert.assertEquals("check send of function group 3 for !F"+i+"(1)", 1, lnis.outbound.size());
Assert.assertEquals("check opcode is OPC_IMM_PACKET for !F"+i+"{1}",LnConstants.OPC_IMM_PACKET, lnis.outbound.get(0).getOpCode());
Assert.assertEquals("check byte 1 for !F"+i+"{1}", 0x0b, lnis.outbound.get(0).getElement(1));
Assert.assertEquals("check byte 2 for !F"+i+"{1}", 0x7f, lnis.outbound.get(0).getElement(2));
Assert.assertEquals("check byte 3 for !F"+i+"{1}", 0x23, lnis.outbound.get(0).getElement(3));
Assert.assertEquals("check byte 4 for !F"+i+"{1}", 0x02, lnis.outbound.get(0).getElement(4));
Assert.assertEquals("check byte 5 for !F"+i+"{1}", 0x00, lnis.outbound.get(0).getElement(5));
Assert.assertEquals("check byte 6 for !F"+i+"{1}", 0x2F-(1<<(i-9)), lnis.outbound.get(0).getElement(6));
Assert.assertEquals("check byte 7 for !F"+i+"{1}", 0x00, lnis.outbound.get(0).getElement(7));
Assert.assertEquals("check byte 8 for !F"+i+"{1}", 0x00, lnis.outbound.get(0).getElement(8));
Assert.assertEquals("check byte 9 for 1F"+i+"{1}", 0x00, lnis.outbound.get(0).getElement(9));
}
}
/**
* Test of sendFunctionGroup4 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSendFunctionGroup4() {
for (int i = 13; i <21; ++i ) {
instance.setF13(i==13);
instance.setF14(i==14);
instance.setF15(i==15);
instance.setF16(i==16);
instance.setF17(i==17);
instance.setF18(i==18);
instance.setF19(i==19);
instance.setF20(i==20);
lnis.outbound.clear();
lnis.resetStatistics();
((LocoNetThrottle)instance).sendFunctionGroup4();
Assert.assertEquals("check send of function group 4 for F"+i+" (0)", 1, lnis.outbound.size());
Assert.assertEquals("check opcode is OPC_IMM_PACKET for F"+i+"",LnConstants.OPC_IMM_PACKET, lnis.outbound.get(0).getOpCode());
Assert.assertEquals("check byte 1 for F"+i+"{0}", 0x0b, lnis.outbound.get(0).getElement(1));
Assert.assertEquals("check byte 2 for F"+i+"{0}", 0x7f, lnis.outbound.get(0).getElement(2));
Assert.assertEquals("check byte 3 for F"+i+"{0}", 0x33, lnis.outbound.get(0).getElement(3));
Assert.assertEquals("check byte 4 for F"+i+"{0}", (i==20)?0x06:0x02, lnis.outbound.get(0).getElement(4));
Assert.assertEquals("check byte 5 for F"+i+"{0}", 0x00, lnis.outbound.get(0).getElement(5));
Assert.assertEquals("check byte 6 for F"+i+"{0}", 0x5e, lnis.outbound.get(0).getElement(6));
Assert.assertEquals("check byte 7 for F"+i+"{0}", (i < 20)?(1<<(i-13)):0, lnis.outbound.get(0).getElement(7));
Assert.assertEquals("check byte 8 for F"+i+"{0}", 0x00, lnis.outbound.get(0).getElement(8));
Assert.assertEquals("check byte 9 for F"+i+"{0}", 0x00, lnis.outbound.get(0).getElement(9));
instance.setF13(!(i==13));
instance.setF14(!(i==14));
instance.setF15(!(i==15));
instance.setF16(!(i==16));
instance.setF17(!(i==17));
instance.setF18(!(i==18));
instance.setF19(!(i==19));
instance.setF20(!(i==20));
lnis.outbound.clear();
lnis.resetStatistics();
((LocoNetThrottle)instance).sendFunctionGroup4();
Assert.assertEquals("check send of function group 4 for !F"+i+"(1)", 1, lnis.outbound.size());
Assert.assertEquals("check opcode is OPC_IMM_PACKET for !F"+i+"{1}",LnConstants.OPC_IMM_PACKET, lnis.outbound.get(0).getOpCode());
Assert.assertEquals("check byte 1 for !F"+i+"{1}", 0x0b, lnis.outbound.get(0).getElement(1));
Assert.assertEquals("check byte 2 for !F"+i+"{1}", 0x7f, lnis.outbound.get(0).getElement(2));
Assert.assertEquals("check byte 3 for !F"+i+"{1}", 0x33, lnis.outbound.get(0).getElement(3));
Assert.assertEquals("check byte 4 for !F"+i+"{1}", (i==20)?0x02:0x06, lnis.outbound.get(0).getElement(4));
Assert.assertEquals("check byte 5 for !F"+i+"{1}", 0x00, lnis.outbound.get(0).getElement(5));
Assert.assertEquals("check byte 6 for !F"+i+"{1}", 0x5e, lnis.outbound.get(0).getElement(6));
Assert.assertEquals("check byte 7 for !F"+i+"{1}", (i < 20)?(127-(1<<(i-13))):0x7f, lnis.outbound.get(0).getElement(7));
Assert.assertEquals("check byte 8 for !F"+i+"{1}", 0x00, lnis.outbound.get(0).getElement(8));
Assert.assertEquals("check byte 9 for 1F"+i+"{1}", 0x00, lnis.outbound.get(0).getElement(9));
}
}
/**
* Test of sendFunctionGroup5 method, of class AbstractThrottle.
*/
@Test
@Override
public void testSendFunctionGroup5() {
for (int i = 21; i <29; ++i ) {
instance.setF21(i==21);
instance.setF22(i==22);
instance.setF23(i==23);
instance.setF24(i==24);
instance.setF25(i==25);
instance.setF26(i==26);
instance.setF27(i==27);
instance.setF28(i==28);
lnis.outbound.clear();
lnis.resetStatistics();
((LocoNetThrottle)instance).sendFunctionGroup5();
Assert.assertEquals("check send of function group 5 for F"+i+" (0)", 1, lnis.outbound.size());
Assert.assertEquals("check opcode is OPC_IMM_PACKET for F"+i+"",LnConstants.OPC_IMM_PACKET, lnis.outbound.get(0).getOpCode());
Assert.assertEquals("check byte 1 for F"+i+"{0}", 0x0b, lnis.outbound.get(0).getElement(1));
Assert.assertEquals("check byte 2 for F"+i+"{0}", 0x7f, lnis.outbound.get(0).getElement(2));
Assert.assertEquals("check byte 3 for F"+i+"{0}", 0x33, lnis.outbound.get(0).getElement(3));
Assert.assertEquals("check byte 4 for F"+i+"{0}", (i==28)?0x06:0x02, lnis.outbound.get(0).getElement(4));
Assert.assertEquals("check byte 5 for F"+i+"{0}", 0x00, lnis.outbound.get(0).getElement(5));
Assert.assertEquals("check byte 6 for F"+i+"{0}", 0x5f, lnis.outbound.get(0).getElement(6));
Assert.assertEquals("check byte 7 for F"+i+"{0}", (i < 28)?(1<<(i-21)):0, lnis.outbound.get(0).getElement(7));
Assert.assertEquals("check byte 8 for F"+i+"{0}", 0x00, lnis.outbound.get(0).getElement(8));
Assert.assertEquals("check byte 9 for F"+i+"{0}", 0x00, lnis.outbound.get(0).getElement(9));
instance.setF21(!(i==21));
instance.setF22(!(i==22));
instance.setF23(!(i==23));
instance.setF24(!(i==24));
instance.setF25(!(i==25));
instance.setF26(!(i==26));
instance.setF27(!(i==27));
instance.setF28(!(i==28));
lnis.outbound.clear();
lnis.resetStatistics();
((LocoNetThrottle)instance).sendFunctionGroup5();
Assert.assertEquals("check send of function group 5 for !F"+i+"(1)", 1, lnis.outbound.size());
Assert.assertEquals("check opcode is OPC_IMM_PACKET for !F"+i+"{1}",LnConstants.OPC_IMM_PACKET, lnis.outbound.get(0).getOpCode());
Assert.assertEquals("check byte 1 for !F"+i+"{1}", 0x0b, lnis.outbound.get(0).getElement(1));
Assert.assertEquals("check byte 2 for !F"+i+"{1}", 0x7f, lnis.outbound.get(0).getElement(2));
Assert.assertEquals("check byte 3 for !F"+i+"{1}", 0x33, lnis.outbound.get(0).getElement(3));
Assert.assertEquals("check byte 4 for !F"+i+"{1}", (i==28)?0x02:0x06, lnis.outbound.get(0).getElement(4));
Assert.assertEquals("check byte 5 for !F"+i+"{1}", 0x00, lnis.outbound.get(0).getElement(5));
Assert.assertEquals("check byte 6 for !F"+i+"{1}", 0x5f, lnis.outbound.get(0).getElement(6));
Assert.assertEquals("check byte 7 for !F"+i+"{1}", (i < 28)?(127-(1<<(i-21))):0x7f, lnis.outbound.get(0).getElement(7));
Assert.assertEquals("check byte 8 for !F"+i+"{1}", 0x00, lnis.outbound.get(0).getElement(8));
Assert.assertEquals("check byte 9 for 1F"+i+"{1}", 0x00, lnis.outbound.get(0).getElement(9));
}
}
/**
* Test of getF2Momentary method, of class AbstractThrottle.
*/
@Test
@Override
public void testGetF2Momentary() {
boolean expResult = true;
boolean result = instance.getF2Momentary();
Assert.assertEquals("Check F2 Momentary true", expResult, result);
expResult = false;
instance.setF2Momentary(false);
result = instance.getF2Momentary();
Assert.assertEquals("Check F2 Momentary false", expResult, result);
}
private LocoNetInterfaceScaffold lnis;
private SlotManager slotmanager;
private LocoNetSystemConnectionMemo memo = null;
@BeforeEach
@Override
public void setUp() throws Exception {
JUnitUtil.setUp();
// prepare an interface
maxFns = 69;
lnis = new LocoNetInterfaceScaffold();
slotmanager = new SlotManager(lnis);
// set slot 3 to address 3
LocoNetMessage m = new LocoNetMessage(13);
m.setOpCode(LnConstants.OPC_WR_SL_DATA);
m.setElement(1, 0x0E);
m.setElement(2, 0x03);
m.setElement(4, 0x03);
slotmanager.slot(3).setSlot(m);
// set slot 4 to address 255
m.setElement(2, 0x04);
m.setElement(4, 0x7F);
m.setElement(9, 0x01);
slotmanager.slot(4).setSlot(m);
memo = new LocoNetSystemConnectionMemo(lnis, slotmanager);
memo.setThrottleManager(new LnThrottleManager(memo));
memo.store(slotmanager,CommandStation.class);
jmri.InstanceManager.setDefault(jmri.ThrottleManager.class, memo.getThrottleManager());
instance = new LocoNetThrottle(memo, new LocoNetSlot(0));
}
@AfterEach
@Override
public void tearDown() {
memo.getThrottleManager().dispose();
memo.dispose();
lnis = null;
JUnitUtil.tearDown();
}
}