Files
JIMRI/java/test/jmri/jmrit/beantable/LogixNGTableTableActionTest.java
2026-06-17 14:00:51 +02:00

346 lines
14 KiB
Java

package jmri.jmrit.beantable;
import java.awt.GraphicsEnvironment;
import java.util.ResourceBundle;
import jmri.*;
import jmri.jmrit.logixng.*;
import jmri.jmrit.logixng.tools.swing.ConditionalNGEditor;
import jmri.util.*;
import org.junit.Assert;
import org.junit.Assume;
import org.junit.jupiter.api.*;
/**
* Tests for the NamedTableTableAction Class
* Re-created using JUnit5 with support for the new conditional editors
* @author Dave Sand Copyright (C) 2017 (for the LogixTableActionTest class)
* @author Daniel Bergqvist Copyright (C) 2019
*/
@Timeout(10)
public class LogixNGTableTableActionTest extends AbstractTableActionBase<NamedTable> {
static final ResourceBundle rbxNamedTableSwing = ResourceBundle.getBundle("jmri.jmrit.logixng.tools.swing.LogixNGSwingBundle");
@Test
public void testCtor() {
Assert.assertNotNull("LogixNGTableTableActionTest Constructor Return", new LogixNGTableTableAction()); // NOI18N
}
@Test
public void testStringCtor() {
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
Assert.assertNotNull("NamedTableTableAction Constructor Return", new LogixNGTableTableAction("test")); // NOI18N
}
@Override
public String getTableFrameName() {
return Bundle.getMessage("TitleLogixNGTableTable"); // NOI18N
}
@Override
@Test
public void testGetClassDescription() {
Assert.assertEquals("NamedTable Table Action class description", Bundle.getMessage("TitleLogixNGTableTable"), a.getClassDescription()); // NOI18N
}
@Disabled("Fix later")
@Test
@Override
public void testAddThroughDialog() {
}
@Disabled("Fix later")
@Test
@Override
public void testAddButton() {
}
@Disabled("Fix later")
@Test
@Override
public void testEditButton() {
}
@Disabled("Fix later")
@Test
@Override
public void testIncludeAddButton() {
}
@Disabled("Fix later")
@Test
@Override
public void testHelpTarget() {
}
@Disabled("Fix later")
@Test
@Override
public void testExecute() {
}
/*.*
* Check the return value of includeAddButton.
* <p>
* The table generated by this action includes an Add Button.
*./
@Override
@Test
public void testIncludeAddButton() {
Assert.assertTrue("Default include add button", a.includeAddButton()); // NOI18N
}
*/
@Override
public String getAddFrameName(){
return Bundle.getMessage("TitleAddNamedTable");
}
/*
@Test
@Override
public void testAddThroughDialog() {
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
AbstractLogixNGTableAction logixNGTable = (AbstractLogixNGTableAction) a;
a.actionPerformed(null);
JFrame f = JFrameOperator.waitJFrame(getTableFrameName(), true, true);
NamedTable logixNG = InstanceManager.getDefault(NamedTableManager.class).getBySystemName("IQ1");
Assert.assertNull("NamedTable does not exist", logixNG);
// find the "Add... " button and press it.
jmri.util.swing.JemmyUtil.pressButton(new JFrameOperator(f),Bundle.getMessage("ButtonAdd"));
new org.netbeans.jemmy.QueueTool().waitEmpty();
JFrame f1 = JFrameOperator.waitJFrame(getAddFrameName(), true, true);
JFrameOperator jf = new JFrameOperator(f1);
//disable "Auto System Name" via checkbox
JCheckBoxOperator jcbo = new JCheckBoxOperator(jf,Bundle.getMessage("LabelAutoSysName"));
jcbo.doClick();
//Enter IQ1 in the text field labeled "System Name:"
JLabelOperator jlo = new JLabelOperator(jf, "NamedTable" + " " + Bundle.getMessage("ColumnSystemName") + ":");
// JLabelOperator jlo = new JLabelOperator(jf,Bundle.getMessage("LabelSystemName"));
((JTextField)jlo.getLabelFor()).setText("IQ1");
//and press create
jmri.util.swing.JemmyUtil.pressButton(jf,Bundle.getMessage("ButtonCreate"));
// Click button "Done" on the EditNamedTable frame
String title = String.format("Edit NamedTable %s", "IQ1");
JFrame frame = JFrameOperator.waitJFrame(title, true, true); // NOI18N
JFrameOperator jf2 = new JFrameOperator(frame);
jmri.util.swing.JemmyUtil.pressButton(jf2,Bundle.getMessage("ButtonDone"));
JUnitUtil.dispose(frame);
// Test that we can open the NamedTableEdtior window twice
logixNGTable.editPressed("IQ101"); // NOI18N
// Click button "Done" on the EditNamedTable frame
title = String.format("Edit NamedTable %s - %s", "IQ101", "NamedTable 101");
frame = JFrameOperator.waitJFrame(title, true, true); // NOI18N
jf2 = new JFrameOperator(frame);
jmri.util.swing.JemmyUtil.pressButton(jf2,Bundle.getMessage("ButtonDone"));
JUnitUtil.dispose(frame);
JUnitUtil.dispose(f1);
JUnitUtil.dispose(f);
logixNG = InstanceManager.getDefault(NamedTableManager.class).getBySystemName("IQ1");
Assert.assertNotNull("NamedTable has been created", logixNG);
}
@Test
@Override
public void testEditButton() {
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
AbstractLogixNGTableAction logixNGTable = (AbstractLogixNGTableAction) a;
logixNGTable.setEditorMode(AbstractLogixNGTableAction.EditMode.TREEEDIT);
NamedTable table = InstanceManager.getDefault(NamedTableManager.class).getBySystemName("IQ101");
Assert.assertNotNull("NamedTable exists", table);
logixNGTable.editPressed("IQ101"); // NOI18N
String title = String.format("Edit NamedTable %s - %s", table.getSystemName(), table.getUserName());
JFrame frame = JFrameOperator.waitJFrame(title, true, true); // NOI18N
// JFrame frame2 = JFrameOperator.waitJFrame(Bundle.getMessage("EditTitle"), true, true); // NOI18N
// Click button "New ConditionalNG" on the EditNamedTable frame
JFrameOperator jf = new JFrameOperator(frame);
jmri.util.swing.JemmyUtil.pressButton(jf,"New ConditionalNG");
JDialogOperator addDialog = new JDialogOperator("Add ConditionalNG"); // NOI18N
new JButtonOperator(addDialog, Bundle.getMessage("ButtonCreate")).push(); // NOI18N
// Close window
// JFrameOperator editConditionalNGFrameOperator = new JFrameOperator("Edit ConditionalNG " + table.getConditionalNG(0));
JFrameOperator editConditionalNGFrameOperator = new JFrameOperator("Edit ConditionalNG aaa");
new JMenuBarOperator(editConditionalNGFrameOperator).pushMenu("File|Close Window", "|");
Assert.assertNotNull(frame);
jmri.util.swing.JemmyUtil.pressButton(new JFrameOperator(frame),Bundle.getMessage("ButtonDone"));
JUnitUtil.dispose(frame);
}
@Test
public void testNamedTableBrowser() {
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
AbstractLogixNGTableAction logixNGTable = (AbstractLogixNGTableAction) a;
logixNGTable.browserPressed("IQ101"); // NOI18N
JFrame frame = JFrameOperator.waitJFrame(Bundle.getMessage("BrowserTitle"), true, true); // NOI18N
Assert.assertNotNull(frame);
JUnitUtil.dispose(frame);
}
@Test
public void testTreeEditor() {
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
InstanceManager.getDefault(jmri.UserPreferencesManager.class).
setProperty("jmri.jmrit.beantable.NamedTableTableAction", "Edit Mode", "TREEEDIT"); // NOI18N
a.actionPerformed(null);
AbstractLogixNGTableAction logixNGTable = (AbstractLogixNGTableAction) a;
JFrameOperator logixNGFrame = new JFrameOperator(Bundle.getMessage("TitleNamedTableTable")); // NOI18N
Assert.assertNotNull(logixNGFrame);
logixNGTable.editPressed("IQ104"); // NOI18N
JFrameOperator cdlFrame = new JFrameOperator(jmri.Bundle.formatMessage(rbxNamedTableSwing.getString("TitleEditNamedTable"), "IQ104")); // NOI18N
Assert.assertNotNull(cdlFrame);
new JMenuBarOperator(cdlFrame).pushMenuNoBlock(Bundle.getMessage("MenuFile")+"|"+rbxNamedTableSwing.getString("CloseWindow"), "|"); // NOI18N
logixNGFrame.dispose();
}
@Test
public void testAddNamedTableAutoName() {
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
AbstractLogixNGTableAction logixNGTable = (AbstractLogixNGTableAction) a;
logixNGTable.actionPerformed(null); // show table
JFrame logixNGFrame = JFrameOperator.waitJFrame(Bundle.getMessage("TitleNamedTableTable"), true, true); // NOI18N
Assert.assertNotNull("Found NamedTable Frame", logixNGFrame); // NOI18N
logixNGTable.addPressed(null);
JFrameOperator addFrame = new JFrameOperator(Bundle.getMessage("TitleAddNamedTable")); // NOI18N
Assert.assertNotNull("Found Add NamedTable Frame", addFrame); // NOI18N
new JTextFieldOperator(addFrame, 1).setText("NamedTable 999"); // NOI18N
new JButtonOperator(addFrame, Bundle.getMessage("ButtonCreate")).push(); // NOI18N
NamedTable chk999 = jmri.InstanceManager.getDefault(jmri.jmrit.logixng.NamedTableManager.class).getNamedTable("NamedTable 999"); // NOI18N
Assert.assertNotNull("Verify 'NamedTable 999' Added", chk999); // NOI18N
// Add creates an edit frame; find and dispose
JFrame editFrame = JFrameOperator.waitJFrame(jmri.Bundle.formatMessage(rbxNamedTableSwing.getString("TitleEditNamedTable2"), "IQ:AUTO:0001", "NamedTable 999"), true, true); // NOI18N
JUnitUtil.dispose(editFrame);
JUnitUtil.dispose(logixNGFrame);
}
@Test
public void testAddNamedTable() {
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
AbstractLogixNGTableAction logixNGTable = (AbstractLogixNGTableAction) a;
logixNGTable.actionPerformed(null); // show table
JFrame logixNGFrame = JFrameOperator.waitJFrame(Bundle.getMessage("TitleNamedTableTable"), true, true); // NOI18N
Assert.assertNotNull("Found NamedTable Frame", logixNGFrame); // NOI18N
logixNGTable.addPressed(null);
JFrameOperator addFrame = new JFrameOperator(Bundle.getMessage("TitleAddNamedTable")); // NOI18N
Assert.assertNotNull("Found Add NamedTable Frame", addFrame); // NOI18N
//disable "Auto System Name" via checkbox
JCheckBoxOperator jcbo = new JCheckBoxOperator(addFrame,Bundle.getMessage("LabelAutoSysName"));
jcbo.doClick();
new JTextFieldOperator(addFrame, 0).setText("IQ105"); // NOI18N
new JTextFieldOperator(addFrame, 1).setText("NamedTable 105"); // NOI18N
new JButtonOperator(addFrame, Bundle.getMessage("ButtonCreate")).push(); // NOI18N
NamedTable chk105 = jmri.InstanceManager.getDefault(NamedTableManager.class).getNamedTable("NamedTable 105"); // NOI18N
Assert.assertNotNull("Verify IQ105 Added", chk105); // NOI18N
// Add creates an edit frame; find and dispose
JFrame editFrame = JFrameOperator.waitJFrame(jmri.Bundle.formatMessage(rbxNamedTableSwing.getString("TitleEditNamedTable2"), "IQ105", "NamedTable 105"), true, true); // NOI18N
JUnitUtil.dispose(editFrame);
JUnitUtil.dispose(logixNGFrame);
}
@Test
public void testDeleteNamedTable() throws InterruptedException {
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
AbstractLogixNGTableAction logixNGTable = (AbstractLogixNGTableAction) a;
logixNGTable.actionPerformed(null); // show table
JFrame logixNGFrame = JFrameOperator.waitJFrame(Bundle.getMessage("TitleNamedTableTable"), true, true); // NOI18N
Assert.assertNotNull("Found NamedTable Frame", logixNGFrame); // NOI18N
// Delete IQ102, respond No
Thread t1 = createModalDialogOperatorThread(Bundle.getMessage("QuestionTitle"), Bundle.getMessage("ButtonNo")); // NOI18N
logixNGTable.deletePressed("IQ102"); // NOI18N
t1.join();
NamedTable chk102 = jmri.InstanceManager.getDefault(NamedTableManager.class).getBySystemName("IQ102"); // NOI18N
Assert.assertNotNull("Verify IQ102 Not Deleted", chk102); // NOI18N
// Delete IQ103, respond Yes
Thread t2 = createModalDialogOperatorThread(Bundle.getMessage("QuestionTitle"), Bundle.getMessage("ButtonYes")); // NOI18N
logixNGTable.deletePressed("IQ103"); // NOI18N
t2.join();
NamedTable chk103 = jmri.InstanceManager.getDefault(NamedTableManager.class).getBySystemName("IQ103"); // NOI18N
Assert.assertNull("Verify IQ103 Is Deleted", chk103); // NOI18N
JUnitUtil.dispose(logixNGFrame);
}
Thread createModalDialogOperatorThread(String dialogTitle, String buttonText) {
Thread t = new Thread(() -> {
// constructor for jdo will wait until the dialog is visible
JDialogOperator jdo = new JDialogOperator(dialogTitle);
JButtonOperator jbo = new JButtonOperator(jdo, buttonText);
jbo.pushNoBlock();
});
t.setName(dialogTitle + " Close Dialog Thread");
t.start();
return t;
}
*/
@BeforeEach
@Override
public void setUp() {
JUnitUtil.setUp();
jmri.util.JUnitUtil.resetProfileManager();
jmri.util.JUnitUtil.initLogixManager();
jmri.util.JUnitUtil.initDefaultUserMessagePreferences();
jmri.util.JUnitUtil.initLogixNGManager();
// InstanceManager.getDefault(NamedTablePreferences.class).setLimitRootActions(false);
InstanceManager.getDefault(UserPreferencesManager.class)
.setSimplePreferenceState(ConditionalNGEditor.class.getName()+".AutoSystemName", true);
//// InstanceManager.getDefault(NamedTableManager.class).createNamedTable("IQ101", "NamedTable 101");
//// InstanceManager.getDefault(NamedTableManager.class).createNamedTable("IQ102", "NamedTable 102");
//// InstanceManager.getDefault(NamedTableManager.class).createNamedTable("IQ103", "NamedTable 103");
//// InstanceManager.getDefault(NamedTableManager.class).createNamedTable("IQ104", "NamedTable 104");
helpTarget = "package.jmri.jmrit.beantable.NamedTableTable";
a = new LogixNGTableTableAction();
}
@AfterEach
@Override
public void tearDown() {
a = null;
jmri.jmrit.logixng.util.LogixNG_Thread.stopAllLogixNGThreads();
JUnitUtil.deregisterBlockManagerShutdownTask();
JUnitUtil.tearDown();
}
// private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogixNGTableTableActionTest.class);
}