168 lines
8.1 KiB
Java
168 lines
8.1 KiB
Java
package jmri.beans;
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
import static org.assertj.core.api.Assertions.assertThatCode;
|
|
|
|
import java.beans.PropertyChangeEvent;
|
|
import java.beans.PropertyVetoException;
|
|
import java.beans.VetoableChangeListener;
|
|
import java.beans.VetoableChangeListenerProxy;
|
|
|
|
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 VetoableChangeSupportTest {
|
|
|
|
private VetoableChangeSupport instance;
|
|
private TestVetoableChangeListener listener;
|
|
private static final String PROPERTY = "property";
|
|
private static final String VETO = "veto";
|
|
|
|
@Test
|
|
public void testFireVetoableChange_String_int_boolean_boolean() {
|
|
instance.addVetoableChangeListener(listener);
|
|
assertThat(listener.willThrowNext()).isFalse();
|
|
assertThatCode(() -> instance.fireVetoableChange(PROPERTY, false, true)).doesNotThrowAnyException();
|
|
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();
|
|
assertThatCode(() -> instance.fireVetoableChange(PROPERTY, false, false)).doesNotThrowAnyException();
|
|
assertThat(listener.getEvents()).isEmpty();
|
|
listener.throwNext(VETO);
|
|
assertThatCode(() -> instance.fireVetoableChange(PROPERTY, false, true)).isInstanceOf(PropertyVetoException.class).hasMessage(VETO);
|
|
}
|
|
|
|
@Test
|
|
public void testFireVetoableChange_String_int_int_int() {
|
|
instance.addVetoableChangeListener(listener);
|
|
assertThat(listener.willThrowNext()).isFalse();
|
|
assertThatCode(() -> instance.fireVetoableChange(PROPERTY, -1, 1)).doesNotThrowAnyException();
|
|
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();
|
|
assertThatCode(() -> instance.fireVetoableChange(PROPERTY, 0, 0)).doesNotThrowAnyException();
|
|
assertThat(listener.getEvents()).isEmpty();
|
|
listener.throwNext(VETO);
|
|
assertThatCode(() -> instance.fireVetoableChange(PROPERTY, -1, 1)).isInstanceOf(PropertyVetoException.class).hasMessage(VETO);
|
|
}
|
|
|
|
@Test
|
|
public void testFireVetoableChange_String_int_Object_Object() {
|
|
instance.addVetoableChangeListener(listener);
|
|
Object object1 = new Object();
|
|
Object object2 = new Object();
|
|
assertThat(object1).isNotEqualTo(object2);
|
|
assertThat(listener.willThrowNext()).isFalse();
|
|
assertThatCode(() -> instance.fireVetoableChange(PROPERTY, object1, object2)).doesNotThrowAnyException();
|
|
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();
|
|
assertThatCode(() -> instance.fireVetoableChange(PROPERTY, object1, object1)).doesNotThrowAnyException();
|
|
assertThat(listener.getEvents()).isEmpty();
|
|
assertThatCode(() -> instance.fireVetoableChange(PROPERTY, object1, null)).doesNotThrowAnyException();
|
|
event = listener.getLastEvent();
|
|
assertThat(event.getPropertyName()).isEqualTo(PROPERTY);
|
|
assertThat(event.getOldValue()).isEqualTo(object1);
|
|
assertThat(event.getNewValue()).isEqualTo(null);
|
|
assertThatCode(() -> instance.fireVetoableChange(PROPERTY, null, object2)).doesNotThrowAnyException();
|
|
event = listener.getLastEvent();
|
|
assertThat(event.getPropertyName()).isEqualTo(PROPERTY);
|
|
assertThat(event.getOldValue()).isEqualTo(null);
|
|
assertThat(event.getNewValue()).isEqualTo(object2);
|
|
assertThatCode(() -> instance.fireVetoableChange(PROPERTY, null, null)).doesNotThrowAnyException();
|
|
event = listener.getLastEvent();
|
|
assertThat(event.getPropertyName()).isEqualTo(PROPERTY);
|
|
assertThat(event.getOldValue()).isEqualTo(null);
|
|
assertThat(event.getNewValue()).isEqualTo(null);
|
|
listener.throwNext(VETO);
|
|
assertThatCode(() -> instance.fireVetoableChange(PROPERTY, object1, object2)).isInstanceOf(PropertyVetoException.class).hasMessage(VETO);
|
|
}
|
|
|
|
@Test
|
|
public void testFireVetoableChange_VetoableChangeEvent() {
|
|
instance.addVetoableChangeListener(listener);
|
|
Object object1 = new Object();
|
|
Object object2 = new Object();
|
|
assertThat(object1).isNotEqualTo(object2);
|
|
PropertyChangeEvent sent = new PropertyChangeEvent(instance, PROPERTY, object1, object2);
|
|
assertThatCode(() -> instance.fireVetoableChange(sent)).doesNotThrowAnyException();
|
|
assertThat(listener.getEvents().size()).isEqualTo(1);
|
|
assertThat(listener.getLastEvent()).isEqualTo(sent);
|
|
listener.throwNext(VETO);
|
|
assertThatCode(() -> instance.fireVetoableChange(sent)).isInstanceOf(PropertyVetoException.class).hasMessage(VETO);
|
|
}
|
|
|
|
@Test
|
|
public void testAddVetoableChangeListener_VetoableChangeListener() {
|
|
assertThat(instance.getVetoableChangeListeners()).isEmpty();
|
|
assertThat(instance.getVetoableChangeListeners(PROPERTY)).isEmpty();
|
|
instance.addVetoableChangeListener(listener);
|
|
assertThat(instance.getVetoableChangeListeners()).containsExactly(listener);
|
|
assertThat(instance.getVetoableChangeListeners(PROPERTY)).isEmpty();
|
|
}
|
|
|
|
@Test
|
|
public void testAddVetoableChangeListener_String_VetoableChangeListener() {
|
|
assertThat(instance.getVetoableChangeListeners()).isEmpty();
|
|
assertThat(instance.getVetoableChangeListeners(PROPERTY)).isEmpty();
|
|
instance.addVetoableChangeListener(PROPERTY, listener);
|
|
VetoableChangeListener listener2 = instance.getVetoableChangeListeners()[0];
|
|
assertThat(listener2).isExactlyInstanceOf(VetoableChangeListenerProxy.class);
|
|
assertThat(((VetoableChangeListenerProxy) listener2).getListener()).isEqualTo(listener);
|
|
assertThat(((VetoableChangeListenerProxy) listener2).getPropertyName()).isEqualTo(PROPERTY);
|
|
assertThat(instance.getVetoableChangeListeners(PROPERTY)).containsExactly(listener);
|
|
}
|
|
|
|
@Test
|
|
public void testRemoveVetoableChangeListener_VetoableChangeListener() {
|
|
instance.addVetoableChangeListener(listener);
|
|
assertThat(instance.getVetoableChangeListeners()).containsExactly(listener);
|
|
assertThat(instance.getVetoableChangeListeners(PROPERTY)).isEmpty();
|
|
instance.removeVetoableChangeListener(listener);
|
|
assertThat(instance.getVetoableChangeListeners()).isEmpty();
|
|
assertThat(instance.getVetoableChangeListeners(PROPERTY)).isEmpty();
|
|
}
|
|
|
|
@Test
|
|
public void testRemoveVetoableChangeListener_String_VetoableChangeListener() {
|
|
instance.addVetoableChangeListener(PROPERTY, listener);
|
|
assertThat(instance.getVetoableChangeListeners()[0]).isExactlyInstanceOf(VetoableChangeListenerProxy.class);
|
|
assertThat(instance.getVetoableChangeListeners(PROPERTY)).containsExactly(listener);
|
|
instance.removeVetoableChangeListener(PROPERTY, listener);
|
|
assertThat(instance.getVetoableChangeListeners()).isEmpty();
|
|
assertThat(instance.getVetoableChangeListeners(PROPERTY)).isEmpty();
|
|
}
|
|
|
|
@BeforeEach
|
|
public void setUp() {
|
|
JUnitUtil.setUp();
|
|
instance = new VetoableChangeSupport();
|
|
listener = new TestVetoableChangeListener();
|
|
}
|
|
|
|
@AfterEach
|
|
public void tearDown() {
|
|
instance = null;
|
|
listener = null;
|
|
JUnitUtil.tearDown();
|
|
}
|
|
}
|