1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.beans.tests.java.beans;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.beans.IndexedPropertyChangeEvent;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.beans.PropertyChangeEvent;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.beans.PropertyChangeListener;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.beans.PropertyChangeListenerProxy;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.beans.PropertyChangeSupport;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.File;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileInputStream;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.FileOutputStream;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ObjectInputStream;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ObjectOutputStream;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.Serializable;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.beans.tests.support.NonSerializablePropertyChangeListener;
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.beans.tests.support.SerializablePropertyChangeListener;
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.testframework.serialization.SerializationTest;
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.testframework.serialization.SerializationTest.SerializableAssert;
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.util.SerializationTester;
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test class PropertyChangeSupport.
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class PropertyChangeSupportTest extends TestCase {
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private File tempFile;
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void setUp() throws Exception {
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        tempFile = File.createTempFile("beans", ".ser");
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void tearDown() throws Exception {
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        tempFile.delete();
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        tempFile = null;
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the constructor with a normal parameter.
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testConstructor_Normal() {
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new PropertyChangeSupport(src);
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method addPropertyChangeListener(PropertyChangeListener) with a
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * normal listener parameter.
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testAddPropertyChangeListener_PropertyChangeListener_Normal() {
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l1 = new MockPropertyChangeListener();
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l2 = new MockPropertyChangeListener();
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l4 = new PropertyChangeListenerProxy("myProp",
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l3);
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, sup.getPropertyChangeListeners().length);
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(l1, sup.getPropertyChangeListeners()[0]);
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener(l1);
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, sup.getPropertyChangeListeners().length);
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(l2, ((PropertyChangeListenerProxy) sup
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getPropertyChangeListeners()[0]).getListener());
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(l3, sup.getPropertyChangeListeners()[0]);
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener(sup.getPropertyChangeListeners()[0]);
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, sup.getPropertyChangeListeners().length);
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l4);
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //RI asserts to true here, really strange behavior
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(l3, ((PropertyChangeListenerProxy) sup
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getPropertyChangeListeners()[0]).getListener());
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(l4, sup.getPropertyChangeListeners()[0]);
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2,
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ((PropertyChangeListenerProxy) ((PropertyChangeListenerProxy) sup
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getPropertyChangeListeners()[0]).getListener())
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getListener());
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method addPropertyChangeListener(PropertyChangeListener) with a
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * null listener parameter.
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testAddPropertyChangeListener_PropertyChangeListener_Null() {
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(null);
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener[] listeners = sup.getPropertyChangeListeners();
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, listeners.length);
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method addPropertyChangeListener(PropertyChangeListener) with a
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * listener parameter that has already been registered.
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testAddPropertyChangeListener_PropertyChangeListener_Duplicate() {
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l1 = new MockPropertyChangeListener();
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener[] listeners = sup.getPropertyChangeListeners();
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2, listeners.length);
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(l1, listeners[0]);
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(l1, listeners[1]);
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method addPropertyChangeListener(PropertyChangeListener,
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * String) with a normal listener parameter and property name parameter.
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testAddPropertyChangeListener_PropertyChangeListener_String_Normal() {
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l1 = new MockPropertyChangeListener();
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l2 = new MockPropertyChangeListener();
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener[] listeners;
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp2", l1);
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        listeners = sup.getPropertyChangeListeners();
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, listeners.length);
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(l1, ((PropertyChangeListenerProxy) listeners[0])
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getListener());
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener(listeners[0]);
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp3", l3);
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        listeners = sup.getPropertyChangeListeners();
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, listeners.length);
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // pay attention to this recursive proxy
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(l3, ((PropertyChangeListenerProxy) listeners[0])
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getListener());
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(l3, listeners[0]);
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2,
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ((PropertyChangeListenerProxy) ((PropertyChangeListenerProxy) listeners[0])
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getListener()).getListener());
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        listeners = sup.getPropertyChangeListeners("myProp");
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, listeners.length);
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        listeners = sup.getPropertyChangeListeners("myProp3");
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, listeners.length);
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // pay attention to this recursive proxy
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(l3, ((PropertyChangeListenerProxy) listeners[0])
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getListener());
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotSame(l3, listeners[0]);
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(l2, ((PropertyChangeListenerProxy) listeners[0])
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getListener());
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method addPropertyChangeListener(PropertyChangeListener,
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * String) with a null listener parameter and a normal property name
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * parameter.
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testAddPropertyChangeListener_PropertyChangeListener_String_NullListener() {
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", null);
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener[] listeners = sup.getPropertyChangeListeners();
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, listeners.length);
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new PropertyChangeListenerProxy("myProp", null);
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, listeners.length);
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method addPropertyChangeListener(PropertyChangeListener,
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * String) with a normal listener parameter and a null property name
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * parameter.
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testAddPropertyChangeListener_PropertyChangeListener_String_NullProperty() {
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l1 = new MockPropertyChangeListener();
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l2 = new MockPropertyChangeListener();
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(null, l1);
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(null, l3);
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l3 = new PropertyChangeListenerProxy(null, l2);
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method addPropertyChangeListener(PropertyChangeListener,
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * String) with a listener parameter that has already been registered for
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * the named property.
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testAddPropertyChangeListener_PropertyChangeListener_String_Duplicate() {
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l1 = new MockPropertyChangeListener();
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l2 = new MockPropertyChangeListener();
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp2", l1);
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp2", l1);
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener[] listeners = sup.getPropertyChangeListeners();
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2, listeners.length);
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(l1, ((PropertyChangeListenerProxy) listeners[0])
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getListener());
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(l1, ((PropertyChangeListenerProxy) listeners[1])
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getListener());
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener(listeners[0]);
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener(listeners[1]);
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp3", l3);
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp3", l3);
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        listeners = sup.getPropertyChangeListeners();
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2, listeners.length);
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2,
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ((PropertyChangeListenerProxy) ((PropertyChangeListenerProxy) listeners[0])
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getListener()).getListener());
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2,
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ((PropertyChangeListenerProxy) ((PropertyChangeListenerProxy) listeners[1])
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getListener()).getListener());
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method removePropertyChangeListener(PropertyChangeListener)
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * with a normal listener parameter.
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testRemovePropertyChangeListener_PropertyChangeListener_Normal() {
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l1 = new MockPropertyChangeListener();
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l2 = new MockPropertyChangeListener();
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener[] listeners = sup.getPropertyChangeListeners();
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, listeners.length);
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener(l1);
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        listeners = sup.getPropertyChangeListeners();
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, listeners.length);
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        listeners = sup.getPropertyChangeListeners();
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, listeners.length);
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener(l3);
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        listeners = sup.getPropertyChangeListeners();
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, listeners.length);
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp3", l2);
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        listeners = sup.getPropertyChangeListeners();
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, listeners.length);
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener(l2);
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        listeners = sup.getPropertyChangeListeners();
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, listeners.length);
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener(listeners[0]);
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        listeners = sup.getPropertyChangeListeners();
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, listeners.length);
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method removePropertyChangeListener(PropertyChangeListener)
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * with a null listener parameter.
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testRemovePropertyChangeListener_PropertyChangeListener_Null() {
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener(null);
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, sup.getPropertyChangeListeners().length);
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(null);
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, sup.getPropertyChangeListeners().length);
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener(null);
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, sup.getPropertyChangeListeners().length);
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method removePropertyChangeListener(PropertyChangeListener)
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * with a non-registered listener parameter.
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testRemovePropertyChangeListener_PropertyChangeListener_NonRegistered() {
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener(new MockPropertyChangeListener());
321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, sup.getPropertyChangeListeners().length);
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method removePropertyChangeListener(PropertyChangeListener,
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * String) when a listener for all properties has been registered.
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testRemovePropertyChangeListener_PropertyChangeListener_String_AllRegistered() {
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = new Object();
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = new Object();
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src,
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener("myProp", l1);
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, sup.getPropertyChangeListeners().length);
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, sup.getPropertyChangeListeners("myProp").length);
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange("myProp", oldValue, newValue);
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l1.assertCalled();
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method removePropertyChangeListener(PropertyChangeListener,
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * String) when a listener for the named property has been registered.
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testRemovePropertyChangeListener_PropertyChangeListener_String_PropertyRegistered() {
351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l1 = new MockPropertyChangeListener();
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l1);
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, sup.getPropertyChangeListeners().length);
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener("myProp", l1);
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, sup.getPropertyChangeListeners().length);
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, sup.getPropertyChangeListeners("myProp").length);
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l2 = new MockPropertyChangeListener();
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, sup.getPropertyChangeListeners().length);
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener("myProp", l2);
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, sup.getPropertyChangeListeners().length);
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, sup.getPropertyChangeListeners("myProp").length);
369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method removePropertyChangeListener(PropertyChangeListener,
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * String) with a non-registered listener parameter.
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testRemovePropertyChangeListener_PropertyChangeListener_String_NonRegistered() {
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener("myProp",
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new MockPropertyChangeListener());
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, sup.getPropertyChangeListeners().length);
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method removePropertyChangeListener(PropertyChangeListener,
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * String) with a null listener parameter.
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testRemovePropertyChangeListener_PropertyChangeListener_String_NullListener() {
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener("myProp", null);
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, sup.getPropertyChangeListeners().length);
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", null);
394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, sup.getPropertyChangeListeners().length);
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener("myProp", null);
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, sup.getPropertyChangeListeners().length);
397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method removePropertyChangeListener(PropertyChangeListener,
401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * String) with a null property name parameter.
402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testRemovePropertyChangeListener_PropertyChangeListener_String_NullProperty() {
404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener(null,
408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new MockPropertyChangeListener());
409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp",
410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new MockPropertyChangeListener());
411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener(null,
412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new MockPropertyChangeListener());
413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method getPropertyChangeListeners() when there is one listener
417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * for all properties and one for a named property.
418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetPropertyChangeListener_Normal() {
420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l1 = new MockPropertyChangeListener();
423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l2 = new MockPropertyChangeListener();
424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l4 = new MockPropertyChangeListener();
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp2", l4);
431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(3, sup.getPropertyChangeListeners().length);
433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method getPropertyChangeListeners() when there is no listeners.
437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetPropertyChangeListener_Empty() {
439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, sup.getPropertyChangeListeners().length);
442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method getPropertyChangeListeners(String) when there is one
446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * listener for all properties and one for the named property and a third
447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * for another named property.
448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetPropertyChangeListener_String_Normal() {
450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l1 = new MockPropertyChangeListener();
453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l2 = new MockPropertyChangeListener();
454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l4 = new MockPropertyChangeListener();
457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp2", l4);
461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, sup.getPropertyChangeListeners("myProp").length);
463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(l2, sup.getPropertyChangeListeners("myProp")[0]);
464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp",
465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new MockPropertyChangeListener());
466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(2, sup.getPropertyChangeListeners("myProp").length);
467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method getPropertyChangeListeners(String) when there is no
471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * listener for the named property but there is one for another named
472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * property.
473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetPropertyChangeListener_String_None() {
475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l1 = new MockPropertyChangeListener();
478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l2 = new MockPropertyChangeListener();
479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp2",
480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l4 = new MockPropertyChangeListener();
482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp3", l4);
486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, sup.getPropertyChangeListeners("myProp").length);
488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method getPropertyChangeListeners(String) with a null parameter.
492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetPropertyChangeListener_String_Null() {
494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.getPropertyChangeListeners(null);
498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp",
499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new MockPropertyChangeListener());
500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.getPropertyChangeListeners(null);
501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method hasListeners(String) when there is one listener for all
505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * properties.
506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testHasListener_AllRegistered() {
508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l1 = new MockPropertyChangeListener();
511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l2 = new MockPropertyChangeListener();
512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(sup.hasListeners("myProp"));
516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(sup.hasListeners("myProp"));
518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener(l1);
519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(sup.hasListeners("myProp"));
520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(sup.hasListeners("myProp"));
522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method hasListeners(String) when there is one listener for the
526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * named property.
527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testHasListener_PropertyRegistered() {
529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l1 = new MockPropertyChangeListener();
532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l2 = new MockPropertyChangeListener();
533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(sup.hasListeners("myProp"));
537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProP", l1);
538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(sup.hasListeners("myProp"));
539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l2);
540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(sup.hasListeners("myProp"));
541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.removePropertyChangeListener("myProp", l2);
542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(sup.hasListeners("myProp"));
543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // The following assertion fails on RI. See HARMONY-2526
544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l3);
545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(sup.hasListeners("myProp"));
546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method hasListeners(String) when there is no listeners.
550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testHasListener_None() {
552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(sup.hasListeners("myProp"));
555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method hasListeners(String) with a null parameter.
559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testHasListener_Null() {
561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l1 = new MockPropertyChangeListener();
564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(sup.hasListeners(null));
566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProP", l1);
568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.hasListeners(null);
569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFireIndexedPropertyChange() {
572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final Object src = new Object();
573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport pcs = new PropertyChangeSupport(src);
574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        pcs.addPropertyChangeListener(new PropertyChangeListener() {
575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void propertyChange(PropertyChangeEvent evt) {
576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(src, evt.getSource());
577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(0, ((IndexedPropertyChangeEvent)evt).getIndex());
578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals("one", evt.getOldValue());
579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals("two", evt.getNewValue());
580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        });
582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        pcs.fireIndexedPropertyChange("foo", 0, "one", "two");
584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(String, Object, Object) with normal
588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * parameters, when there is no listeners.
589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_Object_NoListeners() {
591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange("myProp", new Object(), new Object());
594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(String, Object, Object) with normal
598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * parameters, when there is a listener for all properties and another for
599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * the named property.
600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_Object_Normal() {
602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = new Object();
605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = new Object();
606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src,
608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l2 = new MockPropertyChangeListener(src,
610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l4 = new MockPropertyChangeListener(src,
614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l4);
618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange("myProp", oldValue, newValue);
620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l1.assertCalled();
621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l2.assertCalled();
622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l4.assertCalled();
623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(String, Object, Object) with equal old
627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * and new non-null values, when there is a listener for all properties and
628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * another for the named property.
629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_Object_EqualValues() {
631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = new Object();
634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = newValue;
635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src,
637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l2 = new MockPropertyChangeListener(src,
639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l4 = new MockPropertyChangeListener(src,
643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l4);
647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange("myProp", oldValue, newValue);
649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l1.assertNotCalled();
650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l2.assertNotCalled();
651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l4.assertNotCalled();
652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(String, Object, Object) with null old
656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * and new values, when there is a listener for all properties and another
657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * for the named property.
658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_Object_NullValues() {
660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = null;
663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = null;
664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src,
666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l2 = new MockPropertyChangeListener(src,
668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l4 = new MockPropertyChangeListener(src,
672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l4);
676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange("myProp", oldValue, newValue);
678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l1.assertCalled();
679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l2.assertCalled();
680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l4.assertCalled();
681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(String, Object, Object) with a
685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * non-null old value and a null new value, when there is a listener for all
686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * properties and another for the named property.
687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_Object_NullNewValue() {
689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = null;
692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = new Object();
693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src,
695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l2 = new MockPropertyChangeListener(src,
697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l4 = new MockPropertyChangeListener(src,
701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
703561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l4);
705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange("myProp", oldValue, newValue);
707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l1.assertCalled();
708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l2.assertCalled();
709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l4.assertCalled();
710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
711561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(String, Object, Object) with a null
714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * old value and a non-null new value, when there is a listener for all
715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * properties and another for the named property.
716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_Object_NullOldValue() {
718561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = new Object();
721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = null;
722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src,
724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l2 = new MockPropertyChangeListener(src,
726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l4 = new MockPropertyChangeListener(src,
730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l4);
734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange("myProp", oldValue, newValue);
736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l1.assertCalled();
737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l2.assertCalled();
738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l4.assertCalled();
739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(String, Object, Object) with a null
743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * property name parameter.
744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_Object_NullProperty() {
746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = new Object();
749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = new Object();
750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src,
752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, oldValue, newValue);
753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l2 = new MockPropertyChangeListener(src,
754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, oldValue, newValue);
755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l4 = new MockPropertyChangeListener(src,
758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, oldValue, newValue);
759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l4);
762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange(null, oldValue, newValue);
764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l1.assertCalled();
765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l2.assertNotCalled();
766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l4.assertNotCalled();
767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(String, Object, Object) when a null
771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * listener has been registered.
772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_Object_NullListener() {
774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = new Object();
777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = new Object();
778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(null);
780561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange("myProp", oldValue, newValue);
781561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
783561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
784561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(PropertyChangeEvent) with normal
785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * parameters, when there is a listener for all properties and another for
786561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * the named property.
787561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_PropertyChangeEvent_Normal() {
789561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
790561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
791561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = new Object();
792561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = new Object();
793561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src2 = new Object();
794561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeEvent event = new PropertyChangeEvent(src2, "myProp",
795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                oldValue, newValue);
796561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src2,
798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l2 = new MockPropertyChangeListener(src2,
800561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l4 = new MockPropertyChangeListener(src2,
804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
805561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
806561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
807561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l4);
808561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
809561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange(event);
810561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l1.assertCalled();
811561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l2.assertCalled();
812561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l4.assertCalled();
813561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
814561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
815561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
816561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(PropertyChangeEvent) with equal old
817561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * and new non-null values, when there is a listener for all properties and
818561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * another for the named property.
819561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
820561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_PropertyChangeEvent_EqualValues() {
821561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
822561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
823561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = new Object();
824561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = newValue;
825561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src2 = new Object();
826561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeEvent event = new PropertyChangeEvent(src2, "myProp",
827561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                oldValue, newValue);
828561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
829561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src2,
830561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
831561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l2 = new MockPropertyChangeListener(src2,
832561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
833561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
834561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
835561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l4 = new MockPropertyChangeListener(src2,
836561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
837561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
838561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
839561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l4);
840561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
841561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange(event);
842561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l1.assertNotCalled();
843561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l2.assertNotCalled();
844561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l4.assertNotCalled();
845561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
846561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
847561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
848561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(PropertyChangeEvent) with null old and
849561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * new values, when there is a listener for all properties and another for
850561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * the named property.
851561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
852561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_PropertyChangeEvent_NullValues() {
853561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
854561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
855561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = null;
856561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = null;
857561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src2 = new Object();
858561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeEvent event = new PropertyChangeEvent(src2, "myProp",
859561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                oldValue, newValue);
860561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
861561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src2,
862561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
863561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l2 = new MockPropertyChangeListener(src2,
864561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
865561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
866561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
867561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l4 = new MockPropertyChangeListener(src2,
868561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
869561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
870561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
871561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l4);
872561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
873561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange(event);
874561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l1.assertCalled();
875561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l2.assertCalled();
876561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l4.assertCalled();
877561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
878561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
879561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
880561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(PropertyChangeEvent) with a non-null
881561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * old value and a null new value, when there is a listener for all
882561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * properties and another for the named property.
883561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
884561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_PropertyChangeEvent_NullNewValue() {
885561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
886561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
887561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = null;
888561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = new Object();
889561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src2 = new Object();
890561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeEvent event = new PropertyChangeEvent(src2, "myProp",
891561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                oldValue, newValue);
892561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
893561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src2,
894561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
895561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l2 = new MockPropertyChangeListener(src2,
896561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
897561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
898561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
899561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l4 = new MockPropertyChangeListener(src2,
900561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
901561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
902561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
903561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l4);
904561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
905561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange(event);
906561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l1.assertCalled();
907561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l2.assertCalled();
908561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l4.assertCalled();
909561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
910561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
911561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
912561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(PropertyChangeEvent) with a null old
913561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * value and a non-null new value, when there is a listener for all
914561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * properties and another for the named property.
915561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
916561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_PropertyChangeEvent_NullOldValue() {
917561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
918561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
919561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = new Object();
920561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = null;
921561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src2 = new Object();
922561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeEvent event = new PropertyChangeEvent(src2, "myProp",
923561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                oldValue, newValue);
924561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
925561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src2,
926561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
927561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l2 = new MockPropertyChangeListener(src2,
928561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
929561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
930561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
931561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l4 = new MockPropertyChangeListener(src2,
932561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
933561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
934561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
935561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l4);
936561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
937561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange(event);
938561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l1.assertCalled();
939561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l2.assertCalled();
940561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l4.assertCalled();
941561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
942561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
943561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
944561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(PropertyChangeEvent) with a null
945561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * property name parameter.
946561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
947561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_PropertyChangeEvent_NullProperty() {
948561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
949561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
950561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = new Object();
951561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = new Object();
952561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src2 = new Object();
953561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeEvent event = new PropertyChangeEvent(src2, null,
954561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                oldValue, newValue);
955561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
956561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src2,
957561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, oldValue, newValue);
958561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l2 = new MockPropertyChangeListener(src2,
959561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, oldValue, newValue);
960561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
961561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
962561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l4 = new MockPropertyChangeListener(src2,
963561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, oldValue, newValue);
964561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
965561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
966561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l4);
967561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
968561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange(event);
969561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l1.assertCalled();
970561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l2.assertNotCalled();
971561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l4.assertNotCalled();
972561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
973561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
974561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
975561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(PropertyChangeEvent) when null.
976561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
977561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_PropertyChangeEvent_Null() {
978561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
979561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
980561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
981561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
982561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sup.firePropertyChange(null);
983561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw NullPointerException!");
984561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException ex) {
985561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
986561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
987561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
988561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
989561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
990561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(PropertyChangeEvent) when a null
991561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * listener has been registered.
992561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
993561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_PropertyChangeEvent_NullListener() {
994561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(new Object());
995561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeEvent event = new PropertyChangeEvent(new Object(),
996561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", new Object(), new Object());
997561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
998561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(null);
999561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange(event);
1000561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1001561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1002561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
1003561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(String, boolean, boolean) with normal
1004561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * parameters, when there is a listener for all properties and another for
1005561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * the named property.
1006561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1007561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_Boolean_Normal() {
1008561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
1009561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
1010561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = Boolean.TRUE;
1011561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = Boolean.FALSE;
1012561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1013561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src,
1014561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
1015561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l2 = new MockPropertyChangeListener(src,
1016561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
1017561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
1018561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
1019561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l4 = new MockPropertyChangeListener(src,
1020561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
1021561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
1022561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
1023561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l4);
1024561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1025561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange("myProp", false, true);
1026561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l1.assertCalled();
1027561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l2.assertCalled();
1028561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l4.assertCalled();
1029561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1030561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1031561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
1032561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(String, boolean, boolean) with equal
1033561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * old and new non-null values, when there is a listener for all properties
1034561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * and another for the named property.
1035561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1036561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_Boolean_EqualValues() {
1037561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
1038561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
1039561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = Boolean.TRUE;
1040561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = newValue;
1041561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1042561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src,
1043561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
1044561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l2 = new MockPropertyChangeListener(src,
1045561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
1046561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
1047561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
1048561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l4 = new MockPropertyChangeListener(src,
1049561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
1050561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
1051561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
1052561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l4);
1053561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1054561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange("myProp", true, true);
1055561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l1.assertNotCalled();
1056561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l2.assertNotCalled();
1057561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l4.assertNotCalled();
1058561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1059561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1060561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
1061561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(String, boolean, boolean) with a null
1062561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * property name parameter.
1063561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1064561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_Boolean_NullProperty() {
1065561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
1066561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
1067561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = Boolean.TRUE;
1068561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = Boolean.FALSE;
1069561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1070561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src,
1071561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, oldValue, newValue);
1072561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l2 = new MockPropertyChangeListener(src,
1073561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, oldValue, newValue);
1074561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
1075561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
1076561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l4 = new MockPropertyChangeListener(src,
1077561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, oldValue, newValue);
1078561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
1079561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
1080561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l4);
1081561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1082561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange(null, false, true);
1083561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l1.assertCalled();
1084561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l2.assertNotCalled();
1085561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l4.assertNotCalled();
1086561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1087561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1088561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
1089561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(String, boolean, boolean) when a null
1090561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * listener has been registered.
1091561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1092561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_Boolean_NullListener() {
1093561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(new Object());
1094561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1095561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(null);
1096561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange("myProp", true, false);
1097561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1098561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1099561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
1100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(String, int, int) with normal
1101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * parameters, when there is a listener for all properties and another for
1102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * the named property.
1103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_Int_Normal() {
1105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
1106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
1107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int newValue = 1;
1108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int oldValue = 2;
1109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src,
1111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
1112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l2 = new MockPropertyChangeListener(src,
1113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
1114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
1115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
1116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l4 = new MockPropertyChangeListener(src,
1117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
1118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
1119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
1120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l4);
1121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange("myProp", oldValue, newValue);
1123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l1.assertCalled();
1124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l2.assertCalled();
1125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l4.assertCalled();
1126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
1129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(String, int, int) with equal old and
1130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * new non-null values, when there is a listener for all properties and
1131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * another for the named property.
1132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_Int_EqualValues() {
1134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
1135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
1136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Integer newValue = new Integer(1);
1137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Integer oldValue = newValue;
1138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src,
1140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
1141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l2 = new MockPropertyChangeListener(src,
1142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
1143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
1144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
1145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l4 = new MockPropertyChangeListener(src,
1146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
1147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
1148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
1149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l4);
1150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange("myProp", oldValue.intValue(), newValue
1152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .intValue());
1153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l1.assertNotCalled();
1154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l2.assertNotCalled();
1155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l4.assertNotCalled();
1156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
1159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(String, int, int) with a null property
1160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * name parameter.
1161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_Int_NullProperty() {
1163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
1164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
1165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Integer newValue = new Integer(1);
1166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Integer oldValue = new Integer(2);
1167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src,
1169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, oldValue, newValue);
1170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l2 = new MockPropertyChangeListener(src,
1171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, oldValue, newValue);
1172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener l3 = new PropertyChangeListenerProxy("myProp",
1173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                l2);
1174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l4 = new MockPropertyChangeListener(src,
1175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, oldValue, newValue);
1176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
1177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l3);
1178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l4);
1179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange(null, oldValue.intValue(), newValue.intValue());
1181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l1.assertCalled();
1182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l2.assertNotCalled();
1183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        l4.assertNotCalled();
1184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
1187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method firePropertyChange(String, int, int) when a null listener
1188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * has been registered.
1189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFirePropertyChange_Int_NullListener() {
1191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
1192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
1193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(null);
1195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.firePropertyChange("myProp", 1, 2);
1196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
1199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test serialization/deserialization.
1200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSerialization() throws Exception {
1202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = "PropertyChangeSupportSerializationTest";
1203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
1204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup2 = new PropertyChangeSupport(src);
1205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Integer newValue = new Integer(1);
1206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Integer oldValue = new Integer(2);
1207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src,
1209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
1210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener2 l2 = new MockPropertyChangeListener2();
1211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
1213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l1);
1214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l2);
1215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup2.addPropertyChangeListener(l1);
1216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup2.addPropertyChangeListener("myProp", l1);
1217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport deSup = (PropertyChangeSupport) SerializationTester
1219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getDeserilizedObject(sup);
1220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(sup2.getPropertyChangeListeners()[0], deSup
1221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getPropertyChangeListeners()[0]);
1222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(((PropertyChangeListenerProxy) sup2
1223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getPropertyChangeListeners()[1]).getListener(),
1224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ((PropertyChangeListenerProxy) deSup
1225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getPropertyChangeListeners()[1]).getListener());
1226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
1229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test serialization/deserialization compatibility
1230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSerializationCompatibility() throws Exception {
1233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = "PropertyChangeSupportSerializationTest";
1234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup = new PropertyChangeSupport(src);
1235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport sup2 = new PropertyChangeSupport(src);
1236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Integer newValue = new Integer(1);
1237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Integer oldValue = new Integer(2);
1238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener l1 = new MockPropertyChangeListener(src,
1240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myProp", oldValue, newValue);
1241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener2 l2 = new MockPropertyChangeListener2();
1242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener(l1);
1244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l1);
1245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup.addPropertyChangeListener("myProp", l2);
1246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup2.addPropertyChangeListener(l1);
1247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sup2.addPropertyChangeListener("myProp", l1);
1248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SerializationTest.verifyGolden(this, sup2, new SerializableAssert() {
1249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void assertDeserialized(Serializable initial,
1250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    Serializable deserialized) {
1251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                PropertyChangeSupport sup2 = (PropertyChangeSupport) initial;
1252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                PropertyChangeSupport deSup = (PropertyChangeSupport) deserialized;
1253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(sup2.getPropertyChangeListeners()[0], deSup
1254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getPropertyChangeListeners()[0]);
1255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(((PropertyChangeListenerProxy) sup2
1256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getPropertyChangeListeners()[1]).getListener(),
1257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        ((PropertyChangeListenerProxy) deSup
1258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .getPropertyChangeListeners()[1]).getListener());
1259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        });
1261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
1264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Mock PropertyChangeListener.
1265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static class MockPropertyChangeListener implements PropertyChangeListener,
1267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Serializable {
1268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private static final long serialVersionUID = 161877638385579731L;
1270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private transient Object expSrc;
1272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private String expPropName;
1274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private transient Object expOldValue;
1276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private transient Object expNewValue;
1278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private transient PropertyChangeEvent event;
1280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private final transient boolean called = false;
1282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public MockPropertyChangeListener() {
1284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public MockPropertyChangeListener(Object src, String propName,
1287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Object oldValue, Object newValue) {
1288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.expSrc = src;
1289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.expPropName = propName;
1290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.expOldValue = oldValue;
1291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.expNewValue = newValue;
1292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void setAll(Object src, String propName, Object oldValue,
1295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Object newValue) {
1296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.expSrc = src;
1297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.expPropName = propName;
1298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.expOldValue = oldValue;
1299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.expNewValue = newValue;
1300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void propertyChange(PropertyChangeEvent event) {
1303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.event = event;
1304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void assertCalled() {
1307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertSame(expSrc, event.getSource());
1308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(expPropName, event.getPropertyName());
1309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(expOldValue, event.getOldValue());
1310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(expNewValue, event.getNewValue());
1311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertNull(event.getPropagationId());
1312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void assertNotCalled() {
1315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertNull(event);
1316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertFalse(called);
1317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        @Override
1320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public boolean equals(Object obj) {
1321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (obj instanceof MockPropertyChangeListener) {
1322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                MockPropertyChangeListener l = (MockPropertyChangeListener) obj;
1323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                return null == this.expPropName ? null == l.expPropName
1324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        : this.expPropName.equals(l.expPropName);
1325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return false;
1327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
1331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Mock PropertyChangeListener which is not serializable.
1332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static class MockPropertyChangeListener2 implements PropertyChangeListener {
1334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void propertyChange(PropertyChangeEvent event) {
1336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
1340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Mock PropertyChangeListener that modifies the listener set on
1341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * notification.
1342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    static class MockPropertyChangeListener3 implements PropertyChangeListener {
1344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport changeSupport;
1346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public MockPropertyChangeListener3(PropertyChangeSupport changeSupport) {
1348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            super();
1349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.changeSupport = changeSupport;
1350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /* On property changed event modify the listener set */
1353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void propertyChange(PropertyChangeEvent event) {
1354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            changeSupport
1355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .addPropertyChangeListener(new PropertyChangeListener() {
1356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        public void propertyChange(PropertyChangeEvent event) {
1357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            // Empty
1358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
1359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    });
1360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Regression test for concurrent modification of listener set
1365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("unused")
1367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testConcurrentModification() {
1368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport changeSupport = new PropertyChangeSupport("bogus");
1369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MockPropertyChangeListener3 changeListener = new MockPropertyChangeListener3(
1370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                changeSupport);
1371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        changeSupport.firePropertyChange("bogus property", "previous", "newer");
1372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.beans.PropertyChangeSupport#PropertyChangeSupport(
1376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *        java.lang.Object)
1377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testConstructor_Null() {
1379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression for HARMONY-227
1380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new PropertyChangeSupport(null);
1382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw NullPointerException!");
1383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException ex) {
1384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
1385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.beans.PropertyChangeSupport#addPropertyChangeSupport
1390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
1391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_addPropertyChangeListenerNullNull() throws Exception {
1393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression for HARMONY-441
1394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new PropertyChangeSupport("bean1")
1395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .addPropertyChangeListener(null, null);
1396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.beans.PropertyChangeSupport#removePropertyChangeListener(
1400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *        java.lang.String, java.beans.PropertyChangeListener)
1401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testRemovePropertyChangeListener() {
1403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression for HARMONY-386
1404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport prop = new PropertyChangeSupport(new Object());
1405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener lis1 = new PropertyChangeListener() {
1407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void propertyChange(PropertyChangeEvent event) {
1409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        };
1411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener lis2 = new PropertyChangeListenerProxy("name",
1413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                lis1);
1414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, prop.getPropertyChangeListeners().length);
1416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        prop.addPropertyChangeListener(lis2);
1418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, prop.getPropertyChangeListeners().length);
1419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        prop.removePropertyChangeListener("name", lis1);
1421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, prop.getPropertyChangeListeners().length);
1422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests java.beans.PropertyChangeSupport#removePropertyChangeListener(
1426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *        java.lang.String, java.beans.PropertyChangeListener)
1427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testRemovePropertyChangeListener2() {
1429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Regression for HARMONY-320
1430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener listener = new PropertyChangeListener() {
1431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void propertyChange(PropertyChangeEvent arg0) {
1433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        };
1435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport pcs = new PropertyChangeSupport(this);
1437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        pcs.addPropertyChangeListener("property", listener);
1439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeListener[] listeners = pcs.getPropertyChangeListeners();
1440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, listeners.length);
1441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        pcs.removePropertyChangeListener(listeners[0]);
1443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        listeners = pcs.getPropertyChangeListeners();
1444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, listeners.length);
1445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * The test checks the serialization for listeners supporting serialization
1449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSerializableListener() throws Exception {
1451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writePropertyChangeListeners(new PropertyChangeListener[] { new SerializablePropertyChangeListener() });
1452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        readPropertyChangeListeners();
1453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * The test checks the serialization for listeners not supporting
1457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * serialization
1458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testNonSerializableListener() throws Exception {
1460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        writePropertyChangeListeners(new PropertyChangeListener[] { new NonSerializablePropertyChangeListener() });
1461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        readPropertyChangeListeners();
1462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private void writePropertyChangeListeners(PropertyChangeListener[] array) {
1465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectOutputStream oos = null;
1466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            oos = new ObjectOutputStream(new FileOutputStream(tempFile));
1468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            PropertyChangeSupport pcs = new PropertyChangeSupport("bean");
1469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (array != null && array.length > 0) {
1470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                for (PropertyChangeListener element : array) {
1471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    pcs.addPropertyChangeListener(element);
1472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            oos.writeObject(pcs);
1475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            oos.flush();
1476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (Exception e) {
1477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.out.println(e.getClass() + ": " + e.getMessage());
1478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Exception is thrown in testNonSerializableListener");
1479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
1480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (oos != null) {
1481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    oos.close();
1483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (IOException ioe) {
1484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail("Exception while closing ObjectOutputStream");
1485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private PropertyChangeListener[] readPropertyChangeListeners()
1491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws Exception {
1492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectInputStream ois = null;
1493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeSupport pcs = null;
1494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ois = new ObjectInputStream(new FileInputStream(tempFile));
1496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            pcs = (PropertyChangeSupport) ois.readObject();
1497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
1498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (ois != null) {
1499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ois.close();
1500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return pcs.getPropertyChangeListeners();
1503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
1505