Files
JIMRI/java/test/jmri/jmrit/decoderdefn/DecoderIndexFileTest.java
T
2026-06-17 14:00:51 +02:00

261 lines
13 KiB
Java

package jmri.jmrit.decoderdefn;
import java.util.List;
import javax.swing.JComboBox;
import jmri.util.JUnitUtil;
import org.jdom2.DocType;
import org.jdom2.Document;
import org.jdom2.Element;
import org.junit.jupiter.api.*;
/**
* Tests for DecoderIndexFile class.
*
* @author Bob Jacobsen, Copyright (c) 2001, 2002, 2025
*/
public class DecoderIndexFileTest {
@Test
public void testLoading() throws org.jdom2.JDOMException, java.io.IOException {
// set up the test object with guts
DecoderIndexFile di = new DecoderIndexFile();
setupDoc();
// invoke parsing
di.readMfgSection();
di.readFamilySection(decoderIndexElement);
// success here is getting to the end
}
@Test
public void testMfgSection() throws org.jdom2.JDOMException, java.io.IOException {
// set up the test object with guts
DecoderIndexFile di = new DecoderIndexFile();
setupDoc();
// invoke parsing
di.readMfgSection();
// check results
Assertions.assertEquals("129", di.mfgIdFromName("Digitrax"), "Digitrax ID from name ");
Assertions.assertEquals("999", di.mfgIdFromName("NMRA"), "NMRA ID from name ");
Assertions.assertEquals("Digitrax", di.mfgNameFromID("129"), "Digitrax name from id ");
}
@Test
public void testReadFamilySection() throws org.jdom2.JDOMException, java.io.IOException {
// set up the test object with guts
DecoderIndexFile di = new DecoderIndexFile();
setupDoc();
// invoke parsing
di.readMfgSection();
di.readFamilySection(decoderIndexElement);
// check first Digitrax decoder in test tree; actually the 5th decoder (counting 2 families)
Assertions.assertEquals("DH142", (di.decoderList.get(4)).getModel(), "1st decoder model ");
Assertions.assertEquals("Digitrax", (di.decoderList.get(4)).getMfg(), "1st decoder mfg ");
Assertions.assertEquals("129", (di.decoderList.get(4)).getMfgID(), "1st decoder mfgID ");
Assertions.assertEquals("FX2 family", (di.decoderList.get(4)).getFamily(), "1st decoder family ");
}
@Test
public void testReadFamily1() throws org.jdom2.JDOMException, java.io.IOException {
// set up the test object with guts
DecoderIndexFile di = new DecoderIndexFile();
setupDoc();
di.readMfgSection();
// parse a single Family
di.readFamily(family1);
// expect to find two decoders in a single family
Assertions.assertEquals(3, di.numDecoders(), "number of decoders ");
// check second one
Assertions.assertEquals("full set", (di.decoderList.get(1)).getModel(), "2nd decoder model ");
Assertions.assertEquals("NMRA", (di.decoderList.get(1)).getMfg(), "2nd decoder mfg ");
Assertions.assertEquals("999", (di.decoderList.get(1)).getMfgID(), "2nd decoder mfgID ");
Assertions.assertEquals("NMRA S&RP definitions", (di.decoderList.get(1)).getFamily(), "2nd decoder family ");
}
@Test
public void testReadFamily2() throws org.jdom2.JDOMException, java.io.IOException {
// set up the test object with guts
DecoderIndexFile di = new DecoderIndexFile();
setupDoc();
di.readMfgSection();
// parse a single Family
di.readFamily(family2);
// expect to find two decoders in a single family
Assertions.assertEquals(3, di.numDecoders(), "number of decoders ");
// check family entry
Assertions.assertEquals("FX2 family", (di.decoderList.get(0)).getModel(), "1st decoder model ");
Assertions.assertEquals("Digitrax", (di.decoderList.get(0)).getMfg(), "1st decoder mfg ");
Assertions.assertEquals("129", (di.decoderList.get(0)).getMfgID(), "1st decoder mfgID ");
Assertions.assertEquals("FX2 family", (di.decoderList.get(0)).getFamily(), "1st decoder family ");
Assertions.assertEquals(-1, (di.decoderList.get(0)).getNumFunctions(), "1st decoder numFns ");
Assertions.assertEquals(-1, (di.decoderList.get(0)).getNumOutputs(), "1st decoder numOuts ");
// check first read decoder
Assertions.assertEquals("DH142", (di.decoderList.get(1)).getModel(), "1st decoder model ");
Assertions.assertEquals("Digitrax", (di.decoderList.get(1)).getMfg(), "1st decoder mfg ");
Assertions.assertEquals("129", (di.decoderList.get(1)).getMfgID(), "1st decoder mfgID ");
Assertions.assertEquals("FX2 family", (di.decoderList.get(1)).getFamily(), "1st decoder family ");
Assertions.assertEquals(4, (di.decoderList.get(1)).getNumFunctions(), "1st decoder numFns ");
Assertions.assertEquals(2, (di.decoderList.get(1)).getNumOutputs(), "1st decoder numOuts ");
// check second real decoder
Assertions.assertEquals("DN142", (di.decoderList.get(2)).getModel(), "2nd decoder model ");
Assertions.assertEquals("Digitrax", (di.decoderList.get(2)).getMfg(), "2nd decoder mfg ");
Assertions.assertEquals("129", (di.decoderList.get(2)).getMfgID(), "2nd decoder mfgID ");
Assertions.assertEquals("FX2 family", (di.decoderList.get(2)).getFamily(), "2nd decoder family ");
Assertions.assertEquals(5, (di.decoderList.get(2)).getNumFunctions(), "2nd decoder numFns ");
Assertions.assertEquals(1, (di.decoderList.get(2)).getNumOutputs(), "2nd decoder numOuts ");
}
@Test
public void testMatchingDecoderList() throws org.jdom2.JDOMException, java.io.IOException {
// set up the test object with guts
DecoderIndexFile di = new DecoderIndexFile();
setupDoc();
// invoke parsing
di.readMfgSection();
di.readFamilySection(decoderIndexElement);
// search for the two Digitrax decoders
List<DecoderFile> l1 = di.matchingDecoderList("Digitrax", null, null, null, null, null);
Assertions.assertEquals(3, l1.size(), "Found with name Digitrax ");
Assertions.assertEquals("DH142", (l1.get(1)).getModel(), "Found with name Digitrax ");
Assertions.assertEquals("DN142", (l1.get(2)).getModel(), "Found with name Digitrax ");
// search for the two decoders from mfgID 129
List<DecoderFile> l2 = di.matchingDecoderList(null, null, "129", null, null, null);
Assertions.assertEquals(3, l2.size(), "Found with id 129 ");
// search for the two from the NMRA family
List<DecoderFile> l3 = di.matchingDecoderList(null, "NMRA S&RP definitions", null, null, null, null);
Assertions.assertEquals(3, l3.size(), "Found from NMRA family ");
// search for the one with version ID 21
List<DecoderFile> l4 = di.matchingDecoderList(null, null, null, "21", null, null);
Assertions.assertEquals(1, l4.size(), "Found with version 21 ");
List<DecoderFile> l5 = di.matchingDecoderList("BMODE");
Assertions.assertEquals(3, l5.size(), "Found with mode BMODE ");
}
@Test
public void testMatchingComboBox() throws org.jdom2.JDOMException, java.io.IOException {
// set up the test object with guts
DecoderIndexFile di = new DecoderIndexFile();
setupDoc();
// invoke parsing
di.readMfgSection();
di.readFamilySection(decoderIndexElement);
// search for the two Digitrax decoders
JComboBox<String> l1 = di.matchingComboBox("Digitrax", null, null, null, null, null);
Assertions.assertEquals(3, l1.getItemCount(), "Found with name Digitrax ");
Assertions.assertEquals("DH142 (FX2 family)", l1.getItemAt(1), "Found with name Digitrax ");
Assertions.assertEquals("DN142 (FX2 family)", l1.getItemAt(2), "Found with name Digitrax ");
// search for the two decoders from mfgID 129
JComboBox<String> l2 = di.matchingComboBox(null, null, "129", null, null, null);
Assertions.assertEquals(3, l2.getItemCount(), "Found with id 129 ");
// search for the two from the NMRA family
JComboBox<String> l4 = di.matchingComboBox(null, "NMRA S&RP definitions", null, null, null, null);
Assertions.assertEquals(3, l4.getItemCount(), "Found from NMRA family ");
// search for the one with version ID 21
JComboBox<String> l3 = di.matchingComboBox(null, null, null, "21", null, null);
Assertions.assertEquals(1, l3.getItemCount(), "Found with version 21 ");
}
@Test
public void testMatchingVersionRange() throws org.jdom2.JDOMException, java.io.IOException {
// set up the test object with guts
DecoderIndexFile di = new DecoderIndexFile();
setupDoc();
// invoke parsing
di.readMfgSection();
di.readFamilySection(decoderIndexElement);
// search for the one with various version IDs
List<DecoderFile> l3;
l3 = di.matchingDecoderList(null, null, null, "20", null, null);
Assertions.assertEquals(0, l3.size(), "Found with version 20 ");
l3 = di.matchingDecoderList(null, null, null, "21", null, null);
Assertions.assertEquals(1, l3.size(), "Found with version 21 ");
l3 = di.matchingDecoderList(null, null, null, "22", null, null);
Assertions.assertEquals(1, l3.size(), "Found with version 22 ");
l3 = di.matchingDecoderList(null, null, null, "23", null, null);
Assertions.assertEquals(1, l3.size(), "Found with version 23 ");
l3 = di.matchingDecoderList(null, null, null, "24", null, null);
Assertions.assertEquals(1, l3.size(), "Found with version 24 ");
l3 = di.matchingDecoderList(null, null, null, "25", null, null);
Assertions.assertEquals(0, l3.size(), "Found with version 25 ");
}
// static variables for the test of XML structures
Element root = null;
Document doc = null;
Element decoderIndexElement = null;
Element family1 = null;
Element family2 = null;
// provide a test document in the above static variables
void setupDoc() {
// create a JDOM tree with just some elements
root = new Element("decoderIndex-config");
doc = new Document(root);
doc.setDocType(new DocType("decoderIndex-config", "decoderIndex-config.dtd"));
// add some elements
root.addContent(decoderIndexElement = new Element("decoderIndex")
.addContent(new Element("mfgList")
.addContent(new Element("manufacturer")
.setAttribute("mfg", "NMRA")
)
.addContent(new Element("manufacturer")
.setAttribute("mfg", "Digitrax")
.setAttribute("mfgID", "129")
)
)
.addContent(new Element("familyList")
.addContent(family1 = new Element("family")
.setAttribute("mfg", "NMRA")
.setAttribute("name", "NMRA S&RP definitions")
.setAttribute("file", "NMRA.xml")
.addContent(new Element("model")
.setAttribute("model", "full set")
.setAttribute("comment", "all CVs in RP 9.2.1")
)
.addContent(new Element("model")
.setAttribute("model", "required set")
.setAttribute("comment", "required CVs in RP 9.2.1")
)
)
.addContent(family2 = new Element("family")
.setAttribute("mfg", "Digitrax")
.setAttribute("name", "FX2 family")
.setAttribute("file", "DH142.xml")
.setAttribute("modes", "AMODE,BMODE")
.addContent(new Element("model")
.setAttribute("model", "DH142")
.setAttribute("numFns", "4")
.setAttribute("numOuts", "2")
.setAttribute("lowVersionID", "21")
)
.addContent(new Element("model")
.setAttribute("model", "DN142")
.setAttribute("numFns", "5")
.setAttribute("numOuts", "1")
.addContent(new Element("versionCV")
.setAttribute("lowVersionID", "22")
.setAttribute("highVersionID", "24")
)
)
)
)
); // end of adding contents
}
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
}
@AfterEach
public void tearDown() {
JUnitUtil.tearDown();
}
// private static final Logger log = LoggerFactory.getLogger(DecoderIndexFileTest.class);
}