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 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 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 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()); } }