Files
JIMRI/java/test/jmri/jmrit/logixng/implementation/DefaultLogixNGManagerTest.java
T
2026-06-17 14:00:51 +02:00

657 lines
38 KiB
Java

package jmri.jmrit.logixng.implementation;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
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.beans.PropertyVetoException;
import jmri.InstanceManager;
import jmri.Manager;
import jmri.jmrit.logixng.*;
import jmri.jmrit.logixng.actions.*;
import jmri.jmrit.logixng.expressions.*;
import jmri.util.JUnitUtil;
import org.junit.jupiter.api.*;
/**
* Test DefaultLogixNG
*
* @author Daniel Bergqvist 2018
*/
public class DefaultLogixNGManagerTest {
@Test
public void testManager() {
LogixNG_Manager manager = InstanceManager.getDefault(LogixNG_Manager.class);
assertEquals( Manager.LOGIXNGS, manager.getXMLOrder(), "getXMLOrder() is correct");
assertEquals( Bundle.getMessage("BeanNameLogixNG"), manager.getBeanTypeHandled(), "getBeanTypeHandled() is correct");
assertEquals( "I", manager.getSystemPrefix(), "getSystemPrefix() is correct");
assertEquals( 'Q', manager.typeLetter(), "typeLetter() is correct");
assertEquals( Bundle.getMessage("BeanNameLogixNG"), manager.getBeanTypeHandled(false), "bean type is correct");
assertEquals( Bundle.getMessage("BeanNameLogixNGs"), manager.getBeanTypeHandled(true), "bean type is correct");
}
@Test
public void testValidSystemNameFormat() {
LogixNG_Manager manager = InstanceManager.getDefault(LogixNG_Manager.class);
assertEquals( Manager.NameValidity.INVALID, manager.validSystemNameFormat(""), "validSystemNameFormat()");
assertEquals( Manager.NameValidity.INVALID, manager.validSystemNameFormat("IQ"), "validSystemNameFormat()");
assertEquals( Manager.NameValidity.VALID, manager.validSystemNameFormat("IQ1"), "validSystemNameFormat()");
assertEquals( Manager.NameValidity.INVALID, manager.validSystemNameFormat("iQ1"), "validSystemNameFormat()");
assertEquals( Manager.NameValidity.INVALID, manager.validSystemNameFormat("Iq1"), "validSystemNameFormat()");
assertEquals( Manager.NameValidity.INVALID, manager.validSystemNameFormat("iq1"), "validSystemNameFormat()");
assertEquals( Manager.NameValidity.VALID, manager.validSystemNameFormat("IQ:AUTO:1"), "validSystemNameFormat()");
assertEquals( Manager.NameValidity.INVALID, manager.validSystemNameFormat("IQ1A"), "validSystemNameFormat()");
assertEquals( Manager.NameValidity.INVALID, manager.validSystemNameFormat("IQA"), "validSystemNameFormat()");
assertEquals( Manager.NameValidity.INVALID, manager.validSystemNameFormat("IQ1 "), "validSystemNameFormat()");
assertEquals( Manager.NameValidity.VALID, manager.validSystemNameFormat("IQ11111"), "validSystemNameFormat()");
assertEquals( Manager.NameValidity.INVALID, manager.validSystemNameFormat("IQ1AA"), "validSystemNameFormat()");
assertEquals( Manager.NameValidity.INVALID, manager.validSystemNameFormat("IQ1X"), "validSystemNameFormat()");
assertEquals( Manager.NameValidity.INVALID, manager.validSystemNameFormat("IQX1"), "validSystemNameFormat()");
assertEquals( Manager.NameValidity.INVALID, manager.validSystemNameFormat("IQX1X"), "validSystemNameFormat()");
}
@Test
public void testCreateNewLogixNG() {
LogixNG_Manager manager = InstanceManager.getDefault(LogixNG_Manager.class);
// Correct system name
LogixNG logixNG = manager.createLogixNG("IQ1", "Some name");
assertNotNull( logixNG, "exists");
LogixNG logixNG_2 = manager.getLogixNG("IQ1");
assertEquals( logixNG, logixNG_2, "logixNGs are the same");
logixNG_2 = manager.getBySystemName("IQ1");
assertEquals( logixNG, logixNG_2, "logixNGs are the same");
logixNG_2 = manager.getLogixNG("Some name");
assertEquals( logixNG, logixNG_2, "logixNGs are the same");
logixNG_2 = manager.getByUserName("Some name");
assertEquals( logixNG, logixNG_2, "logixNGs are the same");
logixNG_2 = manager.getLogixNG("Some other name");
assertNull( logixNG_2, "logixNG not found");
// Correct system name. Neither system name or user name exists already
logixNG = manager.createLogixNG("IQ2", "Other LogixNG");
assertNotNull( logixNG, "exists");
// System name exists
logixNG = manager.createLogixNG("IQ1", "Another name");
assertNull( logixNG, "cannot create new");
// User name exists
logixNG = manager.createLogixNG("IQ3", "Other LogixNG");
assertNull( logixNG, "cannot create new");
// Bad system name
IllegalArgumentException ex = assertThrows( IllegalArgumentException.class,
() -> manager.createLogixNG("IQ4A", "Different name"),
"Expected exception thrown");
assertNotNull(ex);
// Create LogixNG with user name
logixNG = manager.createLogixNG("Only user name");
assertNotNull( logixNG, "exists");
assertEquals( "Only user name", logixNG.getUserName(), "user name is correct");
}
public void setupInitialConditionalNGTree(ConditionalNG conditionalNG) {
assertDoesNotThrow( () -> {
DigitalActionManager digitalActionManager =
InstanceManager.getDefault(DigitalActionManager.class);
FemaleSocket femaleSocket = conditionalNG.getFemaleSocket();
MaleDigitalActionSocket actionManySocket =
InstanceManager.getDefault(DigitalActionManager.class)
.registerAction(new DigitalMany(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionManySocket);
// femaleSocket.setLock(Base.Lock.HARD_LOCK);
femaleSocket = actionManySocket.getChild(0);
MaleDigitalActionSocket actionIfThenSocket =
InstanceManager.getDefault(DigitalActionManager.class)
.registerAction(new IfThenElse(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionIfThenSocket);
});
}
@Test
public void testSetupInitialConditionalNGTree() {
// Correct system name
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class)
.createLogixNG("IQ1", "Some name");
assertNotNull( logixNG, "exists");
ConditionalNG conditionalNG = InstanceManager.getDefault(ConditionalNG_Manager.class)
.createConditionalNG(logixNG, "A conditionalNG"); // NOI18N
assertNotNull( conditionalNG, "exists");
setupInitialConditionalNGTree(conditionalNG);
FemaleSocket child = conditionalNG.getChild(0);
assertEquals( "jmri.jmrit.logixng.implementation.DefaultFemaleDigitalActionSocket",
child.getClass().getName(), "action is of correct class");
MaleSocket maleSocket = child.getConnectedSocket();
assertEquals( "jmri.jmrit.logixng.tools.debugger.DebuggerMaleDigitalActionSocket",
maleSocket.getClass().getName(), "action is of correct class");
assertEquals( "Many",
maleSocket.getLongDescription());
MaleSocket maleSocket2 = maleSocket.getChild(0).getConnectedSocket();
assertEquals( "jmri.jmrit.logixng.tools.debugger.DebuggerMaleDigitalActionSocket",
maleSocket2.getClass().getName(), "action is of correct class");
assertEquals( "If Then Else. Execute on change",
maleSocket2.getLongDescription(), "action is of correct class");
}
@Test
public void testDeleteLogixNG() throws SocketAlreadyConnectedException, PropertyVetoException {
LogixNG_Manager logixNG_Manager = InstanceManager.getDefault(LogixNG_Manager.class);
ConditionalNG_Manager conditionalNG_Manager = InstanceManager.getDefault(ConditionalNG_Manager.class);
AnalogActionManager analogActionManager = InstanceManager.getDefault(AnalogActionManager.class);
AnalogExpressionManager analogExpressionManager = InstanceManager.getDefault(AnalogExpressionManager.class);
DigitalActionManager digitalActionManager = InstanceManager.getDefault(DigitalActionManager.class);
DigitalBooleanActionManager digitalBooleanActionManager = InstanceManager.getDefault(DigitalBooleanActionManager.class);
DigitalExpressionManager digitalExpressionManager = InstanceManager.getDefault(DigitalExpressionManager.class);
StringActionManager stringActionManager = InstanceManager.getDefault(StringActionManager.class);
StringExpressionManager stringExpressionManager = InstanceManager.getDefault(StringExpressionManager.class);
LogixNG logixNG = logixNG_Manager.createLogixNG("IQ1", "Some name");
assertNotNull( logixNG, "exists");
ConditionalNG conditionalNG = conditionalNG_Manager
.createConditionalNG(logixNG, "A conditionalNG"); // NOI18N
assertNotNull( conditionalNG, "exists");
FemaleSocket femaleSocket = conditionalNG.getFemaleSocket();
MaleDigitalActionSocket actionManySocket = digitalActionManager
.registerAction(new DigitalMany(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionManySocket);
femaleSocket = actionManySocket.getChild(0);
MaleDigitalActionSocket actionIfThenSocket = digitalActionManager
.registerAction(new IfThenElse(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionIfThenSocket);
femaleSocket = actionIfThenSocket.getChild(0);
MaleDigitalExpressionSocket expressionOrSocket =
InstanceManager.getDefault(DigitalExpressionManager.class)
.registerExpression(new Or(digitalExpressionManager.getAutoSystemName(), null));
femaleSocket.connect(expressionOrSocket);
femaleSocket = actionManySocket.getChild(1);
MaleDigitalActionSocket actionDoAnalogActionSocket = digitalActionManager
.registerAction(new DoAnalogAction(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionDoAnalogActionSocket);
femaleSocket = actionDoAnalogActionSocket.getChild(0);
MaleAnalogExpressionSocket expressionAnalogExpressionConstantSocket =
analogExpressionManager
.registerExpression(new AnalogExpressionConstant(analogExpressionManager.getAutoSystemName(), null));
femaleSocket.connect(expressionAnalogExpressionConstantSocket);
femaleSocket = actionDoAnalogActionSocket.getChild(1);
MaleAnalogActionSocket actionAnalogManySocket =
InstanceManager.getDefault(AnalogActionManager.class)
.registerAction(new AnalogMany(analogActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionAnalogManySocket);
femaleSocket = actionManySocket.getChild(2);
MaleDigitalActionSocket actionDoStringActionSocket =
InstanceManager.getDefault(DigitalActionManager.class)
.registerAction(new DoStringAction(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionDoStringActionSocket);
femaleSocket = actionDoStringActionSocket.getChild(0);
MaleStringExpressionSocket expressionStringExpressionConstantSocket =
stringExpressionManager
.registerExpression(new StringExpressionConstant(stringExpressionManager.getAutoSystemName(), null));
femaleSocket.connect(expressionStringExpressionConstantSocket);
femaleSocket = actionDoStringActionSocket.getChild(1);
MaleStringActionSocket actionStringManySocket = stringActionManager
.registerAction(new StringMany(stringActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionStringManySocket);
femaleSocket = actionManySocket.getChild(3);
MaleDigitalActionSocket logix = digitalActionManager
.registerAction(new Logix(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(logix);
femaleSocket = logix.getChild(1);
MaleDigitalBooleanActionSocket onChange = digitalBooleanActionManager
.registerAction(new DigitalBooleanLogixAction(
digitalBooleanActionManager.getAutoSystemName(),
null,
DigitalBooleanLogixAction.When.Either));
femaleSocket.connect(onChange);
LastResultOfDigitalExpression lastResultOfDigitalExpression =
new LastResultOfDigitalExpression(
digitalExpressionManager.getAutoSystemName(), null);
lastResultOfDigitalExpression.getSelectNamedBean().setNamedBean(expressionOrSocket);
assertNotNull(logixNG_Manager.getBySystemName(logixNG.getSystemName()));
assertNotNull(conditionalNG_Manager.getBySystemName(conditionalNG.getSystemName()));
assertNotNull(analogActionManager.getBySystemName(actionAnalogManySocket.getSystemName()));
assertNotNull(analogExpressionManager.getBySystemName(expressionAnalogExpressionConstantSocket.getSystemName()));
assertNotNull(digitalActionManager.getBySystemName(actionManySocket.getSystemName()));
assertNotNull(digitalExpressionManager.getBySystemName(expressionOrSocket.getSystemName()));
assertNotNull(stringActionManager.getBySystemName(actionStringManySocket.getSystemName()));
assertNotNull(stringExpressionManager.getBySystemName(expressionStringExpressionConstantSocket.getSystemName()));
assertNotNull(digitalBooleanActionManager.getBySystemName(onChange.getSystemName()));
PropertyVetoException e = assertThrows( PropertyVetoException.class,
() -> logixNG_Manager.deleteBean(logixNG, "CanDelete"));
assertEquals("DoNotDelete", e.getPropertyChangeEvent().getPropertyName());
assertEquals("In use by IQDE:AUTO:0002 - Last result of digital expression", e.getMessage());
lastResultOfDigitalExpression.getSelectNamedBean().removeNamedBean();
assertDoesNotThrow( () -> logixNG_Manager.deleteBean(logixNG, "CanDelete"));
logixNG_Manager.deleteBean(logixNG, "DoDelete");
assertNull(logixNG_Manager.getBySystemName(logixNG.getSystemName()));
assertNull(conditionalNG_Manager.getBySystemName(conditionalNG.getSystemName()));
assertNull(analogActionManager.getBySystemName(actionAnalogManySocket.getSystemName()));
assertNull(analogExpressionManager.getBySystemName(expressionAnalogExpressionConstantSocket.getSystemName()));
assertNull(digitalActionManager.getBySystemName(actionManySocket.getSystemName()));
assertNull(digitalExpressionManager.getBySystemName(expressionOrSocket.getSystemName()));
assertNull(stringActionManager.getBySystemName(actionStringManySocket.getSystemName()));
assertNull(stringExpressionManager.getBySystemName(expressionStringExpressionConstantSocket.getSystemName()));
assertNull(digitalBooleanActionManager.getBySystemName(onChange.getSystemName()));
}
@Test
public void testDeleteConditionalNG() throws SocketAlreadyConnectedException, PropertyVetoException {
LogixNG_Manager logixNG_Manager = InstanceManager.getDefault(LogixNG_Manager.class);
ConditionalNG_Manager conditionalNG_Manager = InstanceManager.getDefault(ConditionalNG_Manager.class);
AnalogActionManager analogActionManager = InstanceManager.getDefault(AnalogActionManager.class);
AnalogExpressionManager analogExpressionManager = InstanceManager.getDefault(AnalogExpressionManager.class);
DigitalActionManager digitalActionManager = InstanceManager.getDefault(DigitalActionManager.class);
DigitalBooleanActionManager digitalBooleanActionManager = InstanceManager.getDefault(DigitalBooleanActionManager.class);
DigitalExpressionManager digitalExpressionManager = InstanceManager.getDefault(DigitalExpressionManager.class);
StringActionManager stringActionManager = InstanceManager.getDefault(StringActionManager.class);
StringExpressionManager stringExpressionManager = InstanceManager.getDefault(StringExpressionManager.class);
LogixNG logixNG = logixNG_Manager.createLogixNG("IQ1", "Some name");
assertNotNull( logixNG, "exists");
ConditionalNG conditionalNG = conditionalNG_Manager
.createConditionalNG(logixNG, "A conditionalNG"); // NOI18N
assertNotNull( conditionalNG, "exists");
FemaleSocket femaleSocket = conditionalNG.getFemaleSocket();
MaleDigitalActionSocket actionManySocket = digitalActionManager
.registerAction(new DigitalMany(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionManySocket);
femaleSocket = actionManySocket.getChild(0);
MaleDigitalActionSocket actionIfThenSocket = digitalActionManager
.registerAction(new IfThenElse(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionIfThenSocket);
femaleSocket = actionIfThenSocket.getChild(0);
MaleDigitalExpressionSocket expressionOrSocket =
InstanceManager.getDefault(DigitalExpressionManager.class)
.registerExpression(new Or(digitalExpressionManager.getAutoSystemName(), null));
femaleSocket.connect(expressionOrSocket);
femaleSocket = actionManySocket.getChild(1);
MaleDigitalActionSocket actionDoAnalogActionSocket = digitalActionManager
.registerAction(new DoAnalogAction(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionDoAnalogActionSocket);
femaleSocket = actionDoAnalogActionSocket.getChild(0);
MaleAnalogExpressionSocket expressionAnalogExpressionConstantSocket =
analogExpressionManager
.registerExpression(new AnalogExpressionConstant(analogExpressionManager.getAutoSystemName(), null));
femaleSocket.connect(expressionAnalogExpressionConstantSocket);
femaleSocket = actionDoAnalogActionSocket.getChild(1);
MaleAnalogActionSocket actionAnalogManySocket =
InstanceManager.getDefault(AnalogActionManager.class)
.registerAction(new AnalogMany(analogActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionAnalogManySocket);
femaleSocket = actionManySocket.getChild(2);
MaleDigitalActionSocket actionDoStringActionSocket =
InstanceManager.getDefault(DigitalActionManager.class)
.registerAction(new DoStringAction(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionDoStringActionSocket);
femaleSocket = actionDoStringActionSocket.getChild(0);
MaleStringExpressionSocket expressionStringExpressionConstantSocket =
stringExpressionManager
.registerExpression(new StringExpressionConstant(stringExpressionManager.getAutoSystemName(), null));
femaleSocket.connect(expressionStringExpressionConstantSocket);
femaleSocket = actionDoStringActionSocket.getChild(1);
MaleStringActionSocket actionStringManySocket = stringActionManager
.registerAction(new StringMany(stringActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionStringManySocket);
femaleSocket = actionManySocket.getChild(3);
MaleDigitalActionSocket logix = digitalActionManager
.registerAction(new Logix(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(logix);
femaleSocket = logix.getChild(1);
MaleDigitalBooleanActionSocket onChange = digitalBooleanActionManager
.registerAction(new DigitalBooleanLogixAction(
digitalBooleanActionManager.getAutoSystemName(),
null,
DigitalBooleanLogixAction.When.Either));
femaleSocket.connect(onChange);
LastResultOfDigitalExpression lastResultOfDigitalExpression =
new LastResultOfDigitalExpression(
digitalExpressionManager.getAutoSystemName(), null);
lastResultOfDigitalExpression.getSelectNamedBean().setNamedBean(expressionOrSocket);
assertNotNull(logixNG_Manager.getBySystemName(logixNG.getSystemName()));
assertNotNull(conditionalNG_Manager.getBySystemName(conditionalNG.getSystemName()));
assertNotNull(analogActionManager.getBySystemName(actionAnalogManySocket.getSystemName()));
assertNotNull(analogExpressionManager.getBySystemName(expressionAnalogExpressionConstantSocket.getSystemName()));
assertNotNull(digitalActionManager.getBySystemName(actionManySocket.getSystemName()));
assertNotNull(digitalExpressionManager.getBySystemName(expressionOrSocket.getSystemName()));
assertNotNull(stringActionManager.getBySystemName(actionStringManySocket.getSystemName()));
assertNotNull(stringExpressionManager.getBySystemName(expressionStringExpressionConstantSocket.getSystemName()));
assertNotNull(digitalBooleanActionManager.getBySystemName(onChange.getSystemName()));
PropertyVetoException e = assertThrows( PropertyVetoException.class,
() -> conditionalNG_Manager.deleteBean(conditionalNG, "CanDelete"));
assertEquals("DoNotDelete", e.getPropertyChangeEvent().getPropertyName());
assertEquals("In use by IQDE:AUTO:0002 - Last result of digital expression", e.getMessage());
lastResultOfDigitalExpression.getSelectNamedBean().removeNamedBean();
assertDoesNotThrow( () -> conditionalNG_Manager.deleteBean(conditionalNG, "CanDelete"));
conditionalNG_Manager.deleteBean(conditionalNG, "DoDelete");
assertNotNull(logixNG_Manager.getBySystemName(logixNG.getSystemName()));
assertNull(conditionalNG_Manager.getBySystemName(conditionalNG.getSystemName()));
assertNull(analogActionManager.getBySystemName(actionAnalogManySocket.getSystemName()));
assertNull(analogExpressionManager.getBySystemName(expressionAnalogExpressionConstantSocket.getSystemName()));
assertNull(digitalActionManager.getBySystemName(actionManySocket.getSystemName()));
assertNull(digitalExpressionManager.getBySystemName(expressionOrSocket.getSystemName()));
assertNull(stringActionManager.getBySystemName(actionStringManySocket.getSystemName()));
assertNull(stringExpressionManager.getBySystemName(expressionStringExpressionConstantSocket.getSystemName()));
assertNull(digitalBooleanActionManager.getBySystemName(onChange.getSystemName()));
}
@Test
public void testDeleteModule() throws SocketAlreadyConnectedException, PropertyVetoException {
FemaleSocketManager femaleSocketManager = InstanceManager.getDefault(FemaleSocketManager.class);
ModuleManager moduleManager = InstanceManager.getDefault(ModuleManager.class);
AnalogActionManager analogActionManager = InstanceManager.getDefault(AnalogActionManager.class);
AnalogExpressionManager analogExpressionManager = InstanceManager.getDefault(AnalogExpressionManager.class);
DigitalActionManager digitalActionManager = InstanceManager.getDefault(DigitalActionManager.class);
DigitalBooleanActionManager digitalBooleanActionManager = InstanceManager.getDefault(DigitalBooleanActionManager.class);
DigitalExpressionManager digitalExpressionManager = InstanceManager.getDefault(DigitalExpressionManager.class);
StringActionManager stringActionManager = InstanceManager.getDefault(StringActionManager.class);
StringExpressionManager stringExpressionManager = InstanceManager.getDefault(StringExpressionManager.class);
jmri.jmrit.logixng.Module module = moduleManager
.createModule("A module", femaleSocketManager.getSocketTypeByType("DefaultFemaleDigitalActionSocket")); // NOI18N
assertNotNull( module, "exists");
FemaleSocket femaleSocket = module.getRootSocket();
MaleDigitalActionSocket actionManySocket = digitalActionManager
.registerAction(new DigitalMany(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionManySocket);
femaleSocket = actionManySocket.getChild(0);
MaleDigitalActionSocket actionIfThenSocket = digitalActionManager
.registerAction(new IfThenElse(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionIfThenSocket);
femaleSocket = actionIfThenSocket.getChild(0);
MaleDigitalExpressionSocket expressionOrSocket =
InstanceManager.getDefault(DigitalExpressionManager.class)
.registerExpression(new Or(digitalExpressionManager.getAutoSystemName(), null));
femaleSocket.connect(expressionOrSocket);
femaleSocket = actionManySocket.getChild(1);
MaleDigitalActionSocket actionDoAnalogActionSocket = digitalActionManager
.registerAction(new DoAnalogAction(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionDoAnalogActionSocket);
femaleSocket = actionDoAnalogActionSocket.getChild(0);
MaleAnalogExpressionSocket expressionAnalogExpressionConstantSocket =
analogExpressionManager
.registerExpression(new AnalogExpressionConstant(analogExpressionManager.getAutoSystemName(), null));
femaleSocket.connect(expressionAnalogExpressionConstantSocket);
femaleSocket = actionDoAnalogActionSocket.getChild(1);
MaleAnalogActionSocket actionAnalogManySocket =
InstanceManager.getDefault(AnalogActionManager.class)
.registerAction(new AnalogMany(analogActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionAnalogManySocket);
femaleSocket = actionManySocket.getChild(2);
MaleDigitalActionSocket actionDoStringActionSocket =
InstanceManager.getDefault(DigitalActionManager.class)
.registerAction(new DoStringAction(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionDoStringActionSocket);
femaleSocket = actionDoStringActionSocket.getChild(0);
MaleStringExpressionSocket expressionStringExpressionConstantSocket =
stringExpressionManager
.registerExpression(new StringExpressionConstant(stringExpressionManager.getAutoSystemName(), null));
femaleSocket.connect(expressionStringExpressionConstantSocket);
femaleSocket = actionDoStringActionSocket.getChild(1);
MaleStringActionSocket actionStringManySocket = stringActionManager
.registerAction(new StringMany(stringActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionStringManySocket);
femaleSocket = actionManySocket.getChild(3);
MaleDigitalActionSocket logix = digitalActionManager
.registerAction(new Logix(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(logix);
femaleSocket = logix.getChild(1);
MaleDigitalBooleanActionSocket onChange = digitalBooleanActionManager
.registerAction(new DigitalBooleanLogixAction(
digitalBooleanActionManager.getAutoSystemName(),
null,
DigitalBooleanLogixAction.When.Either));
femaleSocket.connect(onChange);
LastResultOfDigitalExpression lastResultOfDigitalExpression =
new LastResultOfDigitalExpression(
digitalExpressionManager.getAutoSystemName(), null);
lastResultOfDigitalExpression.getSelectNamedBean().setNamedBean(expressionOrSocket);
assertNotNull(moduleManager.getBySystemName(module.getSystemName()));
assertNotNull(analogActionManager.getBySystemName(actionAnalogManySocket.getSystemName()));
assertNotNull(analogExpressionManager.getBySystemName(expressionAnalogExpressionConstantSocket.getSystemName()));
assertNotNull(digitalActionManager.getBySystemName(actionManySocket.getSystemName()));
assertNotNull(digitalExpressionManager.getBySystemName(expressionOrSocket.getSystemName()));
assertNotNull(stringActionManager.getBySystemName(actionStringManySocket.getSystemName()));
assertNotNull(stringExpressionManager.getBySystemName(expressionStringExpressionConstantSocket.getSystemName()));
assertNotNull(digitalBooleanActionManager.getBySystemName(onChange.getSystemName()));
PropertyVetoException e = assertThrows( PropertyVetoException.class,
() -> moduleManager.deleteBean(module, "CanDelete"));
assertEquals("DoNotDelete", e.getPropertyChangeEvent().getPropertyName());
assertEquals("In use by IQDE:AUTO:0002 - Last result of digital expression", e.getMessage());
lastResultOfDigitalExpression.getSelectNamedBean().removeNamedBean();
assertDoesNotThrow( () -> moduleManager.deleteBean(module, "CanDelete"));
moduleManager.deleteBean(module, "DoDelete");
assertNull(moduleManager.getBySystemName(module.getSystemName()));
assertNull(analogActionManager.getBySystemName(actionAnalogManySocket.getSystemName()));
assertNull(analogExpressionManager.getBySystemName(expressionAnalogExpressionConstantSocket.getSystemName()));
assertNull(digitalActionManager.getBySystemName(actionManySocket.getSystemName()));
assertNull(digitalExpressionManager.getBySystemName(expressionOrSocket.getSystemName()));
assertNull(stringActionManager.getBySystemName(actionStringManySocket.getSystemName()));
assertNull(stringExpressionManager.getBySystemName(expressionStringExpressionConstantSocket.getSystemName()));
assertNull(digitalBooleanActionManager.getBySystemName(onChange.getSystemName()));
}
@Test
public void testDeleteAction() throws SocketAlreadyConnectedException, PropertyVetoException {
// LogixNG_Manager logixNG_Manager = InstanceManager.getDefault(LogixNG_Manager.class);
// ConditionalNG_Manager conditionalNG_Manager = InstanceManager.getDefault(ConditionalNG_Manager.class);
AnalogActionManager analogActionManager = InstanceManager.getDefault(AnalogActionManager.class);
AnalogExpressionManager analogExpressionManager = InstanceManager.getDefault(AnalogExpressionManager.class);
DigitalActionManager digitalActionManager = InstanceManager.getDefault(DigitalActionManager.class);
DigitalBooleanActionManager digitalBooleanActionManager = InstanceManager.getDefault(DigitalBooleanActionManager.class);
DigitalExpressionManager digitalExpressionManager = InstanceManager.getDefault(DigitalExpressionManager.class);
StringActionManager stringActionManager = InstanceManager.getDefault(StringActionManager.class);
StringExpressionManager stringExpressionManager = InstanceManager.getDefault(StringExpressionManager.class);
// LogixNG logixNG = logixNG_Manager.createLogixNG("IQ1", "Some name");
// Assert.assertNotNull("exists", logixNG);
// ConditionalNG conditionalNG = conditionalNG_Manager
// .createConditionalNG(logixNG, "A conditionalNG"); // NOI18N
// Assert.assertNotNull("exists", conditionalNG);
// FemaleSocket femaleSocket = conditionalNG.getFemaleSocket();
MaleDigitalActionSocket actionManySocket = digitalActionManager
.registerAction(new DigitalMany(digitalActionManager.getAutoSystemName(), null));
// femaleSocket.connect(actionManySocket);
FemaleSocket femaleSocket = actionManySocket.getChild(0);
MaleDigitalActionSocket actionIfThenSocket = digitalActionManager
.registerAction(new IfThenElse(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionIfThenSocket);
femaleSocket = actionIfThenSocket.getChild(0);
MaleDigitalExpressionSocket expressionOrSocket =
InstanceManager.getDefault(DigitalExpressionManager.class)
.registerExpression(new Or(digitalExpressionManager.getAutoSystemName(), null));
femaleSocket.connect(expressionOrSocket);
femaleSocket = actionManySocket.getChild(1);
MaleDigitalActionSocket actionDoAnalogActionSocket = digitalActionManager
.registerAction(new DoAnalogAction(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionDoAnalogActionSocket);
femaleSocket = actionDoAnalogActionSocket.getChild(0);
MaleAnalogExpressionSocket expressionAnalogExpressionConstantSocket =
analogExpressionManager
.registerExpression(new AnalogExpressionConstant(analogExpressionManager.getAutoSystemName(), null));
femaleSocket.connect(expressionAnalogExpressionConstantSocket);
femaleSocket = actionDoAnalogActionSocket.getChild(1);
MaleAnalogActionSocket actionAnalogManySocket =
InstanceManager.getDefault(AnalogActionManager.class)
.registerAction(new AnalogMany(analogActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionAnalogManySocket);
femaleSocket = actionManySocket.getChild(2);
MaleDigitalActionSocket actionDoStringActionSocket =
InstanceManager.getDefault(DigitalActionManager.class)
.registerAction(new DoStringAction(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionDoStringActionSocket);
femaleSocket = actionDoStringActionSocket.getChild(0);
MaleStringExpressionSocket expressionStringExpressionConstantSocket =
stringExpressionManager
.registerExpression(new StringExpressionConstant(stringExpressionManager.getAutoSystemName(), null));
femaleSocket.connect(expressionStringExpressionConstantSocket);
femaleSocket = actionDoStringActionSocket.getChild(1);
MaleStringActionSocket actionStringManySocket = stringActionManager
.registerAction(new StringMany(stringActionManager.getAutoSystemName(), null));
femaleSocket.connect(actionStringManySocket);
femaleSocket = actionManySocket.getChild(3);
MaleDigitalActionSocket logix = digitalActionManager
.registerAction(new Logix(digitalActionManager.getAutoSystemName(), null));
femaleSocket.connect(logix);
femaleSocket = logix.getChild(1);
MaleDigitalBooleanActionSocket onChange = digitalBooleanActionManager
.registerAction(new DigitalBooleanLogixAction(
digitalBooleanActionManager.getAutoSystemName(),
null,
DigitalBooleanLogixAction.When.Either));
femaleSocket.connect(onChange);
LastResultOfDigitalExpression lastResultOfDigitalExpression =
new LastResultOfDigitalExpression(
digitalExpressionManager.getAutoSystemName(), null);
lastResultOfDigitalExpression.getSelectNamedBean().setNamedBean(expressionOrSocket);
// Assert.assertNotNull(logixNG_Manager.getBySystemName(logixNG.getSystemName()));
// Assert.assertNotNull(conditionalNG_Manager.getBySystemName(conditionalNG.getSystemName()));
assertNotNull(analogActionManager.getBySystemName(actionAnalogManySocket.getSystemName()));
assertNotNull(analogExpressionManager.getBySystemName(expressionAnalogExpressionConstantSocket.getSystemName()));
assertNotNull(digitalActionManager.getBySystemName(actionManySocket.getSystemName()));
assertNotNull(digitalExpressionManager.getBySystemName(expressionOrSocket.getSystemName()));
assertNotNull(stringActionManager.getBySystemName(actionStringManySocket.getSystemName()));
assertNotNull(stringExpressionManager.getBySystemName(expressionStringExpressionConstantSocket.getSystemName()));
assertNotNull(digitalBooleanActionManager.getBySystemName(onChange.getSystemName()));
PropertyVetoException e = assertThrows( PropertyVetoException.class,
() -> digitalActionManager.deleteBean(actionManySocket, "CanDelete"));
assertEquals("DoNotDelete", e.getPropertyChangeEvent().getPropertyName());
assertEquals("In use by IQDE:AUTO:0002 - Last result of digital expression", e.getMessage());
lastResultOfDigitalExpression.getSelectNamedBean().removeNamedBean();
assertDoesNotThrow( () -> digitalActionManager.deleteBean(actionManySocket, "CanDelete"));
digitalActionManager.deleteBean(actionManySocket, "DoDelete");
// Assert.assertNotNull(logixNG_Manager.getBySystemName(logixNG.getSystemName()));
// Assert.assertNull(conditionalNG_Manager.getBySystemName(conditionalNG.getSystemName()));
assertNull(analogActionManager.getBySystemName(actionAnalogManySocket.getSystemName()));
assertNull(analogExpressionManager.getBySystemName(expressionAnalogExpressionConstantSocket.getSystemName()));
assertNull(digitalActionManager.getBySystemName(actionManySocket.getSystemName()));
assertNull(digitalExpressionManager.getBySystemName(expressionOrSocket.getSystemName()));
assertNull(stringActionManager.getBySystemName(actionStringManySocket.getSystemName()));
assertNull(stringExpressionManager.getBySystemName(expressionStringExpressionConstantSocket.getSystemName()));
assertNull(digitalBooleanActionManager.getBySystemName(onChange.getSystemName()));
}
@Test
@Disabled("Test requires further development")
public void testDeleteTable() throws SocketAlreadyConnectedException {
}
// The minimal setup for log4J
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
JUnitUtil.resetInstanceManager();
JUnitUtil.resetProfileManager();
JUnitUtil.initConfigureManager();
JUnitUtil.initInternalSensorManager();
JUnitUtil.initInternalTurnoutManager();
JUnitUtil.initLogixNGManager();
}
@AfterEach
public void tearDown() {
jmri.jmrit.logixng.util.LogixNG_Thread.stopAllLogixNGThreads();
JUnitUtil.deregisterBlockManagerShutdownTask();
JUnitUtil.tearDown();
}
}