1 /*
2  * Copyright (c) 2013, 2019, 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 
25 import java.awt.Color;
26 import java.awt.DisplayMode;
27 import java.awt.Frame;
28 import java.awt.GraphicsDevice;
29 import java.awt.GraphicsEnvironment;
30 
31 /**
32  * @test
33  * @bug 8019587
34  * @author Sergey Bylokhov
35  * @library ../../../lib/testlibrary/
36  * @build ExtendedRobot
37  * @run main IncorrectDisplayModeExitFullscreen
38  */
39 public class IncorrectDisplayModeExitFullscreen {
40     static ExtendedRobot robot;
41 
main(final String[] args)42     public static void main(final String[] args) {
43 
44         final GraphicsDevice[] devices =
45                 GraphicsEnvironment.getLocalGraphicsEnvironment()
46                                    .getScreenDevices();
47         if (devices.length < 2 || devices[0].getDisplayModes().length < 2
48                 || !devices[0].isDisplayChangeSupported()
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     }
sleep()96     private static void sleep() {
97         robot.waitForIdle(1500);
98     }
99 }
100