| |
| /* |
| * Copyright (c) 2016, 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.slider.SliderDemo; |
| import java.awt.Component; |
| import java.awt.event.KeyEvent; |
| import java.util.function.Predicate; |
| |
| import static org.testng.AssertJUnit.*; |
| import org.testng.annotations.Test; |
| import org.netbeans.jemmy.ClassReference; |
| import org.netbeans.jemmy.ComponentChooser; |
| import org.netbeans.jemmy.operators.JFrameOperator; |
| import org.netbeans.jemmy.operators.JSliderOperator; |
| import org.netbeans.jemmy.accessibility.AccessibleNameChooser; |
| import static com.sun.swingset3.demos.slider.SliderDemo.*; |
| import org.testng.annotations.Listeners; |
| |
| /* |
| * @test |
| * @key headful |
| * @summary Verifies SwingSet3 SliderDemo by moving the sliders through |
| * different means, checking the slider value corresponding to it, |
| * checking maximum and minimum values, checking Snap to tick is working |
| * and checking the presence of ticks and labels. |
| * |
| * @library /sanity/client/lib/jemmy/src |
| * @library /sanity/client/lib/Extensions/src |
| * @library /sanity/client/lib/SwingSet3/src |
| * @modules java.desktop |
| * java.logging |
| * @build org.jemmy2ext.JemmyExt |
| * @build com.sun.swingset3.demos.slider.SliderDemo |
| * @run testng SliderDemoTest |
| */ |
| @Listeners(GuiTestListener.class) |
| public class SliderDemoTest { |
| |
| private static final int PLAIN_SLIDER_MINIMUM = -10; |
| private static final int PLAIN_SLIDER_MAXIMUM = 100; |
| private static final int HORIZONTAL_MINOR_TICKS_SLIDER_MINIMUM = 0; |
| private static final int HORIZONTAL_MINOR_TICKS_SLIDER_MAXIMUM = 11; |
| private static final int VERTICAL_MINOR_TICKS_SLIDER_MINIMUM = 0; |
| private static final int VERTICAL_MINOR_TICKS_SLIDER_MAXIMUM = 100; |
| |
| @Test |
| public void test() throws Exception { |
| new ClassReference(SliderDemo.class.getCanonicalName()).startApplication(); |
| JFrameOperator frame = new JFrameOperator(DEMO_TITLE); |
| plain(frame, HORIZONTAL_PLAIN_SLIDER); |
| majorTicks(frame, HORIZONTAL_MAJOR_TICKS_SLIDER); |
| minorTicks(frame, HORIZONTAL_MINOR_TICKS_SLIDER); |
| disabled(frame, HORIZONTAL_DISABLED_SLIDER); |
| plain(frame, VERTICAL_PLAIN_SLIDER); |
| majorTicks(frame, VERTICAL_MAJOR_TICKS_SLIDER); |
| minorTicks(frame, VERTICAL_MINOR_TICKS_SLIDER); |
| disabled(frame, VERTICAL_DISABLED_SLIDER); |
| } |
| |
| private void plain(JFrameOperator jfo, String accessibleName) { |
| JSliderOperator jso = new JSliderOperator(jfo, |
| new AccessibleNameChooser(accessibleName)); |
| if (accessibleName.equals(HORIZONTAL_PLAIN_SLIDER)) { |
| checkKeyboard(jso); |
| checkMouse(jso); |
| } |
| checkMaximum(jso, PLAIN_SLIDER_MAXIMUM); |
| checkMinimum(jso, PLAIN_SLIDER_MINIMUM); |
| checkMoveForward(jso, 10); |
| } |
| |
| private void majorTicks(JFrameOperator jfo, String accessibleName) { |
| JSliderOperator jso = new JSliderOperator(jfo, |
| new AccessibleNameChooser(accessibleName)); |
| checkMoveForward(jso, 40); |
| assertTrue(jso.getPaintTicks()); |
| assertEquals(100, jso.getMajorTickSpacing()); |
| } |
| |
| private void minorTicks(JFrameOperator jfo, String accessibleName) { |
| JSliderOperator jso = new JSliderOperator(jfo, |
| new AccessibleNameChooser(accessibleName)); |
| if (accessibleName.equals(HORIZONTAL_MINOR_TICKS_SLIDER)) { |
| checkMaximum(jso, HORIZONTAL_MINOR_TICKS_SLIDER_MAXIMUM); |
| checkMinimum(jso, HORIZONTAL_MINOR_TICKS_SLIDER_MINIMUM); |
| checkMoveForward(jso, 2); |
| checkSnapToTick(jso, 5, 6); |
| assertEquals(5, jso.getMajorTickSpacing()); |
| assertEquals(1, jso.getMinorTickSpacing()); |
| } else { |
| checkMaximum(jso, VERTICAL_MINOR_TICKS_SLIDER_MAXIMUM); |
| checkMinimum(jso, VERTICAL_MINOR_TICKS_SLIDER_MINIMUM); |
| checkMoveForward(jso, 10); |
| assertEquals(20, jso.getMajorTickSpacing()); |
| assertEquals(5, jso.getMinorTickSpacing()); |
| } |
| assertTrue(jso.getPaintTicks()); |
| assertTrue(jso.getPaintLabels()); |
| } |
| |
| private void disabled(JFrameOperator jfo, String accessibleName) |
| throws InterruptedException { |
| JSliderOperator jso = new JSliderOperator(jfo, |
| new AccessibleNameChooser(accessibleName)); |
| int initialvalue; |
| initialvalue = jso.getValue(); |
| jso.clickMouse(jso.getCenterXForClick(), jso.getCenterYForClick(), 10); |
| Thread.sleep(500); |
| assertFalse(jso.hasFocus()); |
| assertEquals(initialvalue, jso.getValue()); |
| } |
| |
| private void checkMaximum(JSliderOperator jso, int maxValue) { |
| jso.scrollToMaximum(); |
| waitSliderValue(jso, jSlider -> jSlider.getValue() == maxValue); |
| } |
| |
| private void checkMinimum(JSliderOperator jso, int minValue) { |
| jso.scrollToMinimum(); |
| waitSliderValue(jso, jSlider -> jSlider.getValue() == minValue); |
| } |
| |
| private void checkKeyboard(JSliderOperator jso) { |
| checkKeyPress(jso, KeyEvent.VK_HOME, |
| jSlider -> jSlider.getValue() == jso.getMinimum()); |
| |
| { |
| int expectedValue = jso.getValue() + 1; |
| checkKeyPress(jso, KeyEvent.VK_UP, |
| jSlider -> jSlider.getValue() >= expectedValue); |
| } |
| { |
| int expectedValue = jso.getValue() + 1; |
| checkKeyPress(jso, KeyEvent.VK_RIGHT, |
| jSlider -> jSlider.getValue() >= expectedValue); |
| } |
| { |
| int expectedValue = jso.getValue() + 11; |
| checkKeyPress(jso, KeyEvent.VK_PAGE_UP, |
| jSlider -> jSlider.getValue() >= expectedValue); |
| } |
| |
| checkKeyPress(jso, KeyEvent.VK_END, |
| jSlider -> jSlider.getValue() == jso.getMaximum()); |
| |
| { |
| int expectedValue = jso.getValue() - 1; |
| checkKeyPress(jso, KeyEvent.VK_DOWN, |
| jSlider -> jSlider.getValue() <= expectedValue); |
| } |
| { |
| int expectedValue = jso.getValue() - 1; |
| checkKeyPress(jso, KeyEvent.VK_LEFT, |
| jSlider -> jSlider.getValue() <= expectedValue); |
| } |
| { |
| int expectedValue = jso.getValue() - 11; |
| checkKeyPress(jso, KeyEvent.VK_PAGE_DOWN, |
| jSlider -> jSlider.getValue() <= expectedValue); |
| } |
| } |
| |
| private void checkKeyPress(JSliderOperator jso, int keyCode, |
| Predicate<JSliderOperator> predicate) { |
| jso.pushKey(keyCode); |
| waitSliderValue(jso, predicate); |
| } |
| |
| private void waitSliderValue(JSliderOperator jso, |
| Predicate<JSliderOperator> predicate) { |
| jso.waitState(new ComponentChooser() { |
| public boolean checkComponent(Component comp) { |
| return predicate.test(jso); |
| } |
| |
| public String getDescription() { |
| return "Wait till Slider attains the specified state."; |
| } |
| }); |
| } |
| |
| private void checkMoveForward(JSliderOperator jso, int value) { |
| jso.setValue(jso.getMinimum()); |
| int finalValue = jso.getValue() + value; |
| jso.scrollToValue(finalValue); |
| waitSliderValue(jso, jSlider -> jSlider.getValue() == finalValue); |
| } |
| |
| private void checkSnapToTick(JSliderOperator jso, int expectedLower, |
| int expectedHigher) { |
| jso.pressMouse(jso.getCenterXForClick(), jso.getCenterYForClick()); |
| waitSliderValue(jso, jSlider -> jSlider.getValue() == expectedLower |
| || jSlider.getValue() == expectedHigher); |
| jso.releaseMouse(); |
| } |
| |
| private void checkMouse(JSliderOperator jso) { |
| // Check mouse dragging by pressing on the center of Slider and then |
| // dragging the mouse till the end of the track. |
| // We set the initial value of the slider as 45, |
| // which is the value of the slider at the middle. |
| jso.setValue((jso.getMaximum() + jso.getMinimum()) / 2); |
| jso.pressMouse(jso.getCenterXForClick(), jso.getCenterYForClick()); |
| jso.dragMouse(jso.getWidth() + 10, jso.getHeight()); |
| waitSliderValue(jso, jSlider -> jSlider.getValue() == jSlider.getMaximum()); |
| jso.releaseMouse(); |
| |
| // Check mouse click by clicking on the center of the track 2 times |
| // and waiting till the slider value has changed from its previous |
| // value as a result of the clicks. |
| jso.clickMouse(jso.getCenterXForClick(), jso.getCenterYForClick(), 2); |
| waitSliderValue(jso, jSlider -> jSlider.getValue() != jSlider.getMaximum()); |
| } |
| } |