375 lines
15 KiB
Java
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);
|
|
}
|