Files
JIMRI/java/test/jmri/implementation/AbstractConsistTestBase.java
2026-06-17 14:00:51 +02:00

202 lines
8.5 KiB
Java
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package jmri.implementation;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import jmri.Consist;
import jmri.DccLocoAddress;
import jmri.jmrit.roster.Roster;
import jmri.jmrit.roster.RosterEntry;
import jmri.jmrit.symbolicprog.CvTableModel;
import jmri.jmrit.symbolicprog.CvValue;
import jmri.jmrit.symbolicprog.VariableTableModel;
import jmri.util.RosterTestUtil;
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;
/**
* Test simple functioning of Consist classes.
*
* @author Paul Copyright (C) 2017
*/
abstract public class AbstractConsistTestBase {
protected Consist c = null;
abstract public void setUp(); // should set the consist under test to c.
abstract public void tearDown(); // should clean up the consist c.
@Test public void testCtor() {
assertNotNull(c);
}
@Test
public void checkDisposeMethod(){
DccLocoAddress addressA = new DccLocoAddress(200,true);
DccLocoAddress addressB = new DccLocoAddress(250,true);
c.restore(addressA,true); // use restore here, as it does not send
// any data to the command station
c.restore(addressB,false); // use restore here, as it does not send
// any data to the command station
// before dispose, this should succeed.
assertTrue(c.contains(addressA), "A Advanced Consist Contains");
assertTrue(c.contains(addressB), "B Advanced Consist Contains");
c.dispose();
// after dispose, this should fail
Exception ex = Assertions.assertThrows( NullPointerException.class,
() -> c.contains(addressA), "A Advanced Consist Throws");
assertNotNull(ex);
ex = Assertions.assertThrows( NullPointerException.class,
() -> c.contains(addressB), "B Advanced Consist Throws");
assertNotNull(ex);
}
@Test
public void testGetConsistType(){
assertEquals(Consist.ADVANCED_CONSIST,c.getConsistType(), "default consist type");
}
@Test
public void testSetConsistTypeAdvanced(){
c.setConsistType(Consist.ADVANCED_CONSIST);
assertEquals(Consist.ADVANCED_CONSIST,c.getConsistType(), "default consist type");
}
@Test
public void testSetConsistTypeCS(){
c.setConsistType(Consist.CS_CONSIST);
// make sure an error message is generated.
jmri.util.JUnitAppender.assertErrorMessage("Consist Type Not Supported");
}
@Test
public void checkAddressAllowedGood(){
assertTrue( c.isAddressAllowed(new DccLocoAddress(200,true)),"AddressAllowed");
}
@Test
public void checkAddressAllowedBad(){
assertFalse( c.isAddressAllowed(new DccLocoAddress(0,false)), "AddressAllowed");
}
@Test
public void checkSizeLimitAdvanced(){
c.setConsistType(Consist.ADVANCED_CONSIST);
assertEquals(-1,c.sizeLimit(), "Advanced Consist Limit");
}
@Test
public void checkContainsAdvanced(){
c.setConsistType(Consist.ADVANCED_CONSIST);
DccLocoAddress addressA = new DccLocoAddress(200,true);
DccLocoAddress addressB = new DccLocoAddress(250,true);
// nothing added, should be false for all.
assertFalse( c.contains(addressA), "Advanced Consist Contains A");
assertFalse( c.contains(addressB), "Advanced Consist Contains B");
// add just addressA
c.restore(addressA,true); // use restore here, as it does not send
// any data to the command station
assertTrue( c.contains(addressA), "Advanced Consist Contains A");
assertFalse( c.contains(addressB), "Advanced Consist Contains B");
// then add addressB
c.restore(addressB,false);
assertTrue( c.contains(addressA), "Advanced Consist Contains A");
assertTrue( c.contains(addressB), "Advanced Consist Contains B");
}
@Test
public void checkGetLocoDirectionAdvanced(){
c.setConsistType(Consist.ADVANCED_CONSIST);
DccLocoAddress addressA = new DccLocoAddress(200,true);
DccLocoAddress addressB = new DccLocoAddress(250,true);
c.restore(addressA,true); // use restore here, as it does not send
// any data to the command station
c.restore(addressB,false); // revese direction.
assertTrue( c.getLocoDirection(addressA), "Direction in Advanced Consist A");
assertFalse( c.getLocoDirection(addressB), "Direction in Advanced Consist B");
}
@Test
public void checkGetSetLocoRosterIDAdvanced() throws IOException,FileNotFoundException {
RosterTestUtil.createTestRoster(new File(Roster.getDefault().getRosterLocation()),"rosterTest.xml");
RosterEntry entry = Roster.getDefault().getEntryForId("ATSF123");
assertNotNull(entry);
c.setConsistType(Consist.ADVANCED_CONSIST);
DccLocoAddress addressA = entry.getDccLocoAddress();
DccLocoAddress addressB = new DccLocoAddress(250,true);
c.restore(addressA,true); // use restore here, as it does not send
// any data to the command station
c.restore(addressB,false); // revese direction.
c.setRosterId(addressA,"ATSF123");
assertEquals( "ATSF123",c.getRosterId(addressA), "Roster ID A");
assertNull( c.getRosterId(addressB), "Roster ID B");
}
@Test
public void checkRemoveWithGetRosterIDAdvanced() throws IOException,FileNotFoundException {
RosterTestUtil.createTestRoster(new File(Roster.getDefault().getRosterLocation()),"rosterTest.xml");
RosterEntry entry = Roster.getDefault().getEntryForId("ATSF123");
assertNotNull(entry);
c.setConsistType(Consist.ADVANCED_CONSIST);
DccLocoAddress addressA = entry.getDccLocoAddress();
DccLocoAddress addressB = new DccLocoAddress(250,true);
c.restore(addressA,true); // use restore here, as it does not send
// any data to the command station
c.restore(addressB,false); // revese direction.
c.setRosterId(addressA,"ATSF123");
assertEquals( "ATSF123",c.getRosterId(addressA), "Roster ID A");
assertNull( c.getRosterId(addressB), "Roster ID B");
c.remove(addressA);
assertFalse( c.contains(addressA), "Roster A is no longer in consist");
}
@Test
public void checkAddRemoveWithRosterUpdateAdvanced() throws IOException,FileNotFoundException {
// verify the roster update process is active.
jmri.InstanceManager.getDefault(jmri.jmrit.consisttool.ConsistPreferencesManager.class).setUpdateCV19(true);
RosterTestUtil.createTestRoster(new File(Roster.getDefault().getRosterLocation()),"rosterTest.xml");
RosterEntry entry = Roster.getDefault().getEntryForId("ATSF123");
assertNotNull(entry);
c.setConsistType(Consist.ADVANCED_CONSIST);
DccLocoAddress addressA = entry.getDccLocoAddress();
DccLocoAddress addressB = new DccLocoAddress(250,true);
c.restore(addressA,true); // use restore here, as it does not send
// any data to the command station
c.restore(addressB,false); // revese direction.
c.setRosterId(addressA,"ATSF123");
// verify that roster ATSF123 has CV19 set to the consist address
CvTableModel cvTable = new CvTableModel(null, null); // will hold CV objects
VariableTableModel varTable = new VariableTableModel(null,new String[]{"Name","Value"},cvTable);
entry.readFile(); // read, but dont yet process
// load from decoder file
RosterTestUtil.loadDecoderFromLoco(entry,varTable);
entry.loadCvModel(varTable, cvTable);
CvValue cv19Value = cvTable.getCvByNumber("19");
assertEquals( c.getConsistAddress().getNumber(),cv19Value.getValue(), "CV19 value after add");
assertEquals( "ATSF123",c.getRosterId(addressA), "Roster ID A");
assertNull( c.getRosterId(addressB), "Roster ID B");
c.remove(addressA);
assertFalse( c.contains(addressA), "Roster A is no longer in consist");
cvTable = new CvTableModel(null, null); // will hold CV objects
varTable = new VariableTableModel(null,new String[]{"Name","Value"},cvTable);
entry.readFile(); // read, but dont yet process
// load from decoder file
RosterTestUtil.loadDecoderFromLoco(entry,varTable);
entry.loadCvModel(varTable, cvTable);
cv19Value = cvTable.getCvByNumber("19");
assertEquals( 0, cv19Value.getValue(), "CV19 value after remove");
}
}