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

375 lines
15 KiB
Java

package jmri.jmrix.can.cbus;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import jmri.jmrix.can.CanMessage;
import jmri.jmrix.can.CanReply;
import jmri.util.JUnitUtil;
import org.junit.jupiter.api.*;
/**
* Tests for the jmri.jmrix.can.cbus.CbusAddress class.
*
* @author Bob Jacobsen Copyright 2008
*/
public class CbusAddressTest {
@Test
public void testCanCreate() {
CbusAddress t = new CbusAddress("X0A;+N15E6");
assertNotNull( t, "exists");
}
@Test
public void testCbusAddressOK() {
// +/- form
assertTrue(new CbusAddress("+001").check());
assertTrue(new CbusAddress("-001").check());
assertTrue(new CbusAddress("2700012").check());
// hex form
assertTrue(new CbusAddress("X0ABC").check());
assertTrue(new CbusAddress("X0abc").check());
assertTrue(new CbusAddress("Xa1b2c3").check());
assertTrue(new CbusAddress("X123456789ABCDEF0").check());
// n0e0 form
assertTrue(new CbusAddress("+N1E2").check());
assertTrue(new CbusAddress("+N01e002").check());
assertTrue(new CbusAddress("+1E2").check());
assertTrue(new CbusAddress("-N1E2").check());
assertTrue(new CbusAddress("-N01e002").check());
assertTrue(new CbusAddress("-1e2").check());
assertTrue(new CbusAddress("N1e2").check());
assertTrue(new CbusAddress("N01e002").check());
assertTrue(new CbusAddress("1e2").check());
assertTrue(new CbusAddress("+N12e34").check());
assertTrue(new CbusAddress("+N12e35").check());
}
@Test
public void testCbusAddressNotOK() {
assertFalse( new CbusAddress("+0A1").check());
assertFalse( new CbusAddress("- 001").check());
assertFalse( new CbusAddress("ABC").check());
assertFalse( new CbusAddress("XABC").check()); // odd number of digits
assertFalse( new CbusAddress("Xprs0").check());
assertFalse( new CbusAddress("+N1E").check());
assertFalse( new CbusAddress("+NE1").check());
assertFalse( new CbusAddress("+E1").check());
assertFalse( new CbusAddress("+N1").check());
// multiple address not OK
assertFalse( new CbusAddress("+1;+1;+1").check());
}
@Test
public void testCbusIdParseMatchReply() {
// Cbus short events
assertTrue(new CbusAddress("+12").match(
new CanReply(
new int[]{CbusConstants.CBUS_ASON, 0x00, 0x00, 0x00, 12}
)));
assertTrue(new CbusAddress("-12").match(
new CanReply(
new int[]{CbusConstants.CBUS_ASOF, 0x00, 0x00, 0x00, 12}
)));
// Cbus normal events
assertTrue(new CbusAddress("+2700012").match(
new CanReply(
new int[]{CbusConstants.CBUS_ACON, 0x00, 0x1b, 0x00, 12}
)));
assertTrue(new CbusAddress("-2700012").match(
new CanReply(
new int[]{CbusConstants.CBUS_ACOF, 0x00, 0x1b, 0x00, 12}
)));
assertTrue(new CbusAddress("X123456789ABCDEF0").match(
new CanReply(
new int[]{0x12, 0x34, 0x56, 0x78,
0x9A, 0xBC, 0xDE, 0xF0}
)));
}
@Test
public void testCbusIdParseMatchMessage() {
assertTrue(new CbusAddress("+12").match(
new CanMessage(
new int[]{CbusConstants.CBUS_ASON, 0x00, 0x00, 0x00, 12},
0x123
)));
assertTrue(new CbusAddress("-12").match(
new CanMessage(
new int[]{CbusConstants.CBUS_ASOF, 0x00, 0x00, 0x00, 12},
0x123
)));
assertTrue(new CbusAddress("+2700012").match(
new CanMessage(
new int[]{CbusConstants.CBUS_ACON, 0x00, 0x1b, 0x00, 12},
0x123
)));
assertTrue(new CbusAddress("-2700012").match(
new CanMessage(
new int[]{CbusConstants.CBUS_ACOF, 0x00, 0x1b, 0x00, 12},
0x123
)));
assertTrue(new CbusAddress("X123456789ABCDEF0").match(
new CanMessage(
new int[]{0x12, 0x34, 0x56, 0x78,
0x9A, 0xBC, 0xDE, 0xF0},
0x123
)));
}
@Test
public void testNEformMatch() {
assertTrue(new CbusAddress("+N12E34").match(
new CanMessage(
new int[]{CbusConstants.CBUS_ACON, 0x00, 12, 0x00, 34},
0x123
)));
assertTrue(new CbusAddress("+12E34").match(
new CanMessage(
new int[]{CbusConstants.CBUS_ACON, 0x00, 12, 0x00, 34},
0x123
)));
assertTrue(new CbusAddress("12E34").match(
new CanMessage(
new int[]{CbusConstants.CBUS_ACON, 0x00, 12, 0x00, 34},
0x123
)));
assertTrue(new CbusAddress("N12E34").match(
new CanMessage(
new int[]{CbusConstants.CBUS_ACON, 0x00, 12, 0x00, 34},
0x123
)));
assertTrue(new CbusAddress("-N12E34").match(
new CanMessage(
new int[]{CbusConstants.CBUS_ACOF, 0x00, 12, 0x00, 34},
0x123
)));
assertTrue(!new CbusAddress("-268").match(new CanMessage(
new int[]{CbusConstants.CBUS_ASOF, 0x00, 0x00, 0x00},0x123 )));
assertTrue(!new CbusAddress("+1").match(new CanMessage(
new int[]{CbusConstants.CBUS_ASOF, 0x00, 0x00, 0x00, 0x01},0x123 )));
assertTrue(!new CbusAddress("+2").match(new CanMessage(
new int[]{CbusConstants.CBUS_ASON, 0x00, 0x00, 0x00, 0x01},0x123 )));
}
@Test
public void testCbusIdNotParse() {
assertTrue(!new CbusAddress("-12").match(
new CanReply(
new int[]{CbusConstants.CBUS_ACON, 0x00, 0x00, 0x00, 12}
)));
assertTrue(!new CbusAddress("-268").match(
new CanReply(
new int[]{CbusConstants.CBUS_ACOF, 0x00, 0x00, 0x00, 12}
)));
assertTrue(!new CbusAddress("-268").match(new CanReply(
new int[]{CbusConstants.CBUS_ASOF, 0x00, 0x00, 0x00} )));
assertTrue(!new CbusAddress("+1").match(new CanReply(
new int[]{CbusConstants.CBUS_ASOF, 0x00, 0x00, 0x00, 0x01} )));
assertTrue(!new CbusAddress("+2").match(new CanReply(
new int[]{CbusConstants.CBUS_ASON, 0x00, 0x00, 0x00, 0x01} )));
}
@Test
public void testPlusMinus() {
assertTrue((new CbusAddress("+001")).equals(new CbusAddress("+001")));
assertTrue((new CbusAddress("+001")).equals(new CbusAddress("x9800000001")));
assertTrue((new CbusAddress("+200001")).equals(new CbusAddress("x9000020001")));
assertTrue((new CbusAddress("-003")).equals(new CbusAddress("x9900000003")));
assertTrue((new CbusAddress("-200003")).equals(new CbusAddress("x9100020003")));
}
@Test
@SuppressWarnings({"unlikely-arg-type", "IncompatibleEquals"})
public void testEqualsOK() {
assertTrue((new CbusAddress("+001")).equals(new CbusAddress("+001")));
assertTrue((new CbusAddress("+001")).equals(new CbusAddress("x9800000001")));
assertTrue((new CbusAddress("+200001")).equals(new CbusAddress("x9000020001")));
assertNotNull( new CbusAddress("+200001"));
assertFalse((new CbusAddress("+200001")).equals("foo"));
assertFalse((new CbusAddress("+001")).equals(new CbusAddress("+002")));
assertFalse((new CbusAddress("+N123E123")).equals(new CbusAddress("+N456E123")));
assertFalse((new CbusAddress("+N123E123")).equals(new CbusAddress("+N123E456")));
assertFalse(new CbusAddress("-268").equals(
new CanReply(new int[]{CbusConstants.CBUS_SNN, 0x00, 12})));
}
@Test
public void testSplitCheckOK() {
assertTrue(new CbusAddress("+001").checkSplit());
assertTrue(new CbusAddress("-001").checkSplit());
assertTrue(new CbusAddress("X0ABC").checkSplit());
assertTrue(new CbusAddress("X0abc").checkSplit());
assertTrue(new CbusAddress("Xa1b2c3").checkSplit());
assertTrue(new CbusAddress("X123456789ABCDEF0").checkSplit());
assertTrue(new CbusAddress("+001;+001").checkSplit());
assertTrue(new CbusAddress("-001;+001").checkSplit());
assertTrue(new CbusAddress("X0ABC;+001").checkSplit());
assertTrue(new CbusAddress("X0abc;+001").checkSplit());
assertTrue(new CbusAddress("Xa1b2c3;+001").checkSplit());
assertTrue(new CbusAddress("X123456789ABCDEF0;+001").checkSplit());
}
@Test
public void testMultiTermSplitCheckOK() {
assertTrue(new CbusAddress("+1;+1").checkSplit());
assertTrue(new CbusAddress("+N12e34;+1").checkSplit());
assertTrue(new CbusAddress("+1;X1234").checkSplit());
assertTrue(new CbusAddress("+1;N12e34").checkSplit());
assertTrue(new CbusAddress("+1;+N12e34").checkSplit());
assertTrue(new CbusAddress("+N12e34;+N12e35").checkSplit());
assertTrue(new CbusAddress("X0A;+N15E6").checkSplit());
}
@Test
public void testSplitCheckNotOK() {
assertFalse( new CbusAddress("+0A1").check());
assertFalse( new CbusAddress("- 001").check());
assertFalse( new CbusAddress("ABC").check());
assertFalse( new CbusAddress("Xprs0").check());
assertFalse( new CbusAddress("+1;+1;+1").checkSplit());
assertFalse( new CbusAddress("+1;;+1").checkSplit());
assertFalse( new CbusAddress("+001;").checkSplit());
assertFalse( new CbusAddress("-001;").checkSplit());
assertFalse( new CbusAddress("-001;;").checkSplit());
assertFalse( new CbusAddress("XABC;").checkSplit());
assertFalse( new CbusAddress("Xabc;").checkSplit());
assertFalse( new CbusAddress("Xa1b2c3;").checkSplit());
assertFalse( new CbusAddress("X123456789ABCDEF0;").checkSplit());
assertFalse( new CbusAddress("+001;Xprs0").checkSplit());
assertFalse( new CbusAddress("-001;Xprs0").checkSplit());
assertFalse( new CbusAddress("XABC;Xprs0").checkSplit());
assertFalse( new CbusAddress("Xabc;Xprs0").checkSplit());
assertFalse( new CbusAddress("Xa1b2c3;Xprs0").checkSplit());
assertFalse( new CbusAddress("X123456789ABCDEF0;Xprs0").checkSplit());
}
@Test
public void testElements() {
CbusAddress a = new CbusAddress("X9801D203A4");
int[] testa = a.elements();
assertTrue(testa[0] == 0x98);
assertTrue(testa[1] == 0x01);
assertTrue(testa[2] == 0xD2);
assertTrue(testa[3] == 0x03);
assertTrue(testa[4] == 0xA4);
}
@Test
public void testtoString() {
CbusAddress a = new CbusAddress("X9801D203A4");
assertEquals("X9801D203A4", a.toString());
CbusAddress b = new CbusAddress("+N123E456");
assertEquals("+N123E456", b.toString());
CbusAddress c = new CbusAddress("-456");
assertEquals("-456", c.toString());
}
@Test
public void testtoCanonString() {
CbusAddress a = new CbusAddress("X9801D203A4");
assertEquals( "x9801D203A4",a.toCanonicalString(), "hex form");
CbusAddress b = new CbusAddress("+N123E456");
assertEquals( "x90007B01C8",b.toCanonicalString(), "long form");
CbusAddress c = new CbusAddress("-321");
assertEquals( "x9900000141",c.toCanonicalString(), "short form");
}
@Test
public void testSplit() {
CbusAddress a;
CbusAddress[] v;
a = new CbusAddress("+001");
v = a.split();
assertEquals( 1, v.length);
assertTrue(new CbusAddress("+001").equals(v[0]));
a = new CbusAddress("+001;-2");
v = a.split();
assertEquals( 2, v.length);
assertTrue(new CbusAddress("+001").equals(v[0]));
assertTrue(new CbusAddress("-2").equals(v[1]));
}
@Test
public void testgetIncrement() throws jmri.JmriException {
assertEquals( "+N34E18;-N34E18",CbusAddress.getIncrement("+N34E17;-N34E17"), "+N34E17;-N34E17");
assertEquals( "+N34E457;+N34E18",CbusAddress.getIncrement("+N34E456;+N34E17"), "+N34E456;+N34E17");
assertEquals( "-N34E457;-N34E18",CbusAddress.getIncrement("-N34E456;-N34E17"), "-N34E456;-N34E17");
assertEquals( "-N34E457;+N34E18",CbusAddress.getIncrement("-N34E456;+N34E17"), "-N34E456;+N34E17");
}
@Test
public void testCbusAddressHashcode() {
CbusAddress a = new CbusAddress("X9801D203A4");
assertEquals( 530, a.hashCode(), "a hashcode is present");
}
@Test
public void testMatchRequest() {
assertTrue( new CbusAddress("+12").matchRequest(
new CanReply(new int[]{CbusConstants.CBUS_ASRQ, 0x00, 0x00, 0x00, 12})),
"short request 12 match");
assertFalse( new CbusAddress("+13").matchRequest(
new CanReply(new int[]{CbusConstants.CBUS_ASRQ, 0x00, 0x00, 0x00, 12})),
"short request 13 no match");
assertFalse( new CbusAddress("+12").matchRequest(
new CanReply(new int[]{CbusConstants.CBUS_ACON3, 0x00, 0x00, 0x00, 12, 0x12, 0x13})),
"Data element no match");
assertFalse( new CbusAddress("+12").matchRequest(
new CanReply(new int[]{CbusConstants.CBUS_ASON, 0x00, 0x00, 0x00, 12})),
"ASON 12 no match");
assertTrue( new CbusAddress("+N12E34").matchRequest(
new CanReply(new int[]{CbusConstants.CBUS_AREQ, 0x00, 12, 0x00, 34})),
"long request N12E34 match");
assertFalse( new CbusAddress("+N11E34").matchRequest(
new CanReply(new int[]{CbusConstants.CBUS_AREQ, 0x00, 12, 0x00, 34})),
"long request N11E34 no match");
assertFalse( new CbusAddress("+N12E35").matchRequest(
new CanReply(new int[]{CbusConstants.CBUS_AREQ, 0x00, 12, 0x00, 34})),
"long request N123E35 no match");
}
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
}
@AfterEach
public void tearDown() {
JUnitUtil.tearDown();
}
// private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(CbusAddressTest.class);
}