package jmri.jmrit.symbolicprog.tabbedframe; import java.awt.event.WindowEvent; import java.io.IOException; import javax.swing.JPanel; import jmri.jmrit.decoderdefn.DecoderFile; import jmri.jmrit.roster.RosterEntry; import jmri.util.JUnitUtil; import jmri.util.junit.annotations.DisabledIfHeadless; import org.jdom2.DocType; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.JDOMException; import org.junit.jupiter.api.*; /** * Test PaneProg with qualified variables. * * @author Bob Jacobsen Copyright 2010 */ public class QualifiedVarTest { // show me a specially-created frame @Test @DisabledIfHeadless public void testFrame() { setupDoc(); DecoderFile df = new DecoderFile("NMRA", "", "NMRA standard CV definitions", "0", "255", "NMRA standard CV definitions", "0NMRA.xml", 16, 3, root); var progDebug = new jmri.progdebugger.ProgDebugger(); PaneProgFrame p = new PaneProgFrame(df, new RosterEntry(), "test qualified var", "programmers/Basic.xml", progDebug, false) { // dummy implementations @Override protected JPanel getModePane() { return null; } // prevent this test from prompting to save file @Override protected boolean checkDirtyFile() { return false; } // detached pane selection @Override protected boolean checkDontDetachPanes() { return false; } }; JUnitUtil.waitFor(()->{return p.threadCount.get() == 0;}, "PaneProgFrame threads done"); // get the sample info try { jmri.jmrit.XmlFile file = new jmri.jmrit.XmlFile() { }; org.jdom2.Element el = file.rootFromFile(new java.io.File("java/test/jmri/jmrit/symbolicprog/tabbedframe/pass/DecoderWithQualifier.xml")); DecoderFile df1 = new DecoderFile(); // used as a temporary df1.loadVariableModel(el.getChild("decoder"), p.variableModel); } catch (IOException | JDOMException e) { log.error("Exception during setup", e); } p.readConfig(root, new RosterEntry()); p.pack(); p.setVisible(true); // close the window for cleanliness p.dispatchEvent(new WindowEvent(p, WindowEvent.WINDOW_CLOSING)); } // static variables for internal classes to report their interpretations // static String result = null; // static int colCount = -1; // static int varCount = -1; // variables for the test XML structures private Element root = null; // Document doc = null; // provide a test document in the above static variables void setupDoc() { // create a JDOM tree with just some elements root = new Element("programmer-config"); Document doc = new Document(root); doc.setDocType(new DocType("programmer-config", "programmer-config.dtd")); // add some elements root.addContent(new Element("programmer") .setAttribute("showFnLanelPane", "no") .setAttribute("showRosterMediaPane", "no") .addContent(new Element("pane") .setAttribute("name", "Test") .addContent(new Element("column") .addContent(new Element("display") .setAttribute("item", "Primary Address") ) .addContent(new Element("display") .setAttribute("item", "CV2") ) .addContent(new Element("display") .setAttribute("item", "CV3") ) .addContent(new Element("display") .setAttribute("item", "CV4") ) .addContent(new Element("display") .setAttribute("item", "CV5") ) .addContent(new Element("display") .setAttribute("item", "CV6") ) .addContent(new Element("separator")) .addContent(new Element("label") .setAttribute("label", "set cv3 >= 100 to see CV4") ) .addContent(new Element("label") .setAttribute("label", "set cv3 <=100 to see CV5, CV6") ) ) .addContent(new Element("column") .addContent(new Element("display") .setAttribute("item", "Minor Version Number") ) .addContent(new Element("display") .setAttribute("item", "Major Version Number") ) .addContent(new Element("display") .setAttribute("item", "iCV53.5.0") ) .addContent(new Element("display") .setAttribute("item", "iCV55.92.0") ) .addContent(new Element("display") .setAttribute("item", "iCV55.92.1") ) .addContent(new Element("separator")) .addContent(new Element("label") .setAttribute("label", "set cv3 >= 100 to see iCV53.5.0") ) .addContent(new Element("label") .setAttribute("label", "set minor >= 100 to see iCV55.92.0") ) .addContent(new Element("label") .setAttribute("label", "set minor, major >= 100 to see iCV55.92.1") ) ) ) .addContent(new Element("pane") .setAttribute("name", "CV") .addContent(new Element("column") .addContent(new Element("cvtable")) ) ) .addContent(new Element("pane") .setAttribute("name", "CV3>50") .addContent(new Element("qualifier") .addContent(new Element("variableref") .addContent("CV3") ) .addContent(new Element("relation") .addContent("gt") ) .addContent(new Element("value") .addContent("50") ) ) .addContent(new Element("column") .addContent(new Element("display") .setAttribute("item", "CV3") ) .addContent(new Element("display") .setAttribute("item", "CV4") ) .addContent(new Element("label") .setAttribute("label", "Pane visible with CV3>100") ) ) ) ); // end of adding contents } private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(QualifiedVarTest.class); @BeforeEach public void setUp() { JUnitUtil.setUp(); JUnitUtil.resetInstanceManager(); JUnitUtil.resetProfileManager(); JUnitUtil.initRosterConfigManager(); } @AfterEach public void tearDown() { JUnitUtil.clearShutDownManager(); JUnitUtil.resetWindows(false, false); // Detachable frame : "Comments : test qualified var" JUnitUtil.tearDown(); } }