Files
2026-06-17 14:00:51 +02:00

319 lines
11 KiB
Java

package jmri.jmrix.can.cbus.swing.eventtable;
import static org.junit.jupiter.api.Assertions.*;
import java.io.File;
import java.util.List;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import jmri.jmrix.can.CanSystemConnectionMemo;
import jmri.jmrix.can.TrafficControllerScaffold;
import jmri.jmrix.can.cbus.eventtable.CbusEventTableDataModel;
import jmri.util.*;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.io.TempDir;
import org.netbeans.jemmy.operators.*;
/**
* Test simple functioning of CbusEventTablePane.
*
* @author Paul Bender Copyright (C) 2016
* @author Steve Young Copyright (C) 2019
*/
@jmri.util.junit.annotations.DisabledIfHeadless
public class CbusEventTablePaneTest extends jmri.util.swing.JmriPanelTest {
@Test
public void testInitComp() {
((CbusEventTablePane)panel).initComponents(memo);
assertNotNull(panel);
assertEquals("CAN " + Bundle.getMessage("EventTableTitle"),panel.getTitle());
// check pane has loaded something
initFrame();
// Find new window by name
JFrameOperator jfo = new JFrameOperator( panel.getTitle() );
// new org.netbeans.jemmy.QueueTool().waitEmpty(100);
assertTrue(getNewEventButtonEnabled(jfo));
new JButtonOperator(jfo, Bundle.getMessage("NewEvent")).doClick(); // NOI18N
assertFalse(getNewEventButtonEnabled(jfo));
new JTextFieldOperator(jfo,1).typeText("1");
assertTrue(getNewEventButtonEnabled(jfo));
// new org.netbeans.jemmy.QueueTool().waitEmpty(100);
assertFalse(getClearFilterButtonEnabled(jfo));
new JTextFieldOperator(jfo,0).typeText("1");
// new org.netbeans.jemmy.QueueTool().waitEmpty(100);
assertTrue(getClearFilterButtonEnabled(jfo));
new JButtonOperator(jfo, Bundle.getMessage("ClearFilter")).doClick(); // NOI18N
// new org.netbeans.jemmy.QueueTool().waitEmpty(100);
assertFalse(getClearFilterButtonEnabled(jfo));
jfo.requestClose();
}
@Test
public void testMenuViewPanes(){
((CbusEventTablePane) panel).initComponents(memo);
initFrame();
// Find new window by name
JFrameOperator jfo = new JFrameOperator( panel.getTitle() );
JMenuBarOperator mainbar = new JMenuBarOperator(jfo);
// hide pane
mainbar.pushMenu(Bundle.getMessage("Display")); // stops at top level
JMenuOperator jmo = new JMenuOperator(mainbar, Bundle.getMessage("Display"));
new JMenuItemOperator(new JPopupMenuOperator(jmo.getPopupMenu()),Bundle.getMessage("FilterSurround")).push();
// hide pane
mainbar.pushMenu(Bundle.getMessage("Display")); // stops at top level
jmo = new JMenuOperator(mainbar, Bundle.getMessage("Display"));
new JMenuItemOperator(new JPopupMenuOperator(jmo.getPopupMenu()),Bundle.getMessage("NewEvent")).push();
// show pane
mainbar.pushMenu(Bundle.getMessage("Display")); // stops at top level
jmo = new JMenuOperator(mainbar, Bundle.getMessage("Display"));
new JMenuItemOperator(new JPopupMenuOperator(jmo.getPopupMenu()),Bundle.getMessage("NewTsl")).push();
assertFalse(getEditBeanButtonEnabled(jfo));
mainbar.pushMenu(Bundle.getMessage("Display")); // stops at top level
jmo = new JMenuOperator(mainbar, Bundle.getMessage("Display"));
new JMenuItemOperator(new JPopupMenuOperator(jmo.getPopupMenu()),Bundle.getMessage("NewTsl")).push();
// show pane
mainbar.pushMenu(Bundle.getMessage("Display")); // stops at top level
jmo = new JMenuOperator(mainbar, Bundle.getMessage("Display"));
new JMenuItemOperator(new JPopupMenuOperator(jmo.getPopupMenu()),Bundle.getMessage("ButtonSendEvent")).push();
assertTrue(getSendEventButtonEnabled(jfo));
jfo.requestClose();
}
@Test
public void testCellValues(){
((CbusEventTablePane) panel).initComponents(memo);
initFrame();
// Find new window by name
JFrameOperator jfo = new JFrameOperator( panel.getTitle() );
((CbusEventTablePane) panel).eventModel.provideEvent(0, 123);
((CbusEventTablePane) panel).eventModel.provideEvent(456, 789);
JTableOperator jTableOperator = new JTableOperator(jfo);
jTableOperator.waitCell("", 0, 0);
jTableOperator.waitCell("123", 0, 1);
jTableOperator.waitCell("456", 1, 0);
jTableOperator.waitCell("789", 1, 1);
jfo.requestClose();
}
@Test
public void testCellTsLValues(){
jmri.LightManager lm = memo.get(jmri.LightManager.class);
jmri.SensorManager sm = memo.get(jmri.SensorManager.class);
jmri.TurnoutManager tm = memo.get(jmri.TurnoutManager.class);
((CbusEventTablePane) panel).initComponents(memo);
initFrame();
// Find new window by name
JFrameOperator jfo = new JFrameOperator( panel.getTitle() );
// hide panes
JMenuBarOperator mainbar = new JMenuBarOperator(jfo);
mainbar.pushMenu(Bundle.getMessage("evColMenuName")); // stops at top level
JMenuOperator jmo = new JMenuOperator(mainbar, Bundle.getMessage("evColMenuName"));
new JMenuItemOperator(new JPopupMenuOperator(jmo.getPopupMenu()),Bundle.getMessage("ColumnName")).push();
mainbar.pushMenu(Bundle.getMessage("buttonCols")); // stops at top level
jmo = new JMenuOperator(mainbar, Bundle.getMessage("buttonCols"));
new JMenuItemOperator(new JPopupMenuOperator(jmo.getPopupMenu()),Bundle.getMessage("ColumnToggle")).push();
mainbar.pushMenu(Bundle.getMessage("evColMenuName")); // stops at top level
jmo = new JMenuOperator(mainbar, Bundle.getMessage("evColMenuName"));
new JMenuItemOperator(new JPopupMenuOperator(jmo.getPopupMenu()),Bundle.getMessage("ColumnComment")).push();
mainbar.pushMenu(Bundle.getMessage("latestEvCols")); // stops at top level
jmo = new JMenuOperator(mainbar, Bundle.getMessage("latestEvCols"));
new JMenuItemOperator(new JPopupMenuOperator(jmo.getPopupMenu()),Bundle.getMessage("CbusEventOnOrOff")).push();
lm.provide("ML+12").setUserName("MyL");
sm.provide("MS+N34E56").setUserName("MyS");
tm.provide("MT+N78E90").setUserName("MyT");
lm.provide("ML-12").setUserName("MyLb");
tm.provide("MT+12;-N34E56").setUserName("MyTb");
JTableOperator jTableOperator = new JTableOperator(jfo);
assertEquals(3, jTableOperator.getRowCount());
jTableOperator.waitCell("Turnout Thrown: MyT", 2, 2);
jTableOperator.waitCell("Turnout Closed: MyT", 2, 3);
tm.provide("MT+N78E90").setInverted(true);
jTableOperator.waitCell("Turnout Closed: MyT", 2, 2);
jTableOperator.waitCell("Turnout Thrown: MyT", 2, 3);
sm.provide("MS+65535").setUserName("MySa");
jTableOperator.waitCell("Sensor Active: MySa", 3, 2);
jTableOperator.waitCell("Sensor Inactive: MySa", 3, 3);
sm.provide("MS+65535").setInverted(true);
jTableOperator.waitCell("Sensor Inactive: MySa", 3, 2);
jTableOperator.waitCell("Sensor Active: MySa", 3, 3);
jfo.requestClose();
sm.dispose();
lm.dispose();
tm.dispose();
}
@Test
public void testPersistedViewPanes(){
((CbusEventTablePane) panel).initComponents(memo);
initFrame();
// Find new window by name
JFrameOperator jfo = new JFrameOperator( panel.getTitle() );
JMenuBarOperator mainbar = new JMenuBarOperator(jfo);
// show pane
mainbar.pushMenu(Bundle.getMessage("Display")); // stops at top level
JMenuOperator jmo = new JMenuOperator(mainbar, Bundle.getMessage("Display"));
new JMenuItemOperator(new JPopupMenuOperator(jmo.getPopupMenu()),Bundle.getMessage("NewTsl")).push();
// show pane
mainbar.pushMenu(Bundle.getMessage("Display")); // stops at top level
jmo = new JMenuOperator(mainbar, Bundle.getMessage("Display"));
new JMenuItemOperator(new JPopupMenuOperator(jmo.getPopupMenu()),Bundle.getMessage("ButtonSendEvent")).push();
panel.dispose();
panel = null;
panel = new CbusEventTablePane();
((CbusEventTablePane) panel).initComponents(memo);
initFrame();
assertFalse(getEditBeanButtonEnabled(jfo));
assertTrue(getSendEventButtonEnabled(jfo));
panel.dispose();
JUnitUtil.dispose(jfo.getWindow());
}
private boolean getNewEventButtonEnabled( JFrameOperator jfo ){
return ( new JButtonOperator(jfo,Bundle.getMessage("NewEvent")).isEnabled() );
}
private boolean getClearFilterButtonEnabled( JFrameOperator jfo ){
return ( new JButtonOperator(jfo,Bundle.getMessage("ClearFilter")).isEnabled() );
}
private boolean getEditBeanButtonEnabled( JFrameOperator jfo ){
return ( new JButtonOperator(jfo,Bundle.getMessage("EditUserName")).isEnabled() );
}
private boolean getSendEventButtonEnabled( JFrameOperator jfo ){
return ( new JButtonOperator(jfo,Bundle.getMessage("ButtonSend")).isEnabled() );
}
private void initFrame(){
JmriJFrame f = new JmriJFrame();
f.add(panel);
f.setTitle(panel.getTitle());
List<JMenu> list = panel.getMenus();
JMenuBar bar = f.getJMenuBar();
if (bar == null) {
bar = new JMenuBar();
}
for (JMenu menu : list) {
bar.add(menu);
}
f.setJMenuBar(bar);
ThreadingUtil.runOnGUI( () -> {
f.pack();
f.setVisible(true);
});
}
@TempDir
protected File tempDir;
private CanSystemConnectionMemo memo = null;
private TrafficControllerScaffold tcis = null;
@BeforeEach
@Override
public void setUp() {
super.setUp();
assertNotNull(tempDir);
try {
JUnitUtil.resetProfileManager( new jmri.profile.NullProfile( tempDir));
} catch ( java.io.IOException e) {
fail("Exception creating temp. user folder");
}
JUnitUtil.initDefaultUserMessagePreferences();
title = Bundle.getMessage("EventTableTitle");
helpTarget = "package.jmri.jmrix.can.cbus.swing.eventtable.EventTablePane";
memo = new CanSystemConnectionMemo();
tcis = new TrafficControllerScaffold();
memo.setTrafficController(tcis);
memo.setProtocol(jmri.jmrix.can.CanConfigurationManager.MERGCBUS);
memo.configureManagers();
panel = new CbusEventTablePane();
}
@AfterEach
@Override
public void tearDown() {
// event model instance should have been created following init
CbusEventTableDataModel dm = memo.get(CbusEventTableDataModel.class);
if ( dm !=null ){
dm.skipSaveOnDispose();
dm.dispose();
}
Assertions.assertNotNull(tcis);
tcis.terminateThreads();
Assertions.assertNotNull(memo);
memo.dispose();
memo = null;
tcis = null;
JUnitUtil.resetWindows(false,false);
JUnitUtil.deregisterBlockManagerShutdownTask();
super.tearDown();
}
}