1 /* 2 * Copyright (c) 2008, 2015, 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 @test 26 @key headful 27 @bug 6176814 8132766 28 @summary Metalworks frame maximizes after the move 29 @run main MaximizedFrameTest 30 */ 31 32 import java.awt.AWTException; 33 import java.awt.Component; 34 import java.awt.Point; 35 import java.awt.Robot; 36 import java.awt.event.InputEvent; 37 import java.util.logging.Level; 38 import java.util.logging.Logger; 39 import javax.swing.JFrame; 40 import javax.swing.JLayeredPane; 41 import javax.swing.SwingUtilities; 42 import javax.swing.UIManager; 43 import javax.swing.UnsupportedLookAndFeelException; 44 45 public class MaximizedFrameTest { 46 47 final static int ITERATIONS_COUNT = 5; 48 private static JFrame frame; 49 private static Point tempMousePosition; 50 private static Component titleComponent; 51 init()52 public void init() { 53 JFrame.setDefaultLookAndFeelDecorated(true); 54 55 try { 56 UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); 57 } catch (ClassNotFoundException | InstantiationException | 58 IllegalAccessException | UnsupportedLookAndFeelException ex) { 59 throw new RuntimeException("Test Failed. MetalLookAndFeel not set " 60 + "for frame"); 61 } 62 63 frame = new JFrame("JFrame Maximization Test"); 64 frame.pack(); 65 frame.setSize(450, 260); 66 frame.setVisible(true); 67 } 68 getTitleComponent()69 public void getTitleComponent() throws Exception { 70 71 SwingUtilities.invokeAndWait(new Runnable() { 72 73 @Override 74 public void run() { 75 JLayeredPane lPane = frame.getLayeredPane(); 76 boolean titleFound = false; 77 78 for (int j = 0; j < lPane.getComponentsInLayer( 79 JLayeredPane.FRAME_CONTENT_LAYER.intValue()).length; j++) { 80 81 titleComponent = lPane.getComponentsInLayer( 82 JLayeredPane.FRAME_CONTENT_LAYER.intValue())[j]; 83 84 if (titleComponent.getClass().getName().equals( 85 "javax.swing.plaf.metal.MetalTitlePane")) { 86 87 titleFound = true; 88 break; 89 } 90 } 91 92 if (!titleFound) { 93 try { 94 dispose(); 95 } catch (Exception ex) { 96 Logger.getLogger(MaximizedFrameTest.class.getName()) 97 .log(Level.SEVERE, null, ex); 98 } 99 throw new RuntimeException("Test Failed. Unable to " 100 + "determine title component"); 101 } 102 } 103 }); 104 } 105 doMaximizeFrameTest()106 public void doMaximizeFrameTest() throws Exception { 107 108 SwingUtilities.invokeAndWait(new Runnable() { 109 @Override 110 public void run() { 111 Point framePosition = frame.getLocationOnScreen(); 112 113 tempMousePosition = new Point(framePosition.x 114 + frame.getWidth() / 2, framePosition.y 115 + titleComponent.getHeight() / 2); 116 } 117 }); 118 119 try { 120 Robot robot = new Robot(); 121 robot.mouseMove(tempMousePosition.x, tempMousePosition.y); 122 robot.waitForIdle(); 123 124 for (int iteration = 0; iteration < ITERATIONS_COUNT; iteration++) { 125 robot.mousePress(InputEvent.BUTTON1_MASK); 126 robot.waitForIdle(); 127 128 // Moving a mouse pointer less than a few pixels 129 // leads to rising a double click event. 130 // We have to use exceeded the AWT_MULTICLICK_SMUDGE 131 // const value (which is 4 by default on GNOME) to test that. 132 tempMousePosition.x += 5; 133 robot.mouseMove(tempMousePosition.x, tempMousePosition.y); 134 robot.waitForIdle(); 135 robot.mouseRelease(InputEvent.BUTTON1_MASK); 136 robot.waitForIdle(); 137 138 if (frame.getExtendedState() != 0) { 139 dispose(); 140 throw new RuntimeException("Test failed. JFrame was " 141 + "maximized. ExtendedState is : " 142 + frame.getExtendedState()); 143 } 144 } 145 } catch (AWTException e) { 146 dispose(); 147 throw new RuntimeException("Test Failed. AWTException thrown."); 148 } 149 System.out.println("Test passed."); 150 } 151 dispose()152 private void dispose() throws Exception { 153 SwingUtilities.invokeAndWait(new Runnable() { 154 @Override 155 public void run() { 156 if (null != frame) { 157 frame.dispose(); 158 } 159 } 160 }); 161 } 162 main(String[] args)163 public static void main(String[] args) throws Exception { 164 165 MaximizedFrameTest maximizedFrameTest = new MaximizedFrameTest(); 166 maximizedFrameTest.init(); 167 maximizedFrameTest.getTitleComponent(); 168 maximizedFrameTest.doMaximizeFrameTest(); 169 maximizedFrameTest.dispose(); 170 } 171 } 172