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

247 lines
8.6 KiB
Java

package jmri.jmrix.can;
import jmri.util.JUnitUtil;
import org.junit.Assert;
import org.junit.jupiter.api.*;
/**
* Tests for the jmri.jmrix.can.CanMessage class
*
* @author Bob Jacobsen Copyright 2008, 2009
*/
public class CanMessageTest extends CanMRCommonTestBase {
@Test
public void testCopyCtor() {
CanMessage m1 = new CanMessage(0x12);
m1.setExtended(true);
CanMessage m2 = new CanMessage(m1);
Assert.assertTrue("extended", m2.isExtended());
Assert.assertTrue("header", m2.getHeader() == 0x12);
}
@Test
public void testEqualsOp() {
CanMessage m1 = new CanMessage(0x12);
m1.setExtended(true);
CanMessage m2 = new CanMessage(0x12);
m2.setExtended(true);
CanMessage m3 = new CanMessage(0x12);
m3.setExtended(false);
Assert.assertTrue("equals self", m1.equals(m1));
Assert.assertTrue("equals copy", m1.equals(new CanMessage(m1)));
Assert.assertTrue("equals same", m1.equals(m2));
Assert.assertTrue("equals same other way", m2.equals(m1));
Assert.assertFalse("not equal null", m1.equals(null));
Assert.assertFalse("not equals diff Ext", m1.equals(m3));
Assert.assertTrue("equal hashcode", m1.hashCode() == m2.hashCode());
}
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings( value = "EC_UNRELATED_TYPES",
justification = "CanReply and CanMessage are CanFrame with custom equals")
@Test
@SuppressWarnings("unlikely-arg-type") // Both CanReply and CanMessage are CanFrame with custom equals
public void testEqualsReply() {
CanMessage m1 = new CanMessage(0, 0x12);
m1.setExtended(true);
m1.setNumDataElements(0);
CanReply m2 = new CanReply();
m2.setExtended(true);
m2.setHeader(0x12);
m2.setNumDataElements(0);
CanReply m3 = new CanReply();
m3.setExtended(false);
m3.setHeader(0x12);
m3.setNumDataElements(0);
Assert.assertTrue("equals same", m1.equals(m2));
Assert.assertFalse("not equals diff Ext", m1.equals(m3));
Assert.assertTrue("equal hashcode", m1.hashCode() == m2.hashCode());
}
@Test
@SuppressWarnings("unlikely-arg-type") // Both CanReply and CanMessage are CanFrame with custom equals
public void testEqualsData() {
CanMessage m1 = new CanMessage(0x12);
m1.setNumDataElements(2);
m1.setElement(0, 0x81);
m1.setElement(1, 0x12);
CanMessage m2 = new CanMessage(0x12);
m2.setNumDataElements(2);
m2.setElement(0, 0x81);
m2.setElement(1, 0x12);
CanMessage m3 = new CanMessage(0x12);
m3.setNumDataElements(2);
m3.setElement(0, 0x01);
m3.setElement(1, 0x82);
CanMessage m4 = new CanMessage(0x12);
m4.setNumDataElements(1);
m4.setElement(0, 0x07);
Assert.assertTrue("equals self", m1.equals(m1));
Assert.assertTrue("equals copy", m1.equals(new CanMessage(m1)));
Assert.assertTrue("equals same", m1.equals(m2));
Assert.assertFalse("not equals diff Ext", m1.equals(m3));
Assert.assertFalse("not equals null", m1.equals(null));
Assert.assertFalse("not equals string value", m1.equals("[12] 81 12"));
Assert.assertFalse("not equals diff ele length", m1.equals(m4));
Assert.assertTrue("equal hashcode", m1.hashCode() == m2.hashCode());
m2.setRtr(true);
Assert.assertFalse("not equals diff Rtr", m1.equals(m2));
}
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings( value = "EC_UNRELATED_TYPES",
justification = "CanReply and CanMessage are CanFrame with custom equals")
@Test
@SuppressWarnings("unlikely-arg-type") // Both CanReply and CanMessage are CanFrame with custom equals
public void testMessageFromReply() {
CanReply r = new CanReply(0x55);
r.setNumDataElements(2);
r.setHeader(0x55);
r.setElement(0, 0x01);
r.setElement(1, 0x82);
CanMessage m1 = new CanMessage(r);
Assert.assertTrue("Header 0x55", m1.getHeader() == 0x55);
Assert.assertTrue("2 Elements", m1.getNumDataElements() == 2);
Assert.assertTrue("equals same", m1.equals(r));
Assert.assertTrue("equal hashcode", m1.hashCode() == r.hashCode());
}
@Test
public void testHeaderAccessors() {
CanMessage m1 = new CanMessage(0x55);
Assert.assertTrue("Header 0x55", m1.getHeader() == 0x55);
}
@Test
public void testRtrBit() {
CanMessage m1 = new CanMessage(0x12);
Assert.assertTrue("not rtr at start", !m1.isRtr());
m1.setRtr(true);
Assert.assertTrue("rtr set", m1.isRtr());
m1.setRtr(false);
Assert.assertTrue("rtr unset", !m1.isRtr());
}
@Test
public void testStdExt() {
CanMessage m1 = new CanMessage(0x12);
Assert.assertTrue("std at start", !m1.isExtended());
m1.setExtended(true);
Assert.assertTrue("extended", m1.isExtended());
m1.setExtended(false);
Assert.assertTrue("std at end", !m1.isExtended());
}
@Test
public void testDataElements() {
CanMessage m1 = new CanMessage(0x12);
m1.setNumDataElements(0);
Assert.assertTrue("0 Elements", m1.getNumDataElements() == 0);
m1.setNumDataElements(1);
Assert.assertTrue("1 Elements", m1.getNumDataElements() == 1);
m1.setNumDataElements(8);
Assert.assertTrue("8 Elements", m1.getNumDataElements() == 8);
m1.setNumDataElements(3);
m1.setElement(0, 0x81);
m1.setElement(1, 0x02);
m1.setElement(2, 0x83);
Assert.assertTrue("3 Elements", m1.getNumDataElements() == 3);
Assert.assertTrue("3 Element 0", m1.getElement(0) == 0x81);
Assert.assertTrue("3 Element 1", m1.getElement(1) == 0x02);
Assert.assertTrue("3 Element 2", m1.getElement(2) == 0x83);
}
@Test
@Override
public void testToString() {
CanMessage m1 = new CanMessage(0x12);
m1.setNumDataElements(3);
m1.setElement(0, 0x81);
m1.setElement(1, 0x02);
m1.setElement(2, 0x83);
Assert.assertEquals("string representation", "[12] 81 02 83",m1.toString());
}
@Test
@Override
public void testToMonitorString() {
CanMessage m1 = new CanMessage(0x12);
m1.setNumDataElements(3);
m1.setElement(0, 0x81);
m1.setElement(1, 0x02);
m1.setElement(2, 0x83);
Assert.assertEquals("string representation", "(12) 81 02 83",m1.toMonitorString());
}
@Test
public void testReplyExpected() {
CanMessage m1 = new CanMessage(0x12);
Assert.assertFalse("No Reply expected",m1.replyExpected());
}
@Test
public void testSetData() {
CanMessage m1 = new CanMessage(0x12);
m1.setData( new int[]{1,2,3,4,5,6,7,8,9});
Assert.assertEquals("data over frame length set ok", "(12) 01 02 03 04 05 06 07 08",m1.toMonitorString());
m1.setData( new int[]{10,11,12});
Assert.assertEquals("data under frame length set ok", "(12) 0A 0B 0C 04 05 06 07 08",m1.toMonitorString());
}
@Test
public void testCreateFromLongArrays() {
m = new CanMessage(new int[]{1,2,3,4,5,6,7,8,9},0x12);
Assert.assertEquals("int data over frame length set ok", "(12) 01 02 03 04 05 06 07 08",m.toMonitorString());
m = new CanMessage(new int[]{1,2,3},0x12);
Assert.assertEquals("int data under frame length set ok", "(12) 01 02 03",m.toMonitorString());
m = new CanMessage(new byte[]{(byte)0x10,(byte)0x122,(byte)0xbb,(byte)0xFF,(byte)0x129,
(byte)0x255,(byte)0x09,(byte)0x99},0x12);
Assert.assertEquals("byte data over frame length set ok", "(12) 10 22 BB FF 29 55 09 99",m.toMonitorString());
m = new CanMessage(new byte[]{1,2,3,4,5,6,7,8,9},0x12);
Assert.assertEquals("byte data over frame length set ok", "(12) 01 02 03 04 05 06 07 08",m.toMonitorString());
}
@Test
public void testSetGetTranslated(){
CanMessage m1 = new CanMessage(0x12);
Assert.assertFalse("Not translated by default",m1.isTranslated());
m1.setTranslated(true);
Assert.assertTrue("translated flag set",m1.isTranslated());
}
@BeforeEach
@Override
public void setUp() {
jmri.util.JUnitUtil.setUp();
m = new CanMessage(0x12);
}
@AfterEach
@Override
public void tearDown() {
m = null;
JUnitUtil.clearShutDownManager(); // put in place because AbstractMRTrafficController implementing subclass was not terminated properly
JUnitUtil.tearDown();
}
}