# HG changeset patch # User yan # Date 1403598457 -14400 # Node ID deadefc30f047a66c9631cec5adf785416ab75db # Parent 439332612567a676e721fdbdc1afe96313498955 7112454: TEST_BUG: java/awt/Choice/PopdownGeneratesMouseEvents/PopdownGeneratesMouseEvents.html failed Reviewed-by: anthony, pchelko Contributed-by: Andrei Eremeev diff -r 439332612567 -r deadefc30f04 test/java/awt/Choice/PopdownGeneratesMouseEvents/PopdownGeneratesMouseEvents.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/awt/Choice/PopdownGeneratesMouseEvents/PopdownGeneratesMouseEvents.html Tue Jun 24 12:27:37 2014 +0400 @@ -0,0 +1,45 @@ + + + + + + + + +

PopdownGeneratesMouseEvents
Bug ID: 6200670

+ +

This is an AUTOMATIC test, simply wait for completion

+ + + + + diff -r 439332612567 -r deadefc30f04 test/java/awt/Choice/PopdownGeneratesMouseEvents/PopdownGeneratesMouseEvents.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/java/awt/Choice/PopdownGeneratesMouseEvents/PopdownGeneratesMouseEvents.java Tue Jun 24 12:27:37 2014 +0400 @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2011, 2014, 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 6200670 + @summary MouseMoved events are triggered by Choice when mouse is moved outside the component, XToolkit + @library ../../regtesthelpers/ + @author andrei.dmitriev area=choice + @build Util + @run applet PopdownGeneratesMouseEvents.html +*/ + +import test.java.awt.regtesthelpers.Util; + +import java.applet.Applet; +import java.awt.*; +import java.awt.event.*; + +public class PopdownGeneratesMouseEvents extends Applet { + private volatile Robot robot; + private final Choice choice1 = new Choice(); + + private volatile MouseMotionHandler mmh; + + public void init() { + for (int i = 1; i < 10; i++) { + choice1.add("item-0" + i); + } + choice1.setForeground(Color.RED); + choice1.setBackground(Color.RED); + mmh = new MouseMotionHandler(); + choice1.addMouseMotionListener(mmh); + Button b1 = new Button("FirstButton"); + Button b2 = new Button("SecondButton"); + add(b1); + add(choice1); + add(b2); + setLayout (new FlowLayout()); + } + + public void start() { + setSize(300, 200); + setVisible(true); + validate(); + String toolkit = Toolkit.getDefaultToolkit().getClass().getName(); + + /* + * Choice should not generate MouseEvents outside of Choice + * Test for XAWT only. + */ + try{ + robot = new Robot(); + robot.setAutoWaitForIdle(true); + robot.setAutoDelay(50); + + if (toolkit.equals("sun.awt.X11.XToolkit")) { + testMouseMoveOutside(); + } else { + System.out.println("This test is for XToolkit only. Now using " + + toolkit + ". Automatically passed."); + return; + } + } catch (Throwable e) { + throw new RuntimeException("Test failed. Exception thrown: " + e); + } + System.out.println("Passed : Choice should not generate MouseEvents outside of Choice."); + } + + private void testMouseMoveOutside() { + waitForIdle(); + Point pt = choice1.getLocationOnScreen(); + robot.mouseMove(pt.x + choice1.getWidth() / 2, pt.y + choice1.getHeight() / 2); + waitForIdle(); + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + waitForIdle(); + + Color color = robot.getPixelColor(pt.x + choice1.getWidth() / 2, + pt.y + 3 * choice1.getHeight()); + if (!color.equals(Color.RED)) { + throw new RuntimeException("Choice wasn't opened with LEFTMOUSE button"); + } + + pt = getLocationOnScreen(); + robot.mouseMove(pt.x + getWidth() * 2, pt.y + getHeight() * 2); + mmh.testStarted = true; + + int x0 = pt.x + getWidth() * 3 / 2; + int y0 = pt.y + getHeight() * 3 / 2; + int x1 = pt.x + getWidth() * 2; + int y1 = pt.y + getHeight() * 2; + + Util.mouseMove(robot, new Point(x0, y0), new Point(x1, y0)); + Util.mouseMove(robot, new Point(x1, y0), new Point(x1, y1)); + + waitForIdle(); + //close opened choice + robot.keyPress(KeyEvent.VK_ESCAPE); + robot.keyRelease(KeyEvent.VK_ESCAPE); + } + + private void waitForIdle() { + Util.waitForIdle(robot); + robot.delay(500); + } +} + +class MouseMotionHandler extends MouseMotionAdapter { + public volatile boolean testStarted; + public void mouseMoved(MouseEvent ke) { + if (testStarted) { + throw new RuntimeException("Test failed: Choice generated MouseMove events while moving mouse outside of Choice"); + } + } + public void mouseDragged(MouseEvent ke) { + } +}