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

109 lines
4.2 KiB
Java

package jmri.jmrix.marklin;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import jmri.util.JUnitUtil;
import org.junit.jupiter.api.*;
/**
* Tests for MarklinMessage.
*
* @author Paul Bender Copyright (C) 2017
*/
public class MarklinMessageTest extends jmri.jmrix.AbstractMessageTestBase {
@Test
public void testGetCanBoot() {
// Test the Gleisbox activation variant (DLC=5, data byte 0 = 0x11)
MarklinMessage bootMessage = MarklinMessage.getCanBoot();
assertNotNull(bootMessage, "CAN BOOT message created");
// Command 0x1B: (0x1B >> 7) & 0xFF = 0x00, (0x1B << 1) & 0xFF = 0x36
assertEquals(0x00, bootMessage.getElement(0), "Element 0 (command high bits)");
assertEquals(0x36, bootMessage.getElement(1), "Element 1 (command low bits)");
// Hash bytes
assertEquals(0x47, bootMessage.getElement(2), "Element 2 (hash byte 1)");
assertEquals(0x11, bootMessage.getElement(3), "Element 3 (hash byte 2)");
// DLC should be 5
assertEquals(0x05, bootMessage.getElement(4), "Element 4 (DLC)");
// Address bytes (broadcast)
for (int i = 5; i <= 8; i++) {
assertEquals(0x00, bootMessage.getElement(i), "Element " + i + " (address byte)");
}
// Data byte 0: magic value 0x11
assertEquals(0x11, bootMessage.getElement(9), "Element 9 (data byte 0 - magic value)");
// Remaining data bytes
for (int i = 10; i < bootMessage.getNumDataElements(); i++) {
assertEquals(0x00, bootMessage.getElement(i), "Element " + i + " (data byte)");
}
}
@Test
public void testGetCanBootloaderMode() {
// Test the bootloader invocation variant (DLC=0, no data bytes)
MarklinMessage bootloaderMessage = MarklinMessage.getCanBootloaderMode();
assertNotNull(bootloaderMessage, "CAN BOOT bootloader message created");
// Command 0x1B: (0x1B >> 7) & 0xFF = 0x00, (0x1B << 1) & 0xFF = 0x36
assertEquals(0x00, bootloaderMessage.getElement(0), "Element 0 (command high bits)");
assertEquals(0x36, bootloaderMessage.getElement(1), "Element 1 (command low bits)");
// Hash bytes
assertEquals(0x47, bootloaderMessage.getElement(2), "Element 2 (hash byte 1)");
assertEquals(0x11, bootloaderMessage.getElement(3), "Element 3 (hash byte 2)");
// DLC should be 0 (no data bytes)
assertEquals(0x00, bootloaderMessage.getElement(4), "Element 4 (DLC)");
// All remaining elements should be 0
for (int i = 5; i < bootloaderMessage.getNumDataElements(); i++) {
assertEquals(0x00, bootloaderMessage.getElement(i), "Element " + i + " should be 0");
}
}
@Test
public void testCanBootVsBootloaderModeDifference() {
// Verify the two variants are different
MarklinMessage activation = MarklinMessage.getCanBoot();
MarklinMessage bootloader = MarklinMessage.getCanBootloaderMode();
// Command bytes should be identical (both 0x1B)
assertEquals(activation.getElement(0), bootloader.getElement(0), "Commands should match");
assertEquals(activation.getElement(1), bootloader.getElement(1), "Commands should match");
// DLC should be different
assertNotEquals(activation.getElement(4), bootloader.getElement(4), "DLC should differ");
assertEquals(0x05, activation.getElement(4), "Activation DLC should be 5");
assertEquals(0x00, bootloader.getElement(4), "Bootloader DLC should be 0");
// Data byte 0 should be different
assertEquals(0x11, activation.getElement(9), "Activation should have magic 0x11");
assertEquals(0x00, bootloader.getElement(9), "Bootloader should have 0x00");
}
@BeforeEach
@Override
public void setUp() {
JUnitUtil.setUp();
m = new MarklinMessage();
}
@Override
@AfterEach
public void tearDown() {
m = null;
JUnitUtil.tearDown();
}
// private static final Logger log = LoggerFactory.getLogger(MarklinMessageTest.class);
}