< prev index next >
test/jdk/java/awt/Frame/UnfocusableMaximizedFrameResizablity/UnfocusableMaximizedFrameResizablity.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2007, 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.
--- 1,7 ----
/*
! * Copyright (c) 2007, 2018, 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.
*** 22,412 ****
*/
/*
@test
@key headful
! @bug 4980161
@summary Setting focusable window state to false makes the maximized frame resizable
! @author anthony.petrov@...: area=awt.toplevel
! @library ../../regtesthelpers
! @build Util
@run main UnfocusableMaximizedFrameResizablity
*/
! /**
! * UnfocusableMaximizedFrameResizablity.java
! *
! * summary: Tests whether a maximized unfocusable frame connot be resized by the user
! */
! import java.awt.*;
! import java.awt.event.*;
! import test.java.awt.regtesthelpers.Util;
!
! public class UnfocusableMaximizedFrameResizablity
! {
!
! //*** test-writer defined static variables go here ***
!
!
! private static void init()
! {
! //*** Create instructions for the user here ***
!
! String[] instructions =
! {
! "This is an AUTOMATIC test, simply wait until it is done.",
! "The result (passed or failed) will be shown in the",
! "message window below."
! };
! Sysout.createDialog( );
! Sysout.printInstructions( instructions );
if (!Toolkit.getDefaultToolkit().isFrameStateSupported(Frame.MAXIMIZED_BOTH)) {
- System.out.println("The MAXIMIZED_BOTH state is not supported by the toolkit. Nothing to test.");
- pass();
return;
}
! // Create the maximized unfocusable frame
! final Frame f = new Frame("Unfocusable frame");
! f.setMaximizedBounds(new Rectangle(0, 0, 300, 300));
! f.setSize(200, 200);
! f.setVisible(true);
! f.setExtendedState(Frame.MAXIMIZED_BOTH);
! f.setFocusableWindowState(false);
!
! Robot robot = Util.createRobot();
! robot.setAutoDelay(20);
!
! Util.waitForIdle(robot);
// The initial bounds of the frame
! final Rectangle bounds = f.getBounds();
! System.out.println("Initial frame bounds: " + bounds);
// Let's move the mouse pointer to the bottom-right coner of the frame (the "size-grip")
robot.mouseMove(bounds.x + bounds.width - 2, bounds.y + bounds.height - 2);
// ... and start resizing
! robot.mousePress( InputEvent.BUTTON1_MASK );
! Util.waitForIdle(robot);
robot.mouseMove(bounds.x + bounds.width + 20, bounds.y + bounds.height + 15);
! Util.waitForIdle(robot);
! robot.mouseRelease( InputEvent.BUTTON1_MASK );
! Util.waitForIdle(robot);
// The bounds of the frame after the attempt of resizing is made
! final Rectangle finalBounds = f.getBounds();
! System.out.println("Final frame bounds: " + finalBounds);
if (!finalBounds.equals(bounds)) {
! fail("The maximized unfocusable frame can be resized.");
! return;
! }
!
! UnfocusableMaximizedFrameResizablity.pass();
!
! }//End init()
!
!
!
! /*****************************************************
! * Standard Test Machinery Section
! * DO NOT modify anything in this section -- it's a
! * standard chunk of code which has all of the
! * synchronisation necessary for the test harness.
! * By keeping it the same in all tests, it is easier
! * to read and understand someone else's test, as
! * well as insuring that all tests behave correctly
! * with the test harness.
! * There is a section following this for test-
! * classes
! ******************************************************/
! private static boolean theTestPassed = false;
! private static boolean testGeneratedInterrupt = false;
! private static String failureMessage = "";
!
! private static Thread mainThread = null;
!
! private static int sleepTime = 300000;
!
! // Not sure about what happens if multiple of this test are
! // instantiated in the same VM. Being static (and using
! // static vars), it aint gonna work. Not worrying about
! // it for now.
! public static void main( String args[] ) throws InterruptedException
! {
! mainThread = Thread.currentThread();
! try
! {
! init();
! }
! catch( TestPassedException e )
! {
! //The test passed, so just return from main and harness will
! // interepret this return as a pass
! return;
! }
! //At this point, neither test pass nor test fail has been
! // called -- either would have thrown an exception and ended the
! // test, so we know we have multiple threads.
!
! //Test involves other threads, so sleep and wait for them to
! // called pass() or fail()
! try
! {
! Thread.sleep( sleepTime );
! //Timed out, so fail the test
! throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" );
}
! catch (InterruptedException e)
! {
! //The test harness may have interrupted the test. If so, rethrow the exception
! // so that the harness gets it and deals with it.
! if( ! testGeneratedInterrupt ) throw e;
!
! //reset flag in case hit this code more than once for some reason (just safety)
! testGeneratedInterrupt = false;
!
! if ( theTestPassed == false )
! {
! throw new RuntimeException( failureMessage );
}
- }
-
- }//main
! public static synchronized void setTimeoutTo( int seconds )
! {
! sleepTime = seconds * 1000;
! }
!
! public static synchronized void pass()
! {
! Sysout.println( "The test passed." );
! Sysout.println( "The test is over, hit Ctl-C to stop Java VM" );
! //first check if this is executing in main thread
! if ( mainThread == Thread.currentThread() )
! {
! //Still in the main thread, so set the flag just for kicks,
! // and throw a test passed exception which will be caught
! // and end the test.
! theTestPassed = true;
! throw new TestPassedException();
! }
! theTestPassed = true;
! testGeneratedInterrupt = true;
mainThread.interrupt();
- }//pass()
-
- public static synchronized void fail()
- {
- //test writer didn't specify why test failed, so give generic
- fail( "it just plain failed! :-)" );
- }
-
- public static synchronized void fail( String whyFailed )
- {
- Sysout.println( "The test failed: " + whyFailed );
- Sysout.println( "The test is over, hit Ctl-C to stop Java VM" );
- //check if this called from main thread
- if ( mainThread == Thread.currentThread() )
- {
- //If main thread, fail now 'cause not sleeping
- throw new RuntimeException( whyFailed );
- }
- theTestPassed = false;
- testGeneratedInterrupt = true;
- failureMessage = whyFailed;
- mainThread.interrupt();
- }//fail()
-
- }// class UnfocusableMaximizedFrameResizablity
-
- //This exception is used to exit from any level of call nesting
- // when it's determined that the test has passed, and immediately
- // end the test.
- class TestPassedException extends RuntimeException
- {
- }
-
- //*********** End Standard Test Machinery Section **********
-
-
- //************ Begin classes defined for the test ****************
-
- // if want to make listeners, here is the recommended place for them, then instantiate
- // them in init()
-
- /* Example of a class which may be written as part of a test
- class NewClass implements anInterface
- {
- static int newVar = 0;
-
- public void eventDispatched(AWTEvent e)
- {
- //Counting events to see if we get enough
- eventCount++;
-
- if( eventCount == 20 )
- {
- //got enough events, so pass
-
- UnfocusableMaximizedFrameResizablity.pass();
- }
- else if( tries == 20 )
- {
- //tried too many times without getting enough events so fail
-
- UnfocusableMaximizedFrameResizablity.fail();
- }
-
- }// eventDispatched()
-
- }// NewClass class
-
- */
-
-
- //************** End classes defined for the test *******************
-
-
-
-
- /****************************************************
- Standard Test Machinery
- DO NOT modify anything below -- it's a standard
- chunk of code whose purpose is to make user
- interaction uniform, and thereby make it simpler
- to read and understand someone else's test.
- ****************************************************/
-
- /**
- This is part of the standard test machinery.
- It creates a dialog (with the instructions), and is the interface
- for sending text messages to the user.
- To print the instructions, send an array of strings to Sysout.createDialog
- WithInstructions method. Put one line of instructions per array entry.
- To display a message for the tester to see, simply call Sysout.println
- with the string to be displayed.
- This mimics System.out.println but works within the test harness as well
- as standalone.
- */
-
- class Sysout
- {
- private static TestDialog dialog;
-
- public static void createDialogWithInstructions( String[] instructions )
- {
- dialog = new TestDialog( new Frame(), "Instructions" );
- dialog.printInstructions( instructions );
- dialog.setVisible(true);
- println( "Any messages for the tester will display here." );
}
! public static void createDialog( )
! {
! dialog = new TestDialog( new Frame(), "Instructions" );
! String[] defInstr = { "Instructions will appear here. ", "" } ;
! dialog.printInstructions( defInstr );
! dialog.setVisible(true);
! println( "Any messages for the tester will display here." );
! }
! public static void printInstructions( String[] instructions )
! {
! dialog.printInstructions( instructions );
}
-
-
- public static void println( String messageIn )
- {
- dialog.displayMessage( messageIn );
- System.out.println(messageIn);
}
! }// Sysout class
!
! /**
! This is part of the standard test machinery. It provides a place for the
! test instructions to be displayed, and a place for interactive messages
! to the user to be displayed.
! To have the test instructions displayed, see Sysout.
! To have a message to the user be displayed, see Sysout.
! Do not call anything in this dialog directly.
! */
! class TestDialog extends Dialog
! {
!
! TextArea instructionsText;
! TextArea messageText;
! int maxStringLength = 80;
!
! //DO NOT call this directly, go through Sysout
! public TestDialog( Frame frame, String name )
! {
! super( frame, name );
! int scrollBoth = TextArea.SCROLLBARS_BOTH;
! instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
! add( "North", instructionsText );
!
! messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
! add("Center", messageText);
!
! pack();
!
! setVisible(true);
! }// TestDialog()
!
! //DO NOT call this directly, go through Sysout
! public void printInstructions( String[] instructions )
! {
! //Clear out any current instructions
! instructionsText.setText( "" );
!
! //Go down array of instruction strings
!
! String printStr, remainingStr;
! for( int i=0; i < instructions.length; i++ )
! {
! //chop up each into pieces maxSringLength long
! remainingStr = instructions[ i ];
! while( remainingStr.length() > 0 )
! {
! //if longer than max then chop off first max chars to print
! if( remainingStr.length() >= maxStringLength )
! {
! //Try to chop on a word boundary
! int posOfSpace = remainingStr.
! lastIndexOf( ' ', maxStringLength - 1 );
!
! if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
!
! printStr = remainingStr.substring( 0, posOfSpace + 1 );
! remainingStr = remainingStr.substring( posOfSpace + 1 );
}
- //else just print
- else
- {
- printStr = remainingStr;
- remainingStr = "";
- }
-
- instructionsText.append( printStr + "\n" );
-
- }// while
-
- }// for
-
- }//printInstructions()
-
- //DO NOT call this directly, go through Sysout
- public void displayMessage( String messageIn )
- {
- messageText.append( messageIn + "\n" );
- System.out.println(messageIn);
}
- }// TestDialog class
--- 22,120 ----
*/
/*
@test
@key headful
! @bug 4980161 7158623
@summary Setting focusable window state to false makes the maximized frame resizable
! @compile UnfocusableMaximizedFrameResizablity.java
@run main UnfocusableMaximizedFrameResizablity
*/
! import java.awt.Toolkit;
! import java.awt.Frame;
! import java.awt.Rectangle;
! import java.awt.AWTException;
! import java.awt.event.InputEvent;
! import java.awt.Robot;
!
! public class UnfocusableMaximizedFrameResizablity {
!
! private static Frame frame;
! private static Robot robot;
! private static boolean isProgInterruption = false;
! private static Thread mainThread = null;
! private static int sleepTime = 300000;
! private static void createAndShowFrame() {
+ //The MAXIMIZED_BOTH state is not supported by the toolkit. Nothing to test.
if (!Toolkit.getDefaultToolkit().isFrameStateSupported(Frame.MAXIMIZED_BOTH)) {
return;
}
! frame = new Frame("Unfocusable frame");
! frame.setMaximizedBounds(new Rectangle(0, 0, 300, 300));
! frame.setSize(200, 200);
! frame.setVisible(true);
! frame.setExtendedState(Frame.MAXIMIZED_BOTH);
! frame.setFocusableWindowState(false);
!
! try {
! robot = new Robot();
! } catch (AWTException e) {
! throw new RuntimeException("Robot creation failed");
! }
! robot.delay(2000);
// The initial bounds of the frame
! final Rectangle bounds = frame.getBounds();
// Let's move the mouse pointer to the bottom-right coner of the frame (the "size-grip")
robot.mouseMove(bounds.x + bounds.width - 2, bounds.y + bounds.height - 2);
+ robot.waitForIdle();
// ... and start resizing
! robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
! robot.waitForIdle();
robot.mouseMove(bounds.x + bounds.width + 20, bounds.y + bounds.height + 15);
! robot.waitForIdle();
!
! robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
! robot.waitForIdle();
// The bounds of the frame after the attempt of resizing is made
! final Rectangle finalBounds = frame.getBounds();
if (!finalBounds.equals(bounds)) {
! cleanup();
! throw new RuntimeException("The maximized unfocusable frame can be resized.");
}
! cleanup();
}
! private static void cleanup() {
! frame.dispose();
! isProgInterruption = true;
mainThread.interrupt();
}
! public static void main(String args[]) throws InterruptedException {
+ mainThread = Thread.currentThread();
! try {
! createAndShowFrame();
! mainThread.sleep(sleepTime);
! } catch (InterruptedException e) {
! if (!isProgInterruption) {
! throw e;
}
}
! if (!isProgInterruption) {
! throw new RuntimeException("Timed out after " + sleepTime / 1000
! + " seconds");
}
}
+ }
< prev index next >