Path: blob/master/test/jdk/java/awt/Modal/helpers/TestDialog.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*/222324import java.awt.*;25import java.awt.event.*;2627import static jdk.test.lib.Asserts.*;28293031public class TestDialog extends Dialog implements ActionListener,32FocusListener, WindowFocusListener, WindowListener {3334public Button closeButton, openButton, dummyButton;3536public Flag closeClicked, openClicked, dummyClicked;37public Flag closeGained, openGained, dummyGained;38public Flag closeLost, openLost, dummyLost;39public Flag focusGained, focusLost;40public Flag activated;4142public Panel topPanel;4344public static int delay = 500;45public static int keyDelay = 100;4647public TestDialog(Frame frame) {48super(frame);49initializeGUI();50}5152public TestDialog(Dialog dialog) {53super(dialog);54initializeGUI();55}5657public void resetStatus() {58activated.reset();59focusGained.reset();60closeGained.reset();61openGained.reset();62closeClicked.reset();63openClicked.reset();64}6566private void initFlags() {67closeClicked = new Flag();68openClicked = new Flag();69dummyClicked = new Flag();70closeGained = new Flag();71openGained = new Flag();72dummyGained = new Flag();73closeLost = new Flag();74openLost = new Flag();75dummyLost = new Flag();76focusGained = new Flag();77focusLost = new Flag();78activated = new Flag();79}8081private void initializeGUI() {8283initFlags();84this.setTitle("Dialog");8586this.addWindowFocusListener(this);87this.addWindowListener(this);8889this.setLayout(new GridLayout(3, 1));9091topPanel = new Panel();92topPanel.setFocusable(false);93this.add(topPanel);9495Panel p = new Panel();96p.setLayout(new GridLayout(1, 3));9798closeButton = new Button("Close");99closeButton.addActionListener(this);100closeButton.addFocusListener(this);101102openButton = new Button("Open");103openButton.addActionListener(this);104openButton.addFocusListener(this);105106dummyButton = new Button("Dummy");107dummyButton.addActionListener(this);108dummyButton.addFocusListener(this);109110p.add(closeButton);111p.add(openButton);112p.add(dummyButton);113114this.add(p);115116Panel bottomPanel = new Panel();117bottomPanel.setFocusable(false);118this.add(bottomPanel);119120setSize(150, 150);121}122123public void doOpenAction() {}124public void doCloseAction() {}125public void doDummyAction() {}126127@Override128public void actionPerformed(ActionEvent event) {129if (closeButton.equals(event.getSource())) {130closeClicked.flagTriggered();131doCloseAction();132} else if (openButton.equals(event.getSource())) {133openClicked.flagTriggered();134doOpenAction();135} else if (dummyButton.equals(event.getSource())) {136dummyClicked.flagTriggered();137doDummyAction();138}139}140141@Override142public void focusGained(FocusEvent event) {143if (closeButton.equals(event.getSource())) {144closeGained.flagTriggered();145} else if (openButton.equals(event.getSource())) {146openGained.flagTriggered();147} else if (dummyButton.equals(event.getSource())) {148dummyGained.flagTriggered();149}150}151152@Override153public void focusLost(FocusEvent event) {154if (closeButton.equals(event.getSource())) {155closeLost.flagTriggered();156} else if (openButton.equals(event.getSource())) {157openLost.flagTriggered();158} else if (dummyButton.equals(event.getSource())) {159dummyLost.flagTriggered();160}161}162163@Override164public void windowGainedFocus(WindowEvent event) {165focusGained.flagTriggered();166}167168@Override169public void windowLostFocus(WindowEvent event) {170focusLost.flagTriggered();171}172173@Override174public void windowActivated(WindowEvent e) {175activated.flagTriggered();176}177178@Override179public void windowClosed(WindowEvent e) {180}181182@Override183public void windowClosing(WindowEvent e) {184assertTrue(false, "user closed window");185}186187@Override188public void windowDeactivated(WindowEvent e) {}189@Override190public void windowDeiconified(WindowEvent e) {}191@Override192public void windowIconified(WindowEvent e) {}193@Override194public void windowOpened(WindowEvent e) {}195196public void clickButton(Button b, ExtendedRobot robot) {197198try {199Flag.waitTillShown(b);200} catch (InterruptedException e) {}201202if ((closeButton.equals(b) || openButton.equals(b) ||203dummyButton.equals(b)) && robot != null) {204robot.mouseMove((int) b.getLocationOnScreen().x + b.getSize().width / 2,205(int) b.getLocationOnScreen().y + b.getSize().height / 2);206robot.delay(delay);207robot.click();208robot.delay(delay);209}210}211212public void clickOpenButton(ExtendedRobot robot) throws Exception {213clickOpenButton(robot, true, "");214}215216public void clickOpenButton(ExtendedRobot robot,217boolean refState,218String message) throws Exception {219openClicked.reset();220clickButton(openButton, robot);221openClicked.waitForFlagTriggered();222223String msg = "Clicking the dialog Open button " + (refState ?224"did not trigger an action." :225"triggered an action when it should not.");226assertEQ(openClicked.flag(), refState, msg + " " + message);227}228229public void clickCloseButton(ExtendedRobot robot) throws Exception {230clickCloseButton(robot, true, "");231}232233public void clickCloseButton(ExtendedRobot robot,234boolean refState,235String message) throws Exception {236closeClicked.reset();237clickButton(closeButton, robot);238closeClicked.waitForFlagTriggered();239240String msg = "Clicking the dialog Close button " + (refState ?241"did not trigger an action." :242"triggered an action when it should not.");243assertEQ(closeClicked.flag(), refState, msg + " " + message);244}245246public void clickDummyButton(ExtendedRobot robot) throws Exception {247clickDummyButton(robot, Flag.ATTEMPTS);248}249250public void clickDummyButton(ExtendedRobot robot,251int attempts) throws Exception {252clickDummyButton(robot, attempts, true, "");253}254255public void clickDummyButton(ExtendedRobot robot,256int attempts,257boolean refState,258String message) throws Exception {259dummyClicked.reset();260clickButton(dummyButton, robot);261dummyClicked.waitForFlagTriggered(attempts);262263String msg = "Clicking the dialog Dummy button " + (refState ?264"did not trigger an action." :265"triggered an action when it should not.");266assertEQ(dummyClicked.flag(), refState, msg + " " + message);267}268269270private void clickInside(ExtendedRobot robot) throws Exception {271272try {273Flag.waitTillShown(topPanel);274} catch (InterruptedException e) {}275276if (robot != null) {277robot.mouseMove((int) topPanel.getLocationOnScreen().x + topPanel.getSize().width / 2,278(int) topPanel.getLocationOnScreen().y + topPanel.getSize().height / 2);279robot.delay(delay);280robot.click();281robot.delay(delay);282}283}284285public void transferFocusToDialog(ExtendedRobot robot,286String message,287Button b) throws Exception {288focusGained.reset();289clickInside(robot);290focusGained.waitForFlagTriggered();291assertTrue(focusGained.flag(),292"clicking inside the Dialog did not make it focused. " + message);293294robot.waitForIdle(delay);295if (b != null) {296assertTrue(b.hasFocus(), "button " + b.getLabel() +297" did not gain focus when Dialog brought to top");298}299}300301public void transferFocusToBlockedDialog(ExtendedRobot robot,302String message,303Button b) throws Exception {304focusGained.reset();305clickInside(robot);306robot.waitForIdle(delay);307308assertFalse(focusGained.flag(),309"clicking inside a blocked Dialog made it focused. " + message);310311robot.waitForIdle(delay);312if (b != null) {313assertFalse(b.hasFocus(),314"button " + b.getLabel() + " present in a blocked dialog gained focus");315}316}317318public void checkBlockedDialog(ExtendedRobot robot,319String message) throws Exception {320dummyGained.reset();321dummyClicked.reset();322focusGained.reset();323324clickButton(dummyButton, robot);325326robot.waitForIdle(delay);327328assertFalse(dummyClicked.flag(),329"DummyButton on blocked Dialog triggered action when clicked. " + message);330331assertFalse(dummyGained.flag(),332"DummyButton on blocked Dialog gained focus when clicked. " + message);333334assertFalse(focusGained.flag(),335"A blocked Dialog gained focus when component clicked. " + message);336}337338public void checkUnblockedDialog(ExtendedRobot robot,339String message) throws Exception {340dummyGained.reset();341dummyClicked.reset();342clickButton(dummyButton, robot);343344dummyGained.waitForFlagTriggered();345assertTrue(dummyGained.flag(),346"DummyButton on Dialog did not gain focus when clicked. " + message);347348dummyClicked.waitForFlagTriggered();349assertTrue(dummyClicked.flag(),350"DummyButton on Dialog did not trigger action when clicked. " + message);351352closeGained.reset();353robot.type(KeyEvent.VK_TAB);354355closeGained.waitForFlagTriggered();356assertTrue(closeGained.flag(),357"Tab navigation on Dialog did not happen properly. First " +358"button did not gain focus. " + message);359}360361public void checkCloseButtonFocusGained(boolean refState) {362checkCloseButtonFocusGained(refState, Flag.ATTEMPTS);363}364365public void checkCloseButtonFocusGained(boolean refState, int attempts) {366try {367closeGained.waitForFlagTriggered(attempts);368} catch (InterruptedException e) {}369370String msg = "dialog Close button ";371msg += (refState ? "did not gain focus" :372"gained focus when it should not");373374assertTrue(closeGained.flag() == refState, msg);375}376377public void checkOpenButtonFocusGained(boolean refState) {378try {379openGained.waitForFlagTriggered();380} catch (InterruptedException e) {}381382String msg = "dialog Open button ";383msg += (refState ? "did not gain focus" :384"gained focus when it should not");385386assertTrue(openGained.flag() == refState, msg);387}388389public void checkOpenButtonFocusLost(boolean refState) {390checkOpenButtonFocusLost(refState, Flag.ATTEMPTS);391}392393public void checkOpenButtonFocusLost(boolean refState, int attempts) {394try {395openLost.waitForFlagTriggered(attempts);396} catch (InterruptedException e) {}397398String msg = "dialog Open button ";399msg += (refState ? "did not lose focus" :400"lost focus when it should not");401402assertTrue(openLost.flag() == refState, msg);403}404}405406407