Files
2026-06-17 14:00:51 +02:00

991 lines
42 KiB
Java

package jmri.jmrit.display.layoutEditor;
import java.awt.geom.*;
import jmri.*;
import jmri.util.*;
import org.junit.Assert;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import static org.junit.jupiter.api.Assertions.*;
/**
* Test simple functioning of LayoutTurnout.
*
* @author Paul Bender Copyright (C) 2016
* @author Bob Jacobsen Copyright (C) 2020
*/
@DisabledIfSystemProperty(named ="java.awt.headless", matches ="true")
public class LayoutTurnoutTest extends LayoutTrackTest {
@Test
public void testEnums() {
// Check that enum ordinal values used for I/O don't
// change. Want to remove this once I/O is done
// via enum names instead of numbers.
Assert.assertEquals(0, LayoutTurnout.TurnoutType.NONE.ordinal());
Assert.assertEquals(1, LayoutTurnout.TurnoutType.RH_TURNOUT.ordinal());
Assert.assertEquals(2, LayoutTurnout.TurnoutType.LH_TURNOUT.ordinal());
Assert.assertEquals(3, LayoutTurnout.TurnoutType.WYE_TURNOUT.ordinal());
Assert.assertEquals(4, LayoutTurnout.TurnoutType.DOUBLE_XOVER.ordinal());
Assert.assertEquals(5, LayoutTurnout.TurnoutType.RH_XOVER.ordinal());
Assert.assertEquals(6, LayoutTurnout.TurnoutType.LH_XOVER.ordinal());
Assert.assertEquals(7, LayoutTurnout.TurnoutType.SINGLE_SLIP.ordinal());
Assert.assertEquals(8, LayoutTurnout.TurnoutType.DOUBLE_SLIP.ordinal());
Assert.assertEquals(0, LayoutTurnout.LinkType.NO_LINK.ordinal());
Assert.assertEquals(1, LayoutTurnout.LinkType.FIRST_3_WAY.ordinal());
Assert.assertEquals(2, LayoutTurnout.LinkType.SECOND_3_WAY.ordinal());
Assert.assertEquals(3, LayoutTurnout.LinkType.THROAT_TO_THROAT.ordinal());
}
@Test
public void testNew() {
Assert.assertNotNull("LayoutTurnout right hand not null", ltRH);
Assert.assertNotNull("LayoutTurnout left hand not null", ltLH);
Assert.assertNotNull("LayoutTurnout wye not null", ltWY);
Assert.assertNotNull("LayoutTurnout double crossover not null", ltDX);
Assert.assertNotNull("LayoutTurnout right hand crossover not null", ltRX);
Assert.assertNotNull("LayoutTurnout left hand crossover not null", ltLX);
}
@Test
public void testToString() {
String s = ltRH.toString();
Assert.assertNotNull("LayoutTurnout right hand toString() not null", s);
Assert.assertEquals("LayoutTurnout Right Hand", s);
s = ltLH.toString();
Assert.assertNotNull("LayoutTurnout left hand toString() not null", s);
Assert.assertEquals("LayoutTurnout Left Hand", s);
s = ltWY.toString();
Assert.assertNotNull("LayoutTurnout wye toString() not null", s);
Assert.assertEquals("LayoutTurnout Wye", s);
s = ltDX.toString();
Assert.assertNotNull("LayoutTurnout double crossover toString() not null", s);
Assert.assertEquals("LayoutTurnout Double XOver", s);
s = ltRX.toString();
Assert.assertNotNull("LayoutTurnout right hand crossover toString() not null", s);
Assert.assertEquals("LayoutTurnout Right Hand XOver", s);
s = ltLX.toString();
Assert.assertNotNull("LayoutTurnout left hand crossover toString() not null", s);
Assert.assertEquals("LayoutTurnout Left Hand XOver", s);
}
@Test
public void testGetVersion() {
assertEquals(1, ltRH.getVersion());
assertEquals(1, ltLH.getVersion());
assertEquals(1, ltWY.getVersion());
assertEquals(1, ltDX.getVersion());
assertEquals(1, ltRX.getVersion());
assertEquals(1, ltLX.getVersion());
}
@Test
public void testSetVersion() {
ltRH.setVersion(2);
assertEquals(2, ltRH.getVersion());
ltLH.setVersion(2);
assertEquals(2, ltLH.getVersion());
ltWY.setVersion(2);
assertEquals(2, ltWY.getVersion());
ltDX.setVersion(2);
assertEquals(2, ltDX.getVersion());
ltRX.setVersion(2);
assertEquals(2, ltRX.getVersion());
ltLX.setVersion(2);
assertEquals(2, ltLX.getVersion());
}
@Test
public void testUseBlockSpeed() {
Assert.assertFalse(ltRH.useBlockSpeed());
Assert.assertFalse(ltLH.useBlockSpeed());
Assert.assertFalse(ltWY.useBlockSpeed());
Assert.assertFalse(ltDX.useBlockSpeed());
Assert.assertFalse(ltRX.useBlockSpeed());
Assert.assertFalse(ltLX.useBlockSpeed());
}
@Test
public void testGetTurnoutName() {
assertEquals("", ltRH.getTurnoutName());
assertEquals("", ltLH.getTurnoutName());
assertEquals("", ltWY.getTurnoutName());
assertEquals("", ltDX.getTurnoutName());
assertEquals("", ltRX.getTurnoutName());
assertEquals("", ltLX.getTurnoutName());
}
@Test
public void testGetSecondTurnoutName() {
assertEquals("", ltRH.getSecondTurnoutName());
assertEquals("", ltLH.getSecondTurnoutName());
assertEquals("", ltWY.getSecondTurnoutName());
assertEquals("", ltDX.getSecondTurnoutName());
assertEquals("", ltRX.getSecondTurnoutName());
assertEquals("", ltLX.getSecondTurnoutName());
}
@Test
public void testGetBlockName() {
assertEquals("", ltRH.getBlockName());
assertEquals("", ltLH.getBlockName());
assertEquals("", ltWY.getBlockName());
assertEquals("", ltDX.getBlockName());
assertEquals("", ltRX.getBlockName());
assertEquals("", ltLX.getBlockName());
}
@Test
public void testGetBlockBName() {
assertEquals("", ltRH.getBlockBName());
assertEquals("", ltLH.getBlockBName());
assertEquals("", ltWY.getBlockBName());
assertEquals("", ltDX.getBlockBName());
assertEquals("", ltRX.getBlockBName());
assertEquals("", ltLX.getBlockBName());
}
@Test
public void testGetBlockCName() {
assertEquals("", ltRH.getBlockCName());
assertEquals("", ltLH.getBlockCName());
assertEquals("", ltWY.getBlockCName());
assertEquals("", ltDX.getBlockCName());
assertEquals("", ltRX.getBlockCName());
assertEquals("", ltLX.getBlockCName());
}
@Test
public void testGetBlockDName() {
assertEquals("", ltRH.getBlockDName());
assertEquals("", ltLH.getBlockDName());
assertEquals("", ltWY.getBlockDName());
assertEquals("", ltDX.getBlockDName());
assertEquals("", ltRX.getBlockDName());
assertEquals("", ltLX.getBlockDName());
}
@Test
public void testGetSignalHead() {
assertNull(ltRH.getSignalHead(LayoutTurnout.Geometry.NONE));
JUnitAppender.assertWarnMessage("Right Hand.getSignalHead(NONE); Unhandled point type");
assertNull(ltRH.getSignalHead(LayoutTurnout.Geometry.POINTA1));
assertNull(ltRH.getSignalHead(LayoutTurnout.Geometry.POINTA2));
assertNull(ltRH.getSignalHead(LayoutTurnout.Geometry.POINTA3));
assertNull(ltRH.getSignalHead(LayoutTurnout.Geometry.POINTB1));
assertNull(ltRH.getSignalHead(LayoutTurnout.Geometry.POINTB2));
assertNull(ltRH.getSignalHead(LayoutTurnout.Geometry.POINTC1));
assertNull(ltRH.getSignalHead(LayoutTurnout.Geometry.POINTC2));
assertNull(ltRH.getSignalHead(LayoutTurnout.Geometry.POINTD1));
assertNull(ltRH.getSignalHead(LayoutTurnout.Geometry.POINTD2));
}
@Test
public void testGetLinkedTurnoutName() {
assertEquals("", ltRH.getLinkedTurnoutName());
assertEquals("", ltLH.getLinkedTurnoutName());
assertEquals("", ltWY.getLinkedTurnoutName());
assertEquals("", ltDX.getLinkedTurnoutName());
assertEquals("", ltRX.getLinkedTurnoutName());
assertEquals("", ltLX.getLinkedTurnoutName());
}
@Test
public void testSetLinkedTurnoutName() {
ltRH.setLinkedTurnoutName("Foo");
assertEquals("Foo", ltRH.getLinkedTurnoutName());
ltLH.setLinkedTurnoutName("Foo");
assertEquals("Foo", ltLH.getLinkedTurnoutName());
ltWY.setLinkedTurnoutName("Foo");
assertEquals("Foo", ltWY.getLinkedTurnoutName());
ltDX.setLinkedTurnoutName("Foo");
assertEquals("Foo", ltDX.getLinkedTurnoutName());
ltRX.setLinkedTurnoutName("Foo");
assertEquals("Foo", ltRX.getLinkedTurnoutName());
ltLX.setLinkedTurnoutName("Foo");
assertEquals("Foo", ltLX.getLinkedTurnoutName());
}
@Test
public void testGetLinkType() {
assertEquals(LayoutTurnout.LinkType.NO_LINK, ltRH.getLinkType());
assertEquals(LayoutTurnout.LinkType.NO_LINK, ltLH.getLinkType());
assertEquals(LayoutTurnout.LinkType.NO_LINK, ltWY.getLinkType());
assertEquals(LayoutTurnout.LinkType.NO_LINK, ltDX.getLinkType());
assertEquals(LayoutTurnout.LinkType.NO_LINK, ltRX.getLinkType());
assertEquals(LayoutTurnout.LinkType.NO_LINK, ltLX.getLinkType());
}
@Test
public void testSetLinkType() {
ltRH.setLinkType(LayoutTurnout.LinkType.THROAT_TO_THROAT);
assertEquals(LayoutTurnout.LinkType.THROAT_TO_THROAT, ltRH.getLinkType());
ltLH.setLinkType(LayoutTurnout.LinkType.THROAT_TO_THROAT);
assertEquals(LayoutTurnout.LinkType.THROAT_TO_THROAT, ltLH.getLinkType());
ltWY.setLinkType(LayoutTurnout.LinkType.THROAT_TO_THROAT);
assertEquals(LayoutTurnout.LinkType.THROAT_TO_THROAT, ltWY.getLinkType());
ltDX.setLinkType(LayoutTurnout.LinkType.THROAT_TO_THROAT);
assertEquals(LayoutTurnout.LinkType.THROAT_TO_THROAT, ltDX.getLinkType());
ltRX.setLinkType(LayoutTurnout.LinkType.THROAT_TO_THROAT);
assertEquals(LayoutTurnout.LinkType.THROAT_TO_THROAT, ltRX.getLinkType());
ltLX.setLinkType(LayoutTurnout.LinkType.THROAT_TO_THROAT);
assertEquals(LayoutTurnout.LinkType.THROAT_TO_THROAT, ltLX.getLinkType());
ltRH.setLinkType(LayoutTurnout.LinkType.NO_LINK);
assertEquals(LayoutTurnout.LinkType.NO_LINK, ltRH.getLinkType());
ltLH.setLinkType(LayoutTurnout.LinkType.NO_LINK);
assertEquals(LayoutTurnout.LinkType.NO_LINK, ltLH.getLinkType());
ltWY.setLinkType(LayoutTurnout.LinkType.NO_LINK);
assertEquals(LayoutTurnout.LinkType.NO_LINK, ltWY.getLinkType());
ltDX.setLinkType(LayoutTurnout.LinkType.NO_LINK);
assertEquals(LayoutTurnout.LinkType.NO_LINK, ltDX.getLinkType());
ltRX.setLinkType(LayoutTurnout.LinkType.NO_LINK);
assertEquals(LayoutTurnout.LinkType.NO_LINK, ltRX.getLinkType());
ltLX.setLinkType(LayoutTurnout.LinkType.NO_LINK);
assertEquals(LayoutTurnout.LinkType.NO_LINK, ltLX.getLinkType());
}
@Test
public void testGetTurnoutType() {
assertEquals(LayoutTurnout.TurnoutType.RH_TURNOUT, ltRH.getTurnoutType());
assertEquals(LayoutTurnout.TurnoutType.LH_TURNOUT, ltLH.getTurnoutType() );
assertEquals(LayoutTurnout.TurnoutType.WYE_TURNOUT, ltWY.getTurnoutType());
assertEquals(LayoutTurnout.TurnoutType.DOUBLE_XOVER, ltDX.getTurnoutType());
assertEquals(LayoutTurnout.TurnoutType.RH_XOVER, ltRX.getTurnoutType());
assertEquals(LayoutTurnout.TurnoutType.LH_XOVER, ltLX.getTurnoutType());
}
@Test
public void testGetConnectA() {
Assert.assertNull(ltRH.getConnectA());
Assert.assertNull(ltLH.getConnectA());
Assert.assertNull(ltWY.getConnectA());
Assert.assertNull(ltDX.getConnectA());
Assert.assertNull(ltRX.getConnectA());
Assert.assertNull(ltLX.getConnectA());
}
@Test
public void testGetConnectB() {
Assert.assertNull(ltRH.getConnectB());
Assert.assertNull(ltLH.getConnectB());
Assert.assertNull(ltWY.getConnectB());
Assert.assertNull(ltDX.getConnectB());
Assert.assertNull(ltRX.getConnectB());
Assert.assertNull(ltLX.getConnectB());
}
@Test
public void testGetConnectC() {
Assert.assertNull(ltRH.getConnectC());
Assert.assertNull(ltLH.getConnectC());
Assert.assertNull(ltWY.getConnectC());
Assert.assertNull(ltDX.getConnectC());
Assert.assertNull(ltRX.getConnectC());
Assert.assertNull(ltLX.getConnectC());
}
@Test
public void testGetConnectD() {
Assert.assertNull(ltRH.getConnectD());
Assert.assertNull(ltLH.getConnectD());
Assert.assertNull(ltWY.getConnectD());
Assert.assertNull(ltDX.getConnectD());
Assert.assertNull(ltRX.getConnectD());
Assert.assertNull(ltLX.getConnectD());
}
@Test
public void testGetTurnout() {
Assert.assertNull(ltRH.getTurnout());
Assert.assertNull(ltLH.getTurnout());
Assert.assertNull(ltWY.getTurnout());
Assert.assertNull(ltDX.getTurnout());
Assert.assertNull(ltRX.getTurnout());
Assert.assertNull(ltLX.getTurnout());
}
@Test
public void testGetContinuingSense() {
assertEquals(Turnout.CLOSED, ltRH.getContinuingSense());
assertEquals(Turnout.CLOSED, ltLH.getContinuingSense());
assertEquals(Turnout.CLOSED, ltWY.getContinuingSense());
assertEquals(Turnout.CLOSED, ltDX.getContinuingSense());
assertEquals(Turnout.CLOSED, ltRX.getContinuingSense());
assertEquals(Turnout.CLOSED, ltLX.getContinuingSense());
}
@Test
public void testIsDisabledDefault() {
Assert.assertFalse("ltRH.isDisabled() is False", ltRH.isDisabled());
Assert.assertFalse("ltLH.isDisabled() is False", ltLH.isDisabled());
Assert.assertFalse("ltWY.isDisabled() is False", ltWY.isDisabled());
Assert.assertFalse("ltDX.isDisabled() is False", ltDX.isDisabled());
Assert.assertFalse("ltRX.isDisabled() is False", ltRX.isDisabled());
Assert.assertFalse("ltLX.isDisabled() is False", ltLX.isDisabled());
}
@Test
public void testSetDisabled() {
ltRH.setDisabled(true);
Assert.assertTrue("ltRH.isDisabled() is True", ltRH.isDisabled());
ltLH.setDisabled(true);
Assert.assertTrue("ltLH.isDisabled() is True", ltLH.isDisabled());
ltWY.setDisabled(true);
Assert.assertTrue("ltWY.isDisabled() is True", ltWY.isDisabled());
ltDX.setDisabled(true);
Assert.assertTrue("ltDX.isDisabled() is True", ltDX.isDisabled());
ltRX.setDisabled(true);
Assert.assertTrue("ltRX.isDisabled() is True", ltRX.isDisabled());
ltLX.setDisabled(true);
Assert.assertTrue("ltLX.isDisabled() is True", ltLX.isDisabled());
}
@Test
public void testIsDisabledWhenOccupied() {
Assert.assertFalse("ltRH.isDisabledWhenOccupied() is False", ltRH.isDisabledWhenOccupied());
Assert.assertFalse("ltLH.isDisabledWhenOccupied() is False", ltLH.isDisabledWhenOccupied());
Assert.assertFalse("ltWY.isDisabledWhenOccupied() is False", ltWY.isDisabledWhenOccupied());
Assert.assertFalse("ltDX.isDisabledWhenOccupied() is False", ltDX.isDisabledWhenOccupied());
Assert.assertFalse("ltRX.isDisabledWhenOccupied() is False", ltRX.isDisabledWhenOccupied());
Assert.assertFalse("ltLX.isDisabledWhenOccupied() is False", ltLX.isDisabledWhenOccupied());
}
@Test
public void testSetDisableWhenOccupied() {
ltRH.setDisableWhenOccupied(true);
Assert.assertTrue("ltRH.isDisabledWhenOccupied() is True", ltRH.isDisabledWhenOccupied());
ltLH.setDisableWhenOccupied(true);
Assert.assertTrue("ltLH.isDisabledWhenOccupied() is True", ltLH.isDisabledWhenOccupied());
ltWY.setDisableWhenOccupied(true);
Assert.assertTrue("ltWY.isDisabledWhenOccupied() is True", ltWY.isDisabledWhenOccupied());
ltDX.setDisableWhenOccupied(true);
Assert.assertTrue("ltDX.isDisabledWhenOccupied() is True", ltDX.isDisabledWhenOccupied());
ltRX.setDisableWhenOccupied(true);
Assert.assertTrue("ltRX.isDisabledWhenOccupied() is True", ltRX.isDisabledWhenOccupied());
ltLX.setDisableWhenOccupied(true);
Assert.assertTrue("ltLX.isDisabledWhenOccupied() is True", ltLX.isDisabledWhenOccupied());
}
@Test
public void testGetConnectionInvalid() {
Assert.assertNotNull("LayoutEditor exists", layoutEditor);
try {
Assert.assertNull("ltRH.getConnection(invalid type) is null",
ltRH.getConnection(HitPointType.NONE));
Assert.fail("No exception thrown on ltRH.getConnection(invalid type)");
} catch (IllegalArgumentException ex) {
}
JUnitAppender.assertErrorMessage("will throw Right Hand.getConnection(NONE); Invalid Connection Type");
try {
Assert.assertNull("ltLH.getConnection(invalid type) is null",
ltLH.getConnection(HitPointType.NONE));
Assert.fail("No exception thrown on ltLH.getConnection(invalid type)");
} catch (IllegalArgumentException ex) {
}
JUnitAppender.assertErrorMessage("will throw Left Hand.getConnection(NONE); Invalid Connection Type");
try {
Assert.assertNull("ltWY.getConnection(invalid type) is null",
ltWY.getConnection(HitPointType.NONE));
Assert.fail("No exception thrown on ltWY.getConnection(invalid type)");
} catch (IllegalArgumentException ex) {
}
JUnitAppender.assertErrorMessage("will throw Wye.getConnection(NONE); Invalid Connection Type");
try {
Assert.assertNull("ltDX.getConnection(invalid type) is null",
ltDX.getConnection(HitPointType.NONE));
Assert.fail("No exception thrown on ltDX.getConnection(invalid type)");
} catch (IllegalArgumentException ex) {
}
JUnitAppender.assertErrorMessage("will throw Double XOver.getConnection(NONE); Invalid Connection Type");
try {
Assert.assertNull("ltRX.getConnection(invalid type) is null",
ltRX.getConnection(HitPointType.NONE));
Assert.fail("No exception thrown on ltRX.getConnection(invalid type)");
} catch (IllegalArgumentException ex) {
}
JUnitAppender.assertErrorMessage("will throw Right Hand XOver.getConnection(NONE); Invalid Connection Type");
try {
Assert.assertNull("ltLX.getConnection(invalid type) is null",
ltLX.getConnection(HitPointType.NONE));
Assert.fail("No exception thrown on ltLX.getConnection(invalid type)");
} catch (IllegalArgumentException ex) {
}
JUnitAppender.assertErrorMessage("will throw Left Hand XOver.getConnection(NONE); Invalid Connection Type");
}
@Test
public void testGetConnectionValid() {
Assert.assertNotNull("LayoutEditor exists", layoutEditor);
try {
Assert.assertNull("ltRH.getConnection(valid type) is null",
ltRH.getConnection(HitPointType.TURNOUT_A));
} catch (IllegalArgumentException ex) {
Assert.fail("Exception thrown on ltRH.getConnection(valid type)");
}
try {
Assert.assertNull("ltLH.getConnection(valid type) is null",
ltLH.getConnection(HitPointType.TURNOUT_A));
} catch (IllegalArgumentException ex) {
Assert.fail("Exception thrown on ltLH.getConnection(valid type)");
}
try {
Assert.assertNull("ltWY.getConnection(valid type) is null",
ltWY.getConnection(HitPointType.TURNOUT_A));
} catch (IllegalArgumentException ex) {
Assert.fail("Exception thrown on ltWY.getConnection(valid type)");
}
try {
Assert.assertNull("ltDX.getConnection(valid type) is null",
ltDX.getConnection(HitPointType.TURNOUT_A));
} catch (IllegalArgumentException ex) {
Assert.fail("Exception thrown on ltDX.getConnection(valid type)");
}
try {
Assert.assertNull("ltRX.getConnection(valid type) is null",
ltRX.getConnection(HitPointType.TURNOUT_A));
} catch (IllegalArgumentException ex) {
Assert.fail("Exception thrown on ltRX.getConnection(valid type)");
}
try {
Assert.assertNull("ltLX.getConnection(valid type) is null",
ltLX.getConnection(HitPointType.TURNOUT_A));
} catch (IllegalArgumentException ex) {
Assert.fail("Exception thrown on ltLX.getConnection(valid type)");
}
}
@Test
public void testSetConnection() {
Assert.assertNotNull("LayoutEditor exists", layoutEditor);
try {
// test Invalid Connection Type
ltRH.setConnection(HitPointType.NONE, null, HitPointType.NONE);
Assert.fail("No exception thrown on ltRH.setConnection(Invalid Connection Type)");
} catch (JmriException ex) {
}
JUnitAppender.assertErrorMessage("will throw Right Hand.setConnection(NONE, null, NONE); Invalid Connection Type");
try {
// test unexpected type
ltRH.setConnection(HitPointType.POS_POINT, null, HitPointType.POS_POINT);
Assert.fail("No exception thrown on ltRH.setConnection(unexpected type)");
} catch (JmriException ex) {
}
JUnitAppender.assertErrorMessage("will throw Right Hand.setConnection(POS_POINT, null, POS_POINT); unexpected type");
try {
// test valid types
ltRH.setConnection(HitPointType.TURNOUT_A, null, HitPointType.NONE);
} catch (JmriException ex) {
Assert.fail("Exception thrown on ltRH.setConnection(valid types)");
}
}
@Test
public void testSetConnectsInvalid() {
Assert.assertNotNull("LayoutEditor exists", layoutEditor);
ltRH.setConnectA(null, HitPointType.POS_POINT);
JUnitAppender.assertErrorMessage("Right Hand.setConnectA(null, POS_POINT); unexpected type");
ltRH.setConnectB(null, HitPointType.POS_POINT);
JUnitAppender.assertErrorMessage("Right Hand.setConnectB(null, POS_POINT); unexpected type");
ltRH.setConnectC(null, HitPointType.POS_POINT);
JUnitAppender.assertErrorMessage("Right Hand.setConnectC(null, POS_POINT); unexpected type");
ltRH.setConnectD(null, HitPointType.POS_POINT);
JUnitAppender.assertErrorMessage("Right Hand.setConnectD(null, POS_POINT); unexpected type");
ltLH.setConnectA(null, HitPointType.POS_POINT);
JUnitAppender.assertErrorMessage("Left Hand.setConnectA(null, POS_POINT); unexpected type");
ltLH.setConnectB(null, HitPointType.POS_POINT);
JUnitAppender.assertErrorMessage("Left Hand.setConnectB(null, POS_POINT); unexpected type");
ltLH.setConnectC(null, HitPointType.POS_POINT);
JUnitAppender.assertErrorMessage("Left Hand.setConnectC(null, POS_POINT); unexpected type");
ltLH.setConnectD(null, HitPointType.POS_POINT);
JUnitAppender.assertErrorMessage("Left Hand.setConnectD(null, POS_POINT); unexpected type");
ltWY.setConnectA(null, HitPointType.POS_POINT);
JUnitAppender.assertErrorMessage("Wye.setConnectA(null, POS_POINT); unexpected type");
ltWY.setConnectB(null, HitPointType.POS_POINT);
JUnitAppender.assertErrorMessage("Wye.setConnectB(null, POS_POINT); unexpected type");
ltWY.setConnectC(null, HitPointType.POS_POINT);
JUnitAppender.assertErrorMessage("Wye.setConnectC(null, POS_POINT); unexpected type");
ltWY.setConnectD(null, HitPointType.POS_POINT);
JUnitAppender.assertErrorMessage("Wye.setConnectD(null, POS_POINT); unexpected type");
ltDX.setConnectA(null, HitPointType.POS_POINT);
JUnitAppender.assertErrorMessage("Double XOver.setConnectA(null, POS_POINT); unexpected type");
ltDX.setConnectB(null, HitPointType.POS_POINT);
JUnitAppender.assertErrorMessage("Double XOver.setConnectB(null, POS_POINT); unexpected type");
ltDX.setConnectC(null, HitPointType.POS_POINT);
JUnitAppender.assertErrorMessage("Double XOver.setConnectC(null, POS_POINT); unexpected type");
ltDX.setConnectD(null, HitPointType.POS_POINT);
JUnitAppender.assertErrorMessage("Double XOver.setConnectD(null, POS_POINT); unexpected type");
}
@Test
public void testSetConnectsValid() {
Assert.assertNotNull("LayoutEditor exists", layoutEditor);
ltRH.setConnectA(null, HitPointType.NONE);
ltLH.setConnectB(null, HitPointType.NONE);
ltWY.setConnectC(null, HitPointType.NONE);
ltDX.setConnectD(null, HitPointType.NONE);
}
@Test
public void testGetStateDefault() {
assertNotNull( layoutEditor, "LayoutEditor exists");
assertEquals(Turnout.UNKNOWN, ltRH.getState(), "ltRH.getState() is UNKNOWN");
assertEquals(Turnout.UNKNOWN, ltLH.getState(), "ltLH.getState() is UNKNOWN");
assertEquals(Turnout.UNKNOWN, ltWY.getState(), "ltWY.getState() is UNKNOWN");
assertEquals(Turnout.UNKNOWN, ltDX.getState(), "ltDX.getState() is UNKNOWN");
assertEquals(Turnout.UNKNOWN, ltRX.getState(), "ltRX.getState() is UNKNOWN");
assertEquals(Turnout.UNKNOWN, ltLX.getState(), "ltLX.getState() is UNKNOWN");
}
@Test
public void testSupportingTurnoutTwoSensor() throws JmriException {
Turnout tOne = InstanceManager.getDefault(TurnoutManager.class).provideTurnout("IT1");
Turnout tTwo = InstanceManager.getDefault(TurnoutManager.class).provideTurnout("IT2");
Assert.assertNotNull("exists", tOne);
Assert.assertNotNull("exists", tTwo);
Sensor t1Closed = InstanceManager.getDefault(SensorManager.class).provideSensor("IST1Closed");
Sensor t1Thrown = InstanceManager.getDefault(SensorManager.class).provideSensor("IST1Thrown");
Sensor t2Closed = InstanceManager.getDefault(SensorManager.class).provideSensor("IST2Closed");
Sensor t2Thrown = InstanceManager.getDefault(SensorManager.class).provideSensor("IST2Thrown");
tOne.provideFirstFeedbackSensor("IST1Thrown");
tOne.provideSecondFeedbackSensor("IST1Closed");
tOne.setFeedbackMode(Turnout.TWOSENSOR);
tTwo.provideFirstFeedbackSensor("IST2Thrown");
tTwo.provideSecondFeedbackSensor("IST2Closed");
tTwo.setFeedbackMode(Turnout.TWOSENSOR);
int start1Listeners = tOne.getPropertyChangeListeners().length;
int start2Listeners = tTwo.getPropertyChangeListeners().length;
// not a test of using a String to set the Turnout
ltRX.setTurnout("IT1");
ltRX.setSecondTurnout("IT2");
Assert.assertEquals("t1 +1 listeners ", start1Listeners + 1, tOne.getPropertyChangeListeners().length);
Assert.assertEquals("t2 +1 listeners", start2Listeners + 1, tTwo.getPropertyChangeListeners().length);
// not a test on the actual bean name, just that one is retrievable
Assert.assertEquals("tOne name fetchable", tOne.getDisplayName(), ltRX.getTurnoutName());
Assert.assertEquals("tTwo name fetchable", tTwo.getDisplayName(), ltRX.getSecondTurnoutName());
assertEquals(Turnout.UNKNOWN, ltRX.getState(), "0 sensor states known getState UNKNOWN");
t1Closed.setKnownState(Sensor.ACTIVE);
assertEquals(Turnout.INCONSISTENT, ltRX.getState(), "only 1 sensor known INCONSISTENT");
t1Thrown.setKnownState(Sensor.INACTIVE);
assertEquals(Turnout.INCONSISTENT, ltRX.getState(), "only 2 sensor known INCONSISTENT");
assertEquals(Turnout.CLOSED, tOne.getState(), "main turnout known ");
t2Closed.setKnownState(Sensor.ACTIVE);
assertEquals(Turnout.INCONSISTENT, ltRX.getState(), "only 3 sensor known INCONSISTENT");
t2Thrown.setKnownState(Sensor.INACTIVE);
Assert.assertEquals("t1 CLOSED", Turnout.CLOSED, tOne.getState());
Assert.assertEquals("t2 CLOSED", Turnout.CLOSED, tTwo.getState());
Assert.assertEquals("both turnouts CLOSED", Turnout.CLOSED, ltRX.getState());
t2Closed.setKnownState(Sensor.INACTIVE);
assertEquals(Turnout.INCONSISTENT, ltRX.getState(), "t2 leg status INCONSISTENT");
t2Thrown.setKnownState(Sensor.ACTIVE);
Assert.assertEquals("t2 THROWN", Turnout.THROWN, tTwo.getState());
assertEquals(Turnout.INCONSISTENT, ltRX.getState(), "t2 THROWN t1 CLOSED INCONSISTENT");
// remove turnouts and check num listeners
ltRX.setSecondTurnout("");
Assert.assertEquals("t1 +1 listeners ", start1Listeners + 1, tOne.getPropertyChangeListeners().length);
Assert.assertEquals("t2 start listeners", start2Listeners, tTwo.getPropertyChangeListeners().length);
ltRX.setTurnout("");
Assert.assertEquals("t1 start listeners ", start1Listeners, tOne.getPropertyChangeListeners().length);
tOne.dispose();
tTwo.dispose();
t1Closed.dispose();
t1Thrown.dispose();
t2Closed.dispose();
t2Thrown.dispose();
}
@Test
public void testSupportingTurnoutLogic() throws JmriException {
Turnout stOne = InstanceManager.getDefault(TurnoutManager.class).provideTurnout("ITS1");
Turnout stTwo = InstanceManager.getDefault(TurnoutManager.class).provideTurnout("ITS2");
// not a test of using a String to set the Turnout
ltRX.setTurnout("ITS1");
ltRX.setSecondTurnout("ITS2");
Assert.assertFalse(ltRX.isSecondTurnoutInverted());
ltRX.setSecondTurnoutInverted(true);
Assert.assertTrue(ltRX.isSecondTurnoutInverted());
// Here we're testing the commanded state logic that joins the Turnouts when operated,
// the actual LayoutTurnout status is dependent on the feedback status.
Assert.assertEquals("t2 inverted CLOSED when t1 THROWN", Turnout.UNKNOWN, stTwo.getCommandedState());
stOne.setCommandedState(Turnout.UNKNOWN);
stTwo.setCommandedState(Turnout.UNKNOWN);
Assert.assertEquals("ltRX UNKNOWN", Turnout.UNKNOWN, ltRX.getState());
stOne.setCommandedState(Turnout.THROWN);
Assert.assertEquals("t2 inverted CLOSED when t1 THROWN", Turnout.CLOSED, stTwo.getCommandedState());
Assert.assertEquals("ltRX THROWN", Turnout.THROWN, ltRX.getState());
stOne.setCommandedState(Turnout.UNKNOWN);
stTwo.setCommandedState(Turnout.UNKNOWN);
stOne.setCommandedState(Turnout.CLOSED);
Assert.assertEquals("t2 inverted THROWN when t1 CLOSED", Turnout.THROWN, stTwo.getCommandedState());
Assert.assertEquals("ltRX CLOSED", Turnout.CLOSED, ltRX.getState());
stTwo.setCommandedState(Turnout.UNKNOWN);
stOne.setCommandedState(Turnout.UNKNOWN);
stTwo.setCommandedState(Turnout.THROWN);
Assert.assertEquals("t1 inverted CLOSED when t2 THROWN", Turnout.CLOSED, stOne.getCommandedState());
Assert.assertEquals("ltRX CLOSED", Turnout.CLOSED, ltRX.getState());
stTwo.setCommandedState(Turnout.UNKNOWN);
stOne.setCommandedState(Turnout.UNKNOWN);
stTwo.setCommandedState(Turnout.CLOSED);
Assert.assertEquals("t1 inverted THROWN when t2 CLOSED", Turnout.THROWN, stOne.getCommandedState());
Assert.assertEquals("ltRX THROWN", Turnout.THROWN, ltRX.getState());
ltRX.setSecondTurnoutInverted(false);
Assert.assertFalse(ltRX.isSecondTurnoutInverted());
stOne.setCommandedState(Turnout.UNKNOWN);
stTwo.setCommandedState(Turnout.UNKNOWN);
stOne.setCommandedState(Turnout.THROWN);
Assert.assertEquals("t2 THROWN when t1 THROWN", Turnout.THROWN, stTwo.getCommandedState());
stOne.setCommandedState(Turnout.UNKNOWN);
stTwo.setCommandedState(Turnout.UNKNOWN);
stOne.setCommandedState(Turnout.CLOSED);
Assert.assertEquals("t2 CLOSED when t1 CLOSED", Turnout.CLOSED, stTwo.getCommandedState());
stTwo.setCommandedState(Turnout.UNKNOWN);
stOne.setCommandedState(Turnout.UNKNOWN);
stTwo.setCommandedState(Turnout.THROWN);
Assert.assertEquals("t1 THROWN when t2 THROWN", Turnout.THROWN, stOne.getCommandedState());
stTwo.setCommandedState(Turnout.UNKNOWN);
stOne.setCommandedState(Turnout.UNKNOWN);
stTwo.setCommandedState(Turnout.CLOSED);
Assert.assertEquals("t1 CLOSED when t2 CLOSED", Turnout.CLOSED, stOne.getCommandedState());
stOne.dispose();
stTwo.dispose();
}
@Test
public void testThrowWhenOccupiedOneTurnout() throws JmriException {
Assert.assertEquals("ltRH starts unknown state", Turnout.UNKNOWN, ltRH.getState());
ltRH.setState(Turnout.CLOSED);
Assert.assertEquals("no change null Turnout", Turnout.UNKNOWN, ltRH.getState());
ltRH.setDisabled(true);
ltRH.setState(Turnout.CLOSED);
Assert.assertEquals("no change null Turnout and disabled", Turnout.UNKNOWN, ltRH.getState());
Turnout otOne = InstanceManager.getDefault(TurnoutManager.class).provideTurnout("ITS1");
ltRH.setTurnout("ITS1");
otOne.setCommandedState(Turnout.UNKNOWN);
Assert.assertEquals("turnout set ", Turnout.UNKNOWN, otOne.getState());
Assert.assertEquals("turnout set ", Turnout.UNKNOWN, ltRH.getState());
ltRH.setDisabled(true);
ltRH.setState(Turnout.CLOSED);
Assert.assertEquals("turnout still UNKNOWN after set CLOSE disabled", Turnout.UNKNOWN, ltRH.getState());
ltRH.setDisabled(false);
LayoutBlock layoutBlock = new LayoutBlock("ILB1", "Test Block");
Sensor occSensor = InstanceManager.getDefault(SensorManager.class).provideSensor("ISOccupancy1");
occSensor.setKnownState(Sensor.ACTIVE);
layoutBlock.setOccupancySensorName("ISOccupancy1");
assertEquals(LayoutBlock.OCCUPIED, layoutBlock.getOccupancy(), "Occupied when sensor active");
ltRHv.setLayoutBlock(layoutBlock);
// occupied, occ. active disabled
ltRH.setDisableWhenOccupied(false);
occSensor.setKnownState(Sensor.ACTIVE);
otOne.setCommandedState(Turnout.UNKNOWN);
ltRH.setState(Turnout.CLOSED);
Assert.assertEquals("ltRH CLOSED when occupied, occ when active not disabled", Turnout.CLOSED, otOne.getCommandedState());
ltRH.setState(Turnout.THROWN);
Assert.assertEquals("ltRH THROWN when occupied, occ when active not disabled", Turnout.THROWN, otOne.getCommandedState());
// occupied, occ. active enabled
ltRH.setDisableWhenOccupied(true);
occSensor.setKnownState(Sensor.ACTIVE);
otOne.setCommandedState(Turnout.UNKNOWN);
ltRH.setState(Turnout.THROWN);
Assert.assertEquals("ltRH unchanged when occupied, occ when active enabled", Turnout.UNKNOWN, ltRH.getState());
ltRH.setState(Turnout.CLOSED);
Assert.assertEquals("ltRH unchanged when occupied, occ when active enabled", Turnout.UNKNOWN, ltRH.getState());
// not occupied, occ. active disabled
ltRH.setDisableWhenOccupied(false);
occSensor.setKnownState(Sensor.INACTIVE);
otOne.setCommandedState(Turnout.UNKNOWN);
ltRH.setState(Turnout.CLOSED);
Assert.assertEquals("ltRH CLOSED when occupied, occ when active not disabled", Turnout.CLOSED, otOne.getCommandedState());
ltRH.setState(Turnout.THROWN);
Assert.assertEquals("ltRH THROWN when occupied, occ when active not disabled", Turnout.THROWN, otOne.getCommandedState());
// not occupied, occ. active enabled
ltRH.setDisableWhenOccupied(true);
occSensor.setKnownState(Sensor.INACTIVE);
otOne.setCommandedState(Turnout.UNKNOWN);
ltRH.setState(Turnout.CLOSED);
Assert.assertEquals("ltRH CLOSED when occupied, occ when active not disabled", Turnout.CLOSED, otOne.getCommandedState());
ltRH.setState(Turnout.THROWN);
Assert.assertEquals("ltRH THROWN when occupied, occ when active not disabled", Turnout.THROWN, otOne.getCommandedState());
layoutBlock.dispose();
otOne.dispose();
}
@Test
public void testSecondaryTurnoutStateWhenSet() throws JmriException {
// not testing occupancy as that was covered in previous test
Turnout stOne = InstanceManager.getDefault(TurnoutManager.class).provideTurnout("ITS1");
Turnout stTwo = InstanceManager.getDefault(TurnoutManager.class).provideTurnout("ITS2");
// not a test of using a String to set the Turnout
ltRX.setTurnout("ITS1");
ltRX.setSecondTurnout("ITS2");
ltRX.setSecondTurnoutInverted(false);
stOne.setCommandedState(Turnout.UNKNOWN);
stTwo.setCommandedState(Turnout.UNKNOWN);
ltRX.setState(Turnout.THROWN);
Assert.assertEquals("StOne THROWN", Turnout.THROWN, stOne.getCommandedState());
Assert.assertEquals("StTwo THROWN", Turnout.THROWN, stTwo.getCommandedState());
ltRX.setSecondTurnoutInverted(false);
stOne.setCommandedState(Turnout.UNKNOWN);
stTwo.setCommandedState(Turnout.UNKNOWN);
ltRX.setState(Turnout.THROWN);
Assert.assertEquals("StOne THROWN", Turnout.THROWN, stOne.getCommandedState());
Assert.assertEquals("StTwo THROWN", Turnout.THROWN, stTwo.getCommandedState());
ltRX.setState(Turnout.CLOSED);
Assert.assertEquals("StOne CLOSED", Turnout.CLOSED, stOne.getCommandedState());
Assert.assertEquals("StTwo CLOSED", Turnout.CLOSED, stTwo.getCommandedState());
ltRX.setSecondTurnoutInverted(true);
stOne.setCommandedState(Turnout.UNKNOWN);
stTwo.setCommandedState(Turnout.UNKNOWN);
ltRX.setState(Turnout.THROWN);
Assert.assertEquals("StOne THROWN", Turnout.THROWN, stOne.getCommandedState());
Assert.assertEquals("StTwo CLOSED", Turnout.CLOSED, stTwo.getCommandedState());
ltRX.setState(Turnout.CLOSED);
Assert.assertEquals("StOne CLOSED", Turnout.CLOSED, stOne.getCommandedState());
Assert.assertEquals("StTwo THROWN", Turnout.THROWN, stTwo.getCommandedState());
}
@Test
public void testToggle() throws JmriException {
// null Turnout
Assert.assertEquals("starts UNKNOWN", Turnout.UNKNOWN, ltRH.getState());
ltRH.toggleTurnout();
Assert.assertEquals("still UNKNOWN no Turnout to toggle", Turnout.UNKNOWN, ltRH.getState());
Turnout ptOne = InstanceManager.getDefault(TurnoutManager.class).provideTurnout("ITP1");
ltRH.setTurnout("ITP1");
ptOne.setCommandedState(Turnout.UNKNOWN);
ltRH.toggleTurnout();
Assert.assertEquals("UNKNOWN to CLOSED when toggled", Turnout.CLOSED, ptOne.getCommandedState());
ltRH.toggleTurnout();
Assert.assertEquals("CLOSED to THROWN when toggled", Turnout.THROWN, ptOne.getCommandedState());
ltRH.toggleTurnout();
Assert.assertEquals("THROWN to CLOSED when toggled", Turnout.CLOSED, ptOne.getCommandedState());
}
private LayoutRHTurnout ltRH = null;
private LayoutRHTurnoutView ltRHv = null;
private LayoutLHTurnout ltLH = null;
private LayoutLHTurnoutView ltLHv = null;
private LayoutWye ltWY = null;
private LayoutWyeView ltWYv = null;
private LayoutDoubleXOver ltDX = null;
private LayoutDoubleXOverView ltDXv = null;
private LayoutRHXOver ltRX = null;
private LayoutRHXOverView ltRXv = null;
private LayoutLHXOver ltLX = null;
private LayoutLHXOverView ltLXv = null;
@Override
@BeforeEach
@javax.annotation.OverridingMethodsMustInvokeSuper
public void setUp() {
super.setUp();
JUnitUtil.resetInstanceManager();
JUnitUtil.resetProfileManager();
JUnitUtil.initInternalTurnoutManager();
JUnitUtil.initInternalSensorManager();
JUnitUtil.initInternalSignalHeadManager();
Point2D point = new Point2D.Double(150.0, 100.0);
Point2D delta = new Point2D.Double(50.0, 75.0);
ltRH = new LayoutRHTurnout("Right Hand", layoutEditor); // point, 33.0, 1.1, 1.2,
ltRHv = new LayoutRHTurnoutView(ltRH, point, 33.0, 1.1, 1.2, layoutEditor);
layoutEditor.addLayoutTrack(ltRH, ltRHv);
point = MathUtil.add(point, delta);
ltLH = new LayoutLHTurnout("Left Hand", layoutEditor); // point, 66.0, 1.3, 1.4,
ltLHv = new LayoutLHTurnoutView(ltLH, point, 66.0, 1.3, 1.4, layoutEditor);
layoutEditor.addLayoutTrack(ltLH, ltLHv);
point = MathUtil.add(point, delta);
ltWY = new LayoutWye("Wye", layoutEditor); // point, 99.0, 1.5, 1.6,
ltWYv = new LayoutWyeView(ltWY, point, 99.0, 1.5, 1.6, layoutEditor);
layoutEditor.addLayoutTrack(ltWY, ltWYv);
point = MathUtil.add(point, delta);
ltDX = new LayoutDoubleXOver("Double XOver", layoutEditor); // point, 132.0, 1.7, 1.8,
ltDXv = new LayoutDoubleXOverView(ltDX, point, 132.0, 1.7, 1.8, layoutEditor);
layoutEditor.addLayoutTrack(ltDX, ltDXv);
point = MathUtil.add(point, delta);
ltRX = new LayoutRHXOver("Right Hand XOver", layoutEditor); // point, 165.0, 1.9, 2.0,
ltRXv = new LayoutRHXOverView(ltRX, point, 165.0, 1.9, 2.0, layoutEditor);
layoutEditor.addLayoutTrack(ltRX, ltRXv);
point = MathUtil.add(point, delta);
ltLX = new LayoutLHXOver("Left Hand XOver", layoutEditor); // point, 198.0, 2.1, 2.2,
ltLXv = new LayoutLHXOverView(ltLX, point, 198.0, 2.1, 2.2, layoutEditor);
layoutEditor.addLayoutTrack(ltLX, ltLXv);
}
@Override
@AfterEach
@javax.annotation.OverridingMethodsMustInvokeSuper
public void tearDown() {
if (ltRH != null) {
ltRH.remove();
ltRH = null;
}
if (ltRHv != null) {
ltRHv.remove();
ltRHv.dispose();
ltRHv = null;
}
if (ltLH != null) {
ltLH.remove();
ltLH = null;
}
if (ltLHv != null) {
ltLHv.remove();
ltLHv.dispose();
ltLHv = null;
}
if (ltWY != null) {
ltWY.remove();
ltWY = null;
}
if (ltWYv != null) {
ltWYv.remove();
ltWYv.dispose();
ltWYv = null;
}
if (ltDX != null) {
ltDX.remove();
ltDX = null;
}
if (ltDXv != null) {
ltDXv.remove();
ltDXv.dispose();
ltDXv = null;
}
if (ltRX != null) {
ltRX.remove();
ltRX = null;
}
if (ltRXv != null) {
ltRXv.remove();
ltRXv.dispose();
ltRXv = null;
}
if (ltLX != null) {
ltLX.remove();
ltLX = null;
}
if (ltLXv != null) {
ltLXv.remove();
ltLXv.dispose();
ltLXv = null;
}
super.tearDown();
}
// private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LayoutTurnoutTest.class);
}