Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6404068

MouseButtonExTest fails because Event was not fired

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Cannot Reproduce
    • Icon: P3 P3
    • 6
    • 6
    • client-libs
    • None
    • x86
    • windows_xp

      Java Version: 1.6.0-b77
      Platform: windowsXPpro

      Prablems:
      One awt test MouseButtonExTest is failing in winXP,
      it got the following errors:
      FAIL: Event was not fired. Component: class java.awt.Choice Key: CONTROL MouseBu
      tton: BUTTON1
      FAIL: Event was not fired. Component: class java.awt.Choice Key: CONTROL MouseBu
      tton: BUTTON2
      FAIL: Event was not fired. Component: class java.awt.Choice Key: CONTROL MouseBu
      tton: BUTTON3
      FAIL: Event was not fired. Component: class java.awt.TextArea Key: CONTROL Mouse
      Button: BUTTON1
      FAIL: Event was not fired. Component: class java.awt.TextArea Key: CONTROL Mouse
      Button: BUTTON2
      FAIL: Event was not fired. Component: class java.awt.TextArea Key: CONTROL Mouse
      Button: BUTTON3
      Test failed!

      please see bug 6393307 also.

      The test case is attached:

      /**
       * test 1.0 2001/08/12
       * @summary To check whether
       * getModifiersEx() returns the extended Modifiers flag for this event.
       * Extended Modifiers represent state of all Mouse buttons just after the
       * event occured.
       *
       * @author Vishal Byakod(###@###.###) area= AWT
       * @run applet MouseButtonExTest.html
       */
      import java.awt.*;
      import java.awt.event.*;

      public class MouseButtonExTest extends MouseAdapter {
          
          private Frame frame;
          private Panel panel;
          private Button button;
          private Label label;
          private List list;
          private Choice choice;
          private Checkbox checkbox;
          private Scrollbar scrollbar;
          private TextField textfield;
          private TextArea textarea;
          private Component[] components;
          private Component testedComponent;
          
          private int[] keyTypes;
          private String[] keyNames;
          private int[] keyMasks;
          
          private int[] mouseButtonTypes = {
              InputEvent.BUTTON1_MASK,
              InputEvent.BUTTON2_MASK,
              InputEvent.BUTTON3_MASK
          };
          private String[] mouseButtonNames = {
              "BUTTON1",
              "BUTTON2",
              "BUTTON3"
          };
          
          private int mouseMasks[] = {
              InputEvent.BUTTON1_DOWN_MASK,
              InputEvent.BUTTON2_DOWN_MASK,
              InputEvent.BUTTON3_DOWN_MASK
          };

          private static String WORK_DIR = ".";
          private int delay = 500;
          private int keyDelay = 50;
          
          private boolean passed = true;
          private int modifier = 0;
          
          private Object lock = new Object();
          private boolean eventFired = false;
          
          public MouseButtonExTest() {
              if (System.getProperty("os.name").toUpperCase().equals("SUNOS") &&
                  ! (System.getProperty("os.arch").equals("x86") ||
                     System.getProperty("os.arch").equals("amd64"))) {
                  keyTypes = new int[] {
                      KeyEvent.VK_CONTROL,
                      KeyEvent.VK_SHIFT,
                      KeyEvent.VK_META
                  };
                  keyNames = new String[] {
                      "CONTROL",
                      "SHIFT",
                      "META"
                  };
                  keyMasks = new int[] {
                      InputEvent.CTRL_DOWN_MASK,
                      InputEvent.SHIFT_DOWN_MASK,
                      InputEvent.META_DOWN_MASK
                  };
              } else if (System.getProperty("os.name").toUpperCase().startsWith("WIN")) {
                  keyTypes = new int[] {
                      KeyEvent.VK_CONTROL,
                      KeyEvent.VK_SHIFT,
                      KeyEvent.VK_ALT
                  };
                  keyNames = new String[] {
                      "CONTROL",
                      "SHIFT",
                      "ALT"
                  };
                  keyMasks = new int[] {
                      InputEvent.CTRL_DOWN_MASK,
                      InputEvent.SHIFT_DOWN_MASK,
                      InputEvent.ALT_DOWN_MASK
                  };
              } else {
                  keyTypes = new int[] {
                      KeyEvent.VK_CONTROL,
                      KeyEvent.VK_SHIFT
                  };
                  keyNames = new String[] {
                      "CONTROL",
                      "SHIFT"
                  };
                  keyMasks = new int[] {
                      InputEvent.CTRL_DOWN_MASK,
                      InputEvent.SHIFT_DOWN_MASK
                  };
              }
              try {
                  Toolkit.getDefaultToolkit().getSystemEventQueue().invokeAndWait(new Runnable() {
                      public void run() {
                          initializeGUI();
                      }
                  });
              } catch (Exception e) {
                  e.printStackTrace();
                  System.exit(1);
              }
          }
          
          private void initializeGUI() {
              frame = new Frame("Test Frame");
              frame.setLayout(new FlowLayout());

              panel = new Panel();
              button = new Button("Button");
              label = new Label("Label");
              list = new List();
              list.add("One");
              list.add("Two");
              list.add("Three");
              choice = new Choice();
              choice.add("Red");
              choice.add("Orange");
              choice.add("Yellow");
              checkbox = new Checkbox("Checkbox");
              scrollbar = new Scrollbar(Scrollbar.HORIZONTAL, 0, 1, 0, 255);
              textfield = new TextField(15);
              textarea = new TextArea(5, 15);
              
              components = new Component[] {
                  panel, button, label, list, choice, checkbox, scrollbar, textfield, textarea
              };

              frame.addWindowListener(new WindowAdapter() {
                  public void windowClosing(WindowEvent event) {
                      System.err.println("User closed the window");
                      System.exit(1);
                  }
              });
              
              for (int i = 0; i < components.length; i++) {
                  components[i].addMouseListener(this);
                  frame.add(components[i]);
              }
              frame.setSize(300, 300);
              frame.setVisible(true);
          }
          
          public static void main(String[] args) {
              WORK_DIR = System.getProperty("resultsDir");
              if (WORK_DIR == null || WORK_DIR.equals("")) {
                  System.err.println("ERROR: resultsDir not set!");
                  System.exit(1);
              }
              try {
                  MouseButtonExTest test = new MouseButtonExTest();
                  test.doTest();
              } catch (Exception e) {
                  e.printStackTrace();
                  System.exit(1);
              }
          }
          
          public void mousePressed(MouseEvent event) {
              if (! event.getSource().equals(testedComponent)) {
                  return;
              }
              modifier = event.getModifiersEx();
              eventFired = true;
              synchronized (lock) {
                  try {
                      lock.notifyAll();
                  } catch (Exception e) {
                  }
              }
          }
          
          private void doTest() throws Exception {
              Robot robot = null;
              try {
                  robot = new Robot();
                  Thread.sleep(delay * 10);
              } catch (Exception e) {
                  e.printStackTrace();
                  System.exit(1);
              }
              
              int keysToTest = keyTypes.length - 2;
              
              for (int i = 0; i < components.length; i++) {
                  testedComponent = components[i];
                  robot.mouseMove((int) components[i].getLocationOnScreen().x + components[i].getSize().width / 2,
                                  (int) components[i].getLocationOnScreen().y + components[i].getSize().height / 2);
                  robot.delay(delay);
                  robot.mousePress(InputEvent.BUTTON1_MASK);
                  robot.delay(delay);
                  robot.mouseRelease(InputEvent.BUTTON1_MASK);
                  robot.delay(delay);
                  robot.keyPress(KeyEvent.VK_ESCAPE);
                  robot.delay(keyDelay);
                  robot.keyRelease(KeyEvent.VK_ESCAPE);
                  robot.delay(delay * 5);
              
                  for (int j = 0; j < keysToTest; j++) {
                      for (int k = 0; k < mouseButtonTypes.length; k++) {
                          eventFired = false;
                          robot.keyPress(keyTypes[j]);
                          robot.delay(keyDelay);
                          robot.mousePress(mouseButtonTypes[k]);
                          robot.delay(delay);
                          
                          if (! eventFired) {
                              synchronized (lock) {
                                  try {
                                      lock.wait(delay * 5);
                                  } catch (Exception e) {
                                  }
                              }
                          }
                          if (eventFired) {
                              if ((keyMasks[j] | mouseMasks[k]) != modifier) {
                                  System.err.println("FAIL: getModifiersEx failed. Component: " +
                                                     components[i].getClass() + " Key: " +
                                                     keyNames[j] + " MouseButton: " +
                                                     mouseButtonNames[k]);
                                  passed = false;
                              }
                          } else {
                              System.err.println("FAIL: Event was not fired. Component: " +
                                                 components[i].getClass() + " Key: " +
                                                 keyNames[j] + " MouseButton: " +
                                                 mouseButtonNames[k]);
                              passed = false;
                          }
                          
                          robot.mouseRelease(mouseButtonTypes[k]);
                          robot.delay(delay);
                          robot.keyRelease(keyTypes[j]);
                          robot.delay(keyDelay);

                          robot.keyPress(KeyEvent.VK_ESCAPE);
                          robot.delay(keyDelay);
                          robot.keyRelease(KeyEvent.VK_ESCAPE);
                          robot.delay(keyDelay);
                      }
                  }
              }
                  
              if (! passed) {
                  System.err.println("Test failed!");
                  captureScreenAndSave();
                  System.exit(1);
              } else {
                  System.out.println("Test passed!");
                  System.exit(0);
              }
          }

          /**
           * Do screen capture and save it as image
           */
          private static void captureScreenAndSave() {
           
              try {
                  Robot robot = new Robot();
                  Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
                  Rectangle rectangle = new Rectangle(0, 0, screenSize.width, screenSize.height);
                  System.out.println("About to screen capture - " + rectangle);
                  java.awt.image.BufferedImage image = robot.createScreenCapture(rectangle);
                  javax.imageio.ImageIO.write(image, "jpg", new java.io.File(WORK_DIR,
                                                                             "ScreenImage.jpg"));
                  robot.delay(3000);
              } catch (Throwable t) {
                  System.out.println("WARNING: Exception thrown while screen capture!");
                  t.printStackTrace();
              }
          }
      }

            Unassigned Unassigned
            ttzhang Tao Zhang
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: