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 { 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. *

* 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); }