diff options
Diffstat (limited to 'libjava/classpath/test/java.beans/PropertyChangeSupportTest.java')
-rw-r--r-- | libjava/classpath/test/java.beans/PropertyChangeSupportTest.java | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/libjava/classpath/test/java.beans/PropertyChangeSupportTest.java b/libjava/classpath/test/java.beans/PropertyChangeSupportTest.java new file mode 100644 index 00000000000..8db2af03fb0 --- /dev/null +++ b/libjava/classpath/test/java.beans/PropertyChangeSupportTest.java @@ -0,0 +1,200 @@ +import java.beans.PropertyChangeSupport; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeEvent; +import java.util.Hashtable; + +public class PropertyChangeSupportTest implements Runnable { + class Source { + PropertyChangeSupport support = new PropertyChangeSupport(this); + public void addPropertyChangeListener(PropertyChangeListener l) { + support.addPropertyChangeListener(l); + } + public void addPropertyChangeListener(String s, PropertyChangeListener l) { + support.addPropertyChangeListener(s,l); + } + public void removePropertyChangeListener(PropertyChangeListener l) { + support.removePropertyChangeListener(l); + } + public void removePropertyChangeListener(String s, PropertyChangeListener l) { + support.removePropertyChangeListener(s,l); + } + + void changeProperty(String name) { + support.firePropertyChange(name,"old","new"); + + } + } + + class Listener implements PropertyChangeListener { + Hashtable numEventsReceived = new Hashtable(); + int getNumEvents(String propertyName) { + Integer i = (Integer)numEventsReceived.get(propertyName); + try { + return i.intValue(); + } catch(NullPointerException e) { + return 0; + } + } + + public void propertyChange(PropertyChangeEvent e) { + Integer i = (Integer)numEventsReceived.get(e.getPropertyName()); + try { + int newI = i.intValue() + 1; + numEventsReceived.put(e.getPropertyName(), new Integer(newI)); + } catch(NullPointerException exc) { + numEventsReceived.put(e.getPropertyName(), new Integer(1)); + } + } + + public void reset() { + numEventsReceived = new Hashtable(); + } + } + + public void setProperties(Source s) { + s.changeProperty("foo"); + s.changeProperty("foo"); + s.changeProperty("foo"); + s.changeProperty("bar"); + s.changeProperty("bar"); + s.changeProperty("foobar"); + } + + public void shouldEqual(Listener l, int foo, int bar, int foobar, String testName) { + String whatsWrong = ""; + if(l.getNumEvents("foo") != foo) { + whatsWrong += ("foo(" + l.getNumEvents("foo") + ") != " + foo); + } + if(l.getNumEvents("bar") != bar) { + whatsWrong += (" bar(" + l.getNumEvents("bar") + ") != " + bar); + } + if(l.getNumEvents("foobar") != foobar) { + whatsWrong += (" foobar(" + l.getNumEvents("foobar") + ") != " + foobar); + } + + if(!whatsWrong.equals("")) { + System.out.println("FAILURE: " + testName + ": " + whatsWrong); + } else { + System.out.println("Success: " + testName); + } + } + + public void run() { + Source s = new Source(); + + /* Test: single multi-property adds */ + Listener l = new Listener(); + s.addPropertyChangeListener(l); + setProperties(s); + shouldEqual(l, 3, 2, 1, "single multi-property adds"); + + /* Test: multiple listeners */ + Listener l2 = new Listener(); + s.addPropertyChangeListener(l2); + setProperties(s); + shouldEqual(l, 6, 4, 2, "multiple listeners-l"); + shouldEqual(l2, 3, 2, 1, "multiple listeners-l2"); + + /* Test: multiple multi-property adds */ + s.addPropertyChangeListener(l); + setProperties(s); + shouldEqual(l, 12, 8, 4, "multiple multi-property adds-l"); + shouldEqual(l2, 6, 4, 2, "multiple multi-property adds-l2"); + + /* Test: remove multi-property add */ + s.removePropertyChangeListener(l); + setProperties(s); + shouldEqual(l, 15, 10, 5, "remove multi-property add-l"); + shouldEqual(l2, 9, 6, 3, "remove multi-property add-l2"); + + + s.removePropertyChangeListener(l); + s.removePropertyChangeListener(l2); + l.reset(); + l2.reset(); + + /* ENABLE THIS IF YOU THINK RESET ISN'T HAPPENING + shouldEqual(l, 0, 0, 0, "RESET-l"); + shouldEqual(l2, 0, 0, 0, "RESET-l2"); + setProperties(s); + shouldEqual(l, 0, 0, 0, "RESET_AGAIN-l"); + shouldEqual(l2, 0, 0, 0, "RESET_AGAIN-l2"); + */ + + + /* Test: single property listener */ + s.addPropertyChangeListener("foo", l); + setProperties(s); + shouldEqual(l, 3, 0, 0, "single property listener"); + + /* Test: multiple different properties */ + s.addPropertyChangeListener("bar", l); + setProperties(s); + shouldEqual(l, 6, 2, 0, "multiple different properties"); + + /* Test: multiple of same property */ + s.addPropertyChangeListener("foo", l); + setProperties(s); + shouldEqual(l, 12, 4, 0, "multiple of same property"); + + /* Test: multiple single-property listeners */ + s.addPropertyChangeListener("foo", l2); + setProperties(s); + shouldEqual(l, 18, 6, 0, "multiple single-property listeners-l"); + shouldEqual(l2, 3, 0, 0, "multiple single-property listeners-l2"); + + /* Test: remove single-property add */ + s.removePropertyChangeListener("foo", l); + setProperties(s); + shouldEqual(l, 21, 8, 0, "remove single-property add-l"); + shouldEqual(l2, 6, 0, 0, "remove single-property add-l2"); + + + s.removePropertyChangeListener("foo", l); + s.removePropertyChangeListener("bar", l); + s.removePropertyChangeListener("foo", l2); + l.reset(); + l2.reset(); + + /* ENABLE THIS IF YOU THINK RESET ISN'T HAPPENING + shouldEqual(l, 0, 0, 0, "RESET-l"); + shouldEqual(l2, 0, 0, 0, "RESET-l2"); + setProperties(s); + shouldEqual(l, 0, 0, 0, "RESET_AGAIN-l"); + shouldEqual(l2, 0, 0, 0, "RESET_AGAIN-l2"); + */ + + /* Test: multiple- and single-property interaction */ + s.addPropertyChangeListener(l); + s.addPropertyChangeListener("foo", l); + setProperties(s); + shouldEqual(l, 6, 2, 1, "multiple- and single-property interaction"); + + /* Test: multiple- and single-property interaction: multiple-listener removal */ + s.removePropertyChangeListener(l); + setProperties(s); + shouldEqual(l, 9, 2, 1, "multiple- and single-property interaction: multiple-listener removal"); + + /* Test: hasListeners() with multiple cases */ + if(s.support.hasListeners("foo")) { + System.out.println("Success: hasListeners() returning true"); + } else { + System.out.println("FAILURE: hasListeners() returning true"); + } + if(s.support.hasListeners("bar")) { + System.out.println("FAILURE: hasListeners() returning false"); + } else { + System.out.println("Success: hasListeners() returning false"); + } + s.addPropertyChangeListener(l); + if(s.support.hasListeners("bar")) { + System.out.println("Success: hasListeners() with all-event listeners"); + } else { + System.out.println("FAILURE: hasListeners() with all-event listeners"); + } + } + + public static void main(String[] args) { + new PropertyChangeSupportTest().run(); + } +}
\ No newline at end of file |