657 lines
38 KiB
Java
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();
|
|
}
|
|
|
|
}
|