package com.oreilly.mock;
import junit.framework.Assert;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.List;
public class MockPropertyChangeListener implements PropertyChangeListener {
private List actualEvents = new ArrayList();
private List expectedEvents;
private int expectedEventCount = -1;
public void setExpectedEventCount(int expectedCount) {
this.expectedEventCount = expectedCount;
}
public void propertyChange(PropertyChangeEvent evt) {
this.actualEvents.add(evt);
if (this.expectedEventCount > -1
&& this.actualEvents.size() > this.expectedEventCount) {
Assert.fail("Exceeded the expected event count: "
+ this.expectedEventCount);
}
}
public void addExpectedEvent(PropertyChangeEvent e) {
if (this.expectedEvents == null) {
this.expectedEvents = new ArrayList();
}
PropertyChangeEvent eventWithEquals =
new ComparablePropertyChangeEvent(e);
this.expectedEvents.add(eventWithEquals);
}
public void verify() {
if (this.expectedEventCount > -1) {
Assert.assertEquals("Actual event count",
this.expectedEventCount, this.actualEvents.size());
}
if (this.expectedEvents != null) {
Assert.assertEquals("Actual events",
this.expectedEvents, this.actualEvents);
}
}
public List getEvents() {
return this.actualEvents;
}
class ComparablePropertyChangeEvent extends PropertyChangeEvent {
ComparablePropertyChangeEvent(PropertyChangeEvent e) {
super(e.getSource(), e.getPropertyName(),
e.getOldValue(), e.getNewValue());
}
public boolean equals(Object obj) {
if (obj instanceof PropertyChangeEvent) {
PropertyChangeEvent rhs = (PropertyChangeEvent) obj;
return getSource() == rhs.getSource()
&& getPropertyName().equals(rhs.getPropertyName())
&& getOldValue().equals(rhs.getOldValue())
&& getNewValue().equals(rhs.getNewValue());
}
return false;
}
}
}
|