Files
JIMRI/java/test/jmri/jmrix/cmri/serial/SerialTurnoutTest.java
T
2026-06-17 14:00:51 +02:00

142 lines
5.3 KiB
Java

package jmri.jmrix.cmri.serial;
import java.util.Iterator;
import java.util.TreeSet;
import org.junit.Assert;
import org.junit.jupiter.api.*;
import jmri.Turnout;
import jmri.implementation.AbstractTurnoutTestBase;
import jmri.util.JUnitUtil;
import jmri.util.NamedBeanComparator;
/**
* Tests for the jmri.jmrix.cmri.serial.SerialTurnout class
*
* @author Bob Jacobsen
*/
public class SerialTurnoutTest extends AbstractTurnoutTestBase {
private jmri.jmrix.cmri.CMRISystemConnectionMemo memo = null;
private SerialTrafficControlScaffold tcis = null;
private SerialNode n = null;
@Test
public void testCtor() {
Assert.assertNotNull(new SerialTurnout("5", "to5", memo));
}
@Override
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
JUnitUtil.resetInstanceManager();
// prepare an interface
tcis = new SerialTrafficControlScaffold();
memo = new jmri.jmrix.cmri.CMRISystemConnectionMemo();
memo.setTrafficController(tcis);
n = new SerialNode(0, SerialNode.SMINI,tcis);
Assert.assertNotNull("node exists", n);
startingNumListeners = tcis.numListeners();
t = memo.getTurnoutManager().provideTurnout("4");
Assert.assertNotNull("turnout exists", t);
}
@Override
@AfterEach
public void tearDown() {
if (tcis != null) tcis.terminateThreads();
tcis = null;
if ( memo != null ) {
memo.dispose();
}
memo = null;
JUnitUtil.clearShutDownManager(); // put in place because AbstractMRTrafficController implementing subclass was not terminated properly
JUnitUtil.tearDown();
}
int startingNumListeners; // number at creation, before tests start allocating them.
@Override
public int numListeners() {
return tcis.numListeners() - startingNumListeners;
}
@Override
public void checkThrownMsgSent() {
// tcis.sendSerialMessage(tcis.nextWrite(), null); // force outbound message; normally done by poll loop
// Assert.assertTrue("message sent", tcis.outbound.size() > 0);
// Assert.assertEquals("content", "41 54 08", tcis.outbound.elementAt(tcis.outbound.size() - 1).toString()); // THROWN message
}
@Override
public void checkClosedMsgSent() {
// tcis.sendSerialMessage(tcis.nextWrite(), null); // force outbound message; normally done by poll loop
// Assert.assertTrue("message sent", tcis.outbound.size() > 0);
// Assert.assertEquals("content", "41 54 00", tcis.outbound.elementAt(tcis.outbound.size() - 1).toString()); // CLOSED message
}
@Test
public void testSystemSpecificComparisonOfStandardNames() {
NamedBeanComparator<Turnout> comparator = new NamedBeanComparator<>();
Turnout t1 = new SerialTurnout("CT1", "to1", memo);
Turnout t2 = new SerialTurnout("CT2", "to2", memo);
Turnout t10 = new SerialTurnout("CT10", "to10", memo);
Assert.assertEquals("T1 == T1", 0, comparator.compare(t1, t1));
Assert.assertEquals("T1 < T2", -1, comparator.compare(t1, t2));
Assert.assertEquals("T2 > T1", +1, comparator.compare(t2, t1));
Assert.assertEquals("T10 > T2", +1, comparator.compare(t10, t2));
Assert.assertEquals("T2 < T10", -1, comparator.compare(t2, t10));
}
@Test
public void testSystemSpecificComparisonOfSpecificFormats() {
// test by putting into a tree set, then extracting and checking order
TreeSet<Turnout> set = new TreeSet<>(new NamedBeanComparator<>());
set.add(new SerialTurnout("CT3B4", "to3004", memo));
set.add(new SerialTurnout("CT3003", "to3003", memo));
set.add(new SerialTurnout("CT3B2", "to3002", memo));
set.add(new SerialTurnout("CT3001", "to3001", memo));
set.add(new SerialTurnout("CT005", "to1", memo));
set.add(new SerialTurnout("CT1:5", "to1005", memo));
set.add(new SerialTurnout("CT01004", "to1004", memo));
set.add(new SerialTurnout("CT1003", "to1003", memo));
set.add(new SerialTurnout("CT1002", "to1002", memo));
set.add(new SerialTurnout("CT01001", "to1001", memo));
set.add(new SerialTurnout("CT2", "to2", memo));
set.add(new SerialTurnout("CT10", "to10", memo));
set.add(new SerialTurnout("CT1", "to1", memo));
Iterator<Turnout> it = set.iterator();
Assert.assertEquals("CT1", it.next().getSystemName());
Assert.assertEquals("CT2", it.next().getSystemName());
Assert.assertEquals("CT005", it.next().getSystemName());
Assert.assertEquals("CT10", it.next().getSystemName());
Assert.assertEquals("CT01001", it.next().getSystemName());
Assert.assertEquals("CT1002", it.next().getSystemName());
Assert.assertEquals("CT1003", it.next().getSystemName());
Assert.assertEquals("CT01004", it.next().getSystemName());
Assert.assertEquals("CT1:5", it.next().getSystemName());
Assert.assertEquals("CT3001", it.next().getSystemName());
Assert.assertEquals("CT3B2", it.next().getSystemName());
Assert.assertEquals("CT3003", it.next().getSystemName());
Assert.assertEquals("CT3B4", it.next().getSystemName());
}
}