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

86 lines
3.1 KiB
Java

package jmri.jmrix.ieee802154.xbee.configurexml;
import com.digi.xbee.api.XBeeDevice;
import javax.swing.*;
import jmri.configurexml.JmriConfigureXmlException;
import jmri.jmrix.ieee802154.xbee.ConnectionConfig;
import jmri.jmrix.ieee802154.xbee.XBeeNode;
import jmri.jmrix.ieee802154.xbee.XBeeTrafficController;
import jmri.util.JUnitUtil;
import jmri.util.ThreadingUtil;
import org.jdom2.Element;
import org.junit.jupiter.api.*;
import org.mockito.Mockito;
/**
* ConnectionConfigXmlTest.java
*
* Test for the ConnectionConfigXml class
*
* @author Paul Bender Copyright (C) 2016
*/
public class ConnectionConfigXmlTest extends jmri.jmrix.configurexml.AbstractSerialConnectionConfigXmlTestBase {
@Test
public void testLoadWithNode() throws JmriConfigureXmlException{
Assertions.assertNotNull(cc);
// reset the profile manager for this test, so it can run independently.
JUnitUtil.resetProfileManager();
// This test requires a configure manager.
JUnitUtil.initConfigureManager();
// Running this on the UI thread fixes some ConcurrentModificationExceptions errors.
boolean returned = ThreadingUtil.runOnGUIwithReturn(()->{
cc.loadDetails(new JPanel());
cc.setDisabled(true); // so we don't try to start the connection on load.
XBeeDevice localDevice = Mockito.mock(XBeeDevice.class);
XBeeTrafficController tc = Mockito.mock(XBeeTrafficController.class);
Mockito.when(tc.getXBee()).thenReturn(localDevice);
((jmri.jmrix.ieee802154.xbee.XBeeConnectionMemo) cc.getAdapter().getSystemConnectionMemo())
.setTrafficController(tc);
byte pan[] = {(byte) 0x00, (byte) 0x42};
byte uad[] = {(byte) 0x6D, (byte) 0x97};
byte gad[] = {(byte) 0x00, (byte) 0x13, (byte) 0xA2, (byte) 0x00, (byte) 0x40, (byte) 0xA0, (byte) 0x4D, (byte) 0x2D};
XBeeNode node = new XBeeNode(pan,uad,gad);
// The following line causes NullPointerException:
// Cannot invoke "com.digi.xbee.api.RemoteXBeeDevice.setNodeID(String)" because "this.device" is null
// node.setIdentifier("foo");
((jmri.jmrix.ieee802154.xbee.XBeeConnectionMemo) cc.getAdapter().getSystemConnectionMemo())
.getTrafficController().registerNode(node);
return true;
});
Assertions.assertTrue(returned, "GUI code did not complete");
// load details MAY produce an error message if no ports are found.
jmri.util.JUnitAppender.suppressErrorMessage("No usable ports returned");
Element e = xmlAdapter.store(cc);
//load what we just produced.
Assertions.assertDoesNotThrow( () ->
xmlAdapter.load(e, e));
}
@BeforeEach
@Override
public void setUp() {
JUnitUtil.setUp();
xmlAdapter = new ConnectionConfigXml();
cc = new ConnectionConfig();
}
@AfterEach
@Override
public void tearDown() {
JUnitUtil.clearShutDownManager();
JUnitUtil.tearDown();
xmlAdapter = null;
cc = null;
}
}