|  | /* | 
|  | * Copyright (c) 2011, 2013, 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. | 
|  | */ | 
|  |  | 
|  | /* | 
|  | @test | 
|  | @bug 7050935 | 
|  | @summary closed/java/awt/Choice/WheelEventsConsumed/WheelEventsConsumed.html fails on win32 | 
|  | @library ../../regtesthelpers | 
|  | @author Oleg Pekhovskiy: area=awt-choice | 
|  | @build Util | 
|  | @run main ChoiceMouseWheelTest | 
|  | */ | 
|  |  | 
|  | import test.java.awt.regtesthelpers.Util; | 
|  |  | 
|  | import java.awt.*; | 
|  | import java.awt.event.*; | 
|  |  | 
|  | public class ChoiceMouseWheelTest extends Frame { | 
|  |  | 
|  | private volatile boolean itemChanged = false; | 
|  | private volatile boolean wheelMoved = false; | 
|  | private volatile boolean frameExited = false; | 
|  |  | 
|  | public static void main(String[] args) { | 
|  | new ChoiceMouseWheelTest(); | 
|  | } | 
|  |  | 
|  | ChoiceMouseWheelTest() { | 
|  | super("ChoiceMouseWheelTest"); | 
|  | setLayout(new FlowLayout()); | 
|  |  | 
|  | Choice choice = new Choice(); | 
|  |  | 
|  | addWindowListener(new WindowAdapter() { | 
|  | @Override | 
|  | public void windowClosing(WindowEvent e) { | 
|  | System.exit(0); | 
|  | } | 
|  | }); | 
|  |  | 
|  | for(Integer i = 0; i < 50; i++) { | 
|  | choice.add(i.toString()); | 
|  | } | 
|  |  | 
|  | choice.addItemListener(new ItemListener() { | 
|  | public void itemStateChanged(ItemEvent e) { | 
|  | itemChanged = true; | 
|  | } | 
|  | }); | 
|  | choice.addMouseWheelListener(new MouseWheelListener() { | 
|  | public void mouseWheelMoved(MouseWheelEvent e) { | 
|  | wheelMoved = true; | 
|  | } | 
|  | }); | 
|  |  | 
|  | addMouseListener(new MouseAdapter() { | 
|  | @Override | 
|  | public void mouseExited(MouseEvent e) { | 
|  | frameExited = true; | 
|  | } | 
|  | }); | 
|  |  | 
|  | add(choice); | 
|  | setSize(200, 300); | 
|  | setVisible(true); | 
|  | toFront(); | 
|  |  | 
|  | try { | 
|  | Robot robot = new Robot(); | 
|  | robot.setAutoDelay(20); | 
|  | Util.waitForIdle(robot); | 
|  |  | 
|  | Point pt = choice.getLocationOnScreen(); | 
|  | Dimension size = choice.getSize(); | 
|  | int x = pt.x + size.width / 3; | 
|  | robot.mouseMove(x, pt.y + size.height / 2); | 
|  |  | 
|  | // Test mouse wheel over the choice | 
|  | String name = Toolkit.getDefaultToolkit().getClass().getName(); | 
|  |  | 
|  | // mouse wheel doesn't work for the choice on X11 and Mac, so skip it | 
|  | if(!name.equals("sun.awt.X11.XToolkit") | 
|  | && !name.equals("sun.lwawt.macosx.LWCToolkit")) { | 
|  | robot.mouseWheel(1); | 
|  | Util.waitForIdle(robot); | 
|  |  | 
|  | if(!wheelMoved || !itemChanged) { | 
|  | throw new RuntimeException("Mouse Wheel over the choice failed!"); | 
|  | } | 
|  | } | 
|  |  | 
|  | // Test mouse wheel over the drop-down list | 
|  | robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); | 
|  | Util.waitForIdle(robot); | 
|  | robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); | 
|  | Util.waitForIdle(robot); | 
|  |  | 
|  | int y = getLocationOnScreen().y + getSize().height; | 
|  | while(!frameExited && y >= 0) { // move to the bottom of drop-down list | 
|  | robot.mouseMove(x, --y); | 
|  | Util.waitForIdle(robot); | 
|  | } | 
|  |  | 
|  | if(x < 0) { | 
|  | throw new RuntimeException("Could not enter drop-down list!"); | 
|  | } | 
|  |  | 
|  | y -= choice.getHeight() / 2; | 
|  | robot.mouseMove(x, y); // move to the last visible item in the drop-down list | 
|  | Util.waitForIdle(robot); | 
|  |  | 
|  | robot.mouseWheel(choice.getItemCount()); // wheel to the last item | 
|  | Util.waitForIdle(robot); | 
|  |  | 
|  | // click the last item | 
|  | itemChanged = false; | 
|  | robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); | 
|  | Util.waitForIdle(robot); | 
|  | robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); | 
|  | Util.waitForIdle(robot); | 
|  |  | 
|  | if(!itemChanged || choice.getSelectedIndex() != choice.getItemCount() - 1) { | 
|  | throw new RuntimeException("Mouse Wheel scroll position error!"); | 
|  | } | 
|  |  | 
|  | dispose(); | 
|  | } catch (AWTException e) { | 
|  | throw new RuntimeException("AWTException occurred - problem creating robot!"); | 
|  | } | 
|  | } | 
|  | } | 
|  |  |