Path: blob/master/test/jdk/java/awt/Modal/helpers/TestWindow.java
41152 views
/*1* Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223import java.awt.*;24import java.awt.event.*;2526import static jdk.test.lib.Asserts.*;27282930public class TestWindow extends Window implements ActionListener,31FocusListener, WindowFocusListener, WindowListener {3233public Button closeButton, openButton, dummyButton;3435public Flag closeClicked, openClicked, dummyClicked;36public Flag closeGained, openGained, dummyGained;37public Flag closeLost, openLost, dummyLost;38public Flag focusGained, focusLost;39public Flag activated;4041public static int delay = 500;42public static int keyDelay = 100;4344public TestWindow(Frame owner) {45super(owner);46initializeGUI();47}4849public TestWindow(Window window) {50super(window);51initializeGUI();52}5354public void resetStatus() {55activated.reset();56focusGained.reset();57closeGained.reset();58openGained.reset();59closeClicked.reset();60openClicked.reset();61}6263private void initFlags() {64closeClicked = new Flag();65openClicked = new Flag();66dummyClicked = new Flag();67closeGained = new Flag();68openGained = new Flag();69dummyGained = new Flag();70closeLost = new Flag();71openLost = new Flag();72dummyLost = new Flag();73focusGained = new Flag();74focusLost = new Flag();75activated = new Flag();76}7778private void initializeGUI() {7980initFlags();8182this.addWindowFocusListener(this);83this.addWindowListener(this);8485this.setLayout(new GridLayout(3, 1));8687Panel topPanel;88topPanel = new Panel();89topPanel.setFocusable(false);90this.add(topPanel);9192Panel p = new Panel();93p.setLayout(new GridLayout(1, 3));9495closeButton = new Button("Close");96closeButton.addActionListener(this);97closeButton.addFocusListener(this);9899openButton = new Button("Open");100openButton.addActionListener(this);101openButton.addFocusListener(this);102103dummyButton = new Button("Dummy");104dummyButton.addActionListener(this);105dummyButton.addFocusListener(this);106107p.add(closeButton);108p.add(openButton);109p.add(dummyButton);110111this.add(p);112113Panel bottomPanel = new Panel();114bottomPanel.setFocusable(false);115this.add(bottomPanel);116117setSize(150, 150);118}119120public void doOpenAction() {}121public void doCloseAction() {}122public void doDummyAction() {}123124@Override125public void actionPerformed(ActionEvent event) {126if (closeButton.equals(event.getSource())) {127closeClicked.flagTriggered();128doCloseAction();129} else if (openButton.equals(event.getSource())) {130openClicked.flagTriggered();131doOpenAction();132} else if (dummyButton.equals(event.getSource())) {133dummyClicked.flagTriggered();134doDummyAction();135}136}137138@Override139public void focusGained(FocusEvent event) {140if (closeButton.equals(event.getSource())) {141closeGained.flagTriggered();142} else if (openButton.equals(event.getSource())) {143openGained.flagTriggered();144} else if (dummyButton.equals(event.getSource())) {145dummyGained.flagTriggered();146}147}148149@Override150public void focusLost(FocusEvent event) {151if (closeButton.equals(event.getSource())) {152closeLost.flagTriggered();153} else if (openButton.equals(event.getSource())) {154openLost.flagTriggered();155} else if (dummyButton.equals(event.getSource())) {156dummyLost.flagTriggered();157}158}159160@Override161public void windowGainedFocus(WindowEvent event) {162focusGained.flagTriggered();163}164165@Override166public void windowLostFocus(WindowEvent event) {167focusLost.flagTriggered();168}169170@Override171public void windowActivated(WindowEvent e) {172activated.flagTriggered();173}174175@Override176public void windowClosed(WindowEvent e) {}177178@Override179public void windowClosing(WindowEvent e) {180System.err.println("User closed window!");181System.exit(1);182}183184@Override185public void windowDeactivated(WindowEvent e) {}186187@Override188public void windowDeiconified(WindowEvent e) {}189190@Override191public void windowIconified(WindowEvent e) {}192193@Override194public void windowOpened(WindowEvent e) {}195196public void clickButton(Button b, ExtendedRobot robot) {197try {198Flag.waitTillShown(b);199} catch (InterruptedException e) {}200201if ((closeButton.equals(b) || openButton.equals(b) ||202dummyButton.equals(b)) && robot != null) {203robot.mouseMove((int) b.getLocationOnScreen().x + b.getSize().width / 2,204(int) b.getLocationOnScreen().y + b.getSize().height / 2);205robot.delay(delay);206robot.click();207robot.delay(delay);208}209}210211public void clickOpenButton(ExtendedRobot robot) throws Exception {212clickOpenButton(robot, true, "");213}214215public void clickOpenButton(ExtendedRobot robot,216boolean refState,217String message) throws Exception {218openClicked.reset();219clickButton(openButton, robot);220openClicked.waitForFlagTriggered();221222String msg = "Clicking the window Open button " + (refState ?223"did not trigger an action." :224"triggered an action when it should not.");225assertEQ(openClicked.flag(), refState, msg + " " + message);226}227228public void clickCloseButton(ExtendedRobot robot) throws Exception {229clickCloseButton(robot, true, "");230}231232public void clickCloseButton(ExtendedRobot robot,233boolean refState,234String message) throws Exception {235closeClicked.reset();236clickButton(closeButton, robot);237closeClicked.waitForFlagTriggered();238239String msg = "Clicking the window Close button " + (refState ?240"did not trigger an action." :241"triggered an action when it should not.");242assertEQ(closeClicked.flag(), refState, msg + " " + message);243}244245public void clickDummyButton(ExtendedRobot robot) throws Exception {246clickDummyButton(robot, true, "");247}248249public void clickDummyButton(ExtendedRobot robot,250boolean refState,251String message) throws Exception {252dummyClicked.reset();253clickButton(dummyButton, robot);254dummyClicked.waitForFlagTriggered();255256String msg = "Clicking the window Dummy button " + (refState ?257"did not trigger an action." :258"triggered an action when it should not.");259assertEQ(dummyClicked.flag(), refState, msg + " " + message);260}261262public void checkBlockedWindow(ExtendedRobot robot,263String message) throws Exception {264dummyGained.reset();265dummyClicked.reset();266focusGained.reset();267268clickButton(dummyButton, robot);269270robot.waitForIdle(delay);271272assertFalse(dummyClicked.flag(),273"DummyButton on blocked Window triggered action when clicked. " + message);274275assertFalse(dummyGained.flag(),276"DummyButton on blocked Window gained focus when clicked. " + message);277278assertFalse(focusGained.flag(),279"A blocked window gained focus when component clicked. " + message);280}281282public void checkUnblockedWindowWithBlockedParent(283ExtendedRobot robot, String message) throws Exception {284285dummyGained.reset();286dummyClicked.reset();287clickButton(dummyButton, robot);288289dummyClicked.waitForFlagTriggered();290291assertTrue(dummyClicked.flag(),292"DummyButton on Window did not trigger action when clicked. " + message);293294assertFalse(dummyGained.flag(),295"DummyButton on Window gained focus " +296"when its parent is non-focusable. " + message);297}298299public void checkUnblockedWindow(ExtendedRobot robot,300String message) throws Exception {301dummyGained.reset();302dummyClicked.reset();303clickButton(dummyButton, robot);304305dummyGained.waitForFlagTriggered();306assertTrue(dummyGained.flag(),307"DummyButton on Window did not gain focus on clicking. " + message);308309assertTrue(dummyClicked.flag(),310"DummyButton on Window did not trigger action on clicking. " + message);311312closeGained.reset();313robot.type(KeyEvent.VK_TAB);314315closeGained.waitForFlagTriggered();316assertTrue(closeGained.flag(),317"Tab navigation did not happen properly on Window. First " +318"button did not gain focus on tab press. " + message);319}320321public void checkCloseButtonFocusGained(boolean refState) {322checkCloseButtonFocusGained(refState, Flag.ATTEMPTS);323}324325public void checkCloseButtonFocusGained(boolean refState, int attempts) {326try {327closeGained.waitForFlagTriggered(attempts);328} catch (InterruptedException e) {}329330String msg = "window Close button ";331msg += (refState ? "did not gain focus" :332"gained focus when it should not");333334assertTrue(closeGained.flag() == refState, msg);335}336337338public void checkOpenButtonFocusGained(boolean refState) {339checkOpenButtonFocusGained(refState, Flag.ATTEMPTS);340}341342public void checkOpenButtonFocusGained(boolean refState, int attempts) {343try {344openGained.waitForFlagTriggered(attempts);345} catch (InterruptedException e) {}346347String msg = "window Open button ";348msg += (refState ? "did not gain focus" :349"gained focus when it should not");350351assertTrue(openGained.flag() == refState, msg);352}353354public void checkOpenButtonFocusLost(boolean refState) {355checkOpenButtonFocusLost(refState, Flag.ATTEMPTS);356}357358public void checkOpenButtonFocusLost(boolean refState, int attempts) {359try {360openLost.waitForFlagTriggered(attempts);361} catch (InterruptedException e) {}362363String msg = "window Open button ";364msg += (refState ? "did not lose focus" :365"lost focus when it should not");366assertTrue(openLost.flag()== refState, msg);367}368}369370371