8197810: Test java/awt/Choice/SelectCurrentItemTest/SelectCurrentItemTest.html fails on Windows
authorkaddepalli
Mon, 02 Jul 2018 14:31:33 +0530
changeset 51164 b94063762a7c
parent 50894 e8d55141afd2
child 51165 6d59a6d025e8
8197810: Test java/awt/Choice/SelectCurrentItemTest/SelectCurrentItemTest.html fails on Windows Reviewed-by: serb, pbansal
test/jdk/java/awt/Choice/SelectCurrentItemTest/SelectCurrentItemTest.html
test/jdk/java/awt/Choice/SelectCurrentItemTest/SelectCurrentItemTest.java
--- a/test/jdk/java/awt/Choice/SelectCurrentItemTest/SelectCurrentItemTest.html	Thu Jun 28 22:28:41 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-<!--
- Copyright (c) 2002, 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.
--->
-
-<html>
-<!--  
-  @test 1.2 01/02/10
-  @key headful
-  @bug 4902933
-  @summary Test that selecting the current item sends an ItemEvent
-  @author bchristi : area= Choice
-  @run applet SelectCurrentItemTest.html
-  -->
-<head>
-<title>  </title>
-</head>
-<body>
-
-<h1>SelectCurrentItemTest<br>Bug ID: 9999999 XXX_CHANGE_THIS </h1>
-
-<p> This is an AUTOMATIC test, simply wait for completion </p>
-
-<APPLET CODE="SelectCurrentItemTest.class" WIDTH=200 HEIGHT=200></APPLET>
-</body>
-</html>
-
--- a/test/jdk/java/awt/Choice/SelectCurrentItemTest/SelectCurrentItemTest.java	Thu Jun 28 22:28:41 2018 +0200
+++ b/test/jdk/java/awt/Choice/SelectCurrentItemTest/SelectCurrentItemTest.java	Mon Jul 02 14:31:33 2018 +0530
@@ -21,67 +21,48 @@
  * questions.
  */
 /*
-  test 1.3 02/06/25
-  @bug 4902933
-  @summary Test that selecting the current item sends an ItemEvent
-  @author bchristi : area= Choice
-  @run applet SelectCurrentItemTest.html
+  @test
+  @bug 4902933 8197810
+  @summary Test that selecting the current item doesnot send an ItemEvent
+  @key headful
+  @run main SelectCurrentItemTest
 */
 
