115 lines
6.0 KiB
Java
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);
|
|
|
|
}
|