IncorrectDisplayModeExitFullscreen.java revision 14851:980da45565c8
1/*
2 * Copyright (c) 2013, 2016, 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
25import java.awt.Color;
26import java.awt.DisplayMode;
27import java.awt.Frame;
28import java.awt.GraphicsDevice;
29import java.awt.GraphicsEnvironment;
30
31/**
32 * @test
33 * @key headful
34 * @bug 8019587
35 * @author Sergey Bylokhov
36 * @library ../../../lib/testlibrary/
37 * @build ExtendedRobot
38 * @run main IncorrectDisplayModeExitFullscreen
39 */
40public class IncorrectDisplayModeExitFullscreen {
41    static ExtendedRobot robot;
42
43    public static void main(final String[] args) {
44
45        final GraphicsDevice[] devices =
46                GraphicsEnvironment.getLocalGraphicsEnvironment()
47                                   .getScreenDevices();
48        if (devices.length < 2 || devices[0].getDisplayModes().length < 2
49                || !devices[0].isFullScreenSupported()
50                || !devices[1].isFullScreenSupported()) {
51            System.err.println("Testcase is not applicable");
52            return;
53        }
54        final DisplayMode defaultDM = devices[0].getDisplayMode();
55        final DisplayMode[] dms = devices[0].getDisplayModes();
56        DisplayMode nonDefaultDM = null;
57
58        for (final DisplayMode dm : dms) {
59            if (!dm.equals(defaultDM)) {
60                nonDefaultDM = dm;
61                break;
62            }
63        }
64        if (nonDefaultDM == null) {
65            System.err.println("Testcase is not applicable");
66            return;
67        }
68
69        try {
70            robot = new ExtendedRobot();
71        }catch(Exception ex) {
72            ex.printStackTrace();
73            throw new RuntimeException("Unexpected failure");
74        }
75
76        final Frame frame = new Frame();
77        frame.setBackground(Color.GREEN);
78        frame.setUndecorated(true);
79        try {
80            devices[0].setFullScreenWindow(frame);
81            sleep();
82            devices[0].setDisplayMode(nonDefaultDM);
83            sleep();
84            devices[1].setFullScreenWindow(frame);
85            sleep();
86            if (!defaultDM.equals(devices[0].getDisplayMode())) {
87                throw new RuntimeException("DisplayMode is not restored");
88            }
89        } finally {
90            // cleaning up
91            devices[0].setFullScreenWindow(null);
92            devices[1].setFullScreenWindow(null);
93            frame.dispose();
94        }
95    }
96    private static void sleep() {
97        robot.waitForIdle(1500);
98    }
99}
100