7150109: [macosx] the Frame showed incomplete.
authoranthony
Tue, 24 Apr 2012 17:47:50 +0400
changeset 12525 93404c8fc9e6
parent 12524 8745ce952a63
child 12526 c4838d55279c
7150109: [macosx] the Frame showed incomplete. Summary: Open-source the tests Reviewed-by: art
jdk/test/java/awt/Frame/FrameStateTest/FrameStateTest.html
jdk/test/java/awt/Frame/FrameStateTest/FrameStateTest.java
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Frame/FrameStateTest/FrameStateTest.html	Tue Apr 24 17:47:50 2012 +0400
@@ -0,0 +1,50 @@
+<!--  
+
+ Copyright (c) 2012, 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 4157271
+  @summary Checks that when a Frame is created it honors the state it
+  	was set to. The bug was that if setState(Frame.ICONIFIED) was 
+  	called before setVisible(true) the Frame would be shown in NORMAL 
+  	state instead of ICONIFIED.
+  @author JTG East Team: area=awt.Frame
+  @run applet/manual=yesno FrameStateTest.html
+
+ -->
+
+<html>
+<head>
+<title> FrameStateTest </title>
+</head>
+<body>
+
+<h1>FrameStateTest<br>Bug ID: 4157271</h1>
+<p>This test checks that when setState(Frame.ICONIFIED) is called before
+  	setVisible(true) the Frame is shown in the proper iconified state.
+  	The problem was that it did not honor the initial iconic state, but
+ 	instead was shown in the NORMAL state.</p>
+<p>See the dialog box (usually in upper left corner) for instructions</p>
+
+<APPLET CODE="FrameStateTest.class" WIDTH=600 HEIGHT=200></APPLET>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Frame/FrameStateTest/FrameStateTest.java	Tue Apr 24 17:47:50 2012 +0400
@@ -0,0 +1,459 @@
+/*
+ * Copyright (c) 2012, 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 4157271
+  @summary Checks that when a Frame is created it honors the state it
+        was set to. The bug was that if setState(Frame.ICONIFIED) was
+        called before setVisible(true) the Frame would be shown in NORMAL
+        state instead of ICONIFIED.
+  @author JTG East Team: area=awt.Frame
+  @run applet/manual=yesno FrameStateTest.html
+*/
+
+/**
+ * FrameStateTest.java
+ *
+ * summary: Checks that when setState(Frame.ICONIFIED) is called before
+ *      setVisible(true) the Frame is shown in the proper iconified state.
+ *      The problem was that it did not honor the initial iconic state, but
+ *      instead was shown in the NORMAL state.
+ */
+
+import java.awt.event.*;
+import java.awt.*;
+import java.lang.*;
+import java.applet.Applet;
+
+
+public class FrameStateTest extends Applet implements ActionListener, ItemListener{
+
+   Button btnCreate = new Button("Create Frame");
+   Button btnDispose = new Button("Dispose Frame");
+   CheckboxGroup cbgState = new CheckboxGroup();
+   CheckboxGroup cbgResize = new CheckboxGroup();
+   Checkbox cbIconState = new Checkbox("Frame state ICONIFIED",cbgState,false);
+   Checkbox cbNormState = new Checkbox("Frame state NORMAL",cbgState,true);
+   Checkbox cbNonResize = new Checkbox("Frame Nonresizable",cbgResize,false);
+   Checkbox cbResize = new Checkbox("Frame Resizable",cbgResize,true);
+   int iState = 0;
+   boolean bResize = true;
+   CreateFrame icontst;
+
+   public void init() {
+      this.setLayout (new BorderLayout ());
+
+      String[] instructions =
+       {
+        "Steps to try to reproduce this problem:",
+        "When this test is run an Applet Viewer window will display. In the",
+        "Applet Viewer window select the different options for the Frame (i.e.",
+        "{Normal, Non-resizalbe}, {Normal, Resizable}, {Iconified, Resizable},",
+        "{Iconified, Non-resizalbe}). After chosing the Frame's state click the",
+        "Create Frame button. After the Frame (Frame State Test (Window2)) comes",
+        "up make sure the proper behavior occurred (Frame shown in proper state).",
+        "Click the Dispose button to close the Frame. Do the above steps for all",
+        "the different Frame state combinations available. If you observe the",
+        "proper behavior the test has passed, Press the Pass button. Otherwise",
+        "the test has failed, Press the Fail button.",
+        "Note: In Frame State Test (Window2) you can also chose the different",
+        "buttons to see different Frame behavior. An example of a problem that",
+        "has been seen, With the Frame nonresizable you can not iconify the Frame."
+       };
+      Sysout.createDialogWithInstructions( instructions );
+
+      btnDispose.setEnabled(false);
+      add(btnCreate, BorderLayout.NORTH);
+      add(btnDispose, BorderLayout.SOUTH);
+
+      Panel p = new Panel(new GridLayout(0,1));
+      p.add(cbIconState);
+      p.add(cbResize);
+      add(p, BorderLayout.WEST);
+
+      p = new Panel(new GridLayout(0,1));
+      p.add(cbNormState);
+      p.add(cbNonResize);
+      add(p, BorderLayout.EAST);
+
+      // Add Listeners
+      btnDispose.addActionListener(this);
+      btnCreate.addActionListener(this);
+      cbNormState.addItemListener(this);
+      cbResize.addItemListener(this);
+      cbIconState.addItemListener(this);
+      cbNonResize.addItemListener(this);
+
+      resize(600, 200);
+
+   }//End  init()
+
+   public void actionPerformed(ActionEvent evt) {
+
+
+        if (evt.getSource() == btnCreate) {
+            btnCreate.setEnabled(false);
+            btnDispose.setEnabled(true);
+            icontst = new CreateFrame(iState, bResize);
+            icontst.show();
+        } else if (evt.getSource() == btnDispose) {
+            btnCreate.setEnabled(true);
+            btnDispose.setEnabled(false);
+            icontst.dispose();
+        }
+    }
+
+    public void itemStateChanged(ItemEvent evt) {
+
+        if (cbNormState.getState()) iState = 0;
+        if (cbIconState.getState()) iState = 1;
+        if (cbResize.getState()) bResize = true;
+        if (cbNonResize.getState()) bResize = false;
+
+    }
+
+}// class FrameStateTest
+
+
+class CreateFrame extends Frame implements ActionListener , WindowListener {
+
+  static int e=0;
+  static int u=0;
+  static int p=0;
+  static int i=0;
+  static int v=0;
+
+  Button b1, b2, b3, b4, b5, b6, b7;
+  boolean resizable = true;
+  boolean iconic = false;
+  String name = "Frame State Test";
+
+  CreateFrame (int iFrameState, boolean bFrameResizable) {
+
+    setTitle("Frame State Test (Window 2)");
+
+    if (iFrameState == 1) {
+        iconic = true;
+    }
+
+    if (!(bFrameResizable)) {
+        resizable = false;
+    }
+
+    System.out.println("CREATING FRAME - Initially "+
+        ((iconic) ? "ICONIFIED" : "NORMAL (NON-ICONIFIED)") + " and " +
+        ((resizable) ? "RESIZABLE" : "NON-RESIZABLE") );
+
+    Sysout.println("CREATING FRAME - Initially "+
+        ((iconic) ? "ICONIFIED" : "NORMAL (NON-ICONIFIED)") + " and " +
+        ((resizable) ? "RESIZABLE" : "NON-RESIZABLE") );
+
+    setLayout(new FlowLayout() );
+    b1 = new Button("resizable");
+    add(b1);
+    b2 = new Button("resize");
+    add(b2);
+    b3 = new Button("iconify");
+    add(b3);
+    b4 = new Button("iconify and restore");
+    add(b4);
+    b5 = new Button("hide and show");
+    add(b5);
+    b6 = new Button("hide, iconify and show");
+    add(b6);
+    b7 = new Button("hide, iconify, show, and restore");
+    add(b7);
+    b1.addActionListener(this);
+    b2.addActionListener(this);
+    b3.addActionListener(this);
+    b4.addActionListener(this);
+    b5.addActionListener(this);
+    b6.addActionListener(this);
+    b7.addActionListener(this);
+    addWindowListener(this);
+
+    setBounds(100,2,200, 200);
+    setState(iconic ? Frame.ICONIFIED: Frame.NORMAL);
+    setResizable(resizable);
+    pack();
+    setVisible(true);
+
+  }
+
+  public void actionPerformed ( ActionEvent e )
+  {
+    if ( e.getSource() == b2 ) {
+        Rectangle r = this.getBounds();
+        r.width += 10;
+        System.out.println(" - button pressed - setting bounds on Frame to: "+r);
+        setBounds(r);
+        validate();
+    } else if ( e.getSource() == b1 ) {
+        resizable = !resizable;
+        System.out.println(" - button pressed - setting Resizable to: "+resizable);
+        ((Frame)(b1.getParent())).setResizable(resizable);
+    } else if ( e.getSource() == b3 ) {
+        System.out.println(" - button pressed - setting Iconic: ");
+        dolog();
+        ((Frame)(b1.getParent())).setState(Frame.ICONIFIED);
+        dolog();
+    } else if ( e.getSource() == b4 ) {
+        System.out.println(" - button pressed - setting Iconic: ");
+        dolog();
+        ((Frame)(b1.getParent())).setState(Frame.ICONIFIED);
+        dolog();
+        try {
+                Thread.sleep(1000);
+        } catch (Exception ex) {};
+        System.out.println(" - now restoring: ");
+        ((Frame)(b1.getParent())).setState(Frame.NORMAL);
+        dolog();
+    } else if ( e.getSource() == b5 ) {
+        System.out.println(" - button pressed - hiding : ");
+        dolog();
+        ((Frame)(b1.getParent())).setVisible(false);
+        dolog();
+        try {
+                Thread.sleep(1000);
+        } catch (Exception ex) {};
+        System.out.println(" - now reshowing: ");
+        ((Frame)(b1.getParent())).setVisible(true);
+        dolog();
+    } else if ( e.getSource() == b6 ) {
+        System.out.println(" - button pressed - hiding : ");
+        dolog();
+        ((Frame)(b1.getParent())).setVisible(false);
+        dolog();
+        try {
+                Thread.sleep(1000);
+        } catch (Exception ex) {};
+        System.out.println(" - setting Iconic: ");
+        dolog();
+        ((Frame)(b1.getParent())).setState(Frame.ICONIFIED);
+        try {
+                Thread.sleep(1000);
+        } catch (Exception ex) {};
+        System.out.println(" - now reshowing: ");
+        ((Frame)(b1.getParent())).setVisible(true);
+        dolog();
+    } else if ( e.getSource() == b7 ) {
+        System.out.println(" - button pressed - hiding : ");
+        dolog();
+        ((Frame)(b1.getParent())).setVisible(false);
+        dolog();
+        try {
+                Thread.sleep(1000);
+        } catch (Exception ex) {};
+        System.out.println(" - setting Iconic: ");
+        dolog();
+        ((Frame)(b1.getParent())).setState(Frame.ICONIFIED);
+        try {
+                Thread.sleep(1000);
+        } catch (Exception ex) {};
+        System.out.println(" - now reshowing: ");
+        ((Frame)(b1.getParent())).setVisible(true);
+        dolog();
+        try {
+                Thread.sleep(1000);
+        } catch (Exception ex) {};
+        System.out.println(" - now restoring: ");
+        ((Frame)(b1.getParent())).setState(Frame.NORMAL);
+        dolog();
+    }
+  }
+
+    public void windowActivated(WindowEvent e) {
+        System.out.println(name + " Activated");
+        dolog();
+    }
+    public void windowClosed(WindowEvent e) {
+        System.out.println(name + " Closed");
+        dolog();
+    }
+    public void windowClosing(WindowEvent e) {
+        ((Window)(e.getSource())).dispose();
+        System.out.println(name + " Closing");
+        dolog();
+    }
+    public void windowDeactivated(WindowEvent e) {
+        System.out.println(name + " Deactivated");
+        dolog();
+    }
+    public void windowDeiconified(WindowEvent e) {
+        System.out.println(name + " Deiconified");
+        dolog();
+    }
+    public void windowIconified(WindowEvent e) {
+        System.out.println(name + " Iconified");
+        dolog();
+    }
+    public void windowOpened(WindowEvent e) {
+        System.out.println(name + " Opened");
+        dolog();
+    }
+
+    public void dolog() {
+        System.out.println(" getState returns: "+getState());
+    }
+}
+
+// }// class FrameStateTest
+
+/****************************************************
+ 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.show();
+      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.show();
+      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 );
+    }
+
+ }// 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;
+      int scrollNone = TextArea.SCROLLBARS_NONE;
+      instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
+      add( "North", instructionsText );
+
+      messageText = new TextArea( "", 10, maxStringLength, scrollBoth );
+      add("South", messageText);
+
+      pack();
+
+      show();
+    }// 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" );
+    }
+
+
+ }// TestDialog  class