515 lines
29 KiB
Java
515 lines
29 KiB
Java
package jmri.jmrit.logixng;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
|
import static org.junit.jupiter.api.Assertions.assertSame;
|
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
|
|
import jmri.jmrit.logixng.actions.ActionTurnout;
|
|
import jmri.jmrit.logixng.actions.IfThenElse;
|
|
import jmri.jmrit.logixng.actions.DigitalMany;
|
|
|
|
import java.io.PrintWriter;
|
|
import java.io.StringWriter;
|
|
import java.util.ArrayList;
|
|
import java.util.Locale;
|
|
|
|
import jmri.InstanceManager;
|
|
import jmri.JmriException;
|
|
import jmri.NamedBean;
|
|
import jmri.jmrit.logixng.implementation.DefaultLogixNG;
|
|
import jmri.jmrit.logixng.implementation.DefaultConditionalNG;
|
|
import jmri.jmrit.logixng.expressions.And;
|
|
import jmri.jmrit.logixng.expressions.ExpressionTurnout;
|
|
import jmri.util.JUnitAppender;
|
|
import jmri.util.JUnitUtil;
|
|
|
|
import org.apache.commons.lang3.mutable.MutableInt;
|
|
|
|
import org.junit.jupiter.api.AfterEach;
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
/**
|
|
* Test LogixNG
|
|
*
|
|
* @author Daniel Bergqvist 2018
|
|
*/
|
|
public class LogixNGTest {
|
|
|
|
@Test
|
|
public void testSetParent() {
|
|
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class).createLogixNG("A new logix for test"); // NOI18N
|
|
UnsupportedOperationException e = assertThrows( UnsupportedOperationException.class,
|
|
() -> logixNG.setParent(null),
|
|
"exception thrown");
|
|
assertNotNull(e);
|
|
}
|
|
|
|
@Test
|
|
public void testGetParent() {
|
|
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class).createLogixNG("A new logix for test"); // NOI18N
|
|
assertNull( logixNG.getParent(), "getParent() returns null");
|
|
}
|
|
|
|
@Test
|
|
public void testState() throws JmriException {
|
|
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class).createLogixNG("A new logix for test"); // NOI18N
|
|
assertEquals( LogixNG.UNKNOWN, logixNG.getState(), "getState() returns UNKNOWN");
|
|
JUnitAppender.assertWarnMessage("Unexpected call to getState in DefaultLogixNG.");
|
|
logixNG.setState(LogixNG.INCONSISTENT);
|
|
JUnitAppender.assertWarnMessage("Unexpected call to setState in DefaultLogixNG.");
|
|
assertEquals( LogixNG.UNKNOWN, logixNG.getState(), "getState() returns UNKNOWN");
|
|
JUnitAppender.assertWarnMessage("Unexpected call to getState in DefaultLogixNG.");
|
|
}
|
|
|
|
@Test
|
|
public void testShortDescription() {
|
|
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class).createLogixNG("A new logix for test"); // NOI18N
|
|
assertEquals( "LogixNG", logixNG.getShortDescription(Locale.US),
|
|
"getShortDescription() returns correct value");
|
|
}
|
|
|
|
@Test
|
|
public void testLongDescription() {
|
|
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class).createLogixNG("A new logix for test"); // NOI18N
|
|
assertEquals( "LogixNG: A new logix for test", logixNG.getLongDescription(Locale.US),
|
|
"getLongDescription() returns correct value");
|
|
}
|
|
|
|
@Test
|
|
public void testGetChild() {
|
|
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class).createLogixNG("A new logix for test"); // NOI18N
|
|
UnsupportedOperationException e = assertThrows( UnsupportedOperationException.class,
|
|
() -> logixNG.getChild(0),
|
|
"exception thrown");
|
|
assertNotNull(e);
|
|
}
|
|
|
|
@Test
|
|
public void testGetChildCount() {
|
|
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class).createLogixNG("A new logix for test"); // NOI18N
|
|
UnsupportedOperationException e = assertThrows( UnsupportedOperationException.class,
|
|
() -> logixNG.getChildCount(),
|
|
"exception thrown");
|
|
assertNotNull(e);
|
|
}
|
|
|
|
@Test
|
|
public void testGetCategory() {
|
|
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class).createLogixNG("A new logix for test"); // NOI18N
|
|
UnsupportedOperationException e = assertThrows( UnsupportedOperationException.class,
|
|
() -> logixNG.getCategory(),
|
|
"exception thrown");
|
|
assertNotNull(e);
|
|
}
|
|
|
|
@Test
|
|
public void testSwapConditionalNG() {
|
|
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class).createLogixNG("A new logix for test"); // NOI18N
|
|
ConditionalNG conditionalNG_1 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "A conditionalNG"); // NOI18N
|
|
ConditionalNG conditionalNG_2 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "A second conditionalNG"); // NOI18N
|
|
ConditionalNG conditionalNG_3 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "A third conditionalNG"); // NOI18N
|
|
ConditionalNG conditionalNG_4 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "A forth conditionalNG"); // NOI18N
|
|
|
|
assertTrue( conditionalNG_1 == logixNG.getConditionalNG(0), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_2 == logixNG.getConditionalNG(1), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_3 == logixNG.getConditionalNG(2), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_4 == logixNG.getConditionalNG(3), "ConditionalNG is correct");
|
|
|
|
logixNG.swapConditionalNG(0, 0);
|
|
assertTrue( conditionalNG_1 == logixNG.getConditionalNG(0), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_2 == logixNG.getConditionalNG(1), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_3 == logixNG.getConditionalNG(2), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_4 == logixNG.getConditionalNG(3), "ConditionalNG is correct");
|
|
|
|
logixNG.swapConditionalNG(1, 0);
|
|
assertTrue( conditionalNG_1 == logixNG.getConditionalNG(0), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_2 == logixNG.getConditionalNG(1), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_3 == logixNG.getConditionalNG(2), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_4 == logixNG.getConditionalNG(3), "ConditionalNG is correct");
|
|
|
|
logixNG.swapConditionalNG(0, 1);
|
|
assertTrue( conditionalNG_2 == logixNG.getConditionalNG(0), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_1 == logixNG.getConditionalNG(1), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_3 == logixNG.getConditionalNG(2), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_4 == logixNG.getConditionalNG(3), "ConditionalNG is correct");
|
|
|
|
logixNG.swapConditionalNG(0, 2);
|
|
assertTrue( conditionalNG_3 == logixNG.getConditionalNG(0), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_2 == logixNG.getConditionalNG(1), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_1 == logixNG.getConditionalNG(2), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_4 == logixNG.getConditionalNG(3), "ConditionalNG is correct");
|
|
|
|
logixNG.swapConditionalNG(2, 3);
|
|
assertTrue( conditionalNG_3 == logixNG.getConditionalNG(0), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_2 == logixNG.getConditionalNG(1), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_4 == logixNG.getConditionalNG(2), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_1 == logixNG.getConditionalNG(3), "ConditionalNG is correct");
|
|
}
|
|
|
|
@Test
|
|
public void testGetConditionalNG() {
|
|
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class).createLogixNG("A new logix for test"); // NOI18N
|
|
ConditionalNG conditionalNG_1 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "A conditionalNG"); // NOI18N
|
|
ConditionalNG conditionalNG_2 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "A second conditionalNG"); // NOI18N
|
|
ConditionalNG conditionalNG_3 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "A third conditionalNG"); // NOI18N
|
|
ConditionalNG conditionalNG_4 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "A forth conditionalNG"); // NOI18N
|
|
|
|
assertTrue( conditionalNG_1 == logixNG.getConditionalNG(0), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_2 == logixNG.getConditionalNG(1), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_3 == logixNG.getConditionalNG(2), "ConditionalNG is correct");
|
|
assertTrue( conditionalNG_4 == logixNG.getConditionalNG(3), "ConditionalNG is correct");
|
|
assertNull( logixNG.getConditionalNG(-1), "ConditionalNG is correct");
|
|
assertNull( logixNG.getConditionalNG(4), "ConditionalNG is correct");
|
|
}
|
|
|
|
// @Test
|
|
// public void testAddConditionalNG() {
|
|
// LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class).createLogixNG("A new logix for test"); // NOI18N
|
|
// ConditionalNG conditionalNG_1 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, null);
|
|
// // Assert.assertTrue("conditionalNG added", logixNG.addConditionalNG(conditionalNG_1));
|
|
// ConditionalNG conditionalNG_2 =
|
|
// new DefaultConditionalNG(conditionalNG_1.getSystemName(), null);
|
|
// Assert.assertFalse("conditionalNG not added", logixNG.addConditionalNG(conditionalNG_2));
|
|
// JUnitAppender.assertWarnMessage("ConditionalNG 'IQC:AUTO:0001' has already been added to LogixNG 'IQ:AUTO:0001'");
|
|
// ConditionalNG conditionalNG_3 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, null);
|
|
// Assert.assertTrue("conditionalNG added", logixNG.addConditionalNG(conditionalNG_3));
|
|
// }
|
|
|
|
@Test
|
|
public void testGetConditionalNGByUserName() {
|
|
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class).createLogixNG("A new logix for test"); // NOI18N
|
|
ConditionalNG conditionalNG_1 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "Abc"); // NOI18N
|
|
ConditionalNG conditionalNG_2 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "Def"); // NOI18N
|
|
ConditionalNG conditionalNG_3 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "Ghi"); // NOI18N
|
|
ConditionalNG conditionalNG_4 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "Jkl"); // NOI18N
|
|
|
|
assertEquals( conditionalNG_1, logixNG.getConditionalNGByUserName("Abc"),
|
|
"ConditionalNG is correct");
|
|
assertEquals( conditionalNG_2, logixNG.getConditionalNGByUserName("Def"),
|
|
"ConditionalNG is correct");
|
|
assertEquals( conditionalNG_3, logixNG.getConditionalNGByUserName("Ghi"),
|
|
"ConditionalNG is correct");
|
|
assertEquals( conditionalNG_4, logixNG.getConditionalNGByUserName("Jkl"),
|
|
"ConditionalNG is correct");
|
|
assertNull( logixNG.getConditionalNGByUserName("Non existing bean"),
|
|
"ConditionalNG is correct");
|
|
}
|
|
|
|
@Test
|
|
public void testDeleteConditionalNG() {
|
|
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class).createLogixNG("A new logix for test"); // NOI18N
|
|
ConditionalNG conditionalNG_1 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "A first conditionalNG"); // NOI18N
|
|
ConditionalNG conditionalNG_2 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "A second conditionalNG"); // NOI18N
|
|
ConditionalNG conditionalNG_3 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "A third conditionalNG"); // NOI18N
|
|
ConditionalNG conditionalNG_4 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "A forth conditionalNG"); // NOI18N
|
|
ConditionalNG conditionalNG_5 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "A fifth conditionalNG"); // NOI18N
|
|
ConditionalNG conditionalNG_6 = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "A sixth conditionalNG"); // NOI18N
|
|
|
|
assertEquals( conditionalNG_1, logixNG.getConditionalNG(0), "ConditionalNG is correct");
|
|
assertEquals( conditionalNG_2, logixNG.getConditionalNG(1), "ConditionalNG is correct");
|
|
assertEquals( conditionalNG_3, logixNG.getConditionalNG(2), "ConditionalNG is correct");
|
|
assertEquals( conditionalNG_4, logixNG.getConditionalNG(3), "ConditionalNG is correct");
|
|
assertEquals( conditionalNG_5, logixNG.getConditionalNG(4), "ConditionalNG is correct");
|
|
assertEquals( conditionalNG_6, logixNG.getConditionalNG(5), "ConditionalNG is correct");
|
|
|
|
logixNG.deleteConditionalNG(conditionalNG_1);
|
|
assertEquals( conditionalNG_2, logixNG.getConditionalNG(0), "ConditionalNG is correct");
|
|
assertEquals( conditionalNG_3, logixNG.getConditionalNG(1), "ConditionalNG is correct");
|
|
assertEquals( conditionalNG_4, logixNG.getConditionalNG(2), "ConditionalNG is correct");
|
|
assertEquals( conditionalNG_5, logixNG.getConditionalNG(3), "ConditionalNG is correct");
|
|
assertEquals( conditionalNG_6, logixNG.getConditionalNG(4), "ConditionalNG is correct");
|
|
|
|
logixNG.deleteConditionalNG(conditionalNG_1);
|
|
JUnitAppender.assertErrorMessage("attempt to delete ConditionalNG not in LogixNG: IQC:AUTO:0001");
|
|
|
|
logixNG.deleteConditionalNG(conditionalNG_6);
|
|
assertEquals( conditionalNG_2, logixNG.getConditionalNG(0), "ConditionalNG is correct");
|
|
assertEquals( conditionalNG_3, logixNG.getConditionalNG(1), "ConditionalNG is correct");
|
|
assertEquals( conditionalNG_4, logixNG.getConditionalNG(2), "ConditionalNG is correct");
|
|
assertEquals( conditionalNG_5, logixNG.getConditionalNG(3), "ConditionalNG is correct");
|
|
|
|
logixNG.deleteConditionalNG(conditionalNG_3);
|
|
assertEquals( conditionalNG_2, logixNG.getConditionalNG(0), "ConditionalNG is correct");
|
|
assertEquals( conditionalNG_4, logixNG.getConditionalNG(1), "ConditionalNG is correct");
|
|
assertEquals( conditionalNG_5, logixNG.getConditionalNG(2), "ConditionalNG is correct");
|
|
|
|
logixNG.deleteConditionalNG(conditionalNG_4);
|
|
assertEquals( conditionalNG_2, logixNG.getConditionalNG(0), "ConditionalNG is correct");
|
|
assertEquals( conditionalNG_5, logixNG.getConditionalNG(1), "ConditionalNG is correct");
|
|
|
|
logixNG.deleteConditionalNG(conditionalNG_2);
|
|
assertEquals( conditionalNG_5, logixNG.getConditionalNG(0), "ConditionalNG is correct");
|
|
|
|
logixNG.deleteConditionalNG(conditionalNG_5);
|
|
assertEquals( 0, logixNG.getNumConditionalNGs(), "ConditionalNG is correct");
|
|
|
|
logixNG.deleteConditionalNG(conditionalNG_5);
|
|
JUnitAppender.assertErrorMessage("attempt to delete ConditionalNG not in LogixNG: IQC:AUTO:0005");
|
|
}
|
|
|
|
@Test
|
|
public void testActivateLogixNG() {
|
|
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class).createLogixNG("A new logix for test"); // NOI18N
|
|
MyConditionalNG conditionalNG_1 = new MyConditionalNG("IQC1", null);
|
|
logixNG.addConditionalNG(conditionalNG_1);
|
|
conditionalNG_1.setEnabled(false);
|
|
MyConditionalNG conditionalNG_2 = new MyConditionalNG("IQC2", null);
|
|
logixNG.addConditionalNG(conditionalNG_2);
|
|
conditionalNG_2.setEnabled(true);
|
|
MyConditionalNG conditionalNG_3 = new MyConditionalNG("IQC3", null);
|
|
logixNG.addConditionalNG(conditionalNG_3);
|
|
conditionalNG_3.setEnabled(false);
|
|
assertTrue( logixNG.setParentForAllChildren(new ArrayList<>()));
|
|
logixNG.activate();
|
|
|
|
assertFalse( conditionalNG_1.listenersAreRegistered, "listeners for conditionalNG_1 are not registered");
|
|
assertFalse( conditionalNG_2.listenersAreRegistered, "listeners for conditionalNG_2 are not registered");
|
|
assertFalse( conditionalNG_3.listenersAreRegistered, "listeners for conditionalNG_3 are not registered");
|
|
|
|
logixNG.setEnabled(true);
|
|
assertFalse( conditionalNG_1.listenersAreRegistered,
|
|
"listeners for conditionalNG_1 are not registered");
|
|
assertTrue( conditionalNG_2.listenersAreRegistered,
|
|
"listeners for conditionalNG_2 are registered");
|
|
assertFalse( conditionalNG_3.listenersAreRegistered,
|
|
"listeners for conditionalNG_3 are not registered");
|
|
|
|
// Activate LogixNG multiple times should not be a problem
|
|
logixNG.setEnabled(true);
|
|
assertFalse( conditionalNG_1.listenersAreRegistered, "listeners for conditionalNG_1 are not registered");
|
|
assertTrue( conditionalNG_2.listenersAreRegistered, "listeners for conditionalNG_2 are registered");
|
|
assertFalse( conditionalNG_3.listenersAreRegistered, "listeners for conditionalNG_3 are not registered");
|
|
|
|
logixNG.setEnabled(false);
|
|
assertFalse( conditionalNG_1.listenersAreRegistered, "listeners for conditionalNG_1 are not registered");
|
|
assertFalse( conditionalNG_2.listenersAreRegistered, "listeners for conditionalNG_2 are not registered");
|
|
assertFalse( conditionalNG_3.listenersAreRegistered, "listeners for conditionalNG_3 are not registered");
|
|
|
|
// DeActivate LogixNG multiple times should not be a problem
|
|
logixNG.setEnabled(false);
|
|
assertFalse( conditionalNG_1.listenersAreRegistered, "listeners for conditionalNG_1 are not registered");
|
|
assertFalse( conditionalNG_2.listenersAreRegistered, "listeners for conditionalNG_2 are not registered");
|
|
assertFalse( conditionalNG_3.listenersAreRegistered, "listeners for conditionalNG_3 are not registered");
|
|
}
|
|
|
|
@Test
|
|
public void testGetConditionalNG_WithoutParameters() {
|
|
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class).createLogixNG("A new logix for test"); // NOI18N
|
|
UnsupportedOperationException e = assertThrows( UnsupportedOperationException.class,
|
|
() -> logixNG.getConditionalNG(),
|
|
"exception thrown");
|
|
assertNotNull(e);
|
|
}
|
|
|
|
@Test
|
|
public void testGetLogixNG() {
|
|
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class).createLogixNG("A new logix for test"); // NOI18N
|
|
assertSame( logixNG, logixNG.getLogixNG(), "logixNG is correct");
|
|
}
|
|
|
|
@Test
|
|
public void testGetRoot() {
|
|
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class).createLogixNG("A new logix for test"); // NOI18N
|
|
assertSame( logixNG, logixNG.getRoot(), "root is correct");
|
|
}
|
|
|
|
@Test
|
|
public void testPrintTree() {
|
|
final String newLine = System.lineSeparator();
|
|
StringBuilder expectedResult = new StringBuilder();
|
|
expectedResult
|
|
.append("LogixNG: A new logix for test").append(newLine)
|
|
.append("...ConditionalNG: A conditionalNG").append(newLine)
|
|
.append("......! A").append(newLine)
|
|
.append(".........Many ::: Use default").append(newLine)
|
|
.append("............! A1").append(newLine)
|
|
.append("...............If Then Else. Execute on change ::: Use default").append(newLine)
|
|
.append("..................? If").append(newLine)
|
|
.append(".....................Socket not connected").append(newLine)
|
|
.append("..................! Then").append(newLine)
|
|
.append(".....................Socket not connected").append(newLine)
|
|
.append("..................! Else").append(newLine)
|
|
.append(".....................Socket not connected").append(newLine)
|
|
.append("............! A2").append(newLine)
|
|
.append("...............Socket not connected").append(newLine);
|
|
|
|
StringWriter writer = new StringWriter();
|
|
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class).createLogixNG("A new logix for test"); // NOI18N
|
|
ConditionalNG conditionalNG = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "A conditionalNG"); // NOI18N
|
|
setupInitialConditionalNGTree(conditionalNG);
|
|
logixNG.printTree(new PrintWriter(writer), "...", new MutableInt(0));
|
|
String resultStr = writer.toString();
|
|
/*
|
|
System.err.format("=======================================%n");
|
|
System.err.format("=======================================%n");
|
|
System.err.format("=======================================%n");
|
|
System.err.format("=======================================%n");
|
|
System.err.format(expectedResult.toString());
|
|
System.err.format("=======================================%n");
|
|
System.err.format("=======================================%n");
|
|
System.err.format(resultStr);
|
|
System.err.format("=======================================%n");
|
|
System.err.format("=======================================%n");
|
|
System.err.format("=======================================%n");
|
|
*/
|
|
assertEquals( expectedResult.toString(), resultStr, "Strings matches");
|
|
}
|
|
|
|
@Test
|
|
public void testBundleClass() {
|
|
assertEquals( "Test Bundle bb aa cc", Bundle.getMessage("TestBundle", "aa", "bb", "cc"),
|
|
"bundle is correct");
|
|
assertEquals( "Generic", Bundle.getMessage(Locale.US, "SocketTypeGeneric"),
|
|
"bundle is correct");
|
|
assertEquals( "Test Bundle bb aa cc", Bundle.getMessage(Locale.US, "TestBundle", "aa", "bb", "cc"),
|
|
"bundle is correct");
|
|
}
|
|
|
|
@Test
|
|
public void testCategory() {
|
|
assertEquals( "Item", LogixNG_Category.ITEM.toString(), "isChangeableByUser is correct");
|
|
assertEquals( "Common", LogixNG_Category.COMMON.toString(), "isChangeableByUser is correct");
|
|
assertEquals( "Other", LogixNG_Category.OTHER.toString(), "isChangeableByUser 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 testManagers() throws SocketAlreadyConnectedException {
|
|
String systemName;
|
|
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class).createLogixNG("A new logix for test"); // NOI18N
|
|
ConditionalNG conditionalNG = InstanceManager.getDefault(ConditionalNG_Manager.class).createConditionalNG(logixNG, "A conditionalNG"); // NOI18N
|
|
setupInitialConditionalNGTree(conditionalNG);
|
|
MaleSocket many = conditionalNG.getChild(0).getConnectedSocket();
|
|
// System.err.format("aa: %s%n", many.getLongDescription());
|
|
assertEquals( "Many", many.getLongDescription(), "description is correct");
|
|
MaleSocket ifThen = many.getChild(0).getConnectedSocket();
|
|
// System.err.format("aa: %s%n", ifThen.getLongDescription());
|
|
assertEquals( "If Then Else. Execute on change", ifThen.getLongDescription(), "description is correct");
|
|
systemName = InstanceManager.getDefault(DigitalExpressionManager.class).getAutoSystemName();
|
|
DigitalExpressionBean expression = new ExpressionTurnout(systemName, "An expression for test"); // NOI18N
|
|
MaleSocket digitalExpressionBean = InstanceManager.getDefault(DigitalExpressionManager.class).registerExpression(expression);
|
|
ifThen.getChild(0).connect(digitalExpressionBean);
|
|
// InstanceManager.getDefault(jmri.DigitalExpressionManager.class).addExpression(new ExpressionTurnout(systemName, "LogixNG 102, DigitalExpressionBean 26")); // NOI18N
|
|
systemName = InstanceManager.getDefault(DigitalActionManager.class).getAutoSystemName();
|
|
DigitalActionBean action = new ActionTurnout(systemName, "An action for test"); // NOI18N
|
|
MaleSocket digitalActionBean = InstanceManager.getDefault(DigitalActionManager.class).registerAction(action);
|
|
ifThen.getChild(1).connect(digitalActionBean);
|
|
|
|
assertTrue( logixNG.setParentForAllChildren(new ArrayList<>()));
|
|
|
|
assertEquals( conditionalNG, digitalActionBean.getConditionalNG(), "conditionalng is correct");
|
|
assertEquals( conditionalNG, conditionalNG.getConditionalNG(), "conditionalng is correct");
|
|
assertEquals( logixNG, digitalActionBean.getLogixNG(), "logixlng is correct");
|
|
assertEquals( logixNG, logixNG.getLogixNG(), "logixlng is correct");
|
|
}
|
|
|
|
@Test
|
|
public void testSetup() throws SocketAlreadyConnectedException {
|
|
|
|
LogixNG logixNG = InstanceManager.getDefault(LogixNG_Manager.class)
|
|
.createLogixNG("A new logix for test"); // NOI18N
|
|
DefaultConditionalNG conditionalNG =
|
|
(DefaultConditionalNG) InstanceManager.getDefault(ConditionalNG_Manager.class)
|
|
.createConditionalNG(logixNG, "A conditionalNG"); // NOI18N
|
|
|
|
String systemName = InstanceManager.getDefault(DigitalActionManager.class).getAutoSystemName();
|
|
DigitalActionBean action = new ActionTurnout(systemName, "An action for test"); // NOI18N
|
|
MaleSocket digitalActionBean = InstanceManager.getDefault(DigitalActionManager.class).registerAction(action);
|
|
|
|
conditionalNG.setSocketSystemName(systemName);
|
|
logixNG.setup();
|
|
|
|
assertTrue ( logixNG.setParentForAllChildren(new ArrayList<>()));
|
|
|
|
assertEquals( "Set turnout '' to state Thrown",
|
|
conditionalNG.getChild(0).getConnectedSocket().getLongDescription(),
|
|
"conditionalng child is correct");
|
|
assertEquals( conditionalNG, digitalActionBean.getConditionalNG(), "conditionalng is correct");
|
|
assertEquals( logixNG, digitalActionBean.getLogixNG(), "logixlng is correct");
|
|
}
|
|
|
|
@Test
|
|
public void testExceptions() {
|
|
new SocketAlreadyConnectedException().getMessage();
|
|
}
|
|
|
|
@Test
|
|
public void testBundle() {
|
|
assertEquals( "LogixNG", new DefaultLogixNG("IQ55", null).getBeanType(), "bean type is correct");
|
|
assertEquals( "Digital action", new IfThenElse("IQDA321", null).getBeanType(), "bean type is correct");
|
|
assertEquals( "Digital expression", new And("IQDE321", null).getBeanType(), "bean type is correct");
|
|
}
|
|
|
|
@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();
|
|
}
|
|
|
|
|
|
private static class MyConditionalNG extends DefaultConditionalNG {
|
|
|
|
boolean listenersAreRegistered;
|
|
|
|
MyConditionalNG(String sys, String user) throws NamedBean.BadUserNameException, NamedBean.BadSystemNameException {
|
|
super(sys, user);
|
|
}
|
|
|
|
/** {@inheritDoc} */
|
|
@Override
|
|
public synchronized void registerListenersForThisClass() {
|
|
// The method DefaultConditionalNG.registerListenersForThisClass()
|
|
// is synchronized so this method needs to be it as well.
|
|
listenersAreRegistered = true;
|
|
}
|
|
|
|
/** {@inheritDoc} */
|
|
@Override
|
|
public synchronized void unregisterListenersForThisClass() {
|
|
// The method DefaultConditionalNG.unregisterListenersForThisClass()
|
|
// is synchronized so this method needs to be it as well.
|
|
listenersAreRegistered = false;
|
|
}
|
|
}
|
|
|
|
// private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogixNGTest.class);
|
|
|
|
}
|