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

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();
}
}