217 lines
9.7 KiB
Java
217 lines
9.7 KiB
Java
package jmri.beans;
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
|
import java.beans.PropertyChangeEvent;
|
|
import java.beans.PropertyChangeListener;
|
|
import java.beans.PropertyChangeListenerProxy;
|
|
|
|
import org.junit.jupiter.api.AfterEach;
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import jmri.util.JUnitUtil;
|
|
|
|
/**
|
|
* @author Randall Wood Copyright 2020
|
|
*/
|
|
public class PropertyChangeSupportTest {
|
|
|
|
private PropertyChangeSupport instance;
|
|
private TestPropertyChangeListener listener;
|
|
private static final String PROPERTY = "property";
|
|
|
|
@Test
|
|
public void testAddPropertyChangeListener_PropertyChangeListener() {
|
|
assertThat(instance.getPropertyChangeListeners()).isEmpty();
|
|
assertThat(instance.getPropertyChangeListeners(PROPERTY)).isEmpty();
|
|
instance.addPropertyChangeListener(listener);
|
|
assertThat(instance.getPropertyChangeListeners()).containsExactly(listener);
|
|
assertThat(instance.getPropertyChangeListeners(PROPERTY)).isEmpty();
|
|
}
|
|
|
|
@Test
|
|
public void testAddPropertyChangeListener_String_PropertyChangeListener() {
|
|
assertThat(instance.getPropertyChangeListeners()).isEmpty();
|
|
assertThat(instance.getPropertyChangeListeners(PROPERTY)).isEmpty();
|
|
instance.addPropertyChangeListener(PROPERTY, listener);
|
|
PropertyChangeListener listener2 = instance.getPropertyChangeListeners()[0];
|
|
assertThat(listener2).isExactlyInstanceOf(PropertyChangeListenerProxy.class);
|
|
assertThat(((PropertyChangeListenerProxy) listener2).getListener()).isEqualTo(listener);
|
|
assertThat(((PropertyChangeListenerProxy) listener2).getPropertyName()).isEqualTo(PROPERTY);
|
|
assertThat(instance.getPropertyChangeListeners(PROPERTY)).containsExactly(listener);
|
|
}
|
|
|
|
@Test
|
|
public void testRemovePropertyChangeListener_PropertyChangeListener() {
|
|
instance.addPropertyChangeListener(listener);
|
|
assertThat(instance.getPropertyChangeListeners()).containsExactly(listener);
|
|
assertThat(instance.getPropertyChangeListeners(PROPERTY)).isEmpty();
|
|
instance.removePropertyChangeListener(listener);
|
|
assertThat(instance.getPropertyChangeListeners()).isEmpty();
|
|
assertThat(instance.getPropertyChangeListeners(PROPERTY)).isEmpty();
|
|
}
|
|
|
|
@Test
|
|
public void testRemovePropertyChangeListener_String_PropertyChangeListener() {
|
|
instance.addPropertyChangeListener(PROPERTY, listener);
|
|
assertThat(instance.getPropertyChangeListeners()[0]).isExactlyInstanceOf(PropertyChangeListenerProxy.class);
|
|
assertThat(instance.getPropertyChangeListeners(PROPERTY)).containsExactly(listener);
|
|
instance.removePropertyChangeListener(PROPERTY, listener);
|
|
assertThat(instance.getPropertyChangeListeners()).isEmpty();
|
|
assertThat(instance.getPropertyChangeListeners(PROPERTY)).isEmpty();
|
|
}
|
|
|
|
@Test
|
|
public void testFireIndexedPropertyChange_String_int_boolean_boolean() {
|
|
instance.addPropertyChangeListener(listener);
|
|
instance.fireIndexedPropertyChange(PROPERTY, 0, false, true);
|
|
assertThat(listener.getEvents().size()).isEqualTo(1);
|
|
PropertyChangeEvent event = listener.getLastEvent();
|
|
assertThat(event.getPropertyName()).isEqualTo(PROPERTY);
|
|
assertThat(event.getOldValue()).isEqualTo(false);
|
|
assertThat(event.getNewValue()).isEqualTo(true);
|
|
listener.clear();
|
|
assertThat(listener.getEvents()).isEmpty();
|
|
instance.fireIndexedPropertyChange(PROPERTY, 0, false, false);
|
|
assertThat(listener.getEvents()).isEmpty();
|
|
}
|
|
|
|
@Test
|
|
public void testFireIndexedPropertyChange_String_int_int_int() {
|
|
instance.addPropertyChangeListener(listener);
|
|
instance.fireIndexedPropertyChange(PROPERTY, 0, -1, 1);
|
|
assertThat(listener.getEvents().size()).isEqualTo(1);
|
|
PropertyChangeEvent event = listener.getLastEvent();
|
|
assertThat(event.getPropertyName()).isEqualTo(PROPERTY);
|
|
assertThat(event.getOldValue()).isEqualTo(-1);
|
|
assertThat(event.getNewValue()).isEqualTo(1);
|
|
listener.clear();
|
|
assertThat(listener.getEvents()).isEmpty();
|
|
instance.fireIndexedPropertyChange(PROPERTY, 0, 0, 0);
|
|
assertThat(listener.getEvents()).isEmpty();
|
|
}
|
|
|
|
@Test
|
|
public void testFireIndexedPropertyChange_String_int_Object_Object() {
|
|
instance.addPropertyChangeListener(listener);
|
|
Object object1 = new Object();
|
|
Object object2 = new Object();
|
|
assertThat(object1).isNotEqualTo(object2);
|
|
instance.fireIndexedPropertyChange(PROPERTY, 0, object1, object2);
|
|
assertThat(listener.getEvents().size()).isEqualTo(1);
|
|
PropertyChangeEvent event = listener.getLastEvent();
|
|
assertThat(event.getPropertyName()).isEqualTo(PROPERTY);
|
|
assertThat(event.getOldValue()).isEqualTo(object1);
|
|
assertThat(event.getNewValue()).isEqualTo(object2);
|
|
listener.clear();
|
|
assertThat(listener.getEvents()).isEmpty();
|
|
instance.fireIndexedPropertyChange(PROPERTY, 0, object1, object1);
|
|
assertThat(listener.getEvents()).isEmpty();
|
|
instance.fireIndexedPropertyChange(PROPERTY, 0, object1, null);
|
|
event = listener.getLastEvent();
|
|
assertThat(event.getPropertyName()).isEqualTo(PROPERTY);
|
|
assertThat(event.getOldValue()).isEqualTo(object1);
|
|
assertThat(event.getNewValue()).isEqualTo(null);
|
|
instance.fireIndexedPropertyChange(PROPERTY, 0, null, object2);
|
|
event = listener.getLastEvent();
|
|
assertThat(event.getPropertyName()).isEqualTo(PROPERTY);
|
|
assertThat(event.getOldValue()).isEqualTo(null);
|
|
assertThat(event.getNewValue()).isEqualTo(object2);
|
|
instance.fireIndexedPropertyChange(PROPERTY, 0, null, null);
|
|
event = listener.getLastEvent();
|
|
assertThat(event.getPropertyName()).isEqualTo(PROPERTY);
|
|
assertThat(event.getOldValue()).isEqualTo(null);
|
|
assertThat(event.getNewValue()).isEqualTo(null);
|
|
}
|
|
|
|
@Test
|
|
public void testFirePropertyChange_String_int_boolean_boolean() {
|
|
instance.addPropertyChangeListener(listener);
|
|
instance.firePropertyChange(PROPERTY, false, true);
|
|
assertThat(listener.getEvents().size()).isEqualTo(1);
|
|
PropertyChangeEvent event = listener.getLastEvent();
|
|
assertThat(event.getPropertyName()).isEqualTo(PROPERTY);
|
|
assertThat(event.getOldValue()).isEqualTo(false);
|
|
assertThat(event.getNewValue()).isEqualTo(true);
|
|
listener.clear();
|
|
assertThat(listener.getEvents()).isEmpty();
|
|
instance.firePropertyChange(PROPERTY, false, false);
|
|
assertThat(listener.getEvents()).isEmpty();
|
|
}
|
|
|
|
@Test
|
|
public void testFirePropertyChange_String_int_int_int() {
|
|
instance.addPropertyChangeListener(listener);
|
|
instance.firePropertyChange(PROPERTY, -1, 1);
|
|
assertThat(listener.getEvents().size()).isEqualTo(1);
|
|
PropertyChangeEvent event = listener.getLastEvent();
|
|
assertThat(event.getPropertyName()).isEqualTo(PROPERTY);
|
|
assertThat(event.getOldValue()).isEqualTo(-1);
|
|
assertThat(event.getNewValue()).isEqualTo(1);
|
|
listener.clear();
|
|
assertThat(listener.getEvents()).isEmpty();
|
|
instance.firePropertyChange(PROPERTY, 0, 0);
|
|
assertThat(listener.getEvents()).isEmpty();
|
|
}
|
|
|
|
@Test
|
|
public void testFirePropertyChange_String_int_Object_Object() {
|
|
instance.addPropertyChangeListener(listener);
|
|
Object object1 = new Object();
|
|
Object object2 = new Object();
|
|
assertThat(object1).isNotEqualTo(object2);
|
|
instance.firePropertyChange(PROPERTY, object1, object2);
|
|
assertThat(listener.getEvents().size()).isEqualTo(1);
|
|
PropertyChangeEvent event = listener.getLastEvent();
|
|
assertThat(event.getPropertyName()).isEqualTo(PROPERTY);
|
|
assertThat(event.getOldValue()).isEqualTo(object1);
|
|
assertThat(event.getNewValue()).isEqualTo(object2);
|
|
listener.clear();
|
|
assertThat(listener.getEvents()).isEmpty();
|
|
instance.firePropertyChange(PROPERTY, object1, object1);
|
|
assertThat(listener.getEvents()).isEmpty();
|
|
instance.firePropertyChange(PROPERTY, object1, null);
|
|
event = listener.getLastEvent();
|
|
assertThat(event.getPropertyName()).isEqualTo(PROPERTY);
|
|
assertThat(event.getOldValue()).isEqualTo(object1);
|
|
assertThat(event.getNewValue()).isEqualTo(null);
|
|
instance.firePropertyChange(PROPERTY, null, object2);
|
|
event = listener.getLastEvent();
|
|
assertThat(event.getPropertyName()).isEqualTo(PROPERTY);
|
|
assertThat(event.getOldValue()).isEqualTo(null);
|
|
assertThat(event.getNewValue()).isEqualTo(object2);
|
|
instance.firePropertyChange(PROPERTY, null, null);
|
|
event = listener.getLastEvent();
|
|
assertThat(event.getPropertyName()).isEqualTo(PROPERTY);
|
|
assertThat(event.getOldValue()).isEqualTo(null);
|
|
assertThat(event.getNewValue()).isEqualTo(null);
|
|
}
|
|
|
|
@Test
|
|
public void testFirePropertyChange_PropertyChangeEvent() {
|
|
instance.addPropertyChangeListener(listener);
|
|
Object object1 = new Object();
|
|
Object object2 = new Object();
|
|
assertThat(object1).isNotEqualTo(object2);
|
|
PropertyChangeEvent sent = new PropertyChangeEvent(instance, PROPERTY, object1, object2);
|
|
instance.firePropertyChange(sent);
|
|
assertThat(listener.getEvents().size()).isEqualTo(1);
|
|
assertThat(listener.getLastEvent()).isEqualTo(sent);
|
|
}
|
|
|
|
@BeforeEach
|
|
public void setUp() {
|
|
JUnitUtil.setUp();
|
|
instance = new PropertyChangeSupport();
|
|
listener = new TestPropertyChangeListener();
|
|
}
|
|
|
|
@AfterEach
|
|
public void tearDown() {
|
|
instance = null;
|
|
listener = null;
|
|
JUnitUtil.tearDown();
|
|
}
|
|
}
|