Class EventDispatcher

  • All Implemented Interfaces:
    Outputable, Timeoutable

    public class EventDispatcher
    extends java.lang.Object
    implements Outputable, Timeoutable
    Provides low level functions for reproducing user actions. One dispatch model uses the managed component's event queue to dispatch events. The other dispatch model uses java.awt.Robot to generate native events. It is an option in the Robot dispatch model to wait for the managed component's event queue to empty before dispatching events. Timeouts used:
    EventDispatcher.WaitQueueEmptyTimeout - to wait event queue empty.
    EventDispatcher.RobotAutoDelay - param for java.awt.Robot.setAutoDelay method.
    EventDispatcher.WaitComponentUnderMouseTimeout - time to wait component under mouse.
    Author:
    Alexandre Iline (alexandre.iline@sun.com)
    See Also:
    Timeouts
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected java.awt.Component component
      Component to dispatch events to.
    • Constructor Summary

      Constructors 
      Constructor Description
      EventDispatcher​(java.awt.Component comp)
      Constructor.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void checkComponentUnderMouse​(boolean yesOrNo)
      Wait (or not) for the mouse to move over a Java component before pressing.
      void delayRobot​(long time)
      Delays robot.
      void dispatchEvent​(java.awt.AWTEvent event)
      Dispatches AWTEvent to component passed in constructor.
      void dispatchKeyEvent​(int id, int mods, int keyCode)
      Dispatches KeyEvent.
      void dispatchKeyEvent​(int id, int mods, int keyCode, char keyChar)
      Dispatches KeyEvent.
      void dispatchMouseEvent​(int id, int mods, int clickCount, boolean popup)
      Dispatches MouseEvent at the center of component.
      void dispatchMouseEvent​(int id, int mods, int clickCount, int x, int y, boolean popup)
      Dispatches a MouseEvent.
      void dispatchWindowEvent​(int id)
      Dispatches WindowEvent.
      protected int getAbsoluteX​(int x)
      Bind horizontal relative cursor coordinate to screen coordinate.
      protected int getAbsoluteY​(int y)
      Bind vertical relative cursor coordinate to screen coordinate.
      int getDispatchingModel()
      Gets the dispatching model value.
      java.lang.Object getExistingField​(java.lang.String field_name)
      Gets component field value through SwingUtilities.invokeAndWait(Runnable).
      java.lang.Object getExistingField​(java.lang.String field_name, TestOut out)
      Gets component field value through SwingUtilities.invokeAndWait(Runnable).
      java.lang.Object getField​(java.lang.String field_name)
      Gets component field value through SwingUtilities.invokeAndWait(Runnable).
      static java.lang.String getKeyDescription​(int keyCode)
      Returns a string representation for a keyboard event.
      static java.lang.String getModifiersString​(int modifiers)
      Get a string representation for key modifiers.
      static java.lang.String getMouseButtonDescription​(int button)
      Returns a mouse button string representation.
      TestOut getOutput()
      Returns print output streams or writers.
      Timeouts getTimeouts()
      Return current timeouts.
      java.lang.Object invokeExistingMethod​(java.lang.String method_name, java.lang.Object[] params, java.lang.Class[] params_classes)
      Invokes component method through SwingUtilities.invokeAndWait(Runnable).
      java.lang.Object invokeExistingMethod​(java.lang.String method_name, java.lang.Object[] params, java.lang.Class[] params_classes, TestOut out)
      Invokes component method through SwingUtilities.invokeAndWait(Runnable).
      java.lang.Object invokeMethod​(java.lang.String method_name, java.lang.Object[] params, java.lang.Class[] params_classes)
      Invokes component method through SwingUtilities.invokeAndWait(Runnable).
      static void performInit()  
      void robotMoveMouse​(int x, int y)
      Moves mouse by robot.
      void robotPressKey​(int keyCode)
      Press key with no modifiers using java.awt.Robot.
      void robotPressKey​(int keyCode, int modifiers)
      Press a key using java.awt.Robot.
      void robotPressMouse​(int button)
      Press mouse button with 0 modifiers.
      void robotPressMouse​(int button, int modifiers)
      Press mouse button by robot.
      void robotReleaseKey​(int keyCode)
      Releases key with 0 modifiers.
      void robotReleaseKey​(int keyCode, int modifiers)
      Releases key by robot.
      void robotReleaseMouse​(int button)
      Releases mouse button with 0 modifiers.
      void robotReleaseMouse​(int button, int modifiers)
      Releases mouse button by robot.
      void setDispatchingModel​(int m)
      Defines dispatching model.
      void setExistingField​(java.lang.String field_name, java.lang.Object newValue)
      Sets component field value through SwingUtilities.invokeAndWait(Runnable).
      void setExistingField​(java.lang.String field_name, java.lang.Object newValue, TestOut out)
      Sets component field value through SwingUtilities.invokeAndWait(Runnable).
      void setField​(java.lang.String field_name, java.lang.Object newValue)
      Sets component field value through SwingUtilities.invokeAndWait(Runnable).
      void setOutput​(TestOut out)
      Defines print output streams or writers.
      void setTimeouts​(Timeouts timeouts)
      Defines current timeouts.
      void waitForIdle()
      Waits until all events currently on the event queue have been processed.
      static void waitQueueEmpty()
      Waits for the managed component's java.awt.EventQueue to empty.
      static void waitQueueEmpty​(long emptyTime)
      Waits for the managed component's java.awt.EventQueue to stay empty.
      static void waitQueueEmpty​(long emptyTime, TestOut output, Timeouts timeouts)
      Waits for the managed component's java.awt.EventQueue to stay empty.
      static void waitQueueEmpty​(TestOut output, Timeouts timeouts)
      Waits for the managed component's java.awt.EventQueue to empty.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • component

        protected java.awt.Component component
        Component to dispatch events to.
    • Constructor Detail

      • EventDispatcher

        public EventDispatcher​(java.awt.Component comp)
        Constructor.
        Parameters:
        comp - Component to operate with.
    • Method Detail

      • waitQueueEmpty

        public static void waitQueueEmpty​(TestOut output,
                                          Timeouts timeouts)
        Waits for the managed component's java.awt.EventQueue to empty. The timeout for this wait is EventDispatcher.WaitQueueEmptyTimeout.
        Parameters:
        output - Output to print exception into.
        timeouts - A collection of timeout assignments.
        Throws:
        TimeoutExpiredException
        See Also:
        QueueTool
      • waitQueueEmpty

        public static void waitQueueEmpty()
        Waits for the managed component's java.awt.EventQueue to empty. Uses default output and timeouts. The timeout for this wait is EventDispatcher.WaitQueueEmptyTimeout.
        Throws:
        TimeoutExpiredException
        See Also:
        QueueTool
      • waitQueueEmpty

        public static void waitQueueEmpty​(long emptyTime,
                                          TestOut output,
                                          Timeouts timeouts)
        Waits for the managed component's java.awt.EventQueue to stay empty. The timeout for this wait is EventDispatcher.WaitQueueEmptyTimeout.
        Parameters:
        emptyTime - The time that the event queue has to stay empty to avoid a TimeoutExpiredException.
        output - Output to print exception into
        timeouts - A collection of timeout assignments.
        Throws:
        TimeoutExpiredException
        See Also:
        QueueTool
      • waitQueueEmpty

        public static void waitQueueEmpty​(long emptyTime)
        Waits for the managed component's java.awt.EventQueue to stay empty. Uses default output and timeouts. The timeout for this wait is EventDispatcher.WaitQueueEmptyTimeout.
        Parameters:
        emptyTime - The time that the event queue has to stay empty to avoid a TimeoutExpiredException.
        Throws:
        TimeoutExpiredException
        See Also:
        QueueTool
      • getModifiersString

        public static java.lang.String getModifiersString​(int modifiers)
        Get a string representation for key modifiers. Used to print trace.
        Parameters:
        modifiers - Bit mask of keyboard event modifiers.
        Returns:
        a string representation for the keyboard event modifiers.
      • getKeyDescription

        public static java.lang.String getKeyDescription​(int keyCode)
        Returns a string representation for a keyboard event. Used to print trace.
        Parameters:
        keyCode - Key code (KeyEvent.VK_* value)
        Returns:
        the KeyEvent field name.
      • getMouseButtonDescription

        public static java.lang.String getMouseButtonDescription​(int button)
        Returns a mouse button string representation. Used to print trace.
        Parameters:
        button - Mouse button (InputEvent.BUTTON1/2/3_MASK value).
        Returns:
        InputEvent field name.
      • performInit

        public static void performInit()
      • checkComponentUnderMouse

        public void checkComponentUnderMouse​(boolean yesOrNo)
        Wait (or not) for the mouse to move over a Java component before pressing. This option is relevant when using java.awt.Robot to generate mouse events. If a mouse press occurs at a position not occupied by a known Java component then a NoComponentUnderMouseException will be thrown.
        Parameters:
        yesOrNo - if true then the test system will wait for the mouse to move over a Java component before pressing. therwise, mouse presses can take place anywhere on the screen.
      • dispatchEvent

        public void dispatchEvent​(java.awt.AWTEvent event)
        Dispatches AWTEvent to component passed in constructor. If (getDispatchingModel & JemmyProperties.QUEUE_MODEL_MASK) == 0 dispatched event directly, otherwise uses javax.swing.SwingUtilities.invokeAndWait(Runnable)
        Parameters:
        event - AWTEvent instance to be dispatched.
        Throws:
        ComponentIsNotVisibleException
        ComponentIsNotFocusedException
      • dispatchMouseEvent

        public void dispatchMouseEvent​(int id,
                                       int mods,
                                       int clickCount,
                                       int x,
                                       int y,
                                       boolean popup)
        Dispatches a MouseEvent.
        Parameters:
        id - MouseEvent.MOUSE_* value
        mods - InputEvent.MOUSE1/2/3_BUTTON | (modiviers value)
        clickCount - Click count
        x - Horizontal click point coordinate.
        y - vertical click point coordinate.
        popup - Difines if mouse event is popup event.
        See Also:
        dispatchEvent(AWTEvent)
      • dispatchMouseEvent

        public void dispatchMouseEvent​(int id,
                                       int mods,
                                       int clickCount,
                                       boolean popup)
        Dispatches MouseEvent at the center of component.
        Parameters:
        id - MouseEvent.MOUSE_* value
        mods - InputEvent.MOUSE1/2/3_BUTTON | (modiviers value)
        clickCount - Click count
        popup - Difines if mouse event is popup event.
        See Also:
        dispatchEvent(AWTEvent)
      • dispatchWindowEvent

        public void dispatchWindowEvent​(int id)
        Dispatches WindowEvent.
        Parameters:
        id - WindowEvent.WINDOW_* value
        See Also:
        dispatchEvent(AWTEvent)
      • dispatchKeyEvent

        public void dispatchKeyEvent​(int id,
                                     int mods,
                                     int keyCode)
        Dispatches KeyEvent.
        Parameters:
        id - KeyEvent.KEY_PRESSED or KeyEvent.KEY_RELEASED value.
        mods - Modifiers.
        keyCode - Key code,
        See Also:
        dispatchEvent(AWTEvent)
      • dispatchKeyEvent

        public void dispatchKeyEvent​(int id,
                                     int mods,
                                     int keyCode,
                                     char keyChar)
        Dispatches KeyEvent.
        Parameters:
        id - KeyEvent.KEY_TYPED value.
        mods - Modifiers.
        keyCode - Key code,
        keyChar - Char to be tiped
        See Also:
        dispatchEvent(AWTEvent)
      • waitForIdle

        public void waitForIdle()
        Waits until all events currently on the event queue have been processed.
      • getAbsoluteX

        protected int getAbsoluteX​(int x)
        Bind horizontal relative cursor coordinate to screen coordinate.
        Parameters:
        x - Relative coordinate
        Returns:
        Absolute coordinate
      • getAbsoluteY

        protected int getAbsoluteY​(int y)
        Bind vertical relative cursor coordinate to screen coordinate.
        Parameters:
        y - Relative coordinate
        Returns:
        Absolute coordinate
      • delayRobot

        public void delayRobot​(long time)
        Delays robot.
        Parameters:
        time - Time to dalay robot for.
      • robotMoveMouse

        public void robotMoveMouse​(int x,
                                   int y)
        Moves mouse by robot.
        Parameters:
        x - Component relative horizontal coordinate.
        y - Component relative vertical coordinate.
        Throws:
        ComponentIsNotVisibleException
      • robotPressMouse

        public void robotPressMouse​(int button,
                                    int modifiers)
        Press mouse button by robot.
        Parameters:
        button - Mouse button (InputEvent.MOUSE1/2/3_BUTTON value)
        modifiers - Modifiers
        Throws:
        ComponentIsNotVisibleException
      • robotPressMouse

        public void robotPressMouse​(int button)
        Press mouse button with 0 modifiers.
        Parameters:
        button - Mouse button (InputEvent.MOUSE1/2/3_BUTTON value)
        See Also:
        robotPressMouse(int, int)
      • robotReleaseMouse

        public void robotReleaseMouse​(int button,
                                      int modifiers)
        Releases mouse button by robot.
        Parameters:
        button - Mouse button (InputEvent.MOUSE1/2/3_BUTTON value)
        modifiers - Modifiers
        Throws:
        ComponentIsNotVisibleException
      • robotReleaseMouse

        public void robotReleaseMouse​(int button)
        Releases mouse button with 0 modifiers.
        Parameters:
        button - Mouse button (InputEvent.MOUSE1/2/3_BUTTON value)
        See Also:
        robotReleaseMouse(int, int)
      • robotPressKey

        public void robotPressKey​(int keyCode)
        Press key with no modifiers using java.awt.Robot.
        Parameters:
        keyCode - Key (KeyEvent.VK_* value)
        See Also:
        robotPressKey(int, int)
      • robotReleaseKey

        public void robotReleaseKey​(int keyCode)
        Releases key with 0 modifiers.
        Parameters:
        keyCode - Key (KeyEvent.VK_* value)
        See Also:
        robotPressKey(int, int)
      • invokeMethod

        public java.lang.Object invokeMethod​(java.lang.String method_name,
                                             java.lang.Object[] params,
                                             java.lang.Class[] params_classes)
                                      throws java.lang.reflect.InvocationTargetException,
                                             java.lang.IllegalStateException,
                                             java.lang.NoSuchMethodException,
                                             java.lang.IllegalAccessException
        Invokes component method through SwingUtilities.invokeAndWait(Runnable).
        Parameters:
        method_name - Name of a method to be invoked
        params - Method params
        params_classes - Method params' classes
        Returns:
        an Object - methods result.
        Throws:
        java.lang.IllegalAccessException
        java.lang.NoSuchMethodException
        java.lang.IllegalStateException
        java.lang.reflect.InvocationTargetException
        See Also:
        ClassReference
      • getField

        public java.lang.Object getField​(java.lang.String field_name)
                                  throws java.lang.reflect.InvocationTargetException,
                                         java.lang.IllegalStateException,
                                         java.lang.NoSuchFieldException,
                                         java.lang.IllegalAccessException
        Gets component field value through SwingUtilities.invokeAndWait(Runnable).
        Parameters:
        field_name - Name of a field
        Returns:
        an Object - field value
        Throws:
        java.lang.IllegalAccessException
        java.lang.IllegalStateException
        java.lang.reflect.InvocationTargetException
        java.lang.NoSuchFieldException
        See Also:
        setField(String, Object), ClassReference
      • setField

        public void setField​(java.lang.String field_name,
                             java.lang.Object newValue)
                      throws java.lang.reflect.InvocationTargetException,
                             java.lang.IllegalStateException,
                             java.lang.NoSuchFieldException,
                             java.lang.IllegalAccessException
        Sets component field value through SwingUtilities.invokeAndWait(Runnable).
        Parameters:
        field_name - Name of a field
        newValue - New field value
        Throws:
        java.lang.IllegalAccessException
        java.lang.IllegalStateException
        java.lang.reflect.InvocationTargetException
        java.lang.NoSuchFieldException
        See Also:
        getField(String), ClassReference
      • invokeExistingMethod

        public java.lang.Object invokeExistingMethod​(java.lang.String method_name,
                                                     java.lang.Object[] params,
                                                     java.lang.Class[] params_classes,
                                                     TestOut out)
        Invokes component method through SwingUtilities.invokeAndWait(Runnable). and catch all exceptions.
        Parameters:
        method_name - Name of a method to be invoked
        params - Method params
        params_classes - Method params' classes
        out - TestOut instance to print exceptions stack trace to.
        Returns:
        an Object - method result
        See Also:
        invokeMethod(String, Object[], Class[]), ClassReference
      • getExistingField

        public java.lang.Object getExistingField​(java.lang.String field_name,
                                                 TestOut out)
        Gets component field value through SwingUtilities.invokeAndWait(Runnable). and catch all exceptions.
        Parameters:
        field_name - Name of a field
        out - TestOut instance to print exceptions stack trace to.
        Returns:
        an Object - fields value
        See Also:
        getField(String), setExistingField(String, Object, TestOut), ClassReference
      • setExistingField

        public void setExistingField​(java.lang.String field_name,
                                     java.lang.Object newValue,
                                     TestOut out)
        Sets component field value through SwingUtilities.invokeAndWait(Runnable). and catch all exceptions.
        Parameters:
        field_name - Name of a field
        newValue - New field value
        out - TestOut instance to print exceptions stack trace to.
        See Also:
        setField(String, Object), getExistingField(String, TestOut), ClassReference
      • invokeExistingMethod

        public java.lang.Object invokeExistingMethod​(java.lang.String method_name,
                                                     java.lang.Object[] params,
                                                     java.lang.Class[] params_classes)
        Invokes component method through SwingUtilities.invokeAndWait(Runnable). and catch all exceptions. Exceptions are printed into TestOut object defined by setOutput(TestOut) method.
        Parameters:
        method_name - Name of a method to be invoked
        params - Method params
        params_classes - Method params' classes
        Returns:
        an Object - method result
        See Also:
        invokeExistingMethod(String, Object[], Class[], TestOut), ClassReference
      • getExistingField

        public java.lang.Object getExistingField​(java.lang.String field_name)
        Gets component field value through SwingUtilities.invokeAndWait(Runnable). and catch all exceptions. Exceptions are printed into TestOut object defined by setOutput(TestOut) method.
        Parameters:
        field_name - Name of a field
        Returns:
        an Object - fields value
        See Also:
        getExistingField(String, TestOut), setExistingField(String, Object), ClassReference
      • setExistingField

        public void setExistingField​(java.lang.String field_name,
                                     java.lang.Object newValue)
        Sets component field value through SwingUtilities.invokeAndWait(Runnable). and catch all exceptions. Exceptions are printed into TestOut object defined by setOutput(TestOut) method.
        Parameters:
        field_name - Name of a field
        newValue - New field value
        See Also:
        setExistingField(String, Object, TestOut), getExistingField(String), ClassReference