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

115 lines
6.0 KiB
Java

package jmri.jmrix.loconet.uhlenbrock;
import jmri.jmrix.loconet.LocoNetMessage;
import jmri.util.JUnitUtil;
import org.junit.Assert;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/**
*
* @author Egbert Broerse Copyright (C) 2021
*/
public class LncvMessageContentsTest {
@Test
public void testCTorIllegalArgument() {
final LocoNetMessage lm = new LocoNetMessage(3); // LncvMessage length should be 15
Assert.assertThrows(IllegalArgumentException.class, () -> new LncvMessageContents(lm));
final LocoNetMessage lm2 = new LocoNetMessage(new int[] {0xD0, 0x01, 0x20, 0x08, 0x20, 0x26});
Assert.assertThrows(IllegalArgumentException.class, () -> new LncvMessageContents(lm2));
LocoNetMessage l = new LocoNetMessage(new int[] {0xE5, 0x0F, 0x05, 0x49, 0x4B, 0x1F, 0x11, 0x29, 0x13, 0x01, 0x00, 0x69, 0x03, 0x00, 0x4D});
LncvMessageContents lncvm = new LncvMessageContents(l);
Assertions.assertTrue(lncvm.isSupportedLncvCommand(), "check supported command");
Assertions.assertTrue(lncvm.isSupportedLncvReadReply(), "check isSupportedLncvReadReply");
Assertions.assertEquals(-1, lncvm.getLncvModuleNum(), "check mod num not in reply");
Assertions.assertEquals(5033, lncvm.getLncvArticleNum(), "check (art) prod ID");
Assert.assertThrows(IllegalArgumentException.class, () ->new LncvMessageContents(new LocoNetMessage(new int[] {0xE5, 0x10, 0x01, 0x47, 0x01, 0x10, 0x3D, 0x01, 0x0D, 0x01, 0x10, 0x0B, 0x00, 0x00, 0x00, 0x75})));
Assert.assertThrows(IllegalArgumentException.class, () ->new LncvMessageContents(new LocoNetMessage(new int[] {0xE5, 0x10, 0x01, 0x47, 0x02, 0x00, 0x3D, 0x01, 0x0D, 0x01, 0x10, 0x0B, 0x00, 0x00, 0x00, 0x75})));
}
@Test
public void testIsLnMessageASpecificLncvCommand() {
LocoNetMessage l = new LocoNetMessage(new int[] {0xE5, 0x10, 0x01, 0x47, 0x02, 0x10, 0x3D, 0x01, 0x0D, 0x01, 0x10, 0x0B, 0x00, 0x00, 0x00, 0x75}); // 16 bits
Assertions.assertFalse(LncvMessageContents.isLnMessageASpecificLncvCommand(l, LncvMessageContents.LncvCommand.LNCV_READ_REPLY));
l = new LocoNetMessage(new int[]{0xED, 0x0F, 0x01, 0x05, 0x00, 0x21, 0x27, 0x29, 0x13, 0x00, 0x00, 0x13, 0x29, 0x00, 0x1F});
LncvMessageContents lncvm = new LncvMessageContents(l);
Assertions.assertFalse(lncvm.isSupportedLncvReadReply(), "check isSupportedLncvReadReply");
}
@Test
public void testGetModuleNum() {
LocoNetMessage l = new LocoNetMessage(new int[]{0xED, 0x0F, 0x01, 0x05, 0x00, 0x21, 0x01, 0x29, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02});
for (int i = 0; i < 07f; ++i) {
l.setElement(11, i);
Assertions.assertEquals(i, new LncvMessageContents(l).getLncvModuleNum(), i+" as LSByte of destAddr");
}
l.setElement(11,0);
l.setElement(6,0x51); // hibit
Assertions.assertEquals(128, new LncvMessageContents(l).getLncvModuleNum(), "128 as LSByte of destAddr");
l.setElement(11,0);
l.setElement(6,0x01); // hibit
for (int i = 0; i < 0x7f; ++i) {
l.setElement(12, i);
Assertions.assertEquals(i<<8, new LncvMessageContents(l).getLncvModuleNum(), (i<<8)+" as MSByte of destAddr");
}
l.setElement(11,0);
l.setElement(12,0);
l.setElement(6,0x61); // hibits
Assertions.assertEquals(32768, new LncvMessageContents(l).getLncvModuleNum(), "32768 as MSByte of destAddr");
}
@Test
public void testGetProdId() {
LocoNetMessage l = new LocoNetMessage(new int[]{0xED, 0x0F, 0x01, 0x05, 0x00, 0x21, 0x20, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F});
for (int i = 0; i < 0x7f; ++i) {
l.setElement(7, i);
Assertions.assertEquals(i, new LncvMessageContents(l).getLncvArticleNum(), i+" as LSByte of ProductId");
}
l.setElement(7,0);
l.setElement(6,0x1); // hibits
Assertions.assertEquals(128, new LncvMessageContents(l).getLncvArticleNum(), "128 as LSByte of ProductId");
l.setElement(6,0x20);
for (int i = 0; i < 0x7f; ++i) {
l.setElement(8, i);
Assertions.assertEquals(i<<8, new LncvMessageContents(l).getLncvArticleNum(), (i<<8)+" as MSByte of ProductId");
}
l.setElement(7,0);
l.setElement(8,0);
l.setElement(6,0x12); // hibits
Assertions.assertEquals(32768, new LncvMessageContents(l).getLncvArticleNum(), "32768 as MSByte of ProductId");
}
@Test
public void testExtractMessageType() {
LocoNetMessage l = new LocoNetMessage(new int[]{0xE5, 0x10, 0x01, 0x47, 0x02, 0x10, 0x3D, 0x01, 0x0D, 0x01, 0x10, 0x0B, 0x00, 0x00, 0x00, 0x75});
Assertions.assertNull(LncvMessageContents.extractMessageType(l), "check extract of cmd not lncv");
l = new LocoNetMessage(new int[]{0xED, 0x0F, 0x01, 0x05, 0x00, 0x21, 0x27, 0x29, 0x13, 0x00, 0x00, 0x13, 0x29, 0x00, 0x1F});
Assertions.assertEquals(LncvMessageContents.LncvCommand.LNCV_READ, LncvMessageContents.extractMessageType(l), "check extract of cmd read is ok");
l = new LocoNetMessage(new int[]{0xE5, 0x0F, 0x05, 0x49, 0x4B, 0x1F, 0x01, 0x29, 0x13, 0x08, 0x00, 0x62, 0x00, 0x00, 0x5C});
Assertions.assertEquals(LncvMessageContents.LncvCommand.LNCV_READ_REPLY, LncvMessageContents.extractMessageType(l), "check extract of cmd readreply is ok");
l = new LocoNetMessage(new int[]{0xE5, 0x0F, 0x01, 0x05, 0x00, 0x21, 0x01, 0x29, 0x13, 0x00, 0x00, 0x01, 0x00, 0x40, 0x4A});
Assertions.assertEquals(LncvMessageContents.LncvCommand.LNCV_PROG_END, LncvMessageContents.extractMessageType(l), "check extract of cmd stopmodprog is ok");
}
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
}
@AfterEach
public void tearDown() {
JUnitUtil.tearDown();
}
// private static final Logger log = LoggerFactory.getLogger(LncvMessageContentsTest.class);
}