< prev index next >

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

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2013, 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. --- 1,7 ---- /* ! * Copyright (c) 2013, 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,235 **** * 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; 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); } ! 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); } - }).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 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 ); ! } ! }// 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 ); ! setModalExclusionType(Dialog.ModalExclusionType.APPLICATION_EXCLUDE); ! 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 --- 20,207 ---- * or visit www.oracle.com if you need additional information or have any * questions. */ /* ! * @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 ! * @requires (os.family == "linux" | os.family == "solaris") ! * @run main/manual InvisibleParentTest ! */ import java.awt.Dialog; import java.awt.Frame; ! 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"); } + } + }); ! if (test.testResult == false) { ! throw new RuntimeException("Test Failed."); } } } ! class TestUI { ! private static JFrame mainFrame; ! private static JPanel mainControlPanel; ! private static JTextArea instructionTextArea; ! 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 TestUI(CountDownLatch latch) throws Exception { ! this.latch = latch; } + public final void createUI() throws Exception { ! mainFrame = new JFrame("InvisibleParentTest"); ! mainFrame.setModalExclusionType(Dialog.ModalExclusionType.APPLICATION_EXCLUDE); ! layout = new GridBagLayout(); ! mainControlPanel = new JPanel(layout); ! resultButtonPanel = new JPanel(layout); ! GridBagConstraints gbc = new GridBagConstraints(); ! // Create Test instructions ! String instructions ! = "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"; ! instructionTextArea = new JTextArea(); ! instructionTextArea.setText(instructions); ! instructionTextArea.setEditable(false); ! instructionTextArea.setBorder(BorderFactory. ! createTitledBorder("Test Instructions")); ! gbc.gridx = 0; ! gbc.gridy = 0; ! gbc.fill = GridBagConstraints.HORIZONTAL; ! mainControlPanel.add(instructionTextArea, gbc); ! // 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(); ! }); ! 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); ! gbc.gridx = 0; ! gbc.gridy = 1; ! mainControlPanel.add(resultButtonPanel, gbc); ! mainFrame.add(mainControlPanel); ! mainFrame.pack(); ! mainFrame.setVisible(true); ! ! // Create AWT frames and modal dialog ! createAWTComponents(); } ! ! public void disposeUI() { ! mainFrame.setVisible(false); ! mainFrame.dispose(); } ! private void createAWTComponents() { ! Frame f1 = new Frame("F1"); ! f1.setBounds(100, 300, 100, 100); ! f1.setVisible(true); ! try { ! Thread.sleep(500); ! } catch (Exception ex) { ! } ! 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); ! } ! }).start(); } + }
< prev index next >