185 lines
6.5 KiB
Java
185 lines
6.5 KiB
Java
package jmri.jmrit.beantable;
|
|
|
|
import jmri.Manager;
|
|
import jmri.ProvidingManager;
|
|
import jmri.NamedBean;
|
|
import jmri.util.JUnitAppender;
|
|
|
|
import org.junit.Assert;
|
|
import org.junit.jupiter.api.*;
|
|
import static org.junit.Assert.*;
|
|
|
|
/**
|
|
* This is an abstract base class for testing bean table data models.
|
|
* This contains a base level of testing for these objects.
|
|
*
|
|
* @param <B> supported type of NamedBean
|
|
* @author Paul Bender Copyright (C) 2017
|
|
* @author Steve Young Copyright (C) 2021
|
|
*/
|
|
public abstract class AbstractBeanTableDataModelBase<B extends NamedBean> {
|
|
|
|
/**
|
|
* The Bean Table Model under test.
|
|
* Should be constructed in the setUp() of the tested class.
|
|
*/
|
|
protected BeanTableDataModel<B> t;
|
|
|
|
/**
|
|
* Get Number of Columns in tested model.
|
|
* To be overridden by tested class.
|
|
* @return number of cols.
|
|
*/
|
|
abstract protected int getModelColumnCount();
|
|
|
|
/**
|
|
* Create a NamedBean to use in the Table.
|
|
* @return the NamedBean, hardware address normally 1, e.g. IS1.
|
|
*/
|
|
protected NamedBean createBean(){
|
|
Manager<?> mgr = t.getManager(); // Internal Proxy Bean<?> Manager
|
|
Assert.assertNotNull("Table Bean Manager exists",mgr);
|
|
if (mgr instanceof ProvidingManager){
|
|
NamedBean b = ((ProvidingManager<?>) mgr).provide(mgr.getSystemNamePrefix()+"1");
|
|
Assert.assertNotNull("Bean created",b);
|
|
return b;
|
|
} else {
|
|
Assert.fail("Manager is not a providing manager, this test should be overridden to create a bean");
|
|
return null;
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void testTableNotNull() {
|
|
Assert.assertNotNull("Table exists in tested class",t);
|
|
}
|
|
|
|
@Test
|
|
public void testGetRowCount(){
|
|
assertEquals("0 Rows when model created",0, t.getRowCount());
|
|
createBean();
|
|
assertEquals("1 Row when NamedBean created",1, t.getRowCount());
|
|
}
|
|
|
|
/**
|
|
* Test of getColumnCount method.
|
|
* Should NOT overridden by implementing Tests
|
|
*/
|
|
@Test
|
|
public void testGetColumnCount() {
|
|
assertEquals("Correct Number Columns",getModelColumnCount(), t.getColumnCount());
|
|
}
|
|
|
|
/**
|
|
* Test of getColumnName method, of base class BeanTableDataModel.
|
|
* Should NOT overridden by implementing Tests as these columns should
|
|
* be present on all Bean Tables.
|
|
*/
|
|
@Test
|
|
public void testGetBaseColumnNames() {
|
|
assertEquals("Column0 - Bean toString",Bundle.getMessage("ColumnSystemName"), t.getColumnName(0));
|
|
assertEquals("Column1 - UserName",Bundle.getMessage("ColumnUserName"), t.getColumnName(1));
|
|
assertEquals("Column2 - Bean value",Bundle.getMessage("ColumnState"), t.getColumnName(2));
|
|
assertEquals("Column3 - User Comment",Bundle.getMessage("ColumnComment"), t.getColumnName(3));
|
|
assertEquals("Column4 - Delete button","", t.getColumnName(4));
|
|
|
|
}
|
|
|
|
/**
|
|
* Test of getColumn Name method with no column in model.
|
|
* Should NOT be overridden by implementing Tests
|
|
*/
|
|
@Test
|
|
public void testGetColumnNameNone() {
|
|
assertEquals("No column, no name via super.","btm unknown",t.getColumnName(t.getColumnCount()) );
|
|
}
|
|
|
|
/**
|
|
* Test of isCellEditable Name method with no column in model.
|
|
* Should NOT be overridden by implementing Tests
|
|
*/
|
|
@Test
|
|
public void testCellEditableColumnNone() {
|
|
createBean(); // ensure there is a row 0
|
|
assertEquals("No column, not editable",false,t.isCellEditable(0,t.getColumnCount()) );
|
|
}
|
|
|
|
/**
|
|
* Test of getValueAt method with no column in model.
|
|
* Should NOT be overridden by implementing Tests
|
|
*/
|
|
@Test
|
|
public void testGetValueAtNoColumn() {
|
|
createBean(); // ensure there is a row 0
|
|
assertEquals("No column, no value",null,t.getValueAt(0,t.getColumnCount()) );
|
|
JUnitAppender.assertErrorMessage("internal state inconsistent with table requst for getValueAt 0 "+t.getColumnCount());
|
|
}
|
|
|
|
/**
|
|
* Test of setValueAt method with no column in model.
|
|
* Should NOT be overridden by implementing Tests.
|
|
*/
|
|
@Test
|
|
public void testSetValueAtNoColumn() {
|
|
createBean(); // ensure there is a row 0
|
|
t.setValueAt(null,0,t.getColumnCount());
|
|
JUnitAppender.assertErrorMessage("btdm setvalueat 0 " + t.getColumnCount());
|
|
}
|
|
|
|
/**
|
|
* Test of getValueAt method with no column in model.
|
|
* Should NOT be overridden by implementing Tests
|
|
*/
|
|
@Test
|
|
public void testGetWidthNoColumn() {
|
|
Assert.assertTrue("No column, no value",t.getPreferredWidth(t.getColumnCount())>0);
|
|
JUnitAppender.assertErrorMessageStartsWith("Unexpected column in getPreferredWidth: "+t.getColumnCount());
|
|
}
|
|
|
|
/**
|
|
* Test of getColumnClass method with no column in model.
|
|
* Should NOT be overridden by implementing Tests
|
|
*/
|
|
@Test
|
|
public void testGetColumnClassNone() {
|
|
assertEquals("No column, no class",null,t.getColumnClass(t.getColumnCount()) );
|
|
}
|
|
|
|
/**
|
|
* Test of getColumnClass method, of base class BeanTableDataModel.
|
|
* Should NOT overridden by implementing Tests.
|
|
*/
|
|
@Test
|
|
public void testGetBaseColumnClasses() {
|
|
assertEquals("Col 0 Bean",NamedBean.class,t.getColumnClass(0) );
|
|
assertEquals("Col 1 UserName",String.class,t.getColumnClass(1) );
|
|
// col 2 could be graphic of current bean state or button to cange state
|
|
assertEquals("Col 3 User Comment",String.class,t.getColumnClass(3) );
|
|
assertEquals("Col 4 Delete Button",javax.swing.JButton.class,t.getColumnClass(4) );
|
|
}
|
|
|
|
@Test
|
|
public void testNBFromUserSystemNames(){
|
|
assertNull("UserName empty not found",t.getByUserName(""));
|
|
assertNull("UserName not found",t.getByUserName("NOT A USER NAME"));
|
|
assertNull("SystemName not found",t.getBySystemName("NOT A SYSTEM NAME"));
|
|
|
|
NamedBean nb = createBean();
|
|
nb.setUserName("NB UserName");
|
|
assertEquals("NB Not Found via getByUserName",nb,t.getByUserName("NB UserName"));
|
|
assertEquals("NB Not Found via getBySystemName",nb,t.getBySystemName(nb.getSystemName()));
|
|
}
|
|
|
|
/**
|
|
* Derived classes should use this method to set t.
|
|
*/
|
|
abstract public void setUp();
|
|
|
|
/**
|
|
* Derived classes should use this method to clean up after tests.
|
|
*/
|
|
abstract public void tearDown();
|
|
|
|
// private static final Logger log = LoggerFactory.getLogger(AbstractBeanTableDataModelBase.class);
|
|
}
|