blob: 9a8df47d0f7d88e35dc30e15c6e566c93730358d [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 1998-2007 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 */
23
24/*
25 * @test
26 * @bug 4092905
27 * @summary Tests that hasListeners() is not failed across serialization
28 * @author Graham Hamilton
29 */
30
31import java.beans.PropertyChangeEvent;
32import java.beans.PropertyChangeListener;
33import java.beans.PropertyChangeSupport;
34
35import java.io.ByteArrayInputStream;
36import java.io.ByteArrayOutputStream;
37import java.io.ObjectInputStream;
38import java.io.ObjectOutputStream;
39import java.io.Serializable;
40
41public class Test4092905 {
42 private static final String PUBLIC = "public";
43 private static final String PRIVATE = "private";
44
45 public static void main(String[] args) {
46 PropertyChangeSupport pcs = new PropertyChangeSupport(args);
47 pcs.addPropertyChangeListener(PUBLIC, new PublicListener());
48 pcs.addPropertyChangeListener(PRIVATE, new PrivateListener());
49
50 if (!pcs.hasListeners(PUBLIC)) {
51 throw new Error("no public listener");
52 }
53 if (!pcs.hasListeners(PRIVATE)) {
54 throw new Error("no private listener");
55 }
56
57 try {
58 // serialize into byte array
59 ByteArrayOutputStream baos = new ByteArrayOutputStream();
60 ObjectOutputStream output = new ObjectOutputStream(baos);
61 output.writeObject(pcs);
62 output.flush();
63 // deserialize from byte array
64 ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
65 ObjectInputStream input = new ObjectInputStream(bais);
66 pcs = (PropertyChangeSupport) input.readObject();
67 } catch (Exception exception) {
68 throw new Error("unexpected exception", exception);
69 }
70
71 if (!pcs.hasListeners(PUBLIC)) {
72 throw new Error("no public listener");
73 }
74 if (pcs.hasListeners(PRIVATE)) {
75 throw new Error("unexpected private listener");
76 }
77 }
78
79 public static class PublicListener implements PropertyChangeListener, Serializable {
80 public void propertyChange(PropertyChangeEvent event) {
81 }
82 }
83
84 private static class PrivateListener implements PropertyChangeListener {
85 public void propertyChange(PropertyChangeEvent event) {
86 }
87 }
88}