283 lines
10 KiB
Java
283 lines
10 KiB
Java
package jmri.jmrit.symbolicprog.tabbedframe;
|
|
|
|
import java.awt.event.WindowEvent;
|
|
|
|
import javax.swing.JFrame;
|
|
import javax.swing.JPanel;
|
|
|
|
import jmri.jmrit.decoderdefn.DecoderFile;
|
|
import jmri.jmrit.roster.RosterEntry;
|
|
import jmri.jmrit.symbolicprog.CvTableModel;
|
|
import jmri.jmrit.symbolicprog.VariableTableModel;
|
|
import jmri.util.JUnitUtil;
|
|
import jmri.util.junit.annotations.DisabledIfHeadless;
|
|
|
|
import org.jdom2.DocType;
|
|
import org.jdom2.Document;
|
|
import org.jdom2.Element;
|
|
import org.junit.jupiter.api.*;
|
|
|
|
/**
|
|
* Tests for PaneProgFrame.
|
|
*
|
|
* @author Bob Jacobsen
|
|
*/
|
|
public class PaneProgFrameTest {
|
|
|
|
// test creating a pane in config file
|
|
@Test
|
|
@DisabledIfHeadless
|
|
public void testPane() {
|
|
setupDoc();
|
|
|
|
// create test object
|
|
result = null;
|
|
|
|
PaneProgFrame p = new PaneProgFrame(null, new RosterEntry(),
|
|
"test frame", "programmers/Basic.xml",
|
|
new jmri.progdebugger.ProgDebugger(), false) {
|
|
// dummy implementations
|
|
@Override
|
|
protected JPanel getModePane() {
|
|
return new JPanel();
|
|
}
|
|
};
|
|
|
|
// invoke
|
|
result = null;
|
|
p.readConfig(root, new RosterEntry());
|
|
|
|
JUnitUtil.waitFor(()->{return p.paneList.size() == 4;}, "frame list 4");
|
|
// three panes in root, plus roster entry pane
|
|
|
|
JFrame f = jmri.util.JmriJFrame.getFrame("Programming: test frame");
|
|
Assertions.assertNotNull(f, "found frame");
|
|
p.dispatchEvent(new WindowEvent(p, WindowEvent.WINDOW_CLOSING));
|
|
}
|
|
|
|
// show me the specially-created frame
|
|
@Test
|
|
@DisabledIfHeadless
|
|
public void testFrame() {
|
|
setupDoc();
|
|
PaneProgFrame p = new PaneProgFrame(null, new RosterEntry(),
|
|
"test frame", "programmers/Basic.xml",
|
|
new jmri.progdebugger.ProgDebugger(), false) {
|
|
// dummy implementations
|
|
@Override
|
|
protected JPanel getModePane() {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
// ugly, temporary way to load the decoder info
|
|
jmri.jmrit.decoderdefn.DecoderFileTest t = new jmri.jmrit.decoderdefn.DecoderFileTest();
|
|
t.setupDecoder();
|
|
DecoderFile df = new DecoderFile(); // used as a temporary
|
|
df.loadVariableModel(t.decoder, p.variableModel);
|
|
|
|
p.readConfig(root, new RosterEntry());
|
|
p.pack();
|
|
p.setVisible(true);
|
|
|
|
JUnitUtil.waitFor(()->{return p.threadCount.get() == 0;}, "PaneProgFrame threads done");
|
|
|
|
JFrame f = jmri.util.JmriJFrame.getFrame("Editing: test frame"); // frame title starts with Editing
|
|
Assertions.assertNotNull(f, "found frame");
|
|
p.dispatchEvent(new WindowEvent(p, WindowEvent.WINDOW_CLOSING));
|
|
}
|
|
|
|
@Test
|
|
@DisabledIfHeadless
|
|
public void testLoadDecoderFileUpdateMaxFnNum() {
|
|
// create test Element
|
|
org.jdom2.Element e = new org.jdom2.Element("locomotive")
|
|
.setAttribute("id", "our id 4")
|
|
.setAttribute("fileName", "file here")
|
|
.setAttribute("roadNumber", "431")
|
|
.setAttribute("roadName", "SP")
|
|
.setAttribute("mfg", "Athearn")
|
|
.setAttribute("dccAddress", "1234")
|
|
.addContent(new org.jdom2.Element("decoder")
|
|
.setAttribute("family", "91")
|
|
.setAttribute("model", "33")
|
|
.setAttribute("comment", "decoder comment")
|
|
); // end create element
|
|
|
|
RosterEntry r = new RosterEntry(e) { // a temporary storage, need to override some methods
|
|
@Override
|
|
protected void warnShortLong(String s) {
|
|
}
|
|
|
|
@Override
|
|
public void loadFunctions(Element e3, String source) {
|
|
}
|
|
|
|
@Override
|
|
public void loadSounds(Element e3, String source) {
|
|
}
|
|
|
|
@Override
|
|
public void updateFile() {
|
|
}
|
|
|
|
@Override
|
|
public void writeFile(CvTableModel cvModel, VariableTableModel variableModel) {
|
|
}
|
|
};
|
|
|
|
org.jdom2.Element o = r.store();
|
|
|
|
// check test attributes are loaded
|
|
Assertions.assertEquals(e.toString(), o.toString(), "XML Element ");
|
|
Assertions.assertEquals("91", o.getChild("decoder").getAttribute("family").getValue(), "family ");
|
|
Assertions.assertEquals("33", o.getChild("decoder").getAttribute("model").getValue(), "model ");
|
|
Assertions.assertEquals("decoder comment", o.getChild("decoder").getAttribute("comment").getValue(), "comment");
|
|
Assertions.assertEquals("28", o.getChild("decoder").getAttribute("maxFnNum").getValue(), "default maxFnNum is loaded");
|
|
|
|
// ugly, temporary way to load the decoder info
|
|
jmri.jmrit.decoderdefn.DecoderFileTest t = new jmri.jmrit.decoderdefn.DecoderFileTest();
|
|
t.setupDecoder();
|
|
DecoderFile df = new DecoderFile() { // a temporary storage, need to override some methods
|
|
@Override
|
|
public String getFileName() {
|
|
return "0NMRA_test.xml";
|
|
}
|
|
|
|
@Override
|
|
public String getProductID() {
|
|
return getModelElement().getAttributeValue("productID");
|
|
}
|
|
|
|
@Override
|
|
public Element getModelElement() {
|
|
return t.model;
|
|
}
|
|
};
|
|
|
|
setupDoc();
|
|
PaneProgFrame p = new PaneProgFrame(null, new RosterEntry(),
|
|
"test frame", "programmers/Basic.xml",
|
|
new jmri.progdebugger.ProgDebugger(), false) {
|
|
// dummy implementations
|
|
@Override
|
|
protected JPanel getModePane() {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
protected boolean checkDirtyDecoder() {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
protected boolean checkDirtyFile() {
|
|
return false;
|
|
}
|
|
};
|
|
|
|
df.loadVariableModel(t.decoder, p.variableModel);
|
|
p.loadDecoderFile(df, r);
|
|
o = r.store();
|
|
|
|
Assertions.assertEquals("31", t.model.getAttribute("maxFnNum").getValue(), "model maxFnNum ");
|
|
Assertions.assertEquals("31", o.getChild("decoder").getAttribute("maxFnNum").getValue(), "roster entry maxFnNum ");
|
|
|
|
JUnitUtil.waitFor(()->{return p.threadCount.get() == 0;}, "PaneProgFrame threads done");
|
|
|
|
p.dispatchEvent(new WindowEvent(p, WindowEvent.WINDOW_CLOSING));
|
|
}
|
|
|
|
// variables for internal classes to report their interpretations
|
|
private String result = "";
|
|
private int colCount = -1;
|
|
private int varCount = -1;
|
|
|
|
// variables for the test XML structures
|
|
private Element root = null;
|
|
private Document doc = null;
|
|
|
|
// provide a test document in the above variables
|
|
void setupDoc() {
|
|
Assertions.assertNull( result);
|
|
Assertions.assertEquals(-1, colCount);
|
|
Assertions.assertEquals(-1, varCount);
|
|
|
|
// create a JDOM tree with just some elements
|
|
root = new Element("programmer-config");
|
|
doc = new Document(root);
|
|
doc.setDocType(new DocType("programmer-config", "programmer-config.dtd"));
|
|
|
|
// add some elements
|
|
root.addContent(new Element("programmer")
|
|
.setAttribute("showFnLanelPane", "yes")
|
|
.setAttribute("showRosterMediaPane", "yes")
|
|
.addContent(new Element("pane")
|
|
.setAttribute("name", "Basic")
|
|
.addContent(new Element("column")
|
|
.addContent(new Element("display")
|
|
.setAttribute("item", "Address")
|
|
)
|
|
.addContent(new Element("display")
|
|
.setAttribute("item", "Start voltage")
|
|
)
|
|
.addContent(new Element("display")
|
|
.setAttribute("item", "Normal direction of motion")
|
|
)
|
|
)
|
|
.addContent(new Element("column")
|
|
.addContent(new Element("display")
|
|
.setAttribute("item", "Address")
|
|
)
|
|
.addContent(new Element("display")
|
|
.setAttribute("item", "Normal direction of motion")
|
|
)
|
|
.addContent(new Element("display")
|
|
.setAttribute("item", "Normal direction of motion")
|
|
.setAttribute("format", "checkbox")
|
|
)
|
|
.addContent(new Element("display")
|
|
.setAttribute("item", "Normal direction of motion")
|
|
.setAttribute("format", "radiobuttons")
|
|
)
|
|
)
|
|
)
|
|
.addContent(new Element("pane")
|
|
.setAttribute("name", "CV")
|
|
.addContent(new Element("column")
|
|
.addContent(new Element("cvtable"))
|
|
)
|
|
)
|
|
.addContent(new Element("pane")
|
|
.setAttribute("name", "Other")
|
|
.addContent(new Element("column")
|
|
.addContent(new Element("display")
|
|
.setAttribute("item", "Address")
|
|
)
|
|
.addContent(new Element("display")
|
|
.setAttribute("item", "Normal direction of motion")
|
|
)
|
|
)
|
|
)
|
|
); // end of adding contents
|
|
}
|
|
|
|
@BeforeEach
|
|
public void setUp() {
|
|
JUnitUtil.setUp();
|
|
JUnitUtil.resetProfileManager();
|
|
JUnitUtil.initRosterConfigManager();
|
|
result = null;
|
|
colCount = -1;
|
|
varCount = -1;
|
|
}
|
|
|
|
@AfterEach
|
|
public void tearDown() {
|
|
JUnitUtil.clearShutDownManager();
|
|
JUnitUtil.resetWindows(false, false); // Detachable frame : "Basic : test frame"
|
|
JUnitUtil.tearDown();
|
|
}
|
|
|
|
}
|