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.PropertyChangeEvent;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.Serializable;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.testframework.serialization.SerializationTest;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.testframework.serialization.SerializationTest.SerializableAssert;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test class java.beans.PropertyChangeEvent.
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class PropertyChangeEventTest extends TestCase {
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the constructor with normal parameters.
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testConstructor_Normal() {
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = new Object();
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = new Object();
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeEvent event = new PropertyChangeEvent(src, "myPropName",
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                oldValue, newValue);
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(src, event.getSource());
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("myPropName", event.getPropertyName());
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(oldValue, event.getOldValue());
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(newValue, event.getNewValue());
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(event.getPropagationId());
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the constructor with null parameters except the source parameter.
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testConstructor_Null() {
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeEvent event = new PropertyChangeEvent(src, null, null,
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null);
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(src, event.getSource());
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(event.getPropertyName());
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(null, event.getOldValue());
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(null, event.getNewValue());
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(event.getPropagationId());
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the constructor with null properties but non-null old and new
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * values.
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testConstructor_NullProperty() {
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = new Object();
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = new Object();
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeEvent event = new PropertyChangeEvent(src, null,
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                oldValue, newValue);
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(src, event.getSource());
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(event.getPropertyName());
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(oldValue, event.getOldValue());
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(newValue, event.getNewValue());
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(event.getPropagationId());
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the constructor with null source parameter.
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testConstructor_NullSrc() {
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new PropertyChangeEvent(null, "prop", new Object(), new Object());
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw IllegalArgumentException!");
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException ex) {
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method setPropagationId() with a normal value.
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSetPropagationId_Normal() {
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = new Object();
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = new Object();
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeEvent event = new PropertyChangeEvent(src, "myPropName",
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                oldValue, newValue);
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(event.getPropagationId());
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object pid = new Object();
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        event.setPropagationId(pid);
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(src, event.getSource());
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("myPropName", event.getPropertyName());
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(oldValue, event.getOldValue());
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(newValue, event.getNewValue());
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(pid, event.getPropagationId());
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test the method setPropagationId() with a null value.
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSetPropagationId_Null() {
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object src = new Object();
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object oldValue = new Object();
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object newValue = new Object();
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PropertyChangeEvent event = new PropertyChangeEvent(src, "myPropName",
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                oldValue, newValue);
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(event.getPropagationId());
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // set null when already null
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        event.setPropagationId(null);
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(event.getPropagationId());
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // set a non-null value
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Object pid = new Object();
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        event.setPropagationId(pid);
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(src, event.getSource());
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("myPropName", event.getPropertyName());
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(oldValue, event.getOldValue());
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(newValue, event.getNewValue());
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(pid, event.getPropagationId());
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // reset to null
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        event.setPropagationId(null);
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(event.getPropagationId());
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // comparator for PropertyChangeEvent objects
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static final SerializableAssert comparator = new SerializableAssert() {
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void assertDeserialized(Serializable initial,
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Serializable deserialized) {
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            PropertyChangeEvent initEv = (PropertyChangeEvent) initial;
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            PropertyChangeEvent desrEv = (PropertyChangeEvent) deserialized;
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("NewValue", initEv.getNewValue(), desrEv.getNewValue());
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("OldValue", initEv.getOldValue(), desrEv.getOldValue());
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("PropagationId", initEv.getPropagationId(), desrEv
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getPropagationId());
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("PropertyName", initEv.getPropertyName(), desrEv
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getPropertyName());
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    };
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests serialization/deserialization.
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSerializationSelf() throws Exception {
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SerializationTest.verifySelf(new PropertyChangeEvent(new Object(),
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "myPropName", "oldValue", "newValue"), comparator);
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests serialization/deserialization compatibility with RI.
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSerializationCompatibility() throws Exception {
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SerializationTest
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .verifyGolden(this, new PropertyChangeEvent(new Object(),
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "myPropName", "oldValue", "newValue"), comparator);
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
180