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

182 lines
6.3 KiB
Java

package jmri.implementation;
import jmri.JmriException;
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* Tests for AbstractAnalogIO
*
* @author Daniel Bergqvist Copyright (c) 2018
*/
public class AbstractAnalogIOTest {
@Test
public void testCtor() {
MyAbstractAnalogIO stringIO = new MyAbstractAnalogIO();
assertNotNull( stringIO, "AbstractAnalogIO constructor return");
}
@Test
public void testSystemNames() {
MyAbstractAnalogIO myAnalogIO_1 = new MyAbstractAnalogIO("IV1");
MyAbstractAnalogIO myAnalogIO_2 = new MyAbstractAnalogIO("IV01");
assertEquals( "IV1", myAnalogIO_1.getSystemName(), "AnalogIO system name is correct");
assertEquals( "IV01", myAnalogIO_2.getSystemName(), "AnalogIO system name is correct");
}
@Test
public void testCompareTo() {
MyAbstractAnalogIO myAnalogIO_1 = new MyAbstractAnalogIO("IV1");
MyAbstractAnalogIO myAnalogIO_2 = new MyAbstractAnalogIO("IV01");
assertNotEquals( myAnalogIO_1, myAnalogIO_2, "AnalogIOs are different");
assertNotEquals( 0, myAnalogIO_1.compareTo(myAnalogIO_2), "AnalogIO compareTo returns not zero");
}
@Test
public void testCompareSystemNameSuffix() {
MyAbstractAnalogIO myAnalogIO_1 = new MyAbstractAnalogIO("IV1");
MyAbstractAnalogIO myAnalogIO_2 = new MyAbstractAnalogIO("IV01");
assertEquals( -1, myAnalogIO_1.compareSystemNameSuffix("01", "1", myAnalogIO_2),
"compareSystemNameSuffix returns correct value");
assertEquals( 0, myAnalogIO_1.compareSystemNameSuffix("1", "1", myAnalogIO_2),
"compareSystemNameSuffix returns correct value");
assertEquals( 0, myAnalogIO_1.compareSystemNameSuffix("01", "01", myAnalogIO_2),
"compareSystemNameSuffix returns correct value");
assertEquals( +1, myAnalogIO_1.compareSystemNameSuffix("1", "01", myAnalogIO_2),
"compareSystemNameSuffix returns correct value");
}
@Test
public void testAnalogIO() throws JmriException {
MyAbstractAnalogIO myAnalogIO = new MyAbstractAnalogIO();
myAnalogIO.setCommandedAnalogValue(33.21);
assertEquals( 33.21, myAnalogIO.getKnownAnalogValue(), 0.0,
"string is correct");
MyAbstractAnalogIO myAnalogIO2 = new MyAbstractAnalogIO(1, 2, false);
Exception exception = assertThrows(JmriException.class, () ->
myAnalogIO2.setCommandedAnalogValue(5) );
assertEquals("value out of bounds", exception.getMessage());
MyAbstractAnalogIO myAnalogIO3 = new MyAbstractAnalogIO(1, 2, false);
exception = assertThrows(JmriException.class, () ->
myAnalogIO3.setCommandedAnalogValue(0.2) );
assertEquals("value out of bounds", exception.getMessage());
myAnalogIO = new MyAbstractAnalogIO(2.0, 43, false);
myAnalogIO.setCommandedAnalogValue(2.0);
assertEquals( 2.0, myAnalogIO.getKnownAnalogValue(), 0,
"string is correct and has valid length");
myAnalogIO = new MyAbstractAnalogIO(10.0, 20.0, true);
myAnalogIO.setCommandedAnalogValue(3.0);
assertEquals( 10.0, myAnalogIO.getKnownAnalogValue(), 0.0,
"out of bounds value is cut");
myAnalogIO = new MyAbstractAnalogIO(10.0, 20.0, true);
myAnalogIO.setCommandedAnalogValue(30.0);
assertEquals( 20.0, myAnalogIO.getKnownAnalogValue(), 0,
"out of bounds value is cut");
assertEquals( "IVMySystemName", myAnalogIO.toString(), "toAnalog() matches");
assertTrue( "Analog I/O".equals(myAnalogIO.getBeanType()), "getBeanType() matches");
}
@Test
public void testState() throws JmriException {
MyAbstractAnalogIO myAnalogIO = new MyAbstractAnalogIO(1.0, 20.0, true);
myAnalogIO.setState(3.3);
myAnalogIO.setCommandedAnalogValue(3.3);
//System.err.format("Value: %1.2f%n", myAnalogIO.getCommandedAnalogValue());
//System.err.format("Value: %1.2f%n", myAnalogIO.getKnownAnalogValue());
assertEquals( 3.3, myAnalogIO.getKnownAnalogValue(), 0.0, "value is correct");
myAnalogIO = new MyAbstractAnalogIO(1.0, 20.0, true);
myAnalogIO.setCommandedAnalogValue(3.3);
assertEquals( 3.3, myAnalogIO.getState(0.0), 0.0, "value is correct");
}
@BeforeEach
public void setUp() {
jmri.util.JUnitUtil.setUp();
}
@AfterEach
public void tearDown() {
jmri.util.JUnitUtil.tearDown();
}
private static class MyAbstractAnalogIO extends AbstractAnalogIO {
private double _min = 0;
private double _max = 100;
private boolean _cutOutOfBoundsValues = false;
MyAbstractAnalogIO() {
super("IVMySystemName", true);
}
MyAbstractAnalogIO(String sysName) {
super(sysName, true);
}
MyAbstractAnalogIO(double min, double max, boolean cutOutOfBoundsValues) {
super("IVMySystemName", true);
_min = min;
_max = max;
_cutOutOfBoundsValues = cutOutOfBoundsValues;
}
@Override
protected void sendValueToLayout(double value) throws JmriException {
this.setValue(value);
}
@Override
public void setState(int s) throws JmriException {
throw new UnsupportedOperationException("Not supported.");
}
@Override
public int getState() {
throw new UnsupportedOperationException("Not supported.");
}
@Override
public double getMin() {
return _min;
}
@Override
public double getMax() {
return _max;
}
@Override
protected boolean cutOutOfBoundsValues() {
return _cutOutOfBoundsValues;
}
@Override
public double getResolution() {
return 1.0;
}
@Override
public AbsoluteOrRelative getAbsoluteOrRelative() {
return AbsoluteOrRelative.ABSOLUTE;
}
}
}