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

353 lines
16 KiB
Java

package jmri.jmrit.logix;
import jmri.*;
import jmri.util.JUnitAppender;
import jmri.util.JUnitUtil;
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;
/**
*
* @author Bob Jacobsen Copyright 2010, 2014
*/
public class OBlockTest {
private OBlockManager blkMgr;
/* OBlock.DARK replaced with Block.UNDETECTED - 12/10/2016 pwc
@SuppressWarnings("all") // otherwise, you get "Comparing identical" warning (until something breaks!)
public void testEqualCoding() {
// the following match is required by the Javadoc
Assert.assertTrue("Block.UNKNOWN == OBlock.DARK", Block.UNKNOWN == OBlock.DARK);
}*/
@Test
public void testCTor(){
assertNotNull(new OBlock("OB01"),"OBlock Creation");
}
@Test
public void testCTor2Param(){
assertNotNull(new OBlock("OB01","test OBlock"),"OBlock Creation");
}
@Test
public void testSeparateCoding() {
assertTrue( Block.OCCUPIED != OBlock.ALLOCATED, "Block.OCCUPIED != OBlock.ALLOCATED");
assertTrue( Block.OCCUPIED != OBlock.RUNNING, "Block.OCCUPIED != OBlock.RUNNING");
assertTrue( Block.OCCUPIED != OBlock.OUT_OF_SERVICE, "Block.OCCUPIED != OBlock.OUT_OF_SERVICE");
assertTrue( Block.OCCUPIED != OBlock.TRACK_ERROR, "Block.OCCUPIED != OBlock.TRACK_ERROR");
assertTrue( Block.OCCUPIED != OBlock.UNOCCUPIED, "Block.OCCUPIED != OBlock.UNOCCUPIED");
assertTrue( Block.UNOCCUPIED != OBlock.ALLOCATED, "Block.UNOCCUPIED != OBlock.ALLOCATED");
assertTrue( Block.UNOCCUPIED != OBlock.RUNNING, "Block.UNOCCUPIED != OBlock.RUNNING");
assertTrue( Block.UNOCCUPIED != OBlock.OUT_OF_SERVICE, "Block.UNOCCUPIED != OBlock.OUT_OF_SERVICE");
assertTrue( Block.UNOCCUPIED != OBlock.TRACK_ERROR, "Block.UNOCCUPIED != OBlock.TRACK_ERROR");
assertTrue( Block.UNDETECTED != OBlock.ALLOCATED, "Block.UNDETECTED != OBlock.ALLOCATED");
assertTrue( Block.UNDETECTED != OBlock.RUNNING, "Block.UNDETECTED != OBlock.RUNNING");
assertTrue( Block.UNDETECTED != OBlock.OUT_OF_SERVICE, "Block.UNDETECTED != OBlock.OUT_OF_SERVICE");
assertTrue( Block.UNDETECTED != OBlock.TRACK_ERROR, "Block.UNDETECTED != OBlock.TRACK_ERROR");
assertTrue( Block.UNDETECTED != OBlock.UNOCCUPIED, "Block.UNDETECTED != OBlock.UNOCCUPIED");
assertTrue( Block.UNKNOWN != OBlock.ALLOCATED, "Block.UNKNOWN != OBlock.ALLOCATED");
assertTrue( Block.UNKNOWN != OBlock.RUNNING, "Block.UNKNOWN != OBlock.RUNNING");
assertTrue( Block.UNKNOWN != OBlock.OUT_OF_SERVICE, "Block.UNKNOWN != OBlock.OUT_OF_SERVICE");
assertTrue( Block.UNKNOWN != OBlock.TRACK_ERROR, "Block.UNKNOWN != OBlock.TRACK_ERROR");
assertTrue( Block.UNKNOWN != OBlock.UNOCCUPIED, "Block.UNKNOWN != OBlock.UNOCCUPIED");
}
@Test
public void testSetSensor() throws JmriException {
OBlock b = blkMgr.createNewOBlock("OB100", "a");
assertNotNull(b);
assertFalse( b.setSensor("foo"), "setSensor");
JUnitAppender.assertErrorMessage("No sensor named 'foo' exists.");
assertNull( b.getSensor(), "getSensor");
SensorManager sensorMgr = InstanceManager.getDefault(SensorManager.class);
Sensor s1 = sensorMgr.newSensor("IS1", "sensor1");
assertTrue( b.setSensor("sensor1"), "setSensor");
assertEquals( s1, b.getSensor(), "getSensor");
assertEquals( OBlock.UNKNOWN, b.getState(), "state unknown");
assertTrue( b.setSensor("IS1"), "dup setSensor");
assertEquals( s1, b.getSensor(), "dup getSensor s1");
assertEquals( OBlock.UNKNOWN, b.getState(), "dup state unknown");
assertTrue( b.setSensor(" "), "setSensor none");
assertNull( b.getSensor(), "getSensor none");
assertEquals( OBlock.UNDETECTED, b.getState(), "none state dark");
assertTrue( b.isFree(), "Not Free");
b.setState(b.getState() | OBlock.ALLOCATED|OBlock.RUNNING);
assertFalse( b.isFree(), "Is Free");
s1.setState(Sensor.ACTIVE);
assertTrue( b.setSensor("sensor1"), "setSensor sensor1");
assertEquals( OBlock.OCCUPIED|OBlock.ALLOCATED|OBlock.RUNNING, b.getState(), "state allocated&running");
}
@Test
public void testSetErrorSensor() throws JmriException {
OBlock b = blkMgr.createNewOBlock("OB101", "b");
assertNotNull(b);
assertFalse( b.setErrorSensor("foo"), "setErrorSensor foo");
JUnitAppender.assertErrorMessage("No sensor named 'foo' exists.");
assertNull( b.getErrorSensor(), "getErrorSensor foo");
SensorManager sensorMgr = InstanceManager.getDefault(SensorManager.class);
Sensor se = sensorMgr.newSensor("ISE1", "error1");
se.setState(Sensor.ACTIVE);
assertTrue( b.setErrorSensor("error1"), "setErrorSensor only");
assertEquals( se, b.getErrorSensor(), "getErrorSensor only");
assertEquals( OBlock.TRACK_ERROR | OBlock.UNDETECTED, b.getState(), "state error only");
Sensor s1 = sensorMgr.newSensor("IS1", "sensor1");
s1.setState(Sensor.ACTIVE);
assertTrue( b.setSensor("IS1"), "setSensor");
assertEquals( se, b.getErrorSensor(), "getErrorSensor se");
assertEquals( OBlock.TRACK_ERROR | OBlock.OCCUPIED, b.getState(), "state error");
assertTrue( b.setErrorSensor(" "), "setErrorSensor");
assertNull( b.getErrorSensor(), "getErrorSensor none");
assertEquals( OBlock.OCCUPIED, b.getState(), "state dark");
}
@Test
public void testAllocate() {
Warrant w1 = new Warrant("IW1", null);
w1.setTrainName("T1");
Warrant w2 = new Warrant("IW2", null);
OBlock b = blkMgr.createNewOBlock("OB102", "c");
assertNotNull(b);
assertEquals( OBlock.UNDETECTED, b.getState(), "state is dark");
assertNull( b.allocate(w1), "Allocate w1");
assertEquals(
Bundle.getMessage("AllocatedToWarrant", w1.getDisplayName(), b.getDisplayName(), w1.getTrainName()),
b.allocate(w2), "Allocate w2");
assertEquals(
Bundle.getMessage("PathNotFound", "PathName", b.getDisplayName()),
b.setPath("PathName", w1), "path not found");
OPath path1 = new OPath(b, "path1");
b.addPath(path1);
assertNull( b.setPath("path1", w1), "path set");
assertFalse( b.isAllocatedTo(w2), "Allocated to w2");
assertTrue( b.isAllocatedTo(w1), "Allocated to w1");
assertTrue( b.deAllocate(w1), "DeAllocate null");
b.setOutOfService(true);
assertNull( b.allocate(w2), "Allocate w2");
b.setOutOfService(false);
assertTrue( b.deAllocate(w2), "deAllocate w2");
assertEquals(
Bundle.getMessage("PathNotSet", "path1", b.getDisplayName(), Bundle.getMessage("Warrant")),
b.setPath("path1", w1), "PathNotSet");
assertNull( b.allocate(w1), "Allocate w1");
assertEquals(
Bundle.getMessage("PathNotSet", "path1", b.getDisplayName(), w1.getDisplayName()),
b.setPath("path1", w2),"path not set");
}
@Test
public void testSensorChanges() throws JmriException {
OBlock b = blkMgr.createNewOBlock("OB103", null);
assertNotNull(b);
Warrant w0 = new Warrant("IW0", "war0");
b.setOutOfService(true);
assertEquals( OBlock.UNDETECTED|OBlock.OUT_OF_SERVICE, b.getState(),"state OutOfService & dark");
SensorManager sensorMgr = InstanceManager.getDefault(SensorManager.class);
Sensor s0 = sensorMgr.newSensor("IS0", "sensor0");
assertTrue( b.setSensor("sensor0"), "setSensor");
assertEquals( OBlock.UNKNOWN|OBlock.OUT_OF_SERVICE, b.getState(), "state unknown & dark");
b.setOutOfService(false);
assertNull( b.allocate(w0), "Allocate w0");
assertEquals( OBlock.ALLOCATED|OBlock.UNKNOWN, b.getState(), "state allocated & unknown");
s0.setState(Sensor.ACTIVE);
assertEquals( OBlock.ALLOCATED|OBlock.OCCUPIED, b.getState(), "state allocated & unknown");
assertTrue( b.deAllocate(w0), "DeAllocate w0");
b.setOutOfService(true);
s0.setState(Sensor.INACTIVE);
assertEquals( OBlock.OUT_OF_SERVICE|OBlock.UNOCCUPIED, b.getState(), "state allocated & unknown");
b.setError(false);
s0.setState(Sensor.INCONSISTENT);
assertEquals( OBlock.OUT_OF_SERVICE|OBlock.INCONSISTENT, b.getState(), "state OutOfService & inconsistent");
assertTrue( b.setSensor(null), "setSensor none");
assertEquals( OBlock.OUT_OF_SERVICE|OBlock.UNDETECTED, b.getState(), "state OutOfService & dark");
}
@Test
public void testAddPortal() {
OBlock b = blkMgr.createNewOBlock("OB0", "");
assertNotNull(b);
PortalManager portalMgr = InstanceManager.getDefault(PortalManager.class);
Portal p = portalMgr.providePortal("Doop");
b.addPortal(p);
assertEquals( 0, b.getPortals().size(), "No portals");
p.setFromBlock(b, true);
b.addPortal(p);
assertEquals( 1, b.getPortals().size(), "One portal");
p.setToBlock(b, true);
b.addPortal(p);
assertEquals( 1, b.getPortals().size(), "One portal only");
p = portalMgr.providePortal("barp");
b.addPortal(p);
p.setToBlock(b, false);
assertEquals( 2, b.getPortals().size(), "Two portals");
assertEquals( p, b.getPortalByName("barp"), "Same Portal");
p = b.getPortalByName("Doop");
assertNotNull(p, "Get Portal");
b.removePortal(p);
assertEquals( 1, b.getPortals().size(), "One portal");
JUnitAppender.assertWarnMessage("Portal \"Doop\" between OBlocks \"null\" and \"null\" not in block OB0");
JUnitAppender.assertWarnMessage("Portal \"barp\" between OBlocks \"null\"and \"null\" not in block OB0");
}
@Test
public void testAddPath() {
OBlock b = blkMgr.createNewOBlock("OB1", "");
assertNotNull(b);
OPath path1 = new OPath(b, "path1");
// also test the "add" method checks
PortalManager portalMgr = InstanceManager.getDefault(PortalManager.class);
path1.setToPortal(portalMgr.providePortal("foo"));
assertFalse( b.addPath(path1), "add path1 to block path1 not in foo");
portalMgr.providePortal("foo").addPath(path1);
assertFalse( b.addPath(path1), "add path1 to block b not in foo");
portalMgr.providePortal("foo").setFromBlock(b, false);
assertTrue( b.addPath(path1), "add path1 to block");
assertEquals( 1, b.getPaths().size(), "One path");
OBlock bb = blkMgr.createNewOBlock("OB2", "");
OPath path2 = new OPath(bb, "path2");
assertFalse( b.addPath(path2), "path2 not in block");
assertEquals( 1, b.getPaths().size(), "path2 not in block");
JUnitAppender.assertWarnMessage("Path \"path2\" already in block OB2, cannot be added to block OB1");
assertFalse( b.addPath(path1), "path1 already in block");
assertEquals( 1, b.getPaths().size(), "path1 already in block");
OPath path11 = new OPath(b, "path1");
assertFalse( b.addPath(path11), "path with name \"path1\" already in block");
assertEquals(1, b.getPaths().size(), "path with name \"path1\" already in block");
path2 = new OPath("path2", b, portalMgr.providePortal("bar"), null, null);
portalMgr.providePortal("bar").addPath(path2);
portalMgr.providePortal("bar").setToBlock(b, false);
assertTrue(b.addPath(path2), "path2 in block");
assertEquals( path1, b.getPathByName("path1"), "get \"path1\"");
b.removeOPath(path1);
b.removeOPath(path2);
assertEquals( 0, b.getPaths().size(), "no paths");
}
@Test
public void testAddUserName() {
OBlock b = blkMgr.provideOBlock("OB99");
assertNotNull( b, "Block OB99 is null");
b.setUserName("99user");
b = blkMgr.getBySystemName("OB99");
assertNotNull(b);
assertEquals( "99user", b.getUserName(), "UserName not kept");
}
@Test
public void testGetLocalStatusName() {
assertEquals( Bundle.getMessage("unoccupied"), OBlock.getLocalStatusName("unoccupied"));
assertEquals( Bundle.getMessage("occupied"), OBlock.getLocalStatusName("occupied"));
assertEquals( Bundle.getMessage("allocated"), OBlock.getLocalStatusName("allocated"));
assertEquals( Bundle.getMessage("running"), OBlock.getLocalStatusName("running"));
assertEquals( Bundle.getMessage("outOfService"), OBlock.getLocalStatusName("outOfService"));
assertEquals( Bundle.getMessage("dark"), OBlock.getLocalStatusName("dark"));
assertEquals( Bundle.getMessage("powerError"), OBlock.getLocalStatusName("powerError"));
}
@Test
public void testGetSystemStatusName() {
assertEquals("unoccupied", OBlock.getSystemStatusName(Bundle.getMessage("unoccupied")));
assertEquals("occupied", OBlock.getSystemStatusName(Bundle.getMessage("occupied")));
assertEquals("allocated", OBlock.getSystemStatusName(Bundle.getMessage("allocated")));
assertEquals("running", OBlock.getSystemStatusName(Bundle.getMessage("running")));
assertEquals("outOfService", OBlock.getSystemStatusName(Bundle.getMessage("outOfService")));
assertEquals("dark", OBlock.getSystemStatusName(Bundle.getMessage("dark")));
assertEquals("powerError", OBlock.getSystemStatusName(Bundle.getMessage("powerError")));
}
@Test
public void testStatusIs() {
OBlock oblock = new OBlock("OB99");
oblock.setState(OBlock.UNOCCUPIED);
assertTrue(oblock.statusIs("unoccupied"));
oblock.setState(OBlock.OCCUPIED);
assertTrue(oblock.statusIs("occupied"));
oblock.setState(OBlock.ALLOCATED);
assertTrue(oblock.statusIs("allocated"));
oblock.setState(OBlock.RUNNING);
assertTrue(oblock.statusIs("running"));
oblock.setState(OBlock.OUT_OF_SERVICE);
assertTrue(oblock.statusIs("outOfService"));
oblock.setState(OBlock.UNDETECTED);
assertTrue(oblock.statusIs("dark"));
oblock.setState(OBlock.TRACK_ERROR);
assertTrue(oblock.statusIs("powerError"));
}
@Test
public void testOBlockStatusEnum() {
assertEquals(OBlock.UNOCCUPIED, OBlock.OBlockStatus.Unoccupied.getStatus());
assertEquals("unoccupied", OBlock.OBlockStatus.Unoccupied.getName());
assertEquals(Bundle.getMessage("unoccupied"), OBlock.OBlockStatus.Unoccupied.getDescr());
assertEquals(OBlock.OCCUPIED, OBlock.OBlockStatus.Occupied.getStatus());
assertEquals("occupied", OBlock.OBlockStatus.Occupied.getName());
assertEquals(Bundle.getMessage("occupied"), OBlock.OBlockStatus.Occupied.getDescr());
assertEquals(OBlock.ALLOCATED, OBlock.OBlockStatus.Allocated.getStatus());
assertEquals("allocated", OBlock.OBlockStatus.Allocated.getName());
assertEquals(Bundle.getMessage("allocated"), OBlock.OBlockStatus.Allocated.getDescr());
assertEquals(OBlock.RUNNING, OBlock.OBlockStatus.Running.getStatus());
assertEquals("running", OBlock.OBlockStatus.Running.getName());
assertEquals(Bundle.getMessage("running"), OBlock.OBlockStatus.Running.getDescr());
assertEquals(OBlock.OUT_OF_SERVICE, OBlock.OBlockStatus.OutOfService.getStatus());
assertEquals("outOfService", OBlock.OBlockStatus.OutOfService.getName());
assertEquals(Bundle.getMessage("outOfService"), OBlock.OBlockStatus.OutOfService.getDescr());
assertEquals(OBlock.UNDETECTED, OBlock.OBlockStatus.Dark.getStatus());
assertEquals("dark", OBlock.OBlockStatus.Dark.getName());
assertEquals(Bundle.getMessage("dark"), OBlock.OBlockStatus.Dark.getDescr());
assertEquals(OBlock.TRACK_ERROR, OBlock.OBlockStatus.TrackError.getStatus());
assertEquals("powerError", OBlock.OBlockStatus.TrackError.getName());
assertEquals(Bundle.getMessage("powerError"), OBlock.OBlockStatus.TrackError.getDescr());
}
// from here down is testing infrastructure
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
blkMgr = new OBlockManager();
}
@AfterEach
public void tearDown() {
if (blkMgr != null ) {
blkMgr.dispose();
blkMgr = null;
}
JUnitUtil.tearDown();
}
}