diff -r 9ff8428f3e51 -r 81affcb6832c test/jdk/sanity/client/SwingSet/src/GridBagLayoutDemoTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/jdk/sanity/client/SwingSet/src/GridBagLayoutDemoTest.java Tue Jun 19 12:04:01 2018 +0530 @@ -0,0 +1,368 @@ +/* + * Copyright (c) 2018, 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. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +import org.jtregext.GuiTestListener; +import com.sun.swingset3.demos.gridbaglayout.GridBagLayoutDemo; +import static com.sun.swingset3.demos.gridbaglayout.GridBagLayoutDemo.*; +import static com.sun.swingset3.demos.gridbaglayout.Calculator.*; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Point; +import javax.swing.JButton; +import javax.swing.UIManager; +import org.testng.annotations.Test; +import org.netbeans.jemmy.ClassReference; +import org.netbeans.jemmy.operators.JFrameOperator; +import org.netbeans.jemmy.operators.JButtonOperator; +import org.netbeans.jemmy.operators.JTextFieldOperator; +import org.testng.annotations.Listeners; +import static org.jemmy2ext.JemmyExt.EXACT_STRING_COMPARATOR; +import static org.jemmy2ext.JemmyExt.getUIValue; +/* + * @test + * @key headful + * @summary Verifies SwingSet3 GridBagLayoutDemo by checking the relative + * location of all the components before and after resizing the frame, + * interacting with all the controls and checking this interaction on the + * text field display. + * + * @library /sanity/client/lib/jemmy/src + * @library /sanity/client/lib/Extensions/src + * @library /sanity/client/lib/SwingSet3/src + * @modules java.desktop + * java.logging + * @build com.sun.swingset3.demos.gridbaglayout.GridBagLayoutDemo + * @run testng GridBagLayoutDemoTest + */ + +@Listeners(GuiTestListener.class) +public class GridBagLayoutDemoTest { + + private JTextFieldOperator tfScreen; + private JButtonOperator buttonZero; + private JButtonOperator buttonOne; + private JButtonOperator buttonTwo; + private JButtonOperator buttonThree; + private JButtonOperator buttonFour; + private JButtonOperator buttonFive; + private JButtonOperator buttonSix; + private JButtonOperator buttonSeven; + private JButtonOperator buttonEight; + private JButtonOperator buttonNine; + private JButtonOperator buttonPlus; + private JButtonOperator buttonMinus; + private JButtonOperator buttonMultiply; + private JButtonOperator buttonDivide; + private JButtonOperator buttonComma; + private JButtonOperator buttonSqrt; + private JButtonOperator buttonReciprocal; + private JButtonOperator buttonToggleSign; + private JButtonOperator buttonEquals; + private JButtonOperator backspaceButton; + private JButtonOperator resetButton; + private JFrameOperator mainFrame; + + @Test(dataProvider = "availableLookAndFeels", dataProviderClass = TestHelpers.class) + public void test(String lookAndFeel) throws Exception { + initializeUIComponents(lookAndFeel); + // Check that the relative location of buttons is as expected. + checkRelativeLocations(); + // Interact with buttons and check the result on the display. + checkInteractionOnDisplay(); + // Change the location and check that the relative location of buttons is same as before. + checkChangeLocation(); + // Change the size and check that the relative location of buttons is same as before. + checkChangeSize(); + } + + private double x(Component component) { + return component.getLocation().getX(); + } + + private double y(Component component) { + return component.getLocation().getY(); + } + + private void checkRight(JButtonOperator currentButton, JButtonOperator rightButton) { + // Check that x coordinate of right button is greater than that of right + // end of current button + currentButton.waitStateOnQueue(button -> x(button) + button.getWidth() < x(rightButton.getSource())); + // Check that the y coordinate of the button is same as the button to + // the right + currentButton.waitStateOnQueue(button -> y(button) == y(rightButton.getSource())); + // Check that the height of the button is same as the button to the + // right + currentButton.waitStateOnQueue(button -> button.getHeight() == rightButton.getHeight()); + } + + private void checkBelow(JButtonOperator currentButton, JButtonOperator buttonBelow) { + // Check that y coordinate of button below is greater than that of + // bottom end of current button + currentButton.waitStateOnQueue(button -> y(button) + button.getHeight() < y(buttonBelow.getSource())); + // Check that the x coordinate of the button is same as the button below + currentButton.waitStateOnQueue(button -> x(button) == x(buttonBelow.getSource())); + // Check that the width of the button is same as the button below + currentButton.waitStateOnQueue(button -> button.getWidth() == buttonBelow.getWidth()); + } + + private void checkRelativeLocations() { + // Check relative location of button 7 + checkRight(buttonSeven, buttonEight); + checkBelow(buttonSeven, buttonFour); + + // Check relative location of button 8 + checkRight(buttonEight, buttonNine); + checkBelow(buttonEight, buttonFive); + + // Check relative location of button 9 + checkRight(buttonNine, buttonDivide); + checkBelow(buttonNine, buttonSix); + + // Check relative location of Division button + checkRight(buttonDivide, buttonReciprocal); + checkBelow(buttonDivide, buttonMultiply); + + // Check relative location of Reciprocal and Sqrt buttons + checkBelow(buttonReciprocal, buttonSqrt); + + // Check relative location of button 4 + checkRight(buttonFour, buttonFive); + checkBelow(buttonFour, buttonOne); + + // Check relative location of button 5 + checkRight(buttonFive, buttonSix); + checkBelow(buttonFive, buttonTwo); + + // Check relative location of button 6 + checkRight(buttonSix, buttonMultiply); + checkBelow(buttonSix, buttonThree); + + // Check relative location of Multiply button + checkRight(buttonMultiply, buttonSqrt); + checkBelow(buttonMultiply, buttonMinus); + + // Check relative location of button 1 + checkRight(buttonOne, buttonTwo); + checkBelow(buttonOne, buttonZero); + + // Check relative location of button 2 + checkRight(buttonTwo, buttonThree); + checkBelow(buttonTwo, buttonToggleSign); + + // Check relative location of button 3 + checkRight(buttonThree, buttonMinus); + checkBelow(buttonThree, buttonComma); + + // Check relative location of Minus button + checkBelow(buttonMinus, buttonPlus); + + // Check relative location of button 0 + checkRight(buttonZero, buttonToggleSign); + + // Check relative location of Sign Toggle Button + checkRight(buttonToggleSign, buttonComma); + + // Check relative location of Comma button + checkRight(buttonComma, buttonPlus); + + // Check relative location of plus and Equals buttons + checkRight(buttonPlus, buttonEquals); + + // Check relative location of JPanel containing Backspace and Reset + // buttons + Point parentLocation = getUIValue(backspaceButton, (JButton button) -> button.getParent().getLocation()); + // Check that the y coordinate of bottom of the screen is + // less than that of parent of backspace button + tfScreen.waitStateOnQueue(screen -> y(screen) + screen.getHeight() < parentLocation.getY()); + // Check that the y coordinate of the button 7 is greater + // than that of parent of backspace + buttonSeven.waitStateOnQueue(button -> parentLocation.getY() < y(button)); + // Check that the y coordinate of reciprocal button is greater + // than that of parent of backspace + buttonReciprocal.waitStateOnQueue(button -> parentLocation.getY() < y(button)); + // Check that x coordinate of screen is same as that of parent of + // backspace + tfScreen.waitStateOnQueue(screen -> x(screen) == parentLocation.getX()); + // Check that x coordinate of button 7 is same as that of parent of + // backspace + buttonSeven.waitStateOnQueue(button -> x(button) == parentLocation.getX()); + + // Check relative location of Backspace button + // Check that the x coordinate of right of backspace button + // is less than that of reset button + backspaceButton.waitStateOnQueue(button -> x(button) + button.getWidth() < x(resetButton.getSource())); + // Check that the height of backspace button is same as that of reset + // button + backspaceButton.waitStateOnQueue(button -> button.getHeight() == resetButton.getHeight()); + // Check that the y coordinate bottom of backspace button is less that + // that of button 7 + backspaceButton.waitStateOnQueue( + button -> parentLocation.getY() + button.getParent().getHeight() < y(buttonSeven.getSource())); + + // Check that the x coordinate of reset button is greater than that + // of right of backspace button + resetButton.waitStateOnQueue(button -> x(backspaceButton.getSource()) + backspaceButton.getWidth() < x(button)); + + // Check that the height of reset button is same as that of backspace + // button + resetButton.waitStateOnQueue(button -> backspaceButton.getHeight() == button.getHeight()); + + // Check that the y coordinate of bottom of reset button is less + // than that of divide button. + resetButton.waitStateOnQueue( + button -> parentLocation.getY() + button.getParent().getHeight() < y(buttonDivide.getSource())); + + // Check that the y coordinate of top of screen is lower + // than that of parent of backspace button + tfScreen.waitStateOnQueue(screen -> y(screen) + screen.getHeight() < parentLocation.getY()); + } + + private void checkInteractionOnDisplay() { + // Check buttons: 1,2,+,=,C + buttonOne.push(); + tfScreen.waitText("1"); + buttonPlus.push(); + tfScreen.waitText("1"); + buttonTwo.push(); + tfScreen.waitText("2"); + buttonEquals.push(); + tfScreen.waitText("3"); + resetButton.push(); + tfScreen.waitText("0"); + + // Check buttons: 3,4,- + buttonFour.push(); + tfScreen.waitText("4"); + buttonMinus.push(); + tfScreen.waitText("4"); + buttonThree.push(); + tfScreen.waitText("3"); + buttonEquals.push(); + tfScreen.waitText("1"); + reset(); + + // Check buttons: 5,6,* + buttonFive.push(); + tfScreen.waitText("5"); + buttonMultiply.push(); + tfScreen.waitText("5"); + buttonSix.push(); + tfScreen.waitText("6"); + buttonEquals.push(); + tfScreen.waitText("30"); + reset(); + + // Check buttons: 8,9,/ + buttonNine.push(); + buttonNine.push(); + tfScreen.waitText("99"); + buttonDivide.push(); + tfScreen.waitText("99"); + buttonEight.push(); + tfScreen.waitText("8"); + buttonEquals.push(); + tfScreen.waitText("12.375"); + reset(); + + // Check buttons: 7,0,[+/-],Backspace + buttonSeven.push(); + tfScreen.waitText("7"); + buttonZero.push(); + tfScreen.waitText("70"); + buttonToggleSign.push(); + tfScreen.waitText("-70"); + buttonToggleSign.push(); + tfScreen.waitText("70"); + backspaceButton.push(); + tfScreen.waitText("7"); + reset(); + + // Check Sqrt Button + buttonFour.push(); + buttonNine.push(); + tfScreen.waitText("49"); + buttonSqrt.push(); + tfScreen.waitText("7"); + reset(); + + // Check Reciprocal Button + buttonFour.push(); + tfScreen.waitText("4"); + buttonReciprocal.push(); + tfScreen.waitText("0.25"); + reset(); + + // Check Comma button + buttonFour.push(); + buttonComma.push(); + tfScreen.waitText("4,"); + } + + private void reset() { + resetButton.push(); + tfScreen.waitText("0"); + } + + private void initializeUIComponents(String lookAndFeel) throws Exception { + UIManager.setLookAndFeel(lookAndFeel); + new ClassReference(GridBagLayoutDemo.class.getCanonicalName()).startApplication(); + mainFrame = new JFrameOperator(GRID_BAG_LAYOUT_DEMO_TITLE); + mainFrame.setComparator(EXACT_STRING_COMPARATOR); + buttonZero = new JButtonOperator(mainFrame, ZERO_BUTTON_TITLE); + buttonOne = new JButtonOperator(mainFrame, ONE_BUTTON_TITLE); + buttonTwo = new JButtonOperator(mainFrame, TWO_BUTTON_TITLE); + buttonThree = new JButtonOperator(mainFrame, THREE_BUTTON_TITLE); + buttonFour = new JButtonOperator(mainFrame, FOUR_BUTTON_TITLE); + buttonFive = new JButtonOperator(mainFrame, FIVE_BUTTON_TITLE); + buttonSix = new JButtonOperator(mainFrame, SIX_BUTTON_TITLE); + buttonSeven = new JButtonOperator(mainFrame, SEVEN_BUTTON_TITLE); + buttonEight = new JButtonOperator(mainFrame, EIGHT_BUTTON_TITLE); + buttonNine = new JButtonOperator(mainFrame, NINE_BUTTON_TITLE); + buttonPlus = new JButtonOperator(mainFrame, PLUS_BUTTON_TITLE); + buttonMinus = new JButtonOperator(mainFrame, MINUS_BUTTON_TITLE); + buttonMultiply = new JButtonOperator(mainFrame, MULTIPLY_BUTTON_TITLE); + buttonDivide = new JButtonOperator(mainFrame, DIVIDE_BUTTON_TITLE); + buttonComma = new JButtonOperator(mainFrame, ","); + buttonSqrt = new JButtonOperator(mainFrame, SQRT_BUTTON_TITLE); + buttonReciprocal = new JButtonOperator(mainFrame, INVERSE_BUTTON_TITLE); + buttonToggleSign = new JButtonOperator(mainFrame, SWAPSIGN_BUTTON_TITLE); + buttonEquals = new JButtonOperator(mainFrame, EQUALS_BUTTON_TITLE); + resetButton = new JButtonOperator(mainFrame, C_BUTTON_TITLE); + backspaceButton = new JButtonOperator(mainFrame, BACKSPACE_BUTTON_TITLE); + tfScreen = new JTextFieldOperator(mainFrame, 0); + } + + private void checkChangeLocation() { + Point startingPoint = new Point(100, 100); + mainFrame.setLocation(startingPoint); + mainFrame.waitComponentLocation(startingPoint); + checkRelativeLocations(); + } + + private void checkChangeSize() { + Dimension newSize = new Dimension((int) mainFrame.getToolkit().getScreenSize().getWidth() / 2, + (int) mainFrame.getToolkit().getScreenSize().getHeight() / 2); + mainFrame.setSize(newSize); + mainFrame.waitComponentSize(newSize); + checkRelativeLocations(); + } +}