Files
JIMRI/java/test/jmri/jmrix/can/cbus/swing/nodeconfig/CbusNodeEditEventFrameTest.java
2026-06-17 14:00:51 +02:00

141 lines
5.0 KiB
Java

package jmri.jmrix.can.cbus.swing.nodeconfig;
import jmri.jmrix.can.CanSystemConnectionMemo;
import jmri.jmrix.can.TrafficControllerScaffold;
import jmri.jmrix.can.cbus.CbusConfigurationManager;
import jmri.jmrix.can.cbus.CbusPreferences;
import jmri.jmrix.can.cbus.node.CbusNode;
import jmri.jmrix.can.cbus.node.CbusNodeEvent;
import jmri.jmrix.can.cbus.node.CbusNodeTableDataModel;
import jmri.util.JUnitUtil;
import org.junit.Assert;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import org.netbeans.jemmy.operators.*;
/**
* Test simple functioning of CbusNodeEditEventFrame
*
* @author Paul Bender Copyright (C) 2016
* @author Steve Young Copyright (C) 2019
*/
@DisabledIfSystemProperty(named ="java.awt.headless", matches ="true")
public class CbusNodeEditEventFrameTest extends jmri.util.JmriJFrameTestBase {
@Test
public void testInitComponentsWithMainPaneAndMemo() {
Assertions.assertNotNull(nodeModel);
CbusNode nodeWithEventToEdit = nodeModel.provideNodeByNodeNum(256);
// short event 7 on node 256, no index, 4 ev vars
CbusNodeEvent eventToEdit = new CbusNodeEvent(memo,0,7,256,-1,4);
nodeWithEventToEdit.getNodeEventManager().addNewEvent(eventToEdit);
((CbusNodeEditEventFrame)frame).initComponents(memo,nodeWithEventToEdit.getNodeEventManager().getNodeEventByArrayID(0)); // memo, event to edit
Assert.assertEquals("title","Edit Event EN:7 on Node 256",frame.getTitle());
Assert.assertFalse("node / event select spinners not dirty",((CbusNodeEditEventFrame)frame).spinnersDirty() );
Assert.assertTrue("event 7 ",((CbusNodeEditEventFrame)frame).getEventVal()==7);
Assert.assertTrue("node 0 ",((CbusNodeEditEventFrame)frame).getNodeVal()==0);
// Find new window by name
JFrameOperator jfo = new JFrameOperator( frame.getTitle() );
Assert.assertFalse(getEditButtonEnabled(jfo));
Assert.assertTrue(getDeleteButtonEnabled(jfo));
Thread t = new Thread(() -> {
// delete event? yes / no
JDialogOperator jdo = new JDialogOperator(Bundle.getMessage("DelEvPopTitle"));
JButtonOperator jbo = new JButtonOperator(jdo, Bundle.getMessage("ButtonYes"));
jbo.pushNoBlock();
});
t.setName("Confirm Delete Event Dialog Thread");
t.start();
new JButtonOperator(jfo,Bundle.getMessage("ButtonDelete")).doClick();
JUnitUtil.waitFor(()-> !t.isAlive(), "Confirm Delete Event Dialog finished");
JUnitUtil.waitFor(()-> !tcis.outbound.isEmpty(), "at least 1 frame sent");
Assertions.assertEquals("[5f8] 53 01 00", tcis.outbound.get(0).toString()
,"Node Enter Learn Mode");
JUnitUtil.waitFor(()-> tcis.outbound.size() > 1, "2 frames sent");
Assertions.assertEquals("[5f8] 95 00 00 00 07", tcis.outbound.get(1).toString()
,"Unlearn Event 7");
JUnitUtil.waitFor(()-> tcis.outbound.size() > 2, "3 frames sent");
Assertions.assertEquals("[5f8] 54 01 00", tcis.outbound.get(2).toString()
,"Node Exit Learn Mode");
// window auto-closes as Event no longer exists
jfo.waitClosed();
}
private boolean getEditButtonEnabled( JFrameOperator jfo ){
return ( new JButtonOperator(jfo,Bundle.getMessage("EditEvent")).isEnabled() );
}
private boolean getDeleteButtonEnabled( JFrameOperator jfo ){
return ( new JButtonOperator(jfo,Bundle.getMessage("ButtonDelete")).isEnabled() );
}
private CanSystemConnectionMemo memo = null;
private TrafficControllerScaffold tcis = null;
private NodeConfigToolPane mainpane = null;
private CbusNodeTableDataModel nodeModel = null;
@BeforeEach
@Override
public void setUp() {
JUnitUtil.setUp();
JUnitUtil.resetInstanceManager();
memo = new CanSystemConnectionMemo();
tcis = new TrafficControllerScaffold();
memo.setTrafficController(tcis);
memo.setProtocol(jmri.jmrix.can.CanConfigurationManager.MERGCBUS);
memo.get(CbusPreferences.class).setNodeBackgroundFetchDelay(0);
nodeModel = memo.get(CbusConfigurationManager.class)
.provide(CbusNodeTableDataModel.class);
mainpane = new NodeConfigToolPane();
mainpane.initComponents(memo);
frame = new CbusNodeEditEventFrame(mainpane);
}
@AfterEach
@Override
public void tearDown() {
Assertions.assertNotNull(memo);
memo.dispose();
Assertions.assertNotNull(frame);
frame.dispose();
Assertions.assertNotNull(mainpane);
mainpane.dispose();
Assertions.assertNotNull(nodeModel);
nodeModel.dispose();
Assertions.assertNotNull(tcis);
tcis.terminateThreads();
mainpane = null;
frame = null;
nodeModel = null;
memo = null;
tcis = null;
JUnitUtil.tearDown();
}
// private static final Logger log = LoggerFactory.getLogger(CbusNodeEditEventFrameTest.class);
}