Files
2026-06-17 14:00:51 +02:00

173 lines
6.2 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 BeanTest {
private boolean changed;
private Bean bean;
private PropertyChangeListener listener;
private static final String PROPERTY = "property";
@Test
public void testAddPropertyChangeListener_PropertyChangeListener() {
assertThat(bean.getPropertyChangeListeners()).isEmpty();
assertThat(bean.getPropertyChangeListeners(PROPERTY)).isEmpty();
bean.addPropertyChangeListener(listener);
assertThat(bean.getPropertyChangeListeners()).containsExactly(listener);
assertThat(bean.getPropertyChangeListeners(PROPERTY)).isEmpty();
}
@Test
public void testAddPropertyChangeListener_String_PropertyChangeListener() {
assertThat(bean.getPropertyChangeListeners()).isEmpty();
assertThat(bean.getPropertyChangeListeners(PROPERTY)).isEmpty();
bean.addPropertyChangeListener(PROPERTY, listener);
PropertyChangeListener listener2 = bean.getPropertyChangeListeners()[0];
assertThat(listener2).isExactlyInstanceOf(PropertyChangeListenerProxy.class);
assertThat(((PropertyChangeListenerProxy) listener2).getListener()).isEqualTo(listener);
assertThat(((PropertyChangeListenerProxy) listener2).getPropertyName()).isEqualTo(PROPERTY);
assertThat(bean.getPropertyChangeListeners(PROPERTY)).containsExactly(listener);
}
@Test
public void testRemovePropertyChangeListener_PropertyChangeListener() {
bean.addPropertyChangeListener(listener);
assertThat(bean.getPropertyChangeListeners()).containsExactly(listener);
assertThat(bean.getPropertyChangeListeners(PROPERTY)).isEmpty();
bean.removePropertyChangeListener(listener);
assertThat(bean.getPropertyChangeListeners()).isEmpty();
assertThat(bean.getPropertyChangeListeners(PROPERTY)).isEmpty();
}
@Test
public void testRemovePropertyChangeListener_String_PropertyChangeListener() {
bean.addPropertyChangeListener(PROPERTY, listener);
assertThat(bean.getPropertyChangeListeners()[0]).isExactlyInstanceOf(PropertyChangeListenerProxy.class);
assertThat(bean.getPropertyChangeListeners(PROPERTY)).containsExactly(listener);
bean.removePropertyChangeListener(PROPERTY, listener);
assertThat(bean.getPropertyChangeListeners()).isEmpty();
assertThat(bean.getPropertyChangeListeners(PROPERTY)).isEmpty();
}
@Test
public void testFireIndexedPropertyChange_String_int_boolean_boolean() {
bean.addPropertyChangeListener(listener);
assertThat(changed).isFalse();
bean.fireIndexedPropertyChange(PROPERTY, 0, false, true);
JUnitUtil.waitFor(() -> {
return changed == true;
}, "Change did not fire in time");
assertThat(changed).isTrue();
}
@Test
public void testFireIndexedPropertyChange_String_int_int_int() {
bean.addPropertyChangeListener(listener);
assertThat(changed).isFalse();
bean.fireIndexedPropertyChange(PROPERTY, 0, 0, 1);
JUnitUtil.waitFor(() -> {
return changed == true;
}, "Change did not fire in time");
assertThat(changed).isTrue();
}
@Test
public void testFireIndexedPropertyChange_String_int_Object_Object() {
bean.addPropertyChangeListener(listener);
assertThat(changed).isFalse();
bean.fireIndexedPropertyChange(PROPERTY, 0, null, null);
JUnitUtil.waitFor(() -> {
return changed == true;
}, "Change did not fire in time");
assertThat(changed).isTrue();
}
@Test
public void testFirePropertyChange_PropertyChangeEvent() {
bean.addPropertyChangeListener(listener);
PropertyChangeEvent event = new PropertyChangeEvent(bean, PROPERTY, null, null);
assertThat(changed).isFalse();
bean.firePropertyChange(event);
JUnitUtil.waitFor(() -> {
return changed == true;
}, "Change did not fire in time");
assertThat(changed).isTrue();
}
@Test
public void testFirePropertyChange_String_boolean_boolean() {
bean.addPropertyChangeListener(listener);
assertThat(changed).isFalse();
bean.firePropertyChange(PROPERTY, false, true);
JUnitUtil.waitFor(() -> {
return changed == true;
}, "Change did not fire in time");
assertThat(changed).isTrue();
}
@Test
public void testFirePropertyChange_String_int_int() {
bean.addPropertyChangeListener(listener);
assertThat(changed).isFalse();
bean.firePropertyChange(PROPERTY, 0, 1);
JUnitUtil.waitFor(() -> {
return changed == true;
}, "Change did not fire in time");
assertThat(changed).isTrue();
}
@Test
public void testFirePropertyChange_String_Object_Object() {
bean.addPropertyChangeListener(listener);
assertThat(changed).isFalse();
bean.firePropertyChange(PROPERTY, null, null);
JUnitUtil.waitFor(() -> {
return changed == true;
}, "Change did not fire in time");
assertThat(changed).isTrue();
}
/**
* Test that {@link Bean#isNotifyOnEDT()}, which provides access to a final
* value is returning the expected final value for all construction scenarios.
*/
@Test
public void testIsNotifyOnEDT() {
assertThat(new Bean() {}.isNotifyOnEDT()).isFalse();
assertThat(new Bean(true) {}.isNotifyOnEDT()).isTrue();
assertThat(new Bean(false) {}.isNotifyOnEDT()).isFalse();
}
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
changed = false;
bean = new Bean() {
};
listener = (PropertyChangeEvent evt) -> {
changed = true;
};
}
@AfterEach
public void tearDown() {
bean = null;
JUnitUtil.tearDown();
}
}