IconifyTest.java revision 11018:66682f651425
1/*
2 * Copyright (c) 2012, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23/*
24 * @test
25 * @bug 4665214
26 * @summary Makes sure that RepaintManager doesn't attempt to repaint
27 *          a frame when it is iconified.
28 * @author Scott Violet
29 * @run main IconifyTest
30 */
31import java.awt.*;
32import java.awt.event.*;
33import javax.swing.*;
34
35public class IconifyTest {
36    private static volatile boolean windowIconifiedIsCalled = false;
37    private static volatile boolean frameIsRepainted = false;
38    static JFrame frame;
39    static JButton button;
40
41    public static void main(String[] args) throws Throwable {
42        Robot robot = new Robot();
43        SwingUtilities.invokeAndWait(new Runnable() {
44            public void run() {
45                frame = new JFrame();
46                button = new JButton("HI");
47                frame.getContentPane().add(button);
48                frame.addWindowListener(new WindowAdapter() {
49                    public void windowIconified(WindowEvent e) {
50                        windowIconifiedIsCalled = true;
51                        RepaintManager rm = RepaintManager.currentManager(null);
52                        rm.paintDirtyRegions();
53                        button.repaint();
54                        if (!rm.getDirtyRegion(button).isEmpty()) {
55                            frameIsRepainted = true;
56                        }
57                    }
58                });
59                frame.pack();
60                frame.setVisible(true);
61            }
62        });
63        robot.waitForIdle();
64
65        SwingUtilities.invokeAndWait(new Runnable() {
66            public void run() {
67                frame.setExtendedState(Frame.ICONIFIED);
68            }
69        });
70        robot.waitForIdle();
71
72        if (!windowIconifiedIsCalled) {
73            throw new Exception("Test failed: window was not iconified.");
74        }
75        if (frameIsRepainted) {
76            throw new Exception("Test failed: frame was repainted when window was iconified.");
77        }
78    }
79}
80