Path: blob/master/test/jdk/java/awt/Modal/helpers/TestFrame.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 TestFrame extends Frame 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 Panel topPanel;4243public static int delay = 500;44public static int keyDelay = 100;4546public TestFrame() {47super();48initializeGUI();49}5051private void initFlags() {52closeClicked = new Flag();53openClicked = new Flag();54dummyClicked = new Flag();55closeGained = new Flag();56openGained = new Flag();57dummyGained = new Flag();58closeLost = new Flag();59openLost = new Flag();60dummyLost = new Flag();61focusGained = new Flag();62focusLost = new Flag();63activated = new Flag();64}6566public void resetStatus() {67activated.reset();68focusGained.reset();69closeGained.reset();70openGained.reset();71closeClicked.reset();72openClicked.reset();73}7475private void initializeGUI() {7677initFlags();78this.setTitle("Frame");7980this.addWindowFocusListener(this);81this.addWindowListener(this);8283this.setLayout(new GridLayout(3, 1));8485topPanel = new Panel();86topPanel.setFocusable(false);87this.add(topPanel);8889Panel p = new Panel();90p.setLayout(new GridLayout(1, 3));9192closeButton = new Button("Close");93closeButton.addActionListener(this);94closeButton.addFocusListener(this);9596openButton = new Button("Open");97openButton.addActionListener(this);98openButton.addFocusListener(this);99100dummyButton = new Button("Dummy");101dummyButton.addActionListener(this);102dummyButton.addFocusListener(this);103104p.add(closeButton);105p.add(openButton);106p.add(dummyButton);107108this.add(p);109110Panel bottomPanel = new Panel();111bottomPanel.setFocusable(false);112this.add(bottomPanel);113114setSize(150, 150);115}116117public void doOpenAction() {}118public void doCloseAction() {}119public void doDummyAction() {}120121@Override122public void actionPerformed(ActionEvent event) {123if (closeButton.equals(event.getSource())) {124closeClicked.flagTriggered();125doCloseAction();126} else if (openButton.equals(event.getSource())) {127openClicked.flagTriggered();128doOpenAction();129} else if (dummyButton.equals(event.getSource())) {130dummyClicked.flagTriggered();131doDummyAction();132}133}134135@Override136public void focusGained(FocusEvent event) {137if (closeButton.equals(event.getSource())) {138closeGained.flagTriggered();139} else if (openButton.equals(event.getSource())) {140openGained.flagTriggered();141} else if (dummyButton.equals(event.getSource())) {142dummyGained.flagTriggered();143}144}145146@Override147public void focusLost(FocusEvent event) {148if (closeButton.equals(event.getSource())) {149closeLost.flagTriggered();150} else if (openButton.equals(event.getSource())) {151openLost.flagTriggered();152} else if (dummyButton.equals(event.getSource())) {153dummyLost.flagTriggered();154}155}156157@Override158public void windowGainedFocus(WindowEvent event) {159focusGained.flagTriggered();160}161162@Override163public void windowLostFocus(WindowEvent event) {164focusLost.flagTriggered();165}166167@Override168public void windowActivated(WindowEvent e) {169activated.flagTriggered();170}171172@Override173public void windowClosed(WindowEvent e) {}174175@Override176public void windowClosing(WindowEvent e) {177assertTrue(false, "user closed window");178}179180@Override181public void windowDeactivated(WindowEvent e) {}182@Override183public void windowDeiconified(WindowEvent e) {}184@Override185public void windowIconified(WindowEvent e) {}186@Override187public void windowOpened(WindowEvent e) {}188189public void clickButton(Button b, ExtendedRobot robot) {190try {191Flag.waitTillShown(b);192} catch (InterruptedException e) {}193194if ((closeButton.equals(b) || openButton.equals(b) ||195dummyButton.equals(b)) && robot != null) {196robot.mouseMove((int) b.getLocationOnScreen().x + b.getSize().width / 2,197(int) b.getLocationOnScreen().y + b.getSize().height / 2);198robot.delay(delay);199robot.click();200robot.delay(delay);201}202}203204public void clickOpenButton(ExtendedRobot robot) throws Exception {205clickOpenButton(robot, true, "");206}207208public void clickOpenButton(ExtendedRobot robot,209boolean refState,210String message) throws Exception {211openClicked.reset();212clickButton(openButton, robot);213openClicked.waitForFlagTriggered();214215String msg = "Clicking the frame Open button " + (refState ?216"did not trigger an action." :217"triggered an action when it should not.");218assertEQ(openClicked.flag(), refState, msg + " " + message);219}220221public void clickCloseButton(ExtendedRobot robot) throws Exception {222clickCloseButton(robot, true, "");223}224225public void clickCloseButton(ExtendedRobot robot,226boolean refState,227String message) throws Exception {228closeClicked.reset();229clickButton(closeButton, robot);230closeClicked.waitForFlagTriggered();231232String msg = "Clicking the frame Close button " + (refState ?233"did not trigger an action." :234"triggered an action when it should not.");235assertEQ(closeClicked.flag(), refState, msg + " " + message);236}237238public void clickDummyButton(ExtendedRobot robot) throws Exception {239clickDummyButton(robot, Flag.ATTEMPTS);240}241242public void clickDummyButton(ExtendedRobot robot,243int attempts) throws Exception {244clickDummyButton(robot, attempts, true, "");245}246247public void clickDummyButton(ExtendedRobot robot,248int attempts,249boolean refState,250String message) throws Exception {251dummyClicked.reset();252clickButton(dummyButton, robot);253dummyClicked.waitForFlagTriggered();254255String msg = "Clicking the frame Dummy button " + (refState ?256"did not trigger an action." :257"triggered an action when it should not.");258assertEQ(dummyClicked.flag(), refState, msg + " " + message);259}260261public void clickInside(ExtendedRobot robot) throws Exception {262try {263Flag.waitTillShown(topPanel);264} catch (InterruptedException e) {}265266if (robot != null) {267robot.mouseMove((int) topPanel.getLocationOnScreen().x + topPanel.getSize().width / 2,268(int) topPanel.getLocationOnScreen().y + topPanel.getSize().height / 2);269robot.delay(delay);270robot.click();271robot.delay(delay);272}273}274275public void transferFocusToFrame(ExtendedRobot robot,276String message,277Button b) throws Exception {278focusGained.reset();279clickInside(robot);280281focusGained.waitForFlagTriggered();282assertTrue(focusGained.flag(),283"Clicking inside the Frame did not make it focused. " + message);284285if (b != null) {286assertTrue(b.hasFocus(), "Button " + b.getLabel() +287" did not gain focus when Frame brought to top");288}289}290291public void transferFocusToBlockedFrame(ExtendedRobot robot,292String message,293Button b) throws Exception {294focusGained.reset();295clickInside(robot);296297robot.waitForIdle(delay);298299assertFalse(focusGained.flag(),300"Clicking inside a blocked Frame made it focused. " + message);301302robot.waitForIdle(delay);303if (b != null) {304assertFalse(b.hasFocus(), "Button " + b.getLabel() +305" present in a blocked frame gained focus");306}307}308309public void checkBlockedFrame(310ExtendedRobot robot, String message) throws Exception {311312dummyGained.reset();313dummyClicked.reset();314focusGained.reset();315316clickButton(dummyButton, robot);317318robot.waitForIdle(delay);319320assertFalse(dummyClicked.flag(),321"DummyButton on blocked Frame triggered action when clicked. " + message);322323assertFalse(dummyGained.flag(),324"DummyButton on blocked Frame gained focus when clicked. " + message);325326assertFalse(focusGained.flag(),327"A blocked Frame gained focus when component clicked. " + message);328}329330public void checkUnblockedFrame(ExtendedRobot robot,331String message) throws Exception {332dummyGained.reset();333dummyClicked.reset();334clickButton(dummyButton, robot);335336dummyGained.waitForFlagTriggered();337assertTrue(dummyGained.flag(),338"DummyButton on Frame did not gain focus on clicking. " + message);339340dummyClicked.waitForFlagTriggered();341assertTrue(dummyClicked.flag(),342"DummyButton on Frame did not trigger action on clicking. " + message);343344closeGained.reset();345robot.type(KeyEvent.VK_TAB);346347closeGained.waitForFlagTriggered();348assertTrue(closeGained.flag(),349"FAIL: Tab navigation did not happen properly on Frame. First " +350"button did not gain focus on tab press. " + message);351}352353public void checkCloseButtonFocusGained(boolean refState) {354checkCloseButtonFocusGained(refState, Flag.ATTEMPTS);355}356357public void checkCloseButtonFocusGained(boolean refState, int attempts) {358try {359closeGained.waitForFlagTriggered(attempts);360} catch (InterruptedException e) {}361362String msg = "frame Close button ";363msg += (refState ? "did not gain focus" :364"gained focus when it should not");365366assertTrue(closeGained.flag() == refState, msg);367}368369public void checkOpenButtonFocusGained(boolean refState) {370checkOpenButtonFocusGained(refState, Flag.ATTEMPTS);371}372373public void checkOpenButtonFocusGained(boolean refState, int attempts) {374try {375openGained.waitForFlagTriggered(attempts);376} catch (InterruptedException e) {}377378String msg = "frame Open button ";379msg += (refState ? "did not gain focus" :380"gained focus when it should not");381382assertTrue(openGained.flag() == refState, msg);383}384385public void checkOpenButtonFocusLost(boolean refState) {386checkOpenButtonFocusLost(refState, Flag.ATTEMPTS);387}388389public void checkOpenButtonFocusLost(boolean refState, int attempts) {390try {391openLost.waitForFlagTriggered(attempts);392} catch (InterruptedException e) {}393394String msg = "frame Open button ";395msg += (refState ? "did not lose focus" :396"lost focus when it should not");397assertTrue(openLost.flag()== refState, msg);398}399}400401402