7112454: TEST_BUG: java/awt/Choice/PopdownGeneratesMouseEvents/PopdownGeneratesMouseEvents.html failed
Reviewed-by: anthony, pchelko
Contributed-by: Andrei Eremeev <andrei.eremeev@oracle.com>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Choice/PopdownGeneratesMouseEvents/PopdownGeneratesMouseEvents.html Tue Jun 24 12:27:37 2014 +0400
@@ -0,0 +1,45 @@
+<!--
+ 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.
+-->
+<html>
+<!--
+ @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
+ -->
+<head>
+<title> </title>
+</head>
+<body>
+
+<h1>PopdownGeneratesMouseEvents<br>Bug ID: 6200670 </h1>
+
+<p> This is an AUTOMATIC test, simply wait for completion </p>
+
+<APPLET CODE="PopdownGeneratesMouseEvents.class" WIDTH=200 HEIGHT=200></APPLET>
+</body>
+</html>
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/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) {
+ }
+}