test/jdk/sanity/client/SwingSet/src/ColorChooserDemoTest.java
changeset 53672 f024302abefd
child 57526 8538b1f28a71
equal deleted inserted replaced
53671:9fb26c4d8eaa 53672:f024302abefd
       
     1 /*
       
     2 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
       
     3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4 *
       
     5 * This code is free software; you can redistribute it and/or modify it
       
     6 * under the terms of the GNU General Public License version 2 only, as
       
     7 * published by the Free Software Foundation.
       
     8 *
       
     9 * This code is distributed in the hope that it will be useful, but WITHOUT
       
    10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    12 * version 2 for more details (a copy is included in the LICENSE file that
       
    13 * accompanied this code).
       
    14 *
       
    15 * You should have received a copy of the GNU General Public License version
       
    16 * 2 along with this work; if not, write to the Free Software Foundation,
       
    17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    18 *
       
    19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    20 * or visit www.oracle.com if you need additional information or have any
       
    21 * questions.
       
    22 */
       
    23 
       
    24 import static com.sun.swingset3.demos.colorchooser.ColorChooserDemo.BACKGROUND;
       
    25 import static com.sun.swingset3.demos.colorchooser.ColorChooserDemo.CHOOSER_TITLE;
       
    26 import static com.sun.swingset3.demos.colorchooser.ColorChooserDemo.DEMO_TITLE;
       
    27 import static com.sun.swingset3.demos.colorchooser.ColorChooserDemo.GRADIENT_1;
       
    28 import static com.sun.swingset3.demos.colorchooser.ColorChooserDemo.GRADIENT_2;
       
    29 import static com.sun.swingset3.demos.colorchooser.ColorChooserDemo.PERIMETER;
       
    30 
       
    31 import java.awt.Color;
       
    32 import java.awt.event.KeyEvent;
       
    33 
       
    34 import org.jemmy2ext.JemmyExt.ByClassChooser;
       
    35 import org.jtregext.GuiTestListener;
       
    36 import org.netbeans.jemmy.ClassReference;
       
    37 import org.netbeans.jemmy.DialogWaiter;
       
    38 import org.netbeans.jemmy.operators.JButtonOperator;
       
    39 import org.netbeans.jemmy.operators.JColorChooserOperator;
       
    40 import org.netbeans.jemmy.operators.JComponentOperator;
       
    41 import org.netbeans.jemmy.operators.JDialogOperator;
       
    42 import org.netbeans.jemmy.operators.JFrameOperator;
       
    43 import org.netbeans.jemmy.operators.JSliderOperator;
       
    44 import org.netbeans.jemmy.operators.JSpinnerOperator;
       
    45 import org.netbeans.jemmy.operators.JTabbedPaneOperator;
       
    46 import org.netbeans.jemmy.operators.JTextFieldOperator;
       
    47 import org.testng.annotations.Listeners;
       
    48 import org.testng.annotations.Test;
       
    49 
       
    50 import com.sun.swingset3.demos.colorchooser.BezierAnimationPanel;
       
    51 import com.sun.swingset3.demos.colorchooser.BezierAnimationPanel.BezierColor;
       
    52 import com.sun.swingset3.demos.colorchooser.ColorChooserDemo;
       
    53 
       
    54 /*
       
    55 * @test
       
    56 * @key headful
       
    57 * @summary Verifies SwingSet3 ColorChooserDemo by performing simple interaction
       
    58 *  with all the controls that are shown in the ColorChooserDialog.
       
    59 *
       
    60 * @library /sanity/client/lib/jemmy/src
       
    61 * @library /sanity/client/lib/Extensions/src
       
    62 * @library /sanity/client/lib/SwingSet3/src
       
    63 * @modules java.desktop
       
    64 *          java.logging
       
    65 * @build com.sun.swingset3.demos.colorchooser.ColorChooserDemo
       
    66 * @run testng ColorChooserDemoTest
       
    67 */
       
    68 @Listeners(GuiTestListener.class)
       
    69 public class ColorChooserDemoTest {
       
    70 
       
    71 private static final String OK_BUTTON_TITLE = "OK";
       
    72 private static final String CANCEL_BUTTON_TITLE = "Cancel";
       
    73 private static final String RESET_BUTTON_TITLE = "Reset";
       
    74 private static final String HSV = "HSV";
       
    75 private static final String RGB = "RGB";
       
    76 private static final String HSL = "HSL";
       
    77 private static final String CMYK = "CMYK";
       
    78 private static final int HSV_NUMBER_OF_SLIDERS_AND_SPINNERS = 4;
       
    79 private static final int RGB_NUMBER_OF_SLIDERS_AND_SPINNERS = 4;
       
    80 private static final int HSL_NUMBER_OF_SLIDERS_AND_SPINNERS = 4;
       
    81 private static final int CMYK_NUMBER_OF_SLIDERS_AND_SPINNERS = 5;
       
    82 private static final int HSV_HUE_INDEX = 0;
       
    83 private static final int HSV_SATURATION_INDEX = 1;
       
    84 private static final int HSV_VALUE_INDEX = 2;
       
    85 private static final int HSV_TRANSPARENCY_INDEX = 3;
       
    86 private static final int HSL_HUE_INDEX = 0;
       
    87 private static final int HSL_SATURATION_INDEX = 1;
       
    88 private static final int HSL_LIGHTNESS_INDEX = 2;
       
    89 private static final int HSL_TRANSPARENCY_INDEX = 3;
       
    90 private static final int RGB_RED_INDEX = 0;
       
    91 private static final int RGB_GREEN_INDEX = 1;
       
    92 private static final int RGB_BLUE_INDEX = 2;
       
    93 private static final int RGB_ALPHA_INDEX = 3;
       
    94 private static final int RGB_COLORCODE_TEXT_FIELD_INDEX = 4;
       
    95 private static final int CMYK_CYAN_INDEX = 0;
       
    96 private static final int CMYK_MAGENTA_INDEX = 1;
       
    97 private static final int CMYK_YELLOW_INDEX = 2;
       
    98 private static final int CMYK_BLACK_INDEX = 3;
       
    99 private static final int CMYK_ALPHA_INDEX = 4;
       
   100 
       
   101 private final Color resetColor = new Color(125, 125, 125);
       
   102 
       
   103 private JDialogOperator colorChooserDialog;
       
   104 private JButtonOperator okButton;
       
   105 private JButtonOperator cancelButton;
       
   106 private JButtonOperator resetButton;
       
   107 private JColorChooserOperator colorChooser;
       
   108 private JButtonOperator backgroundButton;
       
   109 private JButtonOperator gradient1Button;
       
   110 private JButtonOperator gradient2Button;
       
   111 private JButtonOperator perimeterButton;
       
   112 private JTabbedPaneOperator tabOperator;
       
   113 private JComponentOperator bezierAnimationPanel;
       
   114 private JSliderOperator[] sliders = new JSliderOperator[5];
       
   115 private JSpinnerOperator[] spinners = new JSpinnerOperator[5];
       
   116 private JButtonOperator lastFocusedButton;
       
   117 
       
   118 @Test
       
   119 public void test() throws Exception {
       
   120 new ClassReference(ColorChooserDemo.class.getCanonicalName()).startApplication();
       
   121 JFrameOperator frame = new JFrameOperator(DEMO_TITLE);
       
   122 bezierAnimationPanel = new JComponentOperator(frame, new ByClassChooser(BezierAnimationPanel.class));
       
   123 initializePanelButtons(frame);
       
   124 checkBackgroundColorChooser();
       
   125 checkGradient1ColorChooser();
       
   126 checkGradient2ColorChooser();
       
   127 checkPerimeterColorChooser();
       
   128 }
       
   129 
       
   130 private void checkBackgroundColorChooser() throws Exception {
       
   131 basicCheck(backgroundButton, BezierColor.BACKGROUND);
       
   132 checkAllColorChoosers(backgroundButton);
       
   133 }
       
   134 
       
   135 private void checkGradient1ColorChooser() throws Exception {
       
   136 basicCheck(gradient1Button, BezierColor.GRADIENT_A);
       
   137 }
       
   138 
       
   139 private void checkGradient2ColorChooser() throws Exception {
       
   140 basicCheck(gradient2Button, BezierColor.GRADIENT_B);
       
   141 }
       
   142 
       
   143 private void checkPerimeterColorChooser() throws Exception {
       
   144 basicCheck(perimeterButton, BezierColor.OUTER);
       
   145 }
       
   146 
       
   147 private void pushButtonAndInitialize(JButtonOperator jbo) throws InterruptedException {
       
   148 // Wait for focus to return to last focused button
       
   149 lastFocusedButton.waitHasFocus();
       
   150 jbo.pushNoBlock();
       
   151 lastFocusedButton = jbo;
       
   152 // Wait till the ColorChooserDemo Dialog Opens
       
   153 new DialogWaiter().waitDialog(CHOOSER_TITLE, false, false);
       
   154 initializeDialog();
       
   155 }
       
   156 
       
   157 private void initializePanelButtons(JFrameOperator frame) {
       
   158 backgroundButton = new JButtonOperator(frame, BACKGROUND);
       
   159 gradient1Button = new JButtonOperator(frame, GRADIENT_1);
       
   160 gradient2Button = new JButtonOperator(frame, GRADIENT_2);
       
   161 perimeterButton = new JButtonOperator(frame, PERIMETER);
       
   162 lastFocusedButton = backgroundButton;
       
   163 }
       
   164 
       
   165 private void initializeDialog() {
       
   166 colorChooserDialog = new JDialogOperator(CHOOSER_TITLE);
       
   167 tabOperator = new JTabbedPaneOperator(colorChooserDialog);
       
   168 colorChooser = new JColorChooserOperator(colorChooserDialog);
       
   169 okButton = new JButtonOperator(colorChooserDialog, OK_BUTTON_TITLE);
       
   170 cancelButton = new JButtonOperator(colorChooserDialog, CANCEL_BUTTON_TITLE);
       
   171 resetButton = new JButtonOperator(colorChooserDialog, RESET_BUTTON_TITLE);
       
   172 }
       
   173 
       
   174 private void basicCheck(JButtonOperator jbo, BezierColor bezierColor) throws Exception {
       
   175 Color testColor = new Color(100, 26, 155);
       
   176 Color testColor2 = new Color(10, 40, 50);
       
   177 checkDefaultColorChooser(jbo, testColor, bezierColor);
       
   178 checkCancelButton(jbo, testColor2);
       
   179 checkResetButton(jbo, testColor2);
       
   180 }
       
   181 
       
   182 private void checkDefaultColorChooser(JButtonOperator jbo, Color testColor, BezierColor bezierColor)
       
   183 throws Exception {
       
   184 BezierAnimationPanel bezierPanel;
       
   185 pushButtonAndInitialize(jbo);
       
   186 // Check ColorChooser color is being set and used accordingly
       
   187 // in the animation panel
       
   188 setAndWaitColor(testColor);
       
   189 pushButtonAndWaitDialogClosed(okButton);
       
   190 bezierPanel = (BezierAnimationPanel) bezierAnimationPanel.getSource();
       
   191 colorChooser.waitStateOnQueue(jColorChooser -> (bezierPanel.getBezierColor(bezierColor).equals(testColor)));
       
   192 }
       
   193 
       
   194 private void checkCancelButton(JButtonOperator jbo, Color testColor) throws Exception {
       
   195 pushButtonAndInitialize(jbo);
       
   196 setAndWaitColor(testColor);
       
   197 pushButtonAndWaitDialogClosed(cancelButton);
       
   198 }
       
   199 
       
   200 private void checkResetButton(JButtonOperator jbo, Color testColor) throws Exception {
       
   201 pushButtonAndInitialize(jbo);
       
   202 Color initialColor = colorChooser.getColor();
       
   203 setAndWaitColor(testColor);
       
   204 resetButton.push();
       
   205 waitJColorChooserColor(initialColor);
       
   206 pushButtonAndWaitDialogClosed(okButton);
       
   207 }
       
   208 
       
   209 private void checkAllColorChoosers(JButtonOperator jbo) throws Exception {
       
   210 pushButtonAndInitialize(jbo);
       
   211 checkHSV();
       
   212 checkHSL();
       
   213 checkRGB();
       
   214 checkCMYK();
       
   215 pushButtonAndWaitDialogClosed(okButton);
       
   216 }
       
   217 
       
   218 private void waitJColorChooserColor(Color expectedColor) {
       
   219 colorChooser.waitStateOnQueue(jColorChooser -> colorChooser.getColor().equals(expectedColor));
       
   220 }
       
   221 
       
   222 private void setAndWaitColor(Color color) {
       
   223 colorChooser.setColor(color);
       
   224 // Wait for the Color to be set
       
   225 waitJColorChooserColor(color);
       
   226 }
       
   227 
       
   228 private void resetColor() {
       
   229 colorChooser.setColor(resetColor);
       
   230 // Wait for the Color to be reset
       
   231 waitJColorChooserColor(resetColor);
       
   232 }
       
   233 
       
   234 private void checkHSV() {
       
   235 tabOperator.selectPage(HSV);
       
   236 initializeSliderAndSpinner(HSV_NUMBER_OF_SLIDERS_AND_SPINNERS);
       
   237 resetColor();
       
   238 setAndCheckSlider(sliders[HSV_SATURATION_INDEX], 50, new Color(125, 62, 62));
       
   239 setAndCheckSlider(sliders[HSV_VALUE_INDEX], 80, new Color(204, 102, 102));
       
   240 setAndCheckSlider(sliders[HSV_HUE_INDEX], 50, new Color(204, 187, 102));
       
   241 setAndCheckSlider(sliders[HSV_TRANSPARENCY_INDEX], 50, new Color(204, 187, 102, 127));
       
   242 setAndCheckSpinner(spinners[HSV_SATURATION_INDEX], 25, new Color(204, 195, 153, 127));
       
   243 setAndCheckSpinner(spinners[HSV_VALUE_INDEX], 40, new Color(102, 97, 76, 127));
       
   244 setAndCheckSpinner(spinners[HSV_HUE_INDEX], 25, new Color(102, 87, 76, 127));
       
   245 setAndCheckSpinner(spinners[HSV_TRANSPARENCY_INDEX], 100, new Color(102, 87, 76, 0));
       
   246 }
       
   247 
       
   248 private void checkHSL() {
       
   249 tabOperator.selectPage(HSL);
       
   250 initializeSliderAndSpinner(HSL_NUMBER_OF_SLIDERS_AND_SPINNERS);
       
   251 resetColor();
       
   252 setAndCheckSlider(sliders[HSL_SATURATION_INDEX], 50, new Color(187, 62, 62));
       
   253 setAndCheckSlider(sliders[HSL_LIGHTNESS_INDEX], 80, new Color(229, 178, 178));
       
   254 setAndCheckSlider(sliders[HSL_HUE_INDEX], 180, new Color(178, 229, 229));
       
   255 setAndCheckSlider(sliders[HSL_TRANSPARENCY_INDEX], 50, new Color(178, 229, 229, 127));
       
   256 setAndCheckSpinner(spinners[HSL_SATURATION_INDEX], 25, new Color(191, 216, 216, 127));
       
   257 setAndCheckSpinner(spinners[HSL_LIGHTNESS_INDEX], 40, new Color(76, 127, 127, 127));
       
   258 setAndCheckSpinner(spinners[HSL_HUE_INDEX], 25, new Color(127, 97, 76, 127));
       
   259 setAndCheckSpinner(spinners[HSL_TRANSPARENCY_INDEX], 50, new Color(127, 97, 76, 127));
       
   260 }
       
   261 
       
   262 private void checkRGB() {
       
   263 String sampleColor = "111111";
       
   264 tabOperator.selectPage(RGB);
       
   265 initializeSliderAndSpinner(RGB_NUMBER_OF_SLIDERS_AND_SPINNERS);
       
   266 JTextFieldOperator colorCode = new JTextFieldOperator(colorChooserDialog, RGB_COLORCODE_TEXT_FIELD_INDEX);
       
   267 resetColor();
       
   268 setAndCheckSlider(sliders[RGB_GREEN_INDEX], 50, new Color(125, 50, 125, 255));
       
   269 setAndCheckSlider(sliders[RGB_BLUE_INDEX], 80, new Color(125, 50, 80, 255));
       
   270 setAndCheckSlider(sliders[RGB_RED_INDEX], 50, new Color(50, 50, 80, 255));
       
   271 setAndCheckSlider(sliders[RGB_ALPHA_INDEX], 125, new Color(50, 50, 80, 125));
       
   272 setAndCheckSpinner(spinners[RGB_GREEN_INDEX], 25, new Color(50, 25, 80, 125));
       
   273 setAndCheckSpinner(spinners[RGB_BLUE_INDEX], 40, new Color(50, 25, 40, 125));
       
   274 setAndCheckSpinner(spinners[RGB_RED_INDEX], 25, new Color(25, 25, 40, 125));
       
   275 setAndCheckSpinner(spinners[RGB_ALPHA_INDEX], 255, new Color(25, 25, 40, 255));
       
   276 
       
   277 colorCode.setText(sampleColor);
       
   278 // Wait for the sampleColor to be set in the color code text field.
       
   279 colorCode.waitText(sampleColor);
       
   280 colorCode.getFocus();
       
   281 colorCode.pressKey(KeyEvent.VK_TAB);
       
   282 // Wait for the color to be set
       
   283 waitJColorChooserColor(new Color(17, 17, 17, 255));
       
   284 }
       
   285 
       
   286 private void checkCMYK() {
       
   287 tabOperator.selectPage(CMYK);
       
   288 initializeSliderAndSpinner(CMYK_NUMBER_OF_SLIDERS_AND_SPINNERS);
       
   289 resetColor();
       
   290 setAndCheckSlider(sliders[CMYK_MAGENTA_INDEX], 50, new Color(125, 100, 125, 255));
       
   291 setAndCheckSlider(sliders[CMYK_YELLOW_INDEX], 80, new Color(125, 100, 85, 255));
       
   292 setAndCheckSlider(sliders[CMYK_CYAN_INDEX], 50, new Color(100, 100, 85, 255));
       
   293 setAndCheckSlider(sliders[CMYK_BLACK_INDEX], 50, new Color(164, 164, 140, 255));
       
   294 setAndCheckSlider(sliders[CMYK_ALPHA_INDEX], 125, new Color(164, 164, 140, 125));
       
   295 setAndCheckSpinner(spinners[CMYK_MAGENTA_INDEX], 25, new Color(164, 184, 140, 125));
       
   296 setAndCheckSpinner(spinners[CMYK_YELLOW_INDEX], 40, new Color(164, 184, 172, 125));
       
   297 setAndCheckSpinner(spinners[CMYK_CYAN_INDEX], 25, new Color(184, 184, 172, 125));
       
   298 setAndCheckSpinner(spinners[CMYK_BLACK_INDEX], 100, new Color(139, 139, 130, 125));
       
   299 setAndCheckSpinner(spinners[CMYK_ALPHA_INDEX], 255, new Color(139, 139, 130, 255));
       
   300 }
       
   301 
       
   302 private void setAndCheckSlider(JSliderOperator slider, int sliderValue, Color expectedColor) {
       
   303 slider.setValue(sliderValue);
       
   304 // Wait for slider to attain the specified value
       
   305 slider.waitStateOnQueue(jSlider -> slider.getValue() == sliderValue);
       
   306 colorChooser.waitStateOnQueue(jColorChooser -> (colorChooser.getColor().equals(expectedColor)));
       
   307 }
       
   308 
       
   309 private void setAndCheckSpinner(JSpinnerOperator spinner, int spinnerValue, Color expectedColor) {
       
   310 spinner.setValue(spinnerValue);
       
   311 // Wait for spinner to attain the specified value
       
   312 spinner.waitStateOnQueue(jSpinner -> (int) spinner.getValue() == spinnerValue);
       
   313 colorChooser.waitStateOnQueue(jColorChooser -> (colorChooser.getColor().equals(expectedColor)));
       
   314 }
       
   315 
       
   316 private void initializeSliderAndSpinner(int numberOfSlidersAndSpinners) {
       
   317 for (int i = 0; i < numberOfSlidersAndSpinners; i++) {
       
   318 sliders[i] = new JSliderOperator(colorChooserDialog, i);
       
   319 spinners[i] = new JSpinnerOperator(colorChooserDialog, i);
       
   320 }
       
   321 }
       
   322 
       
   323 private void pushButtonAndWaitDialogClosed(JButtonOperator button) {
       
   324 button.push();
       
   325 // Wait for the color chooser dialog to close.
       
   326 colorChooserDialog.waitClosed();
       
   327 }
       
   328 }