1 2 /* 3 * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. 4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5 * 6 * This code is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License version 2 only, as 8 * published by the Free Software Foundation. 9 * 10 * This code is distributed in the hope that it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13 * version 2 for more details (a copy is included in the LICENSE file that 14 * accompanied this code). 15 * 16 * You should have received a copy of the GNU General Public License version 17 * 2 along with this work; if not, write to the Free Software Foundation, 18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 19 * 20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 21 * or visit www.oracle.com if you need additional information or have any 22 * questions. 23 */ 24 import org.jtregext.GuiTestListener; 25 import com.sun.swingset3.demos.slider.SliderDemo; 26 import java.awt.Component; 27 import java.awt.event.KeyEvent; 28 import java.util.function.Predicate; 29 30 import static org.testng.AssertJUnit.*; 31 import org.testng.annotations.Test; 32 import org.netbeans.jemmy.ClassReference; 33 import org.netbeans.jemmy.ComponentChooser; 34 import org.netbeans.jemmy.operators.JFrameOperator; 35 import org.netbeans.jemmy.operators.JSliderOperator; 36 import org.netbeans.jemmy.accessibility.AccessibleNameChooser; 37 import static com.sun.swingset3.demos.slider.SliderDemo.*; 38 import org.testng.annotations.Listeners; 39 40 /* 41 * @test 42 * @key headful 43 * @summary Verifies SwingSet3 SliderDemo by moving the sliders through 44 * different means, checking the slider value corresponding to it, 45 * checking maximum and minimum values, checking Snap to tick is working 46 * and checking the presence of ticks and labels. 47 * 48 * @library /sanity/client/lib/jemmy/src 49 * @library /sanity/client/lib/Extensions/src 50 * @library /sanity/client/lib/SwingSet3/src 51 * @modules java.desktop 52 * java.logging 53 * @build org.jemmy2ext.JemmyExt 54 * @build com.sun.swingset3.demos.slider.SliderDemo 55 * @run testng SliderDemoTest 56 */ 57 @Listeners(GuiTestListener.class) 58 public class SliderDemoTest { 59 60 private static final int PLAIN_SLIDER_MINIMUM = -10; 61 private static final int PLAIN_SLIDER_MAXIMUM = 100; 62 private static final int HORIZONTAL_MINOR_TICKS_SLIDER_MINIMUM = 0; 63 private static final int HORIZONTAL_MINOR_TICKS_SLIDER_MAXIMUM = 11; 64 private static final int VERTICAL_MINOR_TICKS_SLIDER_MINIMUM = 0; 65 private static final int VERTICAL_MINOR_TICKS_SLIDER_MAXIMUM = 100; 66 67 @Test 68 public void test() throws Exception { 69 new ClassReference(SliderDemo.class.getCanonicalName()).startApplication(); 70 JFrameOperator frame = new JFrameOperator(DEMO_TITLE); 71 plain(frame, HORIZONTAL_PLAIN_SLIDER); 72 majorTicks(frame, HORIZONTAL_MAJOR_TICKS_SLIDER); 73 minorTicks(frame, HORIZONTAL_MINOR_TICKS_SLIDER); 74 disabled(frame, HORIZONTAL_DISABLED_SLIDER); 75 plain(frame, VERTICAL_PLAIN_SLIDER); 76 majorTicks(frame, VERTICAL_MAJOR_TICKS_SLIDER); 77 minorTicks(frame, VERTICAL_MINOR_TICKS_SLIDER); 78 disabled(frame, VERTICAL_DISABLED_SLIDER); 79 } 80 81 private void plain(JFrameOperator jfo, String accessibleName) { 82 JSliderOperator jso = new JSliderOperator(jfo, 83 new AccessibleNameChooser(accessibleName)); 84 if (accessibleName.equals(HORIZONTAL_PLAIN_SLIDER)) { 85 checkKeyboard(jso); 86 checkMouse(jso); 87 } 88 checkMaximum(jso, PLAIN_SLIDER_MAXIMUM); 89 checkMinimum(jso, PLAIN_SLIDER_MINIMUM); 90 checkMoveForward(jso, 10); 91 } 92 93 private void majorTicks(JFrameOperator jfo, String accessibleName) { 94 JSliderOperator jso = new JSliderOperator(jfo, 95 new AccessibleNameChooser(accessibleName)); 96 checkMoveForward(jso, 40); 97 assertTrue(jso.getPaintTicks()); 98 assertEquals(100, jso.getMajorTickSpacing()); 99 } 100 101 private void minorTicks(JFrameOperator jfo, String accessibleName) { 102 JSliderOperator jso = new JSliderOperator(jfo, 103 new AccessibleNameChooser(accessibleName)); 104 if (accessibleName.equals(HORIZONTAL_MINOR_TICKS_SLIDER)) { 105 checkMaximum(jso, HORIZONTAL_MINOR_TICKS_SLIDER_MAXIMUM); 106 checkMinimum(jso, HORIZONTAL_MINOR_TICKS_SLIDER_MINIMUM); 107 checkMoveForward(jso, 2); 108 checkSnapToTick(jso, 5, 6); 109 assertEquals(5, jso.getMajorTickSpacing()); 110 assertEquals(1, jso.getMinorTickSpacing()); 111 } else { 112 checkMaximum(jso, VERTICAL_MINOR_TICKS_SLIDER_MAXIMUM); 113 checkMinimum(jso, VERTICAL_MINOR_TICKS_SLIDER_MINIMUM); 114 checkMoveForward(jso, 10); 115 assertEquals(20, jso.getMajorTickSpacing()); 116 assertEquals(5, jso.getMinorTickSpacing()); 117 } 118 assertTrue(jso.getPaintTicks()); 119 assertTrue(jso.getPaintLabels()); 120 } 121 122 private void disabled(JFrameOperator jfo, String accessibleName) 123 throws InterruptedException { 124 JSliderOperator jso = new JSliderOperator(jfo, 125 new AccessibleNameChooser(accessibleName)); 126 int initialvalue; 127 initialvalue = jso.getValue(); 128 jso.clickMouse(jso.getCenterXForClick(), jso.getCenterYForClick(), 10); 129 Thread.sleep(500); 130 assertFalse(jso.hasFocus()); 131 assertEquals(initialvalue, jso.getValue()); 132 } 133 134 private void checkMaximum(JSliderOperator jso, int maxValue) { 135 jso.scrollToMaximum(); 136 waitSliderValue(jso, jSlider -> jSlider.getValue() == maxValue); 137 } 138 139 private void checkMinimum(JSliderOperator jso, int minValue) { 140 jso.scrollToMinimum(); 141 waitSliderValue(jso, jSlider -> jSlider.getValue() == minValue); 142 } 143 144 private void checkKeyboard(JSliderOperator jso) { 145 checkKeyPress(jso, KeyEvent.VK_HOME, 146 jSlider -> jSlider.getValue() == jso.getMinimum()); 147 148 { 149 int expectedValue = jso.getValue() + 1; 150 checkKeyPress(jso, KeyEvent.VK_UP, 151 jSlider -> jSlider.getValue() >= expectedValue); 152 } 153 { 154 int expectedValue = jso.getValue() + 1; 155 checkKeyPress(jso, KeyEvent.VK_RIGHT, 156 jSlider -> jSlider.getValue() >= expectedValue); 157 } 158 { 159 int expectedValue = jso.getValue() + 11; 160 checkKeyPress(jso, KeyEvent.VK_PAGE_UP, 161 jSlider -> jSlider.getValue() >= expectedValue); 162 } 163 164 checkKeyPress(jso, KeyEvent.VK_END, 165 jSlider -> jSlider.getValue() == jso.getMaximum()); 166 167 { 168 int expectedValue = jso.getValue() - 1; 169 checkKeyPress(jso, KeyEvent.VK_DOWN, 170 jSlider -> jSlider.getValue() <= expectedValue); 171 } 172 { 173 int expectedValue = jso.getValue() - 1; 174 checkKeyPress(jso, KeyEvent.VK_LEFT, 175 jSlider -> jSlider.getValue() <= expectedValue); 176 } 177 { 178 int expectedValue = jso.getValue() - 11; 179 checkKeyPress(jso, KeyEvent.VK_PAGE_DOWN, 180 jSlider -> jSlider.getValue() <= expectedValue); 181 } 182 } 183 184 private void checkKeyPress(JSliderOperator jso, int keyCode, 185 Predicate<JSliderOperator> predicate) { 186 jso.pushKey(keyCode); 187 waitSliderValue(jso, predicate); 188 } 189 190 private void waitSliderValue(JSliderOperator jso, 191 Predicate<JSliderOperator> predicate) { 192 jso.waitState(new ComponentChooser() { 193 public boolean checkComponent(Component comp) { 194 return predicate.test(jso); 195 } 196 197 public String getDescription() { 198 return "Wait till Slider attains the specified state."; 199 } 200 }); 201 } 202 203 private void checkMoveForward(JSliderOperator jso, int value) { 204 jso.setValue(jso.getMinimum()); 205 int finalValue = jso.getValue() + value; 206 jso.scrollToValue(finalValue); 207 waitSliderValue(jso, jSlider -> jSlider.getValue() == finalValue); 208 } 209 210 private void checkSnapToTick(JSliderOperator jso, int expectedLower, 211 int expectedHigher) { 212 jso.pressMouse(jso.getCenterXForClick(), jso.getCenterYForClick()); 213 waitSliderValue(jso, jSlider -> jSlider.getValue() == expectedLower 214 || jSlider.getValue() == expectedHigher); 215 jso.releaseMouse(); 216 } 217 218 private void checkMouse(JSliderOperator jso) { 219 // Check mouse dragging by pressing on the center of Slider and then 220 // dragging the mouse till the end of the track. 221 // We set the initial value of the slider as 45, 222 // which is the value of the slider at the middle. 223 jso.setValue((jso.getMaximum() + jso.getMinimum()) / 2); 224 jso.pressMouse(jso.getCenterXForClick(), jso.getCenterYForClick()); 225 jso.dragMouse(jso.getWidth() + 10, jso.getHeight()); 226 waitSliderValue(jso, jSlider -> jSlider.getValue() == jSlider.getMaximum()); 227 jso.releaseMouse(); 228 229 // Check mouse click by clicking on the center of the track 2 times 230 // and waiting till the slider value has changed from its previous 231 // value as a result of the clicks. 232 jso.clickMouse(jso.getCenterXForClick(), jso.getCenterYForClick(), 2); 233 waitSliderValue(jso, jSlider -> jSlider.getValue() != jSlider.getMaximum()); 234 } 235 }