-// Note there is no @ in front of test above.  This is so that the
-//  harness will not mistake this file as a test file.  It should
-//  only see the html file as a test file. (the harness runs all
-//  valid test files, so it would run this test twice if this file
-//  were valid as well as the html file.)
-// Also, note the area= after Your Name in the author tag.  Here, you
-//  should put which functional area the test falls in.  See the
-//  AWT-core home page -> test areas and/or -> AWT team  for a list of
-//  areas.
-// Note also the 'SelectCurrentItemTest.html' in the run tag.  This should
-//  be changed to the name of the test.
-
-
-/**
- * SelectCurrentItemTest.java
- *
- * summary:
- */
-
-import java.applet.Applet;
-import java.awt.*;
-import java.awt.event.*;
+import java.awt.Choice;
+import java.awt.Robot;
+import java.awt.Frame;
+import java.awt.BorderLayout;
+import java.awt.AWTException;
+import java.awt.Point;
+import java.awt.Dimension;
+import java.awt.event.InputEvent;
+import java.awt.event.ItemListener;
+import java.awt.event.WindowListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.WindowEvent;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 
-//Automated tests should run as applet tests if possible because they
-// get their environments cleaned up, including AWT threads, any
-// test created threads, and any system resources used by the test
-// such as file descriptors.  (This is normally not a problem as
-// main tests usually run in a separate VM, however on some platforms
-// such as the Mac, separate VMs are not possible and non-applet
-// tests will cause problems).  Also, you don't have to worry about
-// synchronisation stuff in Applet tests they way you do in main
-// tests...
-
-
-public class SelectCurrentItemTest extends Applet implements ItemListener,
- WindowListener, Runnable
-{
+public class SelectCurrentItemTest implements ItemListener, WindowListener {
     //Declare things used in the test, like buttons and labels here
-    Frame frame;
-    Choice theChoice;
-    Robot robot;
+    private Frame frame;
+    private Choice theChoice;
+    private Robot robot;
 
-    Object lock = new Object();
-    boolean passed = false;
+    private CountDownLatch latch = new CountDownLatch(1);
+    private volatile boolean passed = true;
 
-    public void init()
+    private void init()
     {
-        //Create instructions for the user here, as well as set up
-        // the environment -- set the layout manager, add buttons,
-        // etc.
-
-        this.setLayout (new BorderLayout ());
+        try {
+            robot = new Robot();
+            robot.setAutoDelay(500);
+        } catch (AWTException e) {
+            throw new RuntimeException("Unable to create Robot. Test fails.");
+        }
 
         frame = new Frame("SelectCurrentItemTest");
+        frame.setLayout(new BorderLayout());
         theChoice = new Choice();
         for (int i = 0; i < 10; i++) {
             theChoice.add(new String("Choice Item " + i));
@@ -90,49 +71,30 @@
         frame.add(theChoice);
         frame.addWindowListener(this);
 
-        try {
-            robot = new Robot();
-            robot.setAutoDelay(500);
-        }
-        catch (AWTException e) {
-            throw new RuntimeException("Unable to create Robot.  Test fails.");
-        }
-
-    }//End  init()
-
-    public void start ()
-    {
-        //Get things going.  Request focus, set size, et cetera
-        setSize (200,200);
-        setVisible(true);
-        validate();
-
-        //What would normally go into main() will probably go here.
-        //Use System.out.println for diagnostic messages that you want
-        //to read after the test is done.
-        //Use System.out.println for messages you want the tester to read.
-
         frame.setLocation(1,20);
         robot.mouseMove(10, 30);
         frame.pack();
         frame.setVisible(true);
-        synchronized(lock) {
+    }
+
+    public static void main(String... args) {
+        SelectCurrentItemTest test = new SelectCurrentItemTest();
+        test.init();
         try {
-        lock.wait(120000);
-        }
-        catch(InterruptedException e) {}
+            test.latch.await(12000, TimeUnit.MILLISECONDS);
+        } catch (InterruptedException e) {}
+        test.robot.waitForIdle();
+
+        try {
+            if (!test.passed) {
+                throw new RuntimeException("TEST FAILED.");
+            }
+        } finally {
+            test.frame.dispose();
         }
-        robot.waitForIdle();
-        if (!passed) {
-            throw new RuntimeException("TEST FAILED!");
-        }
+    }
 
-        // wait to make sure ItemEvent has been processed
-
-//        try {Thread.sleep(10000);} catch (InterruptedException e){}
-    }// start()
-
-    public void run() {
+    private void run() {
         try {Thread.sleep(1000);} catch (InterruptedException e){}
         // get loc of Choice on screen
         Point loc = theChoice.getLocationOnScreen();
@@ -144,33 +106,29 @@
         robot.mousePress(InputEvent.BUTTON1_MASK);
         robot.mouseRelease(InputEvent.BUTTON1_MASK);
 
-        robot.setAutoDelay(1000);
+        robot.delay(1000);
+
         robot.mouseMove(loc.x + size.width / 2, loc.y + size.height + size.height / 2);
-        robot.setAutoDelay(250);
         robot.mousePress(InputEvent.BUTTON1_MASK);
         robot.mouseRelease(InputEvent.BUTTON1_MASK);
         robot.waitForIdle();
-        synchronized(lock) {
-            lock.notify();
-        }
+        latch.countDown();
     }
 
-    public void itemStateChanged(ItemEvent e) {
-        System.out.println("ItemEvent received.  Test passes");
-        passed = true;
+    @Override public void itemStateChanged(ItemEvent e) {
+        System.out.println("ItemEvent received.  Test fails");
+        passed = false;
     }
 
-    public void windowOpened(WindowEvent e) {
+    @Override public void windowOpened(WindowEvent e) {
         System.out.println("windowActivated()");
-        Thread testThread = new Thread(this);
-        testThread.start();
-    }
-    public void windowActivated(WindowEvent e) {
+        (new Thread(this::run)).start();
     }
-    public void windowDeactivated(WindowEvent e) {}
-    public void windowClosed(WindowEvent e) {}
-    public void windowClosing(WindowEvent e) {}
-    public void windowIconified(WindowEvent e) {}
-    public void windowDeiconified(WindowEvent e) {}
 
-}// class SelectCurrentItemTest
+    @Override public void windowActivated(WindowEvent e) {}
+    @Override public void windowDeactivated(WindowEvent e) {}
+    @Override public void windowClosed(WindowEvent e) {}
+    @Override public void windowClosing(WindowEvent e) {}
+    @Override public void windowIconified(WindowEvent e) {}
+    @Override public void windowDeiconified(WindowEvent e) {}
+}