| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.harmony.beans.tests.java.beans; |
| |
| import java.beans.IndexedPropertyChangeEvent; |
| import java.beans.PropertyChangeEvent; |
| import java.beans.PropertyChangeListener; |
| import java.beans.PropertyChangeListenerProxy; |
| import java.beans.PropertyChangeSupport; |
| import java.io.File; |
| import java.io.FileInputStream; |
| import java.io.FileOutputStream; |
| import java.io.IOException; |
| import java.io.ObjectInputStream; |
| import java.io.ObjectOutputStream; |
| import java.io.Serializable; |
| |
| import junit.framework.TestCase; |
| |
| import org.apache.harmony.beans.tests.support.NonSerializablePropertyChangeListener; |
| import org.apache.harmony.beans.tests.support.SerializablePropertyChangeListener; |
| import org.apache.harmony.testframework.serialization.SerializationTest; |
| import org.apache.harmony.testframework.serialization.SerializationTest.SerializableAssert; |
| |
| import tests.util.SerializationTester; |
| |
| /** |
| * Test class PropertyChangeSupport. |
| */ |
| public class PropertyChangeSupportTest extends TestCase { |
| |
| private File tempFile; |
| |
| @Override |
| protected void setUp() throws Exception { |
| tempFile = File.createTempFile("beans", ".ser"); |
| } |
| |
| @Override |
| protected void tearDown() throws Exception { |
| tempFile.delete(); |
| tempFile = null; |
| } |
| |
| /* |
| * Test the constructor with a normal parameter. |
| */ |
| public void testConstructor_Normal() { |
| Object src = new Object(); |
| new PropertyChangeSupport(src); |
| } |
| |
| /* |
| * Test the method addPropertyChangeListener(PropertyChangeListener) with a |
| * normal listener parameter. |
| */ |
| public void testAddPropertyChangeListener_PropertyChangeListener_Normal() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| PropertyChangeListener l1 = new MockPropertyChangeListener(); |
| PropertyChangeListener l2 = new MockPropertyChangeListener(); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| PropertyChangeListener l4 = new PropertyChangeListenerProxy("myProp", |
| l3); |
| |
| sup.addPropertyChangeListener(l1); |
| |
| assertEquals(1, sup.getPropertyChangeListeners().length); |
| assertSame(l1, sup.getPropertyChangeListeners()[0]); |
| |
| sup.removePropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| assertEquals(1, sup.getPropertyChangeListeners().length); |
| assertSame(l2, ((PropertyChangeListenerProxy) sup |
| .getPropertyChangeListeners()[0]).getListener()); |
| assertNotSame(l3, sup.getPropertyChangeListeners()[0]); |
| |
| sup.removePropertyChangeListener(sup.getPropertyChangeListeners()[0]); |
| assertEquals(0, sup.getPropertyChangeListeners().length); |
| sup.addPropertyChangeListener(l4); |
| //RI asserts to true here, really strange behavior |
| assertNotSame(l3, ((PropertyChangeListenerProxy) sup |
| .getPropertyChangeListeners()[0]).getListener()); |
| assertNotSame(l4, sup.getPropertyChangeListeners()[0]); |
| assertSame( |
| l2, |
| ((PropertyChangeListenerProxy) ((PropertyChangeListenerProxy) sup |
| .getPropertyChangeListeners()[0]).getListener()) |
| .getListener()); |
| } |
| |
| /* |
| * Test the method addPropertyChangeListener(PropertyChangeListener) with a |
| * null listener parameter. |
| */ |
| public void testAddPropertyChangeListener_PropertyChangeListener_Null() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| |
| sup.addPropertyChangeListener(null); |
| PropertyChangeListener[] listeners = sup.getPropertyChangeListeners(); |
| assertEquals(0, listeners.length); |
| } |
| |
| /* |
| * Test the method addPropertyChangeListener(PropertyChangeListener) with a |
| * listener parameter that has already been registered. |
| */ |
| public void testAddPropertyChangeListener_PropertyChangeListener_Duplicate() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| PropertyChangeListener l1 = new MockPropertyChangeListener(); |
| |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l1); |
| |
| PropertyChangeListener[] listeners = sup.getPropertyChangeListeners(); |
| assertEquals(2, listeners.length); |
| assertSame(l1, listeners[0]); |
| assertSame(l1, listeners[1]); |
| } |
| |
| /* |
| * Test the method addPropertyChangeListener(PropertyChangeListener, |
| * String) with a normal listener parameter and property name parameter. |
| */ |
| public void testAddPropertyChangeListener_PropertyChangeListener_String_Normal() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| PropertyChangeListener l1 = new MockPropertyChangeListener(); |
| PropertyChangeListener l2 = new MockPropertyChangeListener(); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| PropertyChangeListener[] listeners; |
| |
| sup.addPropertyChangeListener("myProp2", l1); |
| |
| listeners = sup.getPropertyChangeListeners(); |
| assertEquals(1, listeners.length); |
| assertSame(l1, ((PropertyChangeListenerProxy) listeners[0]) |
| .getListener()); |
| |
| sup.removePropertyChangeListener(listeners[0]); |
| sup.addPropertyChangeListener("myProp3", l3); |
| listeners = sup.getPropertyChangeListeners(); |
| assertEquals(1, listeners.length); |
| // pay attention to this recursive proxy |
| assertNotSame(l3, ((PropertyChangeListenerProxy) listeners[0]) |
| .getListener()); |
| assertNotSame(l3, listeners[0]); |
| assertSame( |
| l2, |
| ((PropertyChangeListenerProxy) ((PropertyChangeListenerProxy) listeners[0]) |
| .getListener()).getListener()); |
| |
| listeners = sup.getPropertyChangeListeners("myProp"); |
| assertEquals(0, listeners.length); |
| |
| listeners = sup.getPropertyChangeListeners("myProp3"); |
| assertEquals(1, listeners.length); |
| // pay attention to this recursive proxy |
| assertNotSame(l3, ((PropertyChangeListenerProxy) listeners[0]) |
| .getListener()); |
| assertNotSame(l3, listeners[0]); |
| assertSame(l2, ((PropertyChangeListenerProxy) listeners[0]) |
| .getListener()); |
| |
| } |
| |
| /* |
| * Test the method addPropertyChangeListener(PropertyChangeListener, |
| * String) with a null listener parameter and a normal property name |
| * parameter. |
| */ |
| public void testAddPropertyChangeListener_PropertyChangeListener_String_NullListener() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| |
| sup.addPropertyChangeListener("myProp", null); |
| |
| PropertyChangeListener[] listeners = sup.getPropertyChangeListeners(); |
| assertEquals(0, listeners.length); |
| |
| new PropertyChangeListenerProxy("myProp", null); |
| assertEquals(0, listeners.length); |
| } |
| |
| /* |
| * Test the method addPropertyChangeListener(PropertyChangeListener, |
| * String) with a normal listener parameter and a null property name |
| * parameter. |
| */ |
| public void testAddPropertyChangeListener_PropertyChangeListener_String_NullProperty() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| PropertyChangeListener l1 = new MockPropertyChangeListener(); |
| PropertyChangeListener l2 = new MockPropertyChangeListener(); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| |
| sup.addPropertyChangeListener(null, l1); |
| sup.addPropertyChangeListener(null, l3); |
| l3 = new PropertyChangeListenerProxy(null, l2); |
| sup.addPropertyChangeListener(l3); |
| } |
| |
| /* |
| * Test the method addPropertyChangeListener(PropertyChangeListener, |
| * String) with a listener parameter that has already been registered for |
| * the named property. |
| */ |
| public void testAddPropertyChangeListener_PropertyChangeListener_String_Duplicate() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| PropertyChangeListener l1 = new MockPropertyChangeListener(); |
| PropertyChangeListener l2 = new MockPropertyChangeListener(); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| |
| sup.addPropertyChangeListener("myProp2", l1); |
| sup.addPropertyChangeListener("myProp2", l1); |
| |
| PropertyChangeListener[] listeners = sup.getPropertyChangeListeners(); |
| assertEquals(2, listeners.length); |
| assertSame(l1, ((PropertyChangeListenerProxy) listeners[0]) |
| .getListener()); |
| assertSame(l1, ((PropertyChangeListenerProxy) listeners[1]) |
| .getListener()); |
| |
| sup.removePropertyChangeListener(listeners[0]); |
| sup.removePropertyChangeListener(listeners[1]); |
| sup.addPropertyChangeListener("myProp3", l3); |
| sup.addPropertyChangeListener("myProp3", l3); |
| listeners = sup.getPropertyChangeListeners(); |
| assertEquals(2, listeners.length); |
| assertSame( |
| l2, |
| ((PropertyChangeListenerProxy) ((PropertyChangeListenerProxy) listeners[0]) |
| .getListener()).getListener()); |
| assertSame( |
| l2, |
| ((PropertyChangeListenerProxy) ((PropertyChangeListenerProxy) listeners[1]) |
| .getListener()).getListener()); |
| } |
| |
| /* |
| * Test the method removePropertyChangeListener(PropertyChangeListener) |
| * with a normal listener parameter. |
| */ |
| public void testRemovePropertyChangeListener_PropertyChangeListener_Normal() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| PropertyChangeListener l1 = new MockPropertyChangeListener(); |
| PropertyChangeListener l2 = new MockPropertyChangeListener(); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| |
| sup.addPropertyChangeListener(l1); |
| |
| PropertyChangeListener[] listeners = sup.getPropertyChangeListeners(); |
| assertEquals(1, listeners.length); |
| sup.removePropertyChangeListener(l1); |
| listeners = sup.getPropertyChangeListeners(); |
| assertEquals(0, listeners.length); |
| sup.addPropertyChangeListener(l3); |
| listeners = sup.getPropertyChangeListeners(); |
| assertEquals(1, listeners.length); |
| sup.removePropertyChangeListener(l3); |
| listeners = sup.getPropertyChangeListeners(); |
| assertEquals(0, listeners.length); |
| sup.addPropertyChangeListener("myProp3", l2); |
| listeners = sup.getPropertyChangeListeners(); |
| assertEquals(1, listeners.length); |
| sup.removePropertyChangeListener(l2); |
| listeners = sup.getPropertyChangeListeners(); |
| assertEquals(1, listeners.length); |
| sup.removePropertyChangeListener(listeners[0]); |
| listeners = sup.getPropertyChangeListeners(); |
| assertEquals(0, listeners.length); |
| } |
| |
| /* |
| * Test the method removePropertyChangeListener(PropertyChangeListener) |
| * with a null listener parameter. |
| */ |
| public void testRemovePropertyChangeListener_PropertyChangeListener_Null() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| |
| sup.removePropertyChangeListener(null); |
| assertEquals(0, sup.getPropertyChangeListeners().length); |
| sup.addPropertyChangeListener(null); |
| assertEquals(0, sup.getPropertyChangeListeners().length); |
| sup.removePropertyChangeListener(null); |
| assertEquals(0, sup.getPropertyChangeListeners().length); |
| } |
| |
| /* |
| * Test the method removePropertyChangeListener(PropertyChangeListener) |
| * with a non-registered listener parameter. |
| */ |
| public void testRemovePropertyChangeListener_PropertyChangeListener_NonRegistered() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| sup.removePropertyChangeListener(new MockPropertyChangeListener()); |
| assertEquals(0, sup.getPropertyChangeListeners().length); |
| } |
| |
| /* |
| * Test the method removePropertyChangeListener(PropertyChangeListener, |
| * String) when a listener for all properties has been registered. |
| */ |
| public void testRemovePropertyChangeListener_PropertyChangeListener_String_AllRegistered() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| Object newValue = new Object(); |
| Object oldValue = new Object(); |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| |
| sup.addPropertyChangeListener(l1); |
| |
| sup.removePropertyChangeListener("myProp", l1); |
| assertEquals(1, sup.getPropertyChangeListeners().length); |
| assertEquals(0, sup.getPropertyChangeListeners("myProp").length); |
| sup.firePropertyChange("myProp", oldValue, newValue); |
| l1.assertCalled(); |
| } |
| |
| /* |
| * Test the method removePropertyChangeListener(PropertyChangeListener, |
| * String) when a listener for the named property has been registered. |
| */ |
| public void testRemovePropertyChangeListener_PropertyChangeListener_String_PropertyRegistered() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| PropertyChangeListener l1 = new MockPropertyChangeListener(); |
| sup.addPropertyChangeListener("myProp", l1); |
| assertEquals(1, sup.getPropertyChangeListeners().length); |
| |
| sup.removePropertyChangeListener("myProp", l1); |
| assertEquals(0, sup.getPropertyChangeListeners().length); |
| assertEquals(0, sup.getPropertyChangeListeners("myProp").length); |
| |
| PropertyChangeListener l2 = new MockPropertyChangeListener(); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| sup.addPropertyChangeListener(l3); |
| assertEquals(1, sup.getPropertyChangeListeners().length); |
| sup.removePropertyChangeListener("myProp", l2); |
| assertEquals(0, sup.getPropertyChangeListeners().length); |
| assertEquals(0, sup.getPropertyChangeListeners("myProp").length); |
| } |
| |
| /* |
| * Test the method removePropertyChangeListener(PropertyChangeListener, |
| * String) with a non-registered listener parameter. |
| */ |
| public void testRemovePropertyChangeListener_PropertyChangeListener_String_NonRegistered() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| sup.removePropertyChangeListener("myProp", |
| new MockPropertyChangeListener()); |
| assertEquals(0, sup.getPropertyChangeListeners().length); |
| } |
| |
| /* |
| * Test the method removePropertyChangeListener(PropertyChangeListener, |
| * String) with a null listener parameter. |
| */ |
| public void testRemovePropertyChangeListener_PropertyChangeListener_String_NullListener() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| |
| sup.removePropertyChangeListener("myProp", null); |
| assertEquals(0, sup.getPropertyChangeListeners().length); |
| sup.addPropertyChangeListener("myProp", null); |
| assertEquals(0, sup.getPropertyChangeListeners().length); |
| sup.removePropertyChangeListener("myProp", null); |
| assertEquals(0, sup.getPropertyChangeListeners().length); |
| } |
| |
| /* |
| * Test the method removePropertyChangeListener(PropertyChangeListener, |
| * String) with a null property name parameter. |
| */ |
| public void testRemovePropertyChangeListener_PropertyChangeListener_String_NullProperty() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| |
| sup.removePropertyChangeListener(null, |
| new MockPropertyChangeListener()); |
| sup.addPropertyChangeListener("myProp", |
| new MockPropertyChangeListener()); |
| sup.removePropertyChangeListener(null, |
| new MockPropertyChangeListener()); |
| } |
| |
| /* |
| * Test the method getPropertyChangeListeners() when there is one listener |
| * for all properties and one for a named property. |
| */ |
| public void testGetPropertyChangeListener_Normal() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| PropertyChangeListener l1 = new MockPropertyChangeListener(); |
| PropertyChangeListener l2 = new MockPropertyChangeListener(); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| PropertyChangeListener l4 = new MockPropertyChangeListener(); |
| |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp2", l4); |
| |
| assertEquals(3, sup.getPropertyChangeListeners().length); |
| } |
| |
| /* |
| * Test the method getPropertyChangeListeners() when there is no listeners. |
| */ |
| public void testGetPropertyChangeListener_Empty() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| assertEquals(0, sup.getPropertyChangeListeners().length); |
| } |
| |
| /* |
| * Test the method getPropertyChangeListeners(String) when there is one |
| * listener for all properties and one for the named property and a third |
| * for another named property. |
| */ |
| public void testGetPropertyChangeListener_String_Normal() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| PropertyChangeListener l1 = new MockPropertyChangeListener(); |
| PropertyChangeListener l2 = new MockPropertyChangeListener(); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| PropertyChangeListener l4 = new MockPropertyChangeListener(); |
| |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp2", l4); |
| |
| assertEquals(1, sup.getPropertyChangeListeners("myProp").length); |
| assertSame(l2, sup.getPropertyChangeListeners("myProp")[0]); |
| sup.addPropertyChangeListener("myProp", |
| new MockPropertyChangeListener()); |
| assertEquals(2, sup.getPropertyChangeListeners("myProp").length); |
| } |
| |
| /* |
| * Test the method getPropertyChangeListeners(String) when there is no |
| * listener for the named property but there is one for another named |
| * property. |
| */ |
| public void testGetPropertyChangeListener_String_None() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| PropertyChangeListener l1 = new MockPropertyChangeListener(); |
| PropertyChangeListener l2 = new MockPropertyChangeListener(); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp2", |
| l2); |
| PropertyChangeListener l4 = new MockPropertyChangeListener(); |
| |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp3", l4); |
| |
| assertEquals(0, sup.getPropertyChangeListeners("myProp").length); |
| } |
| |
| /* |
| * Test the method getPropertyChangeListeners(String) with a null parameter. |
| */ |
| public void testGetPropertyChangeListener_String_Null() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| |
| sup.getPropertyChangeListeners(null); |
| sup.addPropertyChangeListener("myProp", |
| new MockPropertyChangeListener()); |
| sup.getPropertyChangeListeners(null); |
| } |
| |
| /* |
| * Test the method hasListeners(String) when there is one listener for all |
| * properties. |
| */ |
| public void testHasListener_AllRegistered() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| PropertyChangeListener l1 = new MockPropertyChangeListener(); |
| PropertyChangeListener l2 = new MockPropertyChangeListener(); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| |
| assertFalse(sup.hasListeners("myProp")); |
| sup.addPropertyChangeListener(l1); |
| assertTrue(sup.hasListeners("myProp")); |
| sup.removePropertyChangeListener(l1); |
| assertFalse(sup.hasListeners("myProp")); |
| sup.addPropertyChangeListener(l3); |
| assertTrue(sup.hasListeners("myProp")); |
| } |
| |
| /* |
| * Test the method hasListeners(String) when there is one listener for the |
| * named property. |
| */ |
| public void testHasListener_PropertyRegistered() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| PropertyChangeListener l1 = new MockPropertyChangeListener(); |
| PropertyChangeListener l2 = new MockPropertyChangeListener(); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| |
| assertFalse(sup.hasListeners("myProp")); |
| sup.addPropertyChangeListener("myProP", l1); |
| assertFalse(sup.hasListeners("myProp")); |
| sup.addPropertyChangeListener("myProp", l2); |
| assertTrue(sup.hasListeners("myProp")); |
| sup.removePropertyChangeListener("myProp", l2); |
| assertFalse(sup.hasListeners("myProp")); |
| // The following assertion fails on RI. See HARMONY-2526 |
| sup.addPropertyChangeListener("myProp", l3); |
| assertTrue(sup.hasListeners("myProp")); |
| } |
| |
| /* |
| * Test the method hasListeners(String) when there is no listeners. |
| */ |
| public void testHasListener_None() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| assertFalse(sup.hasListeners("myProp")); |
| } |
| |
| /* |
| * Test the method hasListeners(String) with a null parameter. |
| */ |
| public void testHasListener_Null() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| PropertyChangeListener l1 = new MockPropertyChangeListener(); |
| |
| assertFalse(sup.hasListeners(null)); |
| |
| sup.addPropertyChangeListener("myProP", l1); |
| sup.hasListeners(null); |
| } |
| |
| public void testFireIndexedPropertyChange() { |
| final Object src = new Object(); |
| PropertyChangeSupport pcs = new PropertyChangeSupport(src); |
| pcs.addPropertyChangeListener(new PropertyChangeListener() { |
| public void propertyChange(PropertyChangeEvent evt) { |
| assertEquals(src, evt.getSource()); |
| assertEquals(0, ((IndexedPropertyChangeEvent) evt).getIndex()); |
| assertEquals("one", evt.getOldValue()); |
| assertEquals("two", evt.getNewValue()); |
| } |
| }); |
| |
| pcs.fireIndexedPropertyChange("foo", 0, "one", "two"); |
| } |
| |
| /* |
| * Test the method firePropertyChange(String, Object, Object) with normal |
| * parameters, when there is no listeners. |
| */ |
| public void testFirePropertyChange_Object_NoListeners() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| sup.firePropertyChange("myProp", new Object(), new Object()); |
| } |
| |
| /* |
| * Test the method firePropertyChange(String, Object, Object) with normal |
| * parameters, when there is a listener for all properties and another for |
| * the named property. |
| */ |
| public void testFirePropertyChange_Object_Normal() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| Object newValue = new Object(); |
| Object oldValue = new Object(); |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| MockPropertyChangeListener l2 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| MockPropertyChangeListener l4 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp", l4); |
| |
| sup.firePropertyChange("myProp", oldValue, newValue); |
| l1.assertCalled(); |
| l2.assertCalled(); |
| l4.assertCalled(); |
| } |
| |
| /* |
| * Test the method firePropertyChange(String, Object, Object) with equal old |
| * and new non-null values, when there is a listener for all properties and |
| * another for the named property. |
| */ |
| public void testFirePropertyChange_Object_EqualValues() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| Object newValue = new Object(); |
| Object oldValue = newValue; |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| MockPropertyChangeListener l2 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| MockPropertyChangeListener l4 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp", l4); |
| |
| sup.firePropertyChange("myProp", oldValue, newValue); |
| l1.assertNotCalled(); |
| l2.assertNotCalled(); |
| l4.assertNotCalled(); |
| } |
| |
| /* |
| * Test the method firePropertyChange(String, Object, Object) with null old |
| * and new values, when there is a listener for all properties and another |
| * for the named property. |
| */ |
| public void testFirePropertyChange_Object_NullValues() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| Object newValue = null; |
| Object oldValue = null; |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| MockPropertyChangeListener l2 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| MockPropertyChangeListener l4 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp", l4); |
| |
| sup.firePropertyChange("myProp", oldValue, newValue); |
| l1.assertCalled(); |
| l2.assertCalled(); |
| l4.assertCalled(); |
| } |
| |
| /* |
| * Test the method firePropertyChange(String, Object, Object) with a |
| * non-null old value and a null new value, when there is a listener for all |
| * properties and another for the named property. |
| */ |
| public void testFirePropertyChange_Object_NullNewValue() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| Object newValue = null; |
| Object oldValue = new Object(); |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| MockPropertyChangeListener l2 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| MockPropertyChangeListener l4 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp", l4); |
| |
| sup.firePropertyChange("myProp", oldValue, newValue); |
| l1.assertCalled(); |
| l2.assertCalled(); |
| l4.assertCalled(); |
| } |
| |
| /* |
| * Test the method firePropertyChange(String, Object, Object) with a null |
| * old value and a non-null new value, when there is a listener for all |
| * properties and another for the named property. |
| */ |
| public void testFirePropertyChange_Object_NullOldValue() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| Object newValue = new Object(); |
| Object oldValue = null; |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| MockPropertyChangeListener l2 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| MockPropertyChangeListener l4 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp", l4); |
| |
| sup.firePropertyChange("myProp", oldValue, newValue); |
| l1.assertCalled(); |
| l2.assertCalled(); |
| l4.assertCalled(); |
| } |
| |
| /* |
| * Test the method firePropertyChange(String, Object, Object) with a null |
| * property name parameter. |
| */ |
| public void testFirePropertyChange_Object_NullProperty() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| Object newValue = new Object(); |
| Object oldValue = new Object(); |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src, |
| null, oldValue, newValue); |
| MockPropertyChangeListener l2 = new MockPropertyChangeListener(src, |
| null, oldValue, newValue); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| MockPropertyChangeListener l4 = new MockPropertyChangeListener(src, |
| null, oldValue, newValue); |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp", l4); |
| |
| sup.firePropertyChange(null, oldValue, newValue); |
| l1.assertCalled(); |
| l2.assertNotCalled(); |
| l4.assertNotCalled(); |
| } |
| |
| /* |
| * Test the method firePropertyChange(String, Object, Object) when a null |
| * listener has been registered. |
| */ |
| public void testFirePropertyChange_Object_NullListener() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| Object newValue = new Object(); |
| Object oldValue = new Object(); |
| |
| sup.addPropertyChangeListener(null); |
| sup.firePropertyChange("myProp", oldValue, newValue); |
| } |
| |
| /* |
| * Test the method firePropertyChange(PropertyChangeEvent) with normal |
| * parameters, when there is a listener for all properties and another for |
| * the named property. |
| */ |
| public void testFirePropertyChange_PropertyChangeEvent_Normal() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| Object newValue = new Object(); |
| Object oldValue = new Object(); |
| Object src2 = new Object(); |
| PropertyChangeEvent event = new PropertyChangeEvent(src2, "myProp", |
| oldValue, newValue); |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src2, |
| "myProp", oldValue, newValue); |
| MockPropertyChangeListener l2 = new MockPropertyChangeListener(src2, |
| "myProp", oldValue, newValue); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| MockPropertyChangeListener l4 = new MockPropertyChangeListener(src2, |
| "myProp", oldValue, newValue); |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp", l4); |
| |
| sup.firePropertyChange(event); |
| l1.assertCalled(); |
| l2.assertCalled(); |
| l4.assertCalled(); |
| } |
| |
| /* |
| * Test the method firePropertyChange(PropertyChangeEvent) with equal old |
| * and new non-null values, when there is a listener for all properties and |
| * another for the named property. |
| */ |
| public void testFirePropertyChange_PropertyChangeEvent_EqualValues() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| Object newValue = new Object(); |
| Object oldValue = newValue; |
| Object src2 = new Object(); |
| PropertyChangeEvent event = new PropertyChangeEvent(src2, "myProp", |
| oldValue, newValue); |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src2, |
| "myProp", oldValue, newValue); |
| MockPropertyChangeListener l2 = new MockPropertyChangeListener(src2, |
| "myProp", oldValue, newValue); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| MockPropertyChangeListener l4 = new MockPropertyChangeListener(src2, |
| "myProp", oldValue, newValue); |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp", l4); |
| |
| sup.firePropertyChange(event); |
| l1.assertNotCalled(); |
| l2.assertNotCalled(); |
| l4.assertNotCalled(); |
| } |
| |
| /* |
| * Test the method firePropertyChange(PropertyChangeEvent) with null old and |
| * new values, when there is a listener for all properties and another for |
| * the named property. |
| */ |
| public void testFirePropertyChange_PropertyChangeEvent_NullValues() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| Object newValue = null; |
| Object oldValue = null; |
| Object src2 = new Object(); |
| PropertyChangeEvent event = new PropertyChangeEvent(src2, "myProp", |
| oldValue, newValue); |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src2, |
| "myProp", oldValue, newValue); |
| MockPropertyChangeListener l2 = new MockPropertyChangeListener(src2, |
| "myProp", oldValue, newValue); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| MockPropertyChangeListener l4 = new MockPropertyChangeListener(src2, |
| "myProp", oldValue, newValue); |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp", l4); |
| |
| sup.firePropertyChange(event); |
| l1.assertCalled(); |
| l2.assertCalled(); |
| l4.assertCalled(); |
| } |
| |
| /* |
| * Test the method firePropertyChange(PropertyChangeEvent) with a non-null |
| * old value and a null new value, when there is a listener for all |
| * properties and another for the named property. |
| */ |
| public void testFirePropertyChange_PropertyChangeEvent_NullNewValue() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| Object newValue = null; |
| Object oldValue = new Object(); |
| Object src2 = new Object(); |
| PropertyChangeEvent event = new PropertyChangeEvent(src2, "myProp", |
| oldValue, newValue); |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src2, |
| "myProp", oldValue, newValue); |
| MockPropertyChangeListener l2 = new MockPropertyChangeListener(src2, |
| "myProp", oldValue, newValue); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| MockPropertyChangeListener l4 = new MockPropertyChangeListener(src2, |
| "myProp", oldValue, newValue); |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp", l4); |
| |
| sup.firePropertyChange(event); |
| l1.assertCalled(); |
| l2.assertCalled(); |
| l4.assertCalled(); |
| } |
| |
| /* |
| * Test the method firePropertyChange(PropertyChangeEvent) with a null old |
| * value and a non-null new value, when there is a listener for all |
| * properties and another for the named property. |
| */ |
| public void testFirePropertyChange_PropertyChangeEvent_NullOldValue() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| Object newValue = new Object(); |
| Object oldValue = null; |
| Object src2 = new Object(); |
| PropertyChangeEvent event = new PropertyChangeEvent(src2, "myProp", |
| oldValue, newValue); |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src2, |
| "myProp", oldValue, newValue); |
| MockPropertyChangeListener l2 = new MockPropertyChangeListener(src2, |
| "myProp", oldValue, newValue); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| MockPropertyChangeListener l4 = new MockPropertyChangeListener(src2, |
| "myProp", oldValue, newValue); |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp", l4); |
| |
| sup.firePropertyChange(event); |
| l1.assertCalled(); |
| l2.assertCalled(); |
| l4.assertCalled(); |
| } |
| |
| /* |
| * Test the method firePropertyChange(PropertyChangeEvent) with a null |
| * property name parameter. |
| */ |
| public void testFirePropertyChange_PropertyChangeEvent_NullProperty() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| Object newValue = new Object(); |
| Object oldValue = new Object(); |
| Object src2 = new Object(); |
| PropertyChangeEvent event = new PropertyChangeEvent(src2, null, |
| oldValue, newValue); |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src2, |
| null, oldValue, newValue); |
| MockPropertyChangeListener l2 = new MockPropertyChangeListener(src2, |
| null, oldValue, newValue); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| MockPropertyChangeListener l4 = new MockPropertyChangeListener(src2, |
| null, oldValue, newValue); |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp", l4); |
| |
| sup.firePropertyChange(event); |
| l1.assertCalled(); |
| l2.assertNotCalled(); |
| l4.assertNotCalled(); |
| } |
| |
| /* |
| * Test the method firePropertyChange(PropertyChangeEvent) when null. |
| */ |
| public void testFirePropertyChange_PropertyChangeEvent_Null() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| |
| try { |
| sup.firePropertyChange(null); |
| fail("Should throw NullPointerException!"); |
| } catch (NullPointerException ex) { |
| // expected |
| } |
| } |
| |
| /* |
| * Test the method firePropertyChange(PropertyChangeEvent) when a null |
| * listener has been registered. |
| */ |
| public void testFirePropertyChange_PropertyChangeEvent_NullListener() { |
| PropertyChangeSupport sup = new PropertyChangeSupport(new Object()); |
| PropertyChangeEvent event = new PropertyChangeEvent(new Object(), |
| "myProp", new Object(), new Object()); |
| |
| sup.addPropertyChangeListener(null); |
| sup.firePropertyChange(event); |
| } |
| |
| /* |
| * Test the method firePropertyChange(String, boolean, boolean) with normal |
| * parameters, when there is a listener for all properties and another for |
| * the named property. |
| */ |
| public void testFirePropertyChange_Boolean_Normal() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| Object newValue = Boolean.TRUE; |
| Object oldValue = Boolean.FALSE; |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| MockPropertyChangeListener l2 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| MockPropertyChangeListener l4 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp", l4); |
| |
| sup.firePropertyChange("myProp", false, true); |
| l1.assertCalled(); |
| l2.assertCalled(); |
| l4.assertCalled(); |
| } |
| |
| /* |
| * Test the method firePropertyChange(String, boolean, boolean) with equal |
| * old and new non-null values, when there is a listener for all properties |
| * and another for the named property. |
| */ |
| public void testFirePropertyChange_Boolean_EqualValues() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| Object newValue = Boolean.TRUE; |
| Object oldValue = newValue; |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| MockPropertyChangeListener l2 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| MockPropertyChangeListener l4 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp", l4); |
| |
| sup.firePropertyChange("myProp", true, true); |
| l1.assertNotCalled(); |
| l2.assertNotCalled(); |
| l4.assertNotCalled(); |
| } |
| |
| /* |
| * Test the method firePropertyChange(String, boolean, boolean) with a null |
| * property name parameter. |
| */ |
| public void testFirePropertyChange_Boolean_NullProperty() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| Object newValue = Boolean.TRUE; |
| Object oldValue = Boolean.FALSE; |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src, |
| null, oldValue, newValue); |
| MockPropertyChangeListener l2 = new MockPropertyChangeListener(src, |
| null, oldValue, newValue); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| MockPropertyChangeListener l4 = new MockPropertyChangeListener(src, |
| null, oldValue, newValue); |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp", l4); |
| |
| sup.firePropertyChange(null, false, true); |
| l1.assertCalled(); |
| l2.assertNotCalled(); |
| l4.assertNotCalled(); |
| } |
| |
| /* |
| * Test the method firePropertyChange(String, boolean, boolean) when a null |
| * listener has been registered. |
| */ |
| public void testFirePropertyChange_Boolean_NullListener() { |
| PropertyChangeSupport sup = new PropertyChangeSupport(new Object()); |
| |
| sup.addPropertyChangeListener(null); |
| sup.firePropertyChange("myProp", true, false); |
| } |
| |
| /* |
| * Test the method firePropertyChange(String, int, int) with normal |
| * parameters, when there is a listener for all properties and another for |
| * the named property. |
| */ |
| public void testFirePropertyChange_Int_Normal() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| int newValue = 1; |
| int oldValue = 2; |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| MockPropertyChangeListener l2 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| MockPropertyChangeListener l4 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp", l4); |
| |
| sup.firePropertyChange("myProp", oldValue, newValue); |
| l1.assertCalled(); |
| l2.assertCalled(); |
| l4.assertCalled(); |
| } |
| |
| /* |
| * Test the method firePropertyChange(String, int, int) with equal old and |
| * new non-null values, when there is a listener for all properties and |
| * another for the named property. |
| */ |
| public void testFirePropertyChange_Int_EqualValues() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| Integer newValue = new Integer(1); |
| Integer oldValue = newValue; |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| MockPropertyChangeListener l2 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| MockPropertyChangeListener l4 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp", l4); |
| |
| sup.firePropertyChange("myProp", oldValue.intValue(), newValue |
| .intValue()); |
| l1.assertNotCalled(); |
| l2.assertNotCalled(); |
| l4.assertNotCalled(); |
| } |
| |
| /* |
| * Test the method firePropertyChange(String, int, int) with a null property |
| * name parameter. |
| */ |
| public void testFirePropertyChange_Int_NullProperty() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| Integer newValue = new Integer(1); |
| Integer oldValue = new Integer(2); |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src, |
| null, oldValue, newValue); |
| MockPropertyChangeListener l2 = new MockPropertyChangeListener(src, |
| null, oldValue, newValue); |
| PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp", |
| l2); |
| MockPropertyChangeListener l4 = new MockPropertyChangeListener(src, |
| null, oldValue, newValue); |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener(l3); |
| sup.addPropertyChangeListener("myProp", l4); |
| |
| sup.firePropertyChange(null, oldValue.intValue(), newValue.intValue()); |
| l1.assertCalled(); |
| l2.assertNotCalled(); |
| l4.assertNotCalled(); |
| } |
| |
| /* |
| * Test the method firePropertyChange(String, int, int) when a null listener |
| * has been registered. |
| */ |
| public void testFirePropertyChange_Int_NullListener() { |
| Object src = new Object(); |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| |
| sup.addPropertyChangeListener(null); |
| sup.firePropertyChange("myProp", 1, 2); |
| } |
| |
| /* |
| * Test serialization/deserialization. |
| */ |
| public void testSerialization() throws Exception { |
| Object src = "PropertyChangeSupportSerializationTest"; |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| PropertyChangeSupport sup2 = new PropertyChangeSupport(src); |
| Integer newValue = new Integer(1); |
| Integer oldValue = new Integer(2); |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| MockPropertyChangeListener2 l2 = new MockPropertyChangeListener2(); |
| |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener("myProp", l1); |
| sup.addPropertyChangeListener("myProp", l2); |
| sup2.addPropertyChangeListener(l1); |
| sup2.addPropertyChangeListener("myProp", l1); |
| |
| PropertyChangeSupport deSup = (PropertyChangeSupport) SerializationTester |
| .getDeserilizedObject(sup); |
| assertEquals(sup2.getPropertyChangeListeners()[0], deSup |
| .getPropertyChangeListeners()[0]); |
| assertEquals(((PropertyChangeListenerProxy) sup2 |
| .getPropertyChangeListeners()[1]).getListener(), |
| ((PropertyChangeListenerProxy) deSup |
| .getPropertyChangeListeners()[1]).getListener()); |
| } |
| |
| /* |
| * Test serialization/deserialization compatibility |
| */ |
| |
| public void testSerializationCompatibility() throws Exception { |
| Object src = "PropertyChangeSupportSerializationTest"; |
| PropertyChangeSupport sup = new PropertyChangeSupport(src); |
| PropertyChangeSupport sup2 = new PropertyChangeSupport(src); |
| Integer newValue = new Integer(1); |
| Integer oldValue = new Integer(2); |
| |
| MockPropertyChangeListener l1 = new MockPropertyChangeListener(src, |
| "myProp", oldValue, newValue); |
| MockPropertyChangeListener2 l2 = new MockPropertyChangeListener2(); |
| |
| sup.addPropertyChangeListener(l1); |
| sup.addPropertyChangeListener("myProp", l1); |
| sup.addPropertyChangeListener("myProp", l2); |
| sup2.addPropertyChangeListener(l1); |
| sup2.addPropertyChangeListener("myProp", l1); |
| SerializationTest.verifyGolden(this, sup2, new SerializableAssert() { |
| public void assertDeserialized(Serializable initial, |
| Serializable deserialized) { |
| PropertyChangeSupport sup2 = (PropertyChangeSupport) initial; |
| PropertyChangeSupport deSup = (PropertyChangeSupport) deserialized; |
| assertEquals(sup2.getPropertyChangeListeners()[0], deSup |
| .getPropertyChangeListeners()[0]); |
| assertEquals(((PropertyChangeListenerProxy) sup2 |
| .getPropertyChangeListeners()[1]).getListener(), |
| ((PropertyChangeListenerProxy) deSup |
| .getPropertyChangeListeners()[1]).getListener()); |
| } |
| }); |
| } |
| |
| /* |
| * Mock PropertyChangeListener. |
| */ |
| static class MockPropertyChangeListener implements PropertyChangeListener, |
| Serializable { |
| |
| private static final long serialVersionUID = 161877638385579731L; |
| |
| private transient Object expSrc; |
| |
| private String expPropName; |
| |
| private transient Object expOldValue; |
| |
| private transient Object expNewValue; |
| |
| private transient PropertyChangeEvent event; |
| |
| private final transient boolean called = false; |
| |
| public MockPropertyChangeListener() { |
| } |
| |
| public MockPropertyChangeListener(Object src, String propName, |
| Object oldValue, Object newValue) { |
| this.expSrc = src; |
| this.expPropName = propName; |
| this.expOldValue = oldValue; |
| this.expNewValue = newValue; |
| } |
| |
| public void setAll(Object src, String propName, Object oldValue, |
| Object newValue) { |
| this.expSrc = src; |
| this.expPropName = propName; |
| this.expOldValue = oldValue; |
| this.expNewValue = newValue; |
| } |
| |
| public void propertyChange(PropertyChangeEvent event) { |
| this.event = event; |
| } |
| |
| public void assertCalled() { |
| assertSame(expSrc, event.getSource()); |
| assertEquals(expPropName, event.getPropertyName()); |
| assertEquals(expOldValue, event.getOldValue()); |
| assertEquals(expNewValue, event.getNewValue()); |
| assertNull(event.getPropagationId()); |
| } |
| |
| public void assertNotCalled() { |
| assertNull(event); |
| assertFalse(called); |
| } |
| |
| @Override |
| public boolean equals(Object obj) { |
| if (obj instanceof MockPropertyChangeListener) { |
| MockPropertyChangeListener l = (MockPropertyChangeListener) obj; |
| return null == this.expPropName ? null == l.expPropName |
| : this.expPropName.equals(l.expPropName); |
| } |
| return false; |
| } |
| } |
| |
| /* |
| * Mock PropertyChangeListener which is not serializable. |
| */ |
| static class MockPropertyChangeListener2 implements PropertyChangeListener { |
| |
| public void propertyChange(PropertyChangeEvent event) { |
| } |
| } |
| |
| /* |
| * Mock PropertyChangeListener that modifies the listener set on |
| * notification. |
| */ |
| static class MockPropertyChangeListener3 implements PropertyChangeListener { |
| |
| PropertyChangeSupport changeSupport; |
| |
| public MockPropertyChangeListener3(PropertyChangeSupport changeSupport) { |
| super(); |
| this.changeSupport = changeSupport; |
| } |
| |
| /* On property changed event modify the listener set */ |
| public void propertyChange(PropertyChangeEvent event) { |
| changeSupport |
| .addPropertyChangeListener(new PropertyChangeListener() { |
| public void propertyChange(PropertyChangeEvent event) { |
| // Empty |
| } |
| }); |
| } |
| } |
| |
| /** |
| * Regression test for concurrent modification of listener set |
| */ |
| @SuppressWarnings("unused") |
| public void testConcurrentModification() { |
| PropertyChangeSupport changeSupport = new PropertyChangeSupport("bogus"); |
| MockPropertyChangeListener3 changeListener = new MockPropertyChangeListener3( |
| changeSupport); |
| changeSupport.firePropertyChange("bogus property", "previous", "newer"); |
| } |
| |
| /** |
| * @tests java.beans.PropertyChangeSupport#PropertyChangeSupport( |
| *java.lang.Object) |
| */ |
| public void testConstructor_Null() { |
| // Regression for HARMONY-227 |
| try { |
| new PropertyChangeSupport(null); |
| fail("Should throw NullPointerException!"); |
| } catch (NullPointerException ex) { |
| // expected |
| } |
| } |
| |
| /** |
| * @tests java.beans.PropertyChangeSupport#addPropertyChangeSupport |
| */ |
| public void test_addPropertyChangeListenerNullNull() throws Exception { |
| // Regression for HARMONY-441 |
| new PropertyChangeSupport("bean1") |
| .addPropertyChangeListener(null, null); |
| } |
| |
| /** |
| * @tests java.beans.PropertyChangeSupport#removePropertyChangeListener( |
| *java.lang.String, java.beans.PropertyChangeListener) |
| */ |
| public void testRemovePropertyChangeListener() { |
| // Regression for HARMONY-386 |
| PropertyChangeSupport prop = new PropertyChangeSupport(new Object()); |
| |
| PropertyChangeListener lis1 = new PropertyChangeListener() { |
| |
| public void propertyChange(PropertyChangeEvent event) { |
| } |
| }; |
| |
| PropertyChangeListener lis2 = new PropertyChangeListenerProxy("name", |
| lis1); |
| |
| assertEquals(0, prop.getPropertyChangeListeners().length); |
| |
| prop.addPropertyChangeListener(lis2); |
| assertEquals(1, prop.getPropertyChangeListeners().length); |
| |
| prop.removePropertyChangeListener("name", lis1); |
| assertEquals(0, prop.getPropertyChangeListeners().length); |
| } |
| |
| /** |
| * @tests java.beans.PropertyChangeSupport#removePropertyChangeListener( |
| *java.lang.String, java.beans.PropertyChangeListener) |
| */ |
| public void testRemovePropertyChangeListener2() { |
| // Regression for HARMONY-320 |
| PropertyChangeListener listener = new PropertyChangeListener() { |
| |
| public void propertyChange(PropertyChangeEvent arg0) { |
| } |
| }; |
| |
| PropertyChangeSupport pcs = new PropertyChangeSupport(this); |
| |
| pcs.addPropertyChangeListener("property", listener); |
| PropertyChangeListener[] listeners = pcs.getPropertyChangeListeners(); |
| assertEquals(1, listeners.length); |
| |
| pcs.removePropertyChangeListener(listeners[0]); |
| listeners = pcs.getPropertyChangeListeners(); |
| assertEquals(0, listeners.length); |
| } |
| |
| /** |
| * The test checks the serialization for listeners supporting serialization |
| */ |
| public void testSerializableListener() throws Exception { |
| writePropertyChangeListeners(new PropertyChangeListener[] { new SerializablePropertyChangeListener() }); |
| readPropertyChangeListeners(); |
| } |
| |
| /** |
| * The test checks the serialization for listeners not supporting |
| * serialization |
| */ |
| public void testNonSerializableListener() throws Exception { |
| writePropertyChangeListeners(new PropertyChangeListener[] { new NonSerializablePropertyChangeListener() }); |
| readPropertyChangeListeners(); |
| } |
| |
| private void writePropertyChangeListeners(PropertyChangeListener[] array) { |
| ObjectOutputStream oos = null; |
| try { |
| oos = new ObjectOutputStream(new FileOutputStream(tempFile)); |
| PropertyChangeSupport pcs = new PropertyChangeSupport("bean"); |
| if (array != null && array.length > 0) { |
| for (PropertyChangeListener element : array) { |
| pcs.addPropertyChangeListener(element); |
| } |
| } |
| oos.writeObject(pcs); |
| oos.flush(); |
| } catch (Exception e) { |
| System.out.println(e.getClass() + ": " + e.getMessage()); |
| fail("Exception is thrown in testNonSerializableListener"); |
| } finally { |
| if (oos != null) { |
| try { |
| oos.close(); |
| } catch (IOException ioe) { |
| fail("Exception while closing ObjectOutputStream"); |
| } |
| } |
| } |
| } |
| |
| private PropertyChangeListener[] readPropertyChangeListeners() |
| throws Exception { |
| ObjectInputStream ois = null; |
| PropertyChangeSupport pcs = null; |
| try { |
| ois = new ObjectInputStream(new FileInputStream(tempFile)); |
| pcs = (PropertyChangeSupport) ois.readObject(); |
| } finally { |
| if (ois != null) { |
| ois.close(); |
| } |
| } |
| return pcs.getPropertyChangeListeners(); |
| } |
| } |