Files
JIMRI/java/test/jmri/managers/DefaultVariableLightManagerTest.java
2026-06-17 14:00:51 +02:00

214 lines
8.2 KiB
Java

package jmri.managers;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import jmri.*;
import jmri.implementation.AbstractVariableLight;
import jmri.util.JUnitUtil;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/**
* Test the DefaultVariableLightManager.
*
* @author Daniel Bergqvist Copyright (C) 2020
*/
public class DefaultVariableLightManagerTest {
private VariableLight newVariableLight(String sysName, String userName) {
return new MyVariableLight(sysName, userName);
}
@Test
public void testDispose() {
VariableLightManager l = InstanceManager.getDefault(VariableLightManager.class);
l.dispose(); // all we're really doing here is making sure the method exists
}
@Test
public void testRegister() {
// create
VariableLight t = newVariableLight("L11", "mine");
VariableLightManager l = InstanceManager.getDefault(VariableLightManager.class);
UnsupportedOperationException ex = assertThrows(UnsupportedOperationException.class, () -> l.register(t));
assertNotNull(ex);
ex = assertThrows(UnsupportedOperationException.class, () -> l.deregister(t));
assertNotNull(ex);
}
@Test
public void testLights() {
// Test that the VariableLightManager registers variable lights but not
// lights that are not variable.
// When this light is created, the VariableLightManager isn't created yet.
Light light = new MyLight("IL1");
InstanceManager.getDefault(LightManager.class).register(light);
VariableLight variableLight = InstanceManager.getDefault(VariableLightManager.class).getBySystemName("IL1");
assertNull( variableLight, "light does not exists in VariableLightManager");
// Check that we can deregister light without problem
InstanceManager.getDefault(LightManager.class).deregister(light);
variableLight = InstanceManager.getDefault(VariableLightManager.class).getBySystemName("IL1");
assertNull( variableLight, "light does not exists in VariableLightManager");
// When this light is created, the VariableLightManager is created.
Light light2 = new MyLight("IL2");
InstanceManager.getDefault(LightManager.class).register(light2);
variableLight = InstanceManager.getDefault(VariableLightManager.class).getBySystemName("IL2");
assertNull( variableLight, "light does not exists in VariableLightManager");
// Check that we can deregister light without problem
InstanceManager.getDefault(LightManager.class).deregister(light);
variableLight = InstanceManager.getDefault(VariableLightManager.class).getBySystemName("IL2");
assertNull( variableLight, "light does not exists in VariableLightManager");
}
@Test
public void testVariableLights() {
// Test that the VariableLightManager registers variable lights.
// When this light is created, the VariableLightManager isn't created yet.
Light variableLight = new MyVariableLight("IL101", "MyLight");
InstanceManager.getDefault(LightManager.class).register(variableLight);
variableLight = InstanceManager.getDefault(VariableLightManager.class).getBySystemName("IL101");
assertNotNull( variableLight, "variable light exists in VariableLightManager");
// Check that we can deregister light and that it get deregstered from VariableLightManager as well
InstanceManager.getDefault(LightManager.class).deregister(variableLight);
variableLight = InstanceManager.getDefault(VariableLightManager.class).getBySystemName("IL101");
assertNull( variableLight, "light does not exists in VariableLightManager");
// When this light is created, the VariableLightManager is created.
Light variableLight2 = new MyVariableLight("IL201", "MyLight");
InstanceManager.getDefault(LightManager.class).register(variableLight2);
variableLight = InstanceManager.getDefault(VariableLightManager.class).getBySystemName("IL201");
assertNotNull( variableLight, "variable light exists in VariableLightManager");
// Check that we can deregister light and that it get deregstered from VariableLightManager as well
InstanceManager.getDefault(LightManager.class).deregister(variableLight2);
variableLight = InstanceManager.getDefault(VariableLightManager.class).getBySystemName("IL2901");
assertNull( variableLight, "light does not exists in VariableLightManager");
}
@Test
public void testVariableLights_UserName() {
// Test that the VariableLightManager registers variable lights but not
// lights that are not variable.
Light light = new MyLight("IL1");
InstanceManager.getDefault(LightManager.class).register(light);
VariableLight variableLight = InstanceManager.getDefault(VariableLightManager.class).getByUserName("A light");
assertNull( variableLight, "light does not exists in VariableLightManager");
// Check that we can deregister light without problem
InstanceManager.getDefault(LightManager.class).deregister(light);
variableLight = InstanceManager.getDefault(VariableLightManager.class).getByUserName("A light");
assertNull( variableLight, "light does not exists in VariableLightManager");
Light variableLight2 = new MyVariableLight("IL2", "A variable light 2 DVLMT");
InstanceManager.getDefault(LightManager.class).register(variableLight2);
variableLight = InstanceManager.getDefault(VariableLightManager.class).getByUserName("A variable light 2 DVLMT");
assertNotNull( variableLight, "variableLight exists in VariableLightManager");
// Check that we can deregister variableLight and that it get deregstered from VariableLightManager as well
InstanceManager.getDefault(LightManager.class).deregister(variableLight2);
variableLight = InstanceManager.getDefault(VariableLightManager.class).getByUserName("A variable light 2 DVLMT");
assertNull( variableLight, "variableLight does not exists in VariableLightManager");
}
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
JUnitUtil.initInternalLightManager();
}
@AfterEach
public void tearDown() {
// kill timebase created by variable light
var timebase = InstanceManager.getNullableDefault(jmri.Timebase.class);
if (timebase != null) {
timebase.setRun(false);
for (var listener : timebase.getMinuteChangeListeners()) {
timebase.removeMinuteChangeListener(listener);
}
}
JUnitUtil.tearDown();
}
private static class MyLight extends jmri.implementation.AbstractLight {
private MyLight(String systemName) {
super(systemName);
}
}
private static class MyVariableLight extends AbstractVariableLight {
double _value = 0.0;
private MyVariableLight(String sys, String userName) {
super(sys, userName);
}
@Override
public void setCommandedAnalogValue(double value) throws JmriException {
_value = value;
}
@Override
public double getCommandedAnalogValue() {
return _value;
}
@Override
public double getMin() {
return Float.MIN_VALUE;
}
@Override
public double getMax() {
return Float.MAX_VALUE;
}
@Override
public double getResolution() {
return 0.1;
}
@Override
public int getNumberOfSteps() {
return 10;
}
@Override
public AbsoluteOrRelative getAbsoluteOrRelative() {
return AbsoluteOrRelative.ABSOLUTE;
}
@Override
protected void sendIntensity(double intensity) {
// Do nothing
}
@Override
protected void sendOnOffCommand(int newState) {
// Do nothing
}
}
// private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ProxyVariableLightManagerTest.class);
}