195 lines
8.4 KiB
Java
195 lines
8.4 KiB
Java
package jmri.implementation;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
|
|
import java.util.Calendar;
|
|
import java.util.GregorianCalendar;
|
|
|
|
import jmri.*;
|
|
import jmri.configurexml.JmriConfigureXmlException;
|
|
import jmri.util.JUnitUtil;
|
|
import jmri.util.ThreadingUtil;
|
|
|
|
import org.junit.jupiter.api.*;
|
|
|
|
/**
|
|
* Tests Logix in detail by loading a set of
|
|
* configurations from a file (to simplify setup),
|
|
* then changing inputs and checking
|
|
* outputs.
|
|
* <p>
|
|
* Because the load is slow, it's done once
|
|
* for this entire test class.
|
|
*
|
|
* @author Bob Jacobsen Copyright (C) 2018
|
|
*/
|
|
public class ActiveLogixTest {
|
|
|
|
private void setSensor(Sensor s, int state) {
|
|
try {
|
|
s.setState(state);
|
|
} catch (JmriException e) {
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void testTurnoutDrivesSensor() {
|
|
Turnout turnout = InstanceManager.getDefault(TurnoutManager.class).getTurnout("IT101");
|
|
assertNotNull(turnout);
|
|
Sensor sensor = InstanceManager.getDefault(SensorManager.class).getSensor("IS101");
|
|
assertNotNull(sensor);
|
|
|
|
ThreadingUtil.runOnLayout(()->{turnout.setCommandedState(Turnout.THROWN);});
|
|
JUnitUtil.waitFor(()->{return sensor.getState()==Sensor.ACTIVE;},"sensor ACTIVE");
|
|
|
|
ThreadingUtil.runOnLayout(()->{turnout.setCommandedState(Turnout.CLOSED);});
|
|
JUnitUtil.waitFor(()->{return sensor.getState()==Sensor.INACTIVE;},"sensor INACTIVE");
|
|
|
|
ThreadingUtil.runOnLayout(()->{turnout.setCommandedState(Turnout.THROWN);});
|
|
JUnitUtil.waitFor(()->{return sensor.getState()==Sensor.ACTIVE;},"sensor ACTIVE");
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testSensorLogicDrivesTurnout() {
|
|
Turnout turnout = InstanceManager.getDefault(TurnoutManager.class).getTurnout("IT201");
|
|
assertNotNull(turnout);
|
|
Sensor sensor1 = InstanceManager.getDefault(SensorManager.class).getSensor("IS201");
|
|
assertNotNull(sensor1);
|
|
Sensor sensor2 = InstanceManager.getDefault(SensorManager.class).getSensor("IS202");
|
|
assertNotNull(sensor2);
|
|
Sensor sensor3 = InstanceManager.getDefault(SensorManager.class).getSensor("IS203");
|
|
assertNotNull(sensor3);
|
|
Sensor sensor4 = InstanceManager.getDefault(SensorManager.class).getSensor("IS204");
|
|
assertNotNull(sensor4);
|
|
Sensor sensor5 = InstanceManager.getDefault(SensorManager.class).getSensor("IS205");
|
|
assertNotNull(sensor5);
|
|
Sensor sensor6 = InstanceManager.getDefault(SensorManager.class).getSensor("IS206");
|
|
assertNotNull(sensor6);
|
|
|
|
// start all inactive
|
|
ThreadingUtil.runOnLayout(()->{setSensor(sensor1, Sensor.INACTIVE);});
|
|
ThreadingUtil.runOnLayout(()->{setSensor(sensor2, Sensor.INACTIVE);});
|
|
ThreadingUtil.runOnLayout(()->{setSensor(sensor3, Sensor.INACTIVE);});
|
|
ThreadingUtil.runOnLayout(()->{setSensor(sensor4, Sensor.INACTIVE);});
|
|
ThreadingUtil.runOnLayout(()->{setSensor(sensor5, Sensor.INACTIVE);});
|
|
ThreadingUtil.runOnLayout(()->{setSensor(sensor6, Sensor.INACTIVE);});
|
|
|
|
JUnitUtil.waitFor(()->{return turnout.getCommandedState()==Turnout.CLOSED;},"turnout CLOSED");
|
|
|
|
ThreadingUtil.runOnLayout(()->{setSensor(sensor1, Sensor.ACTIVE);});
|
|
ThreadingUtil.runOnLayout(()->{setSensor(sensor2, Sensor.ACTIVE);});
|
|
JUnitUtil.waitFor(()->{return turnout.getCommandedState()==Turnout.THROWN;},"turnout THROWN");
|
|
|
|
ThreadingUtil.runOnLayout(()->{setSensor(sensor2, Sensor.INACTIVE);});
|
|
JUnitUtil.waitFor(()->{return turnout.getCommandedState()==Turnout.CLOSED;},"turnout CLOSED");
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testCheckFastClock() throws TimebaseRateException {
|
|
Turnout turnout1 = InstanceManager.getDefault(TurnoutManager.class).getTurnout("IT301");
|
|
assertNotNull(turnout1);
|
|
Turnout turnout2 = InstanceManager.getDefault(TurnoutManager.class).getTurnout("IT302");
|
|
assertNotNull(turnout2);
|
|
Sensor sensor = InstanceManager.getDefault(SensorManager.class).getSensor("IS301");
|
|
assertNotNull(sensor);
|
|
Timebase timebase = InstanceManager.getDefault(Timebase.class);
|
|
assertNotNull(timebase);
|
|
timebase.setRun(false);
|
|
Calendar cal = new GregorianCalendar();
|
|
cal.set(2018, 1, 12, 2, 00, 00); // 02:00:00
|
|
timebase.setTime(cal.getTime());
|
|
|
|
// turnout change sets time
|
|
ThreadingUtil.runOnLayout(()->{turnout1.setCommandedState(Turnout.THROWN);});
|
|
ThreadingUtil.runOnLayout(()->{turnout2.setCommandedState(Turnout.CLOSED);});
|
|
|
|
cal.set(2018, 1, 12, 4, 01, 00); // 04:01:00
|
|
JUnitUtil.waitFor(()->{return timebase.getTime().equals(cal.getTime());},"date 04:01:00");
|
|
JUnitUtil.waitFor(()->{return sensor.getState()==Sensor.ACTIVE;},"sensor ACTIVE");
|
|
|
|
// turnout change sets time
|
|
ThreadingUtil.runOnLayout(()->{turnout1.setCommandedState(Turnout.CLOSED);});
|
|
ThreadingUtil.runOnLayout(()->{turnout2.setCommandedState(Turnout.THROWN);});
|
|
|
|
cal.set(2018, 1, 12, 14, 02, 00); // 14:02:00
|
|
JUnitUtil.waitFor(()->{return sensor.getState()==Sensor.INACTIVE;},"sensor INACTIVE");
|
|
JUnitUtil.waitFor(()->{return timebase.getTime().equals(cal.getTime());},"date 14:02:00");
|
|
}
|
|
|
|
@Test
|
|
public void testMemoryAccess() {
|
|
Memory memory1 = InstanceManager.getDefault(MemoryManager.class).getMemory("IM401");
|
|
assertNotNull(memory1);
|
|
Memory memory2 = InstanceManager.getDefault(MemoryManager.class).getMemory("IM402");
|
|
assertNotNull(memory2);
|
|
Memory memory3 = InstanceManager.getDefault(MemoryManager.class).getMemory("IM403");
|
|
assertNotNull(memory3);
|
|
Memory memory4 = InstanceManager.getDefault(MemoryManager.class).getMemory("IM404");
|
|
assertNotNull(memory4);
|
|
|
|
// test the IM401 to IM402 conditional
|
|
ThreadingUtil.runOnLayout(()->{memory2.setValue("bbb");});
|
|
ThreadingUtil.runOnLayout(()->{memory1.setValue("aaa");});
|
|
JUnitUtil.waitFor(()->{return memory2.getValue().equals("aaa");},"Value aaa after aaa");
|
|
|
|
ThreadingUtil.runOnLayout(()->{memory2.setValue("bbb");});
|
|
ThreadingUtil.runOnLayout(()->{memory1.setValue("aatta");});
|
|
JUnitUtil.waitFor(()->{return memory2.getValue().equals("bbb");},"Value bbb after aatta");
|
|
|
|
ThreadingUtil.runOnLayout(()->{memory2.setValue("bbb");});
|
|
ThreadingUtil.runOnLayout(()->{memory1.setValue("aAa");});
|
|
JUnitUtil.waitFor(()->{return memory2.getValue().equals("aAa");},"Value aAa after aAa");
|
|
|
|
// test the IM401 to IM402 conditional
|
|
ThreadingUtil.runOnLayout(()->{memory4.setValue("No");});
|
|
ThreadingUtil.runOnLayout(()->{memory2.setValue("100");});
|
|
|
|
ThreadingUtil.runOnLayout(()->{memory3.setValue("200");});
|
|
JUnitUtil.waitFor(()->{return memory4.getValue().equals("No");},"No after 200");
|
|
|
|
ThreadingUtil.runOnLayout(()->{memory3.setValue("50");});
|
|
JUnitUtil.waitFor(()->{return memory4.getValue().equals("OK");},"OK after 50");
|
|
}
|
|
|
|
@Test
|
|
public void testLightDrivesLight() {
|
|
Light light1 = InstanceManager.getDefault(LightManager.class).getLight("IL501");
|
|
assertNotNull(light1);
|
|
Light light2 = InstanceManager.getDefault(LightManager.class).getLight("IL502");
|
|
assertNotNull(light2);
|
|
|
|
ThreadingUtil.runOnLayout(()->{light1.setState(Light.ON);});
|
|
JUnitUtil.waitFor(()->{return light2.getState()==Light.OFF;},"light Off");
|
|
|
|
ThreadingUtil.runOnLayout(()->{light1.setState(Light.OFF);});
|
|
JUnitUtil.waitFor(()->{return light2.getState()==Light.ON;},"light On");
|
|
|
|
ThreadingUtil.runOnLayout(()->{light1.setState(Light.ON);});
|
|
JUnitUtil.waitFor(()->{return light2.getState()==Light.OFF;},"light Off");
|
|
|
|
}
|
|
|
|
@BeforeAll
|
|
public static void setUp() throws JmriConfigureXmlException {
|
|
JUnitUtil.setUp();
|
|
JUnitUtil.resetInstanceManager();
|
|
JUnitUtil.initInternalTurnoutManager();
|
|
JUnitUtil.initInternalSensorManager();
|
|
|
|
// load and activate sample file
|
|
java.io.File f = new java.io.File("java/test/jmri/implementation/configurexml/load/ActiveLogixTestDefinitions.xml");
|
|
jmri.configurexml.ConfigXmlManager cm = new jmri.configurexml.ConfigXmlManager() {};
|
|
Assertions.assertTrue(cm.load(f));
|
|
InstanceManager.getDefault(jmri.LogixManager.class).activateAllLogixs();
|
|
}
|
|
|
|
@AfterAll
|
|
public static void tearDown() {
|
|
JUnitUtil.deregisterBlockManagerShutdownTask();
|
|
JUnitUtil.tearDown();
|
|
}
|
|
|
|
}
|