< prev index next >

test/java/awt/Modal/InvisibleParentTest/InvisibleParentTest.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 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.

@@ -20,216 +20,191 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
 
 /*
-  test
-  @bug 6401700 6412803
-  @summary Tests that modal dialog is shown on the screen and
-iconified/restored correctly if some of its blocked windows are invisible
-  @author artem.ananiev: area=awt.modal
-  @run applet/manual=yesno InvisibleParentTest.html
-*/
-
-import java.applet.Applet;
-import java.awt.BorderLayout;
-import java.awt.Button;
-import java.awt.Component;
+ * @test
+ * @bug 6401700 6412803 8058950
+ * @summary  Tests that modal dialog is shown on the screen and
+ * iconified/restored correctly if some of its blocked windows are invisible
+ * @run main/manual InvisibleParentTest
+ */
 import java.awt.Dialog;
 import java.awt.Frame;
-import java.awt.TextArea;
-import java.awt.Window;
-
-public class InvisibleParentTest extends Applet
-{
-    public void init()
-    {
-        setLayout(new BorderLayout());
-
-        String[] instructions =
-        {
-            "If your system is Windows, press PASS button.",
-            "When the test starts two windows should appear: frame G1 and",
-            "    dialog D1. Another one frame F1 should be minimized.",
-            "    If the dialog is not shown (minimizied), press FAIL button.",
-            "Then minimize frame G1 and restore F1. If the dialog D1 is not",
-            "    restored together with F1, press FAIL, else PASS"
-        };
-        Sysout.createDialogWithInstructions( instructions );
-    }
-
-    public void start ()
-    {
-        Button b;
-
-        setSize (200,200);
-        setVisible(true);
-        validate();
-
-        Component c = this;
-        while ((c != null) && !(c instanceof Window))
-        {
-            c = c.getParent();
-        }
-        if (c != null)
-        {
-            ((Window)c).setModalExclusionType(Dialog.ModalExclusionType.APPLICATION_EXCLUDE);
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
+
+public class InvisibleParentTest {
+
+    public static void main(String args[]) throws Exception {
+        final CountDownLatch latch = new CountDownLatch(1);
+        TestUI test = new TestUI(latch);
+
+        SwingUtilities.invokeLater(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    test.createUI();
+                } catch (Exception ex) {
+                    throw new RuntimeException("Exception while creating test UI");
+                }
+            }
+        });
+
+        boolean status = latch.await(5, TimeUnit.MINUTES);
+
+        if (!status) {
+            System.out.println("Test timed out.");
+        }
+
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    test.disposeUI();
+                } catch (Exception ex) {
+                    throw new RuntimeException("Exception while disposing test UI");
         }
+            }
+        });
 
-        Frame f1 = new Frame("F1");
-        f1.setBounds(100, 300, 100, 100);
-        f1.setVisible(true);
-        f1.setExtendedState(Frame.ICONIFIED);
-
-        Frame g1 = new Frame("G1");
-        g1.setBounds(150, 350, 100, 100);
-        g1.setVisible(true);
-
-        final Dialog d1 = new Dialog((Frame)null, "D1", Dialog.ModalityType.APPLICATION_MODAL);
-        d1.setBounds(200, 400, 100, 100);
-        new Thread(new Runnable()
-        {
-            public void run()
-            {
-                d1.setVisible(true);
+        if (test.testResult == false) {
+            throw new RuntimeException("Test Failed.");
             }
-        }).start();
     }
 }
 
-/****************************************************
- 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 TestUI {
 
-class Sysout
-{
-    private static TestDialog dialog;
+    private static JFrame mainFrame;
+    private static JPanel mainControlPanel;
 
-    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." );
-    }
+    private static JTextArea instructionTextArea;
 
-    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." );
-    }
+    private static JPanel resultButtonPanel;
+    private static JButton passButton;
+    private static JButton failButton;
 
+    private static GridBagLayout layout;
+    private final CountDownLatch latch;
+    public boolean testResult = false;
 
-    public static void printInstructions( String[] instructions )
-    {
-        dialog.printInstructions( instructions );
+    public TestUI(CountDownLatch latch) throws Exception {
+        this.latch = latch;
     }
 
+    public final void createUI() throws Exception {
 
-    public static void println( String messageIn )
-    {
-        dialog.displayMessage( messageIn );
-    }
+        mainFrame = new JFrame("InvisibleParentTest");
+        mainFrame.setModalExclusionType(Dialog.ModalExclusionType.APPLICATION_EXCLUDE);
 
-}// Sysout  class
+        layout = new GridBagLayout();
+        mainControlPanel = new JPanel(layout);
+        resultButtonPanel = new JPanel(layout);
 
-/**
-  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
-{
+        GridBagConstraints gbc = new GridBagConstraints();
 
-    TextArea instructionsText;
-    TextArea messageText;
-    int maxStringLength = 80;
+        // Create Test instructions
+        String instructions
+                = "If your system is Windows, press PASS button.\n"
+                + "When the test starts two windows should appear: frame G1 and\n"
+                + "    dialog D1. Another one frame F1 should be minimized.\n"
+                + "    If the dialog is not shown (minimizied), press FAIL button.\n"
+                + "Then minimize frame G1 and restore F1. If the dialog D1 is not\n"
+                + "    restored together with F1, press FAIL, else PASS";
 
-    //DO NOT call this directly, go through Sysout
-    public TestDialog( Frame frame, String name )
-    {
-        super( frame, name );
-        setModalExclusionType(Dialog.ModalExclusionType.APPLICATION_EXCLUDE);
-        int scrollBoth = TextArea.SCROLLBARS_BOTH;
-        instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
-        add( "North", instructionsText );
+        instructionTextArea = new JTextArea();
+        instructionTextArea.setText(instructions);
+        instructionTextArea.setEditable(false);
+        instructionTextArea.setBorder(BorderFactory.
+                createTitledBorder("Test Instructions"));
 
-        messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
-        add("Center", messageText);
+        gbc.gridx = 0;
+        gbc.gridy = 0;
+        gbc.fill = GridBagConstraints.HORIZONTAL;
+        mainControlPanel.add(instructionTextArea, gbc);
 
-        pack();
+        // Create resultButtonPanel with Pass, Fail buttons
+        passButton = new JButton("Pass");
+        passButton.setActionCommand("Pass");
+        passButton.addActionListener((ActionEvent e) -> {
+            System.out.println("Pass Button pressed!");
+            testResult = true;
+            latch.countDown();
 
-        setVisible(true);
-    }// TestDialog()
+        });
 
-    //DO NOT call this directly, go through Sysout
-    public void printInstructions( String[] instructions )
-    {
-        //Clear out any current instructions
-        instructionsText.setText( "" );
+        failButton = new JButton("Fail");
+        failButton.setActionCommand("Fail");
+        failButton.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                System.out.println("Fail Button pressed!");
+                testResult = false;
+                latch.countDown();
+            }
+        });
+
+        gbc.gridx = 0;
+        gbc.gridy = 0;
+        resultButtonPanel.add(passButton, gbc);
+        gbc.gridx = 1;
+        gbc.gridy = 0;
+        resultButtonPanel.add(failButton, gbc);
 
-        //Go down array of instruction strings
+        gbc.gridx = 0;
+        gbc.gridy = 1;
+        mainControlPanel.add(resultButtonPanel, gbc);
 
-        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 );
+        mainFrame.add(mainControlPanel);
 
-                    if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
+        mainFrame.pack();
+        mainFrame.setVisible(true);
 
-                    printStr = remainingStr.substring( 0, posOfSpace + 1 );
-                    remainingStr = remainingStr.substring( posOfSpace + 1 );
+        // Create AWT frames and modal dialog
+        createAWTComponents();
                 }
-                //else just print
-                else
-                {
-                    printStr = remainingStr;
-                    remainingStr = "";
+
+    public void disposeUI() {
+        mainFrame.setVisible(false);
+        mainFrame.dispose();
                 }
 
-                instructionsText.append( printStr + "\n" );
+    private void createAWTComponents() {
+        Frame f1 = new Frame("F1");
+        f1.setBounds(100, 300, 100, 100);
+        f1.setVisible(true);
 
-            }// while
+        try {
+            Thread.sleep(500);
+        } catch (Exception ex) {
+        }
 
-        }// for
+        f1.setExtendedState(Frame.ICONIFIED);
 
-    }//printInstructions()
+        Frame g1 = new Frame("G1");
+        g1.setBounds(150, 350, 100, 100);
+        g1.setVisible(true);
 
-    //DO NOT call this directly, go through Sysout
-    public void displayMessage( String messageIn )
-    {
-        messageText.append( messageIn + "\n" );
-        System.out.println(messageIn);
+        final Dialog d1 = new Dialog((Frame) null, "D1", Dialog.ModalityType.APPLICATION_MODAL);
+        d1.setBounds(200, 400, 100, 100);
+        new Thread(new Runnable() {
+            public void run() {
+                d1.setVisible(true);
+            }
+        }).start();
     }
+}
+
+
+
 
-}// TestDialog  class
< prev index next >