171 lines
6.0 KiB
Java
171 lines
6.0 KiB
Java
package jmri.jmrix.openlcb;
|
|
|
|
import jmri.InstanceManager;
|
|
import jmri.RailCom;
|
|
import jmri.RailComManager;
|
|
import jmri.util.JUnitUtil;
|
|
import jmri.util.PropertyChangeListenerScaffold;
|
|
import org.junit.Assert;
|
|
import org.junit.jupiter.api.AfterEach;
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.openlcb.EventID;
|
|
import org.openlcb.EventState;
|
|
import org.openlcb.Message;
|
|
import org.openlcb.ProducerIdentifiedMessage;
|
|
import org.openlcb.implementations.EventTable;
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
/**
|
|
*
|
|
* @author Bob Jacobsen Coyright (C) 2023
|
|
* @author Balazs Racz Coyright (C) 2023
|
|
*/
|
|
public class OlcbReporterTest extends jmri.implementation.AbstractReporterTestBase {
|
|
|
|
OlcbTestInterface ti;
|
|
PropertyChangeListenerScaffold l;
|
|
|
|
// Helper method for base class tests.
|
|
@Override
|
|
protected Object generateObjectToReport() {
|
|
return InstanceManager.getDefault(RailComManager.class).provideIdTag("123");
|
|
}
|
|
|
|
@Test
|
|
public void testPacketReceived() {
|
|
// Entry.
|
|
ti.sendMessage(":X195B4123N010203040506C100;");
|
|
ti.flush();
|
|
Assert.assertEquals("Report mismatch","RD256",r.getCurrentReport().toString());
|
|
RailCom report = (RailCom) r.getCurrentReport();
|
|
Assert.assertNotNull("Object type mismatch", report);
|
|
Assert.assertEquals("Loco address mismatch",256, report.getLocoAddress().getNumber());
|
|
|
|
// Exit.
|
|
Message m = new ProducerIdentifiedMessage(ti.iface.getNodeId(), new EventID("01.02.03.04.05.06.C1.00"), EventState.Invalid);
|
|
ti.iface.getOutputConnection().put(m, null);
|
|
ti.flush();
|
|
|
|
Assert.assertNull("Report should have disappeared", r.getCurrentReport());
|
|
}
|
|
|
|
@Test
|
|
public void testEventTable() {
|
|
EventTable.EventTableEntry[] elist = ti.iface.getEventTable()
|
|
.getEventInfo(new EventID("1.2.3.4.5.6.00.00")).getAllEntries();
|
|
|
|
Assert.assertEquals(1, elist.length);
|
|
Assert.assertTrue("Incorrect name: " + elist[0].getDescription(),
|
|
Pattern.compile("Reporter.*Report").matcher(elist[0].getDescription()).matches());
|
|
|
|
r.setUserName("MyInput");
|
|
|
|
elist = ti.iface.getEventTable()
|
|
.getEventInfo(new EventID("1.2.3.4.5.6.00.00")).getAllEntries();
|
|
|
|
Assert.assertEquals(1, elist.length);
|
|
Assert.assertEquals("Reporter MyInput Report", elist[0].getDescription());
|
|
|
|
r.setUserName("Changed");
|
|
|
|
Assert.assertEquals("Reporter Changed Report", elist[0].getDescription());
|
|
}
|
|
|
|
@Test
|
|
public void testIdentified() {
|
|
// Upon construction, a consumer range identified message was sent out.
|
|
ti.assertSentMessage(":X194a4c4cN010203040506ffff;");
|
|
ti.assertNoSentMessages();
|
|
}
|
|
|
|
@Test
|
|
public void testAccumulationAfterMoveToAnother() {
|
|
// 256 enters
|
|
ti.sendMessage(":X195B4123N010203040506C100;");
|
|
ti.flush();
|
|
Assert.assertEquals("Report mismatch","RD256",r.getCurrentReport().toString());
|
|
RailCom report = (RailCom) r.getCurrentReport();
|
|
Assert.assertNotNull("Object type mismatch", report);
|
|
Assert.assertEquals("Loco address mismatch",256, report.getLocoAddress().getNumber());
|
|
|
|
Assert.assertEquals("expect 1 in reporter", 1, ((OlcbReporter)r).getCollection().size());
|
|
|
|
// create another reporter and send 256 to it
|
|
var rman = ti.configurationManager.getReporterManager();
|
|
var r2 = rman.provideReporter("01.02.03.04.05.07.00.00");
|
|
((OlcbReporter) r2).finishLoad();
|
|
|
|
ti.sendMessage(":X195B4123N010203040507C100;");
|
|
ti.flush();
|
|
|
|
Assert.assertEquals("expect 0 in reporter", 0, ((OlcbReporter)r).getCollection().size());
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testAccumulationAfterRecevice0S() {
|
|
// 256 enters
|
|
ti.sendMessage(":X195B4123N010203040506C100;");
|
|
ti.flush();
|
|
Assert.assertEquals("Report mismatch","RD256",r.getCurrentReport().toString());
|
|
RailCom report = (RailCom) r.getCurrentReport();
|
|
Assert.assertNotNull("Object type mismatch", report);
|
|
Assert.assertEquals("Loco address mismatch",256, report.getLocoAddress().getNumber());
|
|
|
|
Assert.assertEquals("expect 1 in reporter", 1, ((OlcbReporter)r).getCollection().size());
|
|
|
|
// 257 enters
|
|
ti.sendMessage(":X195B4123N010203040506C101;");
|
|
ti.flush();
|
|
Assert.assertEquals("Report mismatch","RD257",r.getCurrentReport().toString());
|
|
report = (RailCom) r.getCurrentReport();
|
|
Assert.assertNotNull("Object type mismatch", report);
|
|
Assert.assertEquals("Loco address mismatch",257, report.getLocoAddress().getNumber());
|
|
|
|
Assert.assertEquals("expect 2 in reporter", 2, ((OlcbReporter)r).getCollection().size());
|
|
|
|
// 0x3800 unknown enters
|
|
ti.sendMessage(":X195B4123N010203040506F800;");
|
|
ti.flush();
|
|
RailCom report2 = (RailCom) r.getCurrentReport();
|
|
Assert.assertNull("Expected no report", report2);
|
|
|
|
Assert.assertEquals("expect 0 in reporter", 0, ((OlcbReporter)r).getCollection().size());
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@BeforeEach
|
|
public void setUp() {
|
|
JUnitUtil.setUp();
|
|
JUnitUtil.initDefaultUserMessagePreferences();
|
|
l = new PropertyChangeListenerScaffold();
|
|
// prepare an interface
|
|
ti = new OlcbTestInterface(new OlcbTestInterface.CreateConfigurationManager());
|
|
ti.waitForStartup();
|
|
var rman = ti.configurationManager.getReporterManager();
|
|
r = rman.provideReporter("01.02.03.04.05.06.00.00");
|
|
((OlcbReporter) r).finishLoad();
|
|
}
|
|
|
|
@Override
|
|
@AfterEach
|
|
public void tearDown() {
|
|
InstanceManager.getDefault(RailComManager.class).dispose();
|
|
r.dispose();
|
|
r = null;
|
|
l.resetPropertyChanged();
|
|
l = null;
|
|
ti.dispose();
|
|
ti = null;
|
|
JUnitUtil.clearShutDownManager();
|
|
JUnitUtil.tearDown();
|
|
}
|
|
|
|
// private static final Logger log = LoggerFactory.getLogger(OlcbReporterTest.class);
|
|
|
|
}
|