190 lines
6.7 KiB
Java
190 lines
6.7 KiB
Java
package jmri.managers;
|
|
|
|
import jmri.*;
|
|
|
|
import java.beans.PropertyChangeEvent;
|
|
import java.beans.PropertyChangeListener;
|
|
import java.beans.PropertyVetoException;
|
|
import java.beans.VetoableChangeListener;
|
|
|
|
import jmri.util.JUnitAppender;
|
|
|
|
import org.junit.Assert;
|
|
import org.junit.jupiter.api.*;
|
|
|
|
/**
|
|
* Base for the various Abstract*MgrTestBase base classes for NamedBean Manager
|
|
* test classes
|
|
* <p>
|
|
* This is not itself a test class, e.g. should not be added to a suite.
|
|
* Instead, this forms the base for test classes, including providing some
|
|
* common tests.
|
|
* <p>
|
|
* Quite a bit of AbstractManager testing is done in InternalSensorManagerTest
|
|
* to give it a concrete platform
|
|
*
|
|
* @author Bob Jacobsen Copyright (C) 2017
|
|
* @param <T> the class being tested
|
|
* @param <E> the class of NamedBean handled by T
|
|
*/
|
|
public abstract class AbstractManagerTestBase<T extends Manager<E>, E extends NamedBean> {
|
|
|
|
// Manager<E> under test - setUp() loads this
|
|
protected T l = null;
|
|
|
|
// check that you can add and remove listeners
|
|
@Test
|
|
public final void testManagerDataListenerAddAndRemove() {
|
|
|
|
Manager.ManagerDataListener<E> listener = new Manager.ManagerDataListener<E>() {
|
|
@Override
|
|
public void contentsChanged(Manager.ManagerDataEvent<E> e) {
|
|
// do nothing
|
|
}
|
|
|
|
@Override
|
|
public void intervalAdded(Manager.ManagerDataEvent<E> e) {
|
|
// do nothing
|
|
}
|
|
|
|
@Override
|
|
public void intervalRemoved(Manager.ManagerDataEvent<E> e) {
|
|
// do nothing
|
|
}
|
|
};
|
|
|
|
l.addDataListener(listener);
|
|
l.removeDataListener(listener);
|
|
|
|
l.removeDataListener(listener);
|
|
|
|
l.addDataListener(null);
|
|
l.removeDataListener(null);
|
|
|
|
l.addDataListener(null);
|
|
l.removeDataListener(listener);
|
|
|
|
l.addDataListener(listener);
|
|
l.removeDataListener(null);
|
|
|
|
}
|
|
|
|
@Test
|
|
public final void testPropertyChangeListenerAddAndRemove() {
|
|
|
|
int base = l.getPropertyChangeListeners().length;
|
|
|
|
PropertyChangeListener listener = new PropertyChangeListener() {
|
|
|
|
@Override
|
|
public void propertyChange(PropertyChangeEvent evt) {
|
|
// do nothing
|
|
}
|
|
};
|
|
|
|
Assert.assertEquals(base, l.getPropertyChangeListeners().length);
|
|
l.addPropertyChangeListener(listener);
|
|
Assert.assertEquals(base + 1, l.getPropertyChangeListeners().length);
|
|
l.removePropertyChangeListener(listener);
|
|
Assert.assertEquals(base, l.getPropertyChangeListeners().length);
|
|
|
|
Assert.assertEquals(base, l.getPropertyChangeListeners().length);
|
|
l.addPropertyChangeListener("property", listener);
|
|
Assert.assertEquals(base + 1, l.getPropertyChangeListeners().length);
|
|
Assert.assertEquals(1, l.getPropertyChangeListeners("property").length);
|
|
l.removePropertyChangeListener("property", listener);
|
|
Assert.assertEquals(base, l.getPropertyChangeListeners().length);
|
|
|
|
}
|
|
|
|
@Test
|
|
public final void testVetoableChangeListenerAddAndRemove() {
|
|
|
|
int base = l.getVetoableChangeListeners().length;
|
|
|
|
VetoableChangeListener listener = new VetoableChangeListener() {
|
|
|
|
@Override
|
|
public void vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException {
|
|
// do nothing
|
|
}
|
|
};
|
|
|
|
Assert.assertEquals(base, l.getVetoableChangeListeners().length);
|
|
l.addVetoableChangeListener(listener);
|
|
Assert.assertEquals(base + 1, l.getVetoableChangeListeners().length);
|
|
l.removeVetoableChangeListener(listener);
|
|
Assert.assertEquals(base, l.getVetoableChangeListeners().length);
|
|
|
|
Assert.assertEquals(base, l.getVetoableChangeListeners().length);
|
|
l.addVetoableChangeListener("property", listener);
|
|
Assert.assertEquals(base + 1, l.getVetoableChangeListeners().length);
|
|
Assert.assertEquals(1, l.getVetoableChangeListeners("property").length);
|
|
l.removeVetoableChangeListener("property", listener);
|
|
Assert.assertEquals(base, l.getVetoableChangeListeners().length);
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testMakeSystemName() {
|
|
String s = l.makeSystemName(getASystemNameWithNoPrefix());
|
|
Assert.assertNotNull(s);
|
|
Assert.assertFalse(s.isEmpty());
|
|
}
|
|
|
|
@Test
|
|
public void testMakeSystemNameWithPrefix() {
|
|
String s = l.makeSystemName(l.getSystemNamePrefix()+getASystemNameWithNoPrefix());
|
|
Assert.assertNotNull(s);
|
|
Assert.assertFalse(s.isEmpty());
|
|
}
|
|
|
|
@Test
|
|
public void testMakeSystemNameWithNoPrefixNotASystemName() {
|
|
|
|
Assert.assertThrows(jmri.NamedBean.BadSystemNameException.class, () -> l.makeSystemName("$:"));
|
|
JUnitAppender.assertErrorMessageStartsWith("Invalid system name for " + l.getBeanTypeHandled() + ": ");
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testMakeSystemNameWithPrefixNotASystemName() {
|
|
|
|
Assert.assertThrows(jmri.NamedBean.BadSystemNameException.class, () -> l.makeSystemName(l.getSystemNamePrefix()+"$:"));
|
|
JUnitAppender.assertErrorMessageStartsWith("Invalid system name for " + l.getBeanTypeHandled() + ": ");
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
@SuppressWarnings("unchecked") // tested managers are AbstractManagers
|
|
public void testAutoSystemNames() {
|
|
AbstractManager<E> m = (AbstractManager<E>) l;
|
|
String sysPrefix = l.getSystemNamePrefix();
|
|
Assert.assertEquals(sysPrefix + ":AUTO:0001", m.getAutoSystemName());
|
|
Assert.assertEquals(sysPrefix + ":AUTO:0002", m.getAutoSystemName());
|
|
Assert.assertEquals(sysPrefix + ":AUTO:0003", m.getAutoSystemName());
|
|
m.updateAutoNumber(sysPrefix + ":AUTO:0011");
|
|
Assert.assertEquals(sysPrefix + ":AUTO:0012", m.getAutoSystemName());
|
|
Assert.assertEquals(sysPrefix + ":AUTO:0013", m.getAutoSystemName());
|
|
m.updateAutoNumber(sysPrefix + ":AUTO:0005");
|
|
Assert.assertEquals(sysPrefix + ":AUTO:0014", m.getAutoSystemName());
|
|
m.updateAutoNumber(sysPrefix + ":AUTO:0098");
|
|
Assert.assertEquals(sysPrefix + ":AUTO:0099", m.getAutoSystemName());
|
|
m.updateAutoNumber(sysPrefix + ":AUTO:0097");
|
|
Assert.assertEquals(sysPrefix + ":AUTO:0100", m.getAutoSystemName());
|
|
Assert.assertEquals(sysPrefix + ":AUTO:0101", m.getAutoSystemName());
|
|
m.updateAutoNumber(sysPrefix + ":AUT:0203");
|
|
Assert.assertEquals(sysPrefix + ":AUTO:0102", m.getAutoSystemName());
|
|
m.updateAutoNumber("12" + ":AUT:0203"); // Bad system name prefix
|
|
Assert.assertEquals(sysPrefix + ":AUTO:0103", m.getAutoSystemName());
|
|
}
|
|
|
|
protected String getASystemNameWithNoPrefix() {
|
|
return "1";
|
|
}
|
|
|
|
// private static final Logger log = LoggerFactory.getLogger(AbstractManagerTestBase.class);
|
|
}
|