--- old/test/java/awt/Frame/MaximizedToUnmaximized/MaximizedToUnmaximized.java 2016-04-14 19:16:46.102743224 +0530 +++ new/test/java/awt/Frame/MaximizedToUnmaximized/MaximizedToUnmaximized.java 2016-04-14 19:16:45.894743224 +0530 @@ -1,25 +1,35 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ +* Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved. +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* This code is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License version 2 only, as +* published by the Free Software Foundation. +* +* This code is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +* version 2 for more details (a copy is included in the LICENSE file that +* accompanied this code). +* +* You should have received a copy of the GNU General Public License version +* 2 along with this work; if not, write to the Free Software Foundation, +* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +* +* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +* or visit www.oracle.com if you need additional information or have any +* questions. +*/ + +/* +* @test +* @bug 8065739 8129569 +* @summary [macosx] Frame wraps to lower left of screen when displayed. +* @library ../../../../lib/testlibrary/ +* @build jdk.testlibrary.Platform +* @run main MaximizedToUnmaximized +*/ + import java.awt.Frame; import java.awt.GraphicsConfiguration; import java.awt.GraphicsEnvironment; @@ -27,13 +37,11 @@ import java.awt.Rectangle; import java.awt.Robot; import java.awt.Toolkit; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import jdk.testlibrary.Platform; -/** - * @test - * @bug 8065739 - * @summary [macosx] Frame warps to lower left of screen when displayed - * @author Alexandr Scherbatiy - */ public class MaximizedToUnmaximized { public static void main(String[] args) throws Exception { @@ -41,14 +49,15 @@ testFrame(true); } - static void testFrame(boolean isUndecorated) throws Exception { + private static void testFrame(boolean isUndecorated) throws Exception { Frame frame = new Frame(); try { Robot robot = new Robot(); robot.setAutoDelay(100); frame.setUndecorated(isUndecorated); - GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment() + GraphicsConfiguration gc = + GraphicsEnvironment.getLocalGraphicsEnvironment() .getDefaultScreenDevice().getDefaultConfiguration(); Rectangle bounds = gc.getBounds(); Insets insets = Toolkit.getDefaultToolkit().getScreenInsets(gc); @@ -68,12 +77,52 @@ throw new RuntimeException("Frame size is small!"); } - if (!isUndecorated && frame.getExtendedState() != Frame.MAXIMIZED_BOTH) { + if (!isUndecorated && frame.getExtendedState() != getExpectedState()) { throw new RuntimeException("Frame state does not equal" - + " MAXIMIZED_BOTH!"); + + getStateAsString(getExpectedState())); } } finally { frame.dispose(); } } + + /* + * In Mac OS and Ubuntu if window has maximum bounds then window state is + * MAXIMIZED_BOTH state but this is not true for other operating systems. + */ + private static int getExpectedState() { + if (Platform.isOSX()) { + return Frame.MAXIMIZED_BOTH; + } else if (Platform.isLinux() && isUbuntu()) { + return Frame.MAXIMIZED_BOTH; + } + return Frame.NORMAL; + } + + private static String getStateAsString(int state) { + if (Frame.MAXIMIZED_BOTH == state) { + return "MAXIMIZED BOTH STATE"; + } + return "NORMAL STATE"; + } + + private static boolean isUbuntu() { + try { + ProcessBuilder processBuilder = new ProcessBuilder("uname", "-v"); + Process process = processBuilder.start(); + BufferedReader reader = new BufferedReader( + new InputStreamReader(process.getInputStream())); + StringBuilder builder = new StringBuilder(); + String line = null; + while ((line = reader.readLine()) != null) { + builder.append(line); + builder.append(System.getProperty("line.separator")); + } + return builder.toString().contains("Ubuntu"); + } catch (IOException e) { + e.printStackTrace(); + } + return false; + } } +