Files
JIMRI/java/test/jmri/jmrit/logix/LogixActionTest.java
T
2026-06-17 14:00:51 +02:00

180 lines
10 KiB
Java

package jmri.jmrit.logix;
import jmri.InstanceManager;
import jmri.JmriException;
import jmri.Memory;
import jmri.Sensor;
import jmri.SignalHead;
import jmri.Turnout;
import jmri.util.JUnitUtil;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for the OPath class
*
* @author Pete Cressman Copyright 2014
*/
public class LogixActionTest {
@Test
@DisabledIfSystemProperty(named ="jmri.skipTestsRequiringSeparateRunning", matches ="true")
public void testLogixAction() throws JmriException {
jmri.configurexml.ConfigXmlManager cm = new jmri.configurexml.ConfigXmlManager() {
};
// load and display sample file. Panel file does not display screen
java.io.File f = new java.io.File("java/test/jmri/jmrit/logix/valid/LogixActionTest.xml");
Assertions.assertTrue(cm.load(f));
InstanceManager.getDefault(jmri.LogixManager.class).activateAllLogixs();
Memory im6 = InstanceManager.memoryManagerInstance().getMemory("IM6");
assertThat(im6).withFailMessage("Memory IM6").isNotNull();
assertThat(im6.getValue()).withFailMessage("Contents IM6").isEqualTo("EastToWestOnSiding");
// Find Enable Logix button <<< Use GUI, but need Container to find button in
// JUnitUtil.pressButton(container, "Enable/Disable Tests");
// OK, do it this way
Sensor sensor = InstanceManager.sensorManagerInstance().getSensor("enableButton");
assertThat(sensor).withFailMessage("Sensor IS5").isNotNull();
sensor.setState(Sensor.ACTIVE);
sensor.setState(Sensor.INACTIVE);
sensor.setState(Sensor.ACTIVE);
SignalHead sh1 = InstanceManager.getDefault(jmri.SignalHeadManager.class).getSignalHead("IH1");
assertThat(sh1).withFailMessage("shi null").isNotNull();
assertThat(sh1.getAppearance()).withFailMessage("SignalHead IH1").isEqualTo(SignalHead.RED);
// do some buttons -Sensors
sensor = InstanceManager.sensorManagerInstance().getSensor("ISLITERAL");
assertThat(sensor).withFailMessage("sensor null").isNotNull();
sensor.setState(Sensor.ACTIVE); // activate direct logix action
Sensor is1 = InstanceManager.sensorManagerInstance().getSensor("sensor1");
assertThat(is1).withFailMessage("is1 null").isNotNull();
assertThat(is1.getState()).withFailMessage("direct set Sensor IS1 active").isEqualTo(Sensor.ACTIVE); // action
sensor = InstanceManager.sensorManagerInstance().getSensor("ISINDIRECT");
assertThat(sensor).withFailMessage("sensor null").isNotNull();
sensor.setState(Sensor.ACTIVE); // activate Indirect logix action
assertThat(is1.getState()).withFailMessage("Indirect set Sensor IS1 inactive").isEqualTo(Sensor.INACTIVE); // action
// SignalHead buttons
Sensor is4 = InstanceManager.sensorManagerInstance().getSensor("IS4");
assertThat(is4).withFailMessage("is4 null").isNotNull();
is4.setState(Sensor.ACTIVE); // activate direct logix action
assertThat(sh1.getAppearance()).withFailMessage("direct set SignalHead IH1 to Green").isEqualTo(SignalHead.GREEN);
is4.setState(Sensor.INACTIVE); // activate direct logix action
assertThat(sh1.getAppearance()).withFailMessage("direct set SignalHead IH1 to Red").isEqualTo(SignalHead.RED);
Memory im3 = InstanceManager.memoryManagerInstance().getMemory("IM3");
assertThat(im3).withFailMessage("Memory IM3").isNotNull();
assertThat(im3.getValue()).withFailMessage("Contents IM3").isEqualTo("IH1");
Sensor is3 = InstanceManager.sensorManagerInstance().getSensor("IS3");
assertThat(is3).withFailMessage("is3 null").isNotNull();
is3.setState(Sensor.ACTIVE); // activate indirect logix action
assertThat(sh1.getAppearance()).withFailMessage("Indirect set SignalHead IH1 to Green").isEqualTo(SignalHead.GREEN);
is3.setState(Sensor.INACTIVE); // activate indirect logix action
assertThat(sh1.getAppearance()).withFailMessage("Indirect set SignalHead IH1 to Red").isEqualTo(SignalHead.RED);
// change memory value
im3.setValue("IH2");
is3.setState(Sensor.ACTIVE); // activate logix action
assertThat(im3.getValue()).withFailMessage("Contents IM3").isEqualTo("IH2");
SignalHead sh2 = InstanceManager.getDefault(jmri.SignalHeadManager.class).getSignalHead("IH2");
assertThat(sh2).withFailMessage("sh2 null").isNotNull();
assertThat(sh2.getAppearance()).withFailMessage("Indirect SignalHead IH2").isEqualTo(SignalHead.GREEN);
// Turnout Buttons
Sensor is6 = InstanceManager.sensorManagerInstance().getSensor("IS6");
assertThat(is6).withFailMessage("is6 null").isNotNull();
is6.setState(Sensor.ACTIVE); // activate direct logix action
Turnout it2 = InstanceManager.turnoutManagerInstance().getTurnout("IT2");
assertThat(it2).withFailMessage("it2 null").isNotNull();
assertThat(it2.getState()).withFailMessage("direct set Turnout IT2 to Closed").isEqualTo(Turnout.CLOSED);
Memory im4 = InstanceManager.memoryManagerInstance().getMemory("IM4");
assertThat(im4).withFailMessage("im4 null").isNotNull();
assertThat(im4.getValue()).withFailMessage("Contents IM4").isEqualTo("IT3");
Sensor is7 = InstanceManager.sensorManagerInstance().getSensor("IS7");
assertThat(is7).withFailMessage("is7 null").isNotNull();
is7.setState(Sensor.INACTIVE); // activate indirect logix action
Turnout it3 = InstanceManager.turnoutManagerInstance().getTurnout("IT3");
assertThat(it3).withFailMessage("it3 null").isNotNull();
assertThat(it3.getState()).withFailMessage("Indirect set Turnout IT2 to Thrown").isEqualTo(Turnout.THROWN);
is7.setState(Sensor.ACTIVE); // activate indirect logix action
assertThat(it3.getState()).withFailMessage("Indirect set Turnout IT2 to Closed").isEqualTo(Turnout.CLOSED);
// change memory value
im4.setValue("IT2");
assertThat(im4.getValue()).withFailMessage("Contents IM4").isEqualTo("IT2");
is7.setState(Sensor.INACTIVE); // activate indirect logix action
assertThat(it2.getState()).withFailMessage("Indirect set Turnout IT2 to Thrown").isEqualTo(Turnout.THROWN);
is7.setState(Sensor.ACTIVE); // activate indirect logix action
assertThat(it2.getState()).withFailMessage("Indirect set Turnout IT2 to Closed").isEqualTo(Turnout.CLOSED);
// OBlock Buttons
OBlock ob1 = InstanceManager.getDefault(OBlockManager.class).getOBlock("Left");
assertThat(ob1.getState()).withFailMessage("OBlock OB1").isEqualTo((OBlock.OUT_OF_SERVICE | Sensor.INACTIVE));
OBlock ob2 = InstanceManager.getDefault(OBlockManager.class).getOBlock("Right");
assertThat(ob2.getState()).withFailMessage("OBlock OB2").isEqualTo((OBlock.TRACK_ERROR | Sensor.INACTIVE));
Sensor is8 = InstanceManager.sensorManagerInstance().getSensor("IS8");
assertThat(is8).withFailMessage("is8 null").isNotNull();
is8.setState(Sensor.ACTIVE); // direct action
assertThat(ob1.getState()).withFailMessage("Direct set OBlock OB1 to normal").isEqualTo(Sensor.INACTIVE);
is8.setState(Sensor.INACTIVE); // direct action
assertThat(ob1.getState()).withFailMessage("Direct set OBlock OB1 to OOS").isEqualTo((OBlock.OUT_OF_SERVICE | Sensor.INACTIVE));
Sensor is9 = InstanceManager.sensorManagerInstance().getSensor("IS9");
assertThat(is9).withFailMessage("is9 null").isNotNull();
is9.setState(Sensor.ACTIVE); // indirect action
assertThat(ob2.getState()).withFailMessage("Indirect set OBlock OB2 to normal").isEqualTo(Sensor.INACTIVE);
// change memory value
Memory im5 = InstanceManager.memoryManagerInstance().getMemory("IM5");
assertThat(im5).withFailMessage("im5 null").isNotNull();
im5.setValue("OB1");
is9.setState(Sensor.INACTIVE); // indirect action
assertThat(ob1.getState()).withFailMessage("Indirect set OBlock OB1 to normal").isEqualTo((OBlock.TRACK_ERROR | OBlock.OUT_OF_SERVICE | Sensor.INACTIVE));
is9.setState(Sensor.ACTIVE); // indirect action
is8.setState(Sensor.ACTIVE); // indirect action
assertThat(ob1.getState()).withFailMessage("Direct set OBlock OB1 to normal").isEqualTo(Sensor.INACTIVE);
// Warrant buttons
Sensor is14 = InstanceManager.sensorManagerInstance().getSensor("IS14");
assertThat(is14).withFailMessage("is14 null").isNotNull();
is14.setState(Sensor.ACTIVE); // indirect action
Warrant w = InstanceManager.getDefault(WarrantManager.class).getWarrant("EastToWestOnSiding");
assertThat(w.isAllocated()).withFailMessage("warrant EastToWestOnSiding allocated").isTrue();
Sensor is15 = InstanceManager.sensorManagerInstance().getSensor("IS15");
assertThat(is15).withFailMessage("is15 null").isNotNull();
is15.setState(Sensor.ACTIVE); // indirect action
Assertions.assertFalse( w.isAllocated(), "warrant EastToWestOnSiding deallocated");
// change memory value
im6.setValue("WestToEastOnMain");
is14.setState(Sensor.INACTIVE); // toggle
is14.setState(Sensor.ACTIVE); // indirect action
Warrant w2 = InstanceManager.getDefault(WarrantManager.class).getWarrant("WestToEastOnMain");
assertThat(w2.isAllocated()).withFailMessage("warrant WestToEastOnMain allocated").isTrue();
im6.setValue("LeftToRightOnPath");
is14.setState(Sensor.INACTIVE); // toggle
is14.setState(Sensor.ACTIVE); // indirect action
w = InstanceManager.getDefault(WarrantManager.class).getWarrant("LeftToRightOnPath");
assertThat(w.isAllocated()).withFailMessage("warrant LeftToRightOnPath allocated").isTrue();
}
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
JUnitUtil.resetProfileManager();
JUnitUtil.initConfigureManager();
JUnitUtil.initLogixManager();
JUnitUtil.initConditionalManager();
WarrantPreferences.getDefault().setShutdown(WarrantPreferences.Shutdown.NO_MERGE);
JUnitUtil.initWarrantManager();
}
@AfterEach
public void tearDown() {
InstanceManager.getDefault(WarrantManager.class).dispose();
JUnitUtil.deregisterBlockManagerShutdownTask();
JUnitUtil.tearDown();
}
}