Files
JIMRI/java/test/jmri/jmrit/logixng/util/parser/functions/NamedBeanFunctionsTest.java
T
2026-06-17 14:00:51 +02:00

322 lines
13 KiB
Java

package jmri.jmrit.logixng.util.parser.functions;
import static org.junit.jupiter.api.Assertions.assertEquals;
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 java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import jmri.*;
import jmri.jmrit.logixng.*;
import jmri.jmrit.logixng.implementation.*;
import jmri.jmrit.logixng.util.LogixNG_Thread;
import jmri.jmrit.logixng.util.parser.*;
import jmri.util.JUnitUtil;
import org.junit.jupiter.api.*;
/**
* Test LayoutFunctions
*
* @author Daniel Bergqvist 2021
*/
public class NamedBeanFunctionsTest {
private final ExpressionNode exprLogixNGTableIQT1 = new ExpressionNodeString(new Token(TokenType.NONE, "IQT1", 0));
private final ExpressionNode exprLogixNGTableMyTable = new ExpressionNodeString(new Token(TokenType.NONE, "My table", 0));
private final ExpressionNode exprMemoryIM1 = new ExpressionNodeString(new Token(TokenType.NONE, "IM1", 0));
private final ExpressionNode exprMyMemory1 = new ExpressionNodeString(new Token(TokenType.NONE, "My memory 1", 0));
private final ExpressionNode exprRed = new ExpressionNodeString(new Token(TokenType.NONE, "Red", 0));
private final ExpressionNode exprGreen = new ExpressionNodeString(new Token(TokenType.NONE, "Green", 0));
private final ExpressionNode exprReferenceIM1 = new ExpressionNodeString(new Token(TokenType.NONE, "{IM1}", 0));
private List<ExpressionNode> getParameterList(ExpressionNode... exprNodes) {
List<ExpressionNode> list = new ArrayList<>();
Collections.addAll(list, exprNodes);
return list;
}
@Test
public void testGetLogixNGTableFunction() throws JmriException {
Function getLogixNGTableFunction = InstanceManager.getDefault(FunctionManager.class).get("getLogixNGTable");
assertEquals( "getLogixNGTable", getLogixNGTableFunction.getName(), "strings matches");
assertNotNull( getLogixNGTableFunction.getDescription(), "Function has description");
SymbolTable symbolTable = new DefaultSymbolTable(new DefaultConditionalNG("IQC1", null));
NamedTable table = new DefaultInternalNamedTable("IQT1", "My table", 2, 3);
InstanceManager.getDefault(NamedTableManager.class).register(table);
Object myTable = getLogixNGTableFunction.calculate(symbolTable, getParameterList(exprLogixNGTableIQT1));
assertNotNull(myTable);
assertEquals("jmri.jmrit.logixng.implementation.DefaultInternalNamedTable", myTable.getClass().getName());
assertEquals("IQT1", ((NamedBean)myTable).getSystemName());
assertEquals("My table", ((NamedBean)myTable).getUserName());
myTable = getLogixNGTableFunction.calculate(symbolTable, getParameterList(exprLogixNGTableMyTable));
assertNotNull(myTable);
assertEquals("jmri.jmrit.logixng.implementation.DefaultInternalNamedTable", myTable.getClass().getName());
assertEquals("IQT1", ((NamedBean)myTable).getSystemName());
assertEquals("My table", ((NamedBean)myTable).getUserName());
}
@Test
public void testGetSetMemoryFunction() throws JmriException {
Function readMemoryFunction = InstanceManager.getDefault(FunctionManager.class).get("readMemory");
assertEquals( "readMemory", readMemoryFunction.getName(), "strings matches");
assertNotNull( readMemoryFunction.getDescription(), "Function has description");
Function writeMemoryFunction = InstanceManager.getDefault(FunctionManager.class).get("writeMemory");
assertEquals( "writeMemory", writeMemoryFunction.getName(), "strings matches");
assertNotNull( writeMemoryFunction.getDescription(), "Function has description");
SymbolTable symbolTable = new DefaultSymbolTable(new DefaultConditionalNG("IQC1", null));
WrongNumberOfParametersException e = assertThrows( WrongNumberOfParametersException.class, () ->
readMemoryFunction.calculate(symbolTable, getParameterList()),
"exception is thrown");
assertNotNull(e);
assertNull( readMemoryFunction.calculate(symbolTable, getParameterList(exprMemoryIM1)),
"Memory has correct value");
assertNull( readMemoryFunction.calculate(symbolTable, getParameterList(exprMyMemory1)),
"Memory has correct value");
MyMemory memory = new MyMemory();
InstanceManager.getDefault(MemoryManager.class).register(memory);
memory._lastValue = null;
memory._value = "Green";
assertEquals( "Green",
readMemoryFunction.calculate(symbolTable, getParameterList(exprMemoryIM1)),
"Memory has correct value");
assertNull( memory._lastValue, "Memory is not set");
memory._value = "Green";
assertEquals( "Green",
readMemoryFunction.calculate(symbolTable, getParameterList(exprMyMemory1)),
"Memory has correct value");
assertNull( memory._lastValue, "Memory is not set");
memory._value = "Red";
assertEquals( "Red",
readMemoryFunction.calculate(symbolTable, getParameterList(exprMemoryIM1)),
"Memory has correct value");
assertNull( memory._lastValue, "Memory is not set");
memory._value = "Red";
assertEquals( "Red",
readMemoryFunction.calculate(symbolTable, getParameterList(exprMyMemory1)),
"Memory has correct value");
assertNull( memory._lastValue, "Memory is not set");
memory._lastValue = null;
memory._value = null;
assertEquals( "Green",
writeMemoryFunction.calculate(symbolTable,
getParameterList(exprMemoryIM1, exprGreen)),
"Memory has correct value");
assertEquals( "Green", memory._lastValue, "Memory is set");
memory._lastValue = null;
memory._value = null;
assertEquals( "Green",
writeMemoryFunction.calculate(symbolTable,
getParameterList(exprMyMemory1, exprGreen)),
"Memory has correct value");
assertEquals( "Green", memory._lastValue, "Memory is set");
memory._lastValue = null;
memory._value = null;
assertEquals( "Red",
writeMemoryFunction.calculate(symbolTable,
getParameterList(exprMemoryIM1, exprRed)),
"Memory has correct value");
assertEquals( "Red", memory._lastValue, "Memory is set");
memory._lastValue = null;
memory._value = null;
assertEquals( "Red",
writeMemoryFunction.calculate(symbolTable,
getParameterList(exprMyMemory1, exprRed)),
"Memory has correct value");
assertEquals( "Red", memory._lastValue, "Memory is set");
}
@Test
public void testEvaluateMemoryFunction() throws JmriException {
Function evaluateMemoryFunction = InstanceManager.getDefault(FunctionManager.class).get("evaluateMemory");
assertEquals( "evaluateMemory", evaluateMemoryFunction.getName(), "strings matches");
assertNotNull( evaluateMemoryFunction.getDescription(), "Function has description");
SymbolTable symbolTable = new DefaultSymbolTable(new DefaultConditionalNG("IQC1", null));
WrongNumberOfParametersException e = assertThrows( WrongNumberOfParametersException.class, () ->
evaluateMemoryFunction.calculate(symbolTable, getParameterList()),
"exception is thrown");
assertNotNull(e);
assertNull( evaluateMemoryFunction.calculate(symbolTable, getParameterList(exprMemoryIM1)),
"Memory has correct value");
assertNull(
evaluateMemoryFunction.calculate(symbolTable, getParameterList(exprMyMemory1)),
"Memory has correct value");
MyMemory memory = new MyMemory();
InstanceManager.getDefault(MemoryManager.class).register(memory);
MyMemory otherMemory = new MyMemory("IM2", "My other memory");
otherMemory._value = "Other memory value";
InstanceManager.getDefault(MemoryManager.class).register(otherMemory);
memory._lastValue = null;
memory._value = "Green";
assertEquals( "Green",
evaluateMemoryFunction.calculate(symbolTable, getParameterList(exprMemoryIM1)),
"Memory has correct value");
assertNull( memory._lastValue, "Memory is not set");
memory._value = "Green";
assertEquals( "Green",
evaluateMemoryFunction.calculate(symbolTable, getParameterList(exprMyMemory1)),
"Memory has correct value");
assertNull( memory._lastValue, "Memory is not set");
memory._value = "Red";
assertEquals( "Red",
evaluateMemoryFunction.calculate(symbolTable, getParameterList(exprMemoryIM1)),
"Memory has correct value");
assertNull( memory._lastValue, "Memory is not set");
memory._value = "Red";
assertEquals( "Red",
evaluateMemoryFunction.calculate(symbolTable, getParameterList(exprMyMemory1)),
"Memory has correct value");
assertNull( memory._lastValue, "Memory is not set");
memory._value = "{IM2}";
assertEquals( "Other memory value",
evaluateMemoryFunction.calculate(symbolTable, getParameterList(exprMyMemory1)),
"Memory has correct value");
assertNull( memory._lastValue, "Memory is not set");
memory._value = "{My other memory}";
assertEquals( "Other memory value",
evaluateMemoryFunction.calculate(symbolTable, getParameterList(exprMyMemory1)),
"Memory has correct value");
assertNull( memory._lastValue, "Memory is not set");
}
@Test
public void testEvaluateReferenceFunction() throws JmriException {
Function evaluateReferenceFunction = InstanceManager.getDefault(FunctionManager.class).get("evaluateReference");
assertEquals( "evaluateReference", evaluateReferenceFunction.getName(), "strings matches");
assertNotNull( evaluateReferenceFunction.getDescription(), "Function has description");
SymbolTable symbolTable = new DefaultSymbolTable(new DefaultConditionalNG("IQC1", null));
WrongNumberOfParametersException e = assertThrows( WrongNumberOfParametersException.class, () ->
evaluateReferenceFunction.calculate(symbolTable, getParameterList()),
"exception is thrown");
assertNotNull(e);
MyMemory memory = new MyMemory();
InstanceManager.getDefault(MemoryManager.class).register(memory);
memory._value = "Some value";
MyMemory otherMemory = new MyMemory("IM2", "My other memory");
otherMemory._value = "Other memory value";
InstanceManager.getDefault(MemoryManager.class).register(otherMemory);
assertEquals( "Some value",
evaluateReferenceFunction.calculate(symbolTable, getParameterList(exprReferenceIM1)),
"Reference has correct value");
memory._lastValue = null;
memory._value = "Green";
assertEquals( "Green",
evaluateReferenceFunction.calculate(symbolTable, getParameterList(exprReferenceIM1)),
"Reference has correct value");
assertNull( memory._lastValue, "Memory is not set");
memory._value = "Green";
assertEquals( "Green",
evaluateReferenceFunction.calculate(symbolTable, getParameterList(exprReferenceIM1)),
"Reference has correct value");
assertNull( memory._lastValue, "Memory is not set");
memory._value = "Red";
assertEquals( "Red",
evaluateReferenceFunction.calculate(symbolTable, getParameterList(exprReferenceIM1)),
"Reference has correct value");
assertNull( memory._lastValue, "Memory is not set");
memory._value = "Red";
assertEquals( "Red",
evaluateReferenceFunction.calculate(symbolTable, getParameterList(exprReferenceIM1)),
"Reference has correct value");
assertNull( memory._lastValue, "Memory is not set");
}
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
}
@AfterEach
public void tearDown() {
LogixNG_Thread.stopAllLogixNGThreads();
JUnitUtil.deregisterBlockManagerShutdownTask();
JUnitUtil.tearDown();
}
private static class MyMemory extends jmri.implementation.AbstractMemory {
Object _lastValue = null;
Object _value = null;
MyMemory() {
super("IM1", "My memory 1");
}
MyMemory(String sys, String user) {
super(sys, user);
}
/** {@inheritDoc} */
@Override
public Object getValue() {
return _value;
}
@Override
public void setValue(Object value) {
_lastValue = value;
_value = null;
}
@Override
public int getState() {
return 0;
}
@Override
public void setState(int s) throws JmriException {
// Do nothing
}
}
}