Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1367)

Unified Diff: editor/tools/plugins/com.google.dart.tools.ui.swtbot_test/src/com/google/dart/tools/ui/internal/refactoring/EventSender.java

Issue 10051030: Fix for local variable rename, when it is expression of invocation. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: editor/tools/plugins/com.google.dart.tools.ui.swtbot_test/src/com/google/dart/tools/ui/internal/refactoring/EventSender.java
diff --git a/editor/tools/plugins/com.google.dart.tools.ui.swtbot_test/src/com/google/dart/tools/ui/internal/refactoring/EventSender.java b/editor/tools/plugins/com.google.dart.tools.ui.swtbot_test/src/com/google/dart/tools/ui/internal/refactoring/EventSender.java
new file mode 100644
index 0000000000000000000000000000000000000000..f53771f7fe343cad48b1562f3d7251ed9d46b9d9
--- /dev/null
+++ b/editor/tools/plugins/com.google.dart.tools.ui.swtbot_test/src/com/google/dart/tools/ui/internal/refactoring/EventSender.java
@@ -0,0 +1,465 @@
+package com.google.dart.tools.ui.internal.refactoring;
+
+import com.google.dart.tools.internal.corext.refactoring.util.ExecutionUtils;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.ScrollBar;
+import org.eclipse.swt.widgets.Scrollable;
+
+/**
+ * Event emulator used for send different mouse events to given SWT control.
+ */
+public class EventSender {
+ private final Control m_control;
+ private int m_stateMask;
+ private int m_dragButton;
+ private int m_lastDragX;
+ private int m_lastDragY;
+
+ ////////////////////////////////////////////////////////////////////////////
+ //
+ // Constructor
+ //
+ ////////////////////////////////////////////////////////////////////////////
+ /**
+ * Constructor of create event emulator for given <code>control</code>.
+ */
+ public EventSender(Control control) {
+ m_control = control;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ //
+ // High-Level events emulate
+ //
+ ////////////////////////////////////////////////////////////////////////////
+ public void setStateMask(int stateMask) {
+ m_stateMask = stateMask;
+ }
+
+ /**
+ * Emulates CTRL key down.
+ */
+ public void ctrlDown() {
+ setStateMask(SWT.CTRL);
+ }
+
+ /**
+ * Emulates CTRL key up.
+ */
+ public void ctrlUp() {
+ setStateMask(SWT.NONE);
+ }
+
+ /**
+ * Emulate mouse enter to given location <code>(x, y)</code>.
+ */
+ public void mouseEnter(int x, int y) {
+ Event event = createEvent(x, y, 0);
+ m_control.notifyListeners(SWT.MouseEnter, event);
+ }
+
+ /**
+ * Emulate mouse click use given location and <code>button</code>.
+ */
+ public void click(Point location, int button) {
+ click(location.x, location.y, button);
+ }
+
+ /**
+ * Emulate mouse click use given location <code>(x, y)</code> and <code>button</code>.
+ */
+ public void click(int x, int y, int button) {
+ Event event = createEvent(x, y, button);
+ m_control.notifyListeners(SWT.MouseDown, event);
+ updateStateMask(event, button);
+ m_control.notifyListeners(SWT.MouseUp, event);
+ }
+
+ /**
+ * Emulates mouse click in last location.
+ */
+ public void click(int button) {
+ click(m_lastDragX, m_lastDragY, button);
+ }
+
+ /**
+ * Emulates mouse click using button <code>1</code> in last location.
+ */
+ public void click() {
+ click(1);
+ }
+
+ /**
+ * Emulate mouse double click use given location <code>(x, y)</code> and <code>button</code>.
+ */
+ public void doubleClick(int x, int y, int button) {
+ Event event = createEvent(x, y, button);
+ m_control.notifyListeners(SWT.MouseDown, event);
+ updateStateMask(event, button);
+ m_control.notifyListeners(SWT.MouseUp, event);
+ event.stateMask = m_stateMask;
+ m_control.notifyListeners(SWT.MouseDown, event);
+ m_control.notifyListeners(SWT.MouseDoubleClick, event);
+ updateStateMask(event, button);
+ m_control.notifyListeners(SWT.MouseUp, event);
+ }
+
+ /**
+ * Emulate mouse move to given location <code>(x, y)</code>.
+ */
+ public EventSender moveTo(int x, int y) {
+ saveLastMouseLocation(x, y);
+ // send event
+ Event event = createEvent(x, y, 0);
+ m_control.notifyListeners(SWT.MouseMove, event);
+ // process "async" runnables
+ waitEventLoop(0);
+ return this;
+ }
+
+ /**
+ * Start emulate operation drag use given location <code>(x, y)</code> and <code>button</code>.
+ */
+ public void startDrag(int x, int y, int button) {
+ saveLastMouseLocation(x, y);
+ m_dragButton = button;
+ //
+ Event event = createEvent(x, y, button);
+ m_control.notifyListeners(SWT.MouseDown, event);
+ }
+
+// /**
+// * Emulate mouse drag to given location.
+// */
+// public void dragTo(org.eclipse.wb.draw2d.geometry.Point location) {
+// dragTo(location.x, location.y);
+// }
+
+ /**
+ * Emulate mouse drag to given location <code>(x, y)</code>.
+ */
+ public void dragTo(int x, int y) {
+ saveLastMouseLocation(x, y);
+ // send event
+ Event event = createEvent(x, y, m_dragButton);
+ updateStateMask(event, m_dragButton);
+ m_control.notifyListeners(SWT.MouseMove, event);
+ // process "async" runnables
+ waitEventLoop(0);
+ }
+
+ /**
+ * Ending emulate operation mouse drag.
+ */
+ public void endDrag() {
+ Event event = createEvent(m_lastDragX, m_lastDragY, m_dragButton);
+ updateStateMask(event, m_dragButton);
+ m_control.notifyListeners(SWT.MouseUp, event);
+ m_dragButton = 0;
+ m_lastDragX = 0;
+ m_lastDragY = 0;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ //
+ // High level keyboard
+ //
+ ////////////////////////////////////////////////////////////////////////////
+ public void keyDown(int key) {
+ keyDown(key, (char) key);
+ }
+
+ public void keyUp(int key) {
+ keyUp(key, (char) key);
+ }
+
+ public void keyDown(int key, char c) {
+ Event event = createKeyEvent(key, c);
+ m_control.notifyListeners(SWT.KeyDown, event);
+ }
+
+ public void keyUp(int key, char c) {
+ Event event = createKeyEvent(key, c);
+ m_control.notifyListeners(SWT.KeyUp, event);
+ }
+
+ public Event createKeyEvent(int key, char c) {
+ Event event = new Event();
+ event.widget = m_control;
+ event.stateMask = m_stateMask;
+ event.keyCode = key;
+ event.character = c;
+ return event;
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ //
+ // UI utils
+ //
+ ////////////////////////////////////////////////////////////////////////////
+ /**
+ * Waits given number of milliseconds and runs events loop every 1 millisecond.<br>
+ * At least one events loop will be executed.
+ */
+ public static void waitEventLoop(int time) {
+ try {
+ long start = System.currentTimeMillis();
+ do {
+ Thread.sleep(0);
+ while (Display.getCurrent().readAndDispatch()) {
+ // do nothing
+ }
+ } while (System.currentTimeMillis() - start < time);
+ } catch (Throwable e) {
+ throw ExecutionUtils.propagate(e);
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ //
+ // Scrolling
+ //
+ ////////////////////////////////////////////////////////////////////////////
+ /**
+ * Scrolls vertical {@link ScrollBar} and sends {@link SWT#Selection} event.
+ */
+ public void setVerticalBarSelection(int selection) {
+ ScrollBar verticalBar = ((Scrollable) m_control).getVerticalBar();
+ verticalBar.setSelection(selection);
+ verticalBar.notifyListeners(SWT.Selection, new Event());
+ }
+
+ /**
+ * Sends {@link SWT#MouseHover} event with given location.
+ */
+ public void mouseHover(Point location) {
+ mouseEnter(location.x, location.y);
+ }
+
+ /**
+ * Sends {@link SWT#MouseHover} event with given location.
+ */
+ public void mouseHover(int x, int y) {
+ Event event = createEvent(x, y, 0);
+ m_control.notifyListeners(SWT.MouseHover, event);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ //
+ // Keyboard
+ //
+ ////////////////////////////////////////////////////////////////////////////
+ public static void sendText(String text) {
+ char[] charArray = text.toCharArray();
+ for (int i = 0; i < charArray.length; i++) {
+ char c = charArray[i];
+ sendCharacter(c);
+ }
+ }
+
+ public static void sendCharacter(char character) {
+ sendCharacter(Character.isUpperCase(character), character);
+ }
+
+ public static void sendKey(int key) {
+ postKeyEvent(SWT.KeyDown, key, (char) 0);
+ postKeyEvent(SWT.KeyUp, key, (char) 0);
+ }
+
+ /**
+ * Sends "key" event with modifiers.
+ */
+ public static void sendKey(int modifiers, int key) {
+ postModifiers(SWT.KeyDown, modifiers);
+ try {
+ postKeyEvent(SWT.KeyDown, key, (char) 0);
+ postKeyEvent(SWT.KeyUp, key, (char) 0);
+ } finally {
+ postModifiers(SWT.KeyUp, modifiers);
+ }
+ }
+
+ public static void sendCharacter(boolean shift, char character) {
+ if (shift) {
+ postKeyEvent(SWT.KeyDown, SWT.SHIFT, (char) 0);
+ }
+ postKeyEvent(SWT.KeyDown, 0, character);
+ postKeyEvent(SWT.KeyUp, 0, character);
+ if (shift) {
+ postKeyEvent(SWT.KeyUp, SWT.SHIFT, (char) 0);
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ //
+ // Utils
+ //
+ ////////////////////////////////////////////////////////////////////////////
+ /**
+ * Remembers this mouse location as last.
+ */
+ private void saveLastMouseLocation(int x, int y) {
+ m_lastDragX = x;
+ m_lastDragY = y;
+ }
+
+ private Event createEvent(int x, int y, int button) {
+ Event event = new Event();
+ event.widget = m_control;
+ event.stateMask = m_stateMask;
+ event.button = button;
+ event.x = x;
+ event.y = y;
+ return event;
+ }
+
+ private static final void updateStateMask(Event event, int button) {
+ switch (button) {
+ case 1:
+ event.stateMask |= SWT.BUTTON1;
+ break;
+ case 2:
+ event.stateMask |= SWT.BUTTON2;
+ break;
+ case 3:
+ event.stateMask |= SWT.BUTTON3;
+ break;
+ case 4:
+ event.stateMask |= SWT.BUTTON4;
+ break;
+ case 5:
+ event.stateMask |= SWT.BUTTON5;
+ break;
+ }
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ //
+ // Low-level events
+ //
+ ////////////////////////////////////////////////////////////////////////////
+ /**
+ * Posts low-level {@link SWT.MouseMove} event with coordinates relative to control.
+ */
+ public void postMouseMove(Point p) {
+ postMouseMove(p.x, p.y);
+ }
+
+ /**
+ * Posts low-level {@link SWT.MouseMove} event with coordinates relative to control.
+ */
+ public void postMouseMove(int x, int y) {
+ Display display = Display.getCurrent();
+ Point p = display.map(m_control, null, x, y);
+ postMouseMoveAbs(p.x, p.y);
+ }
+
+ public void postMouseMove(int x, int y, int button) {
+ Display display = Display.getCurrent();
+ Point p = display.map(m_control, null, x, y);
+ // prepare event
+ Event event;
+ {
+ event = new Event();
+ event.type = SWT.MouseMove;
+ event.x = p.x;
+ event.y = p.y;
+ event.button = button;
+ }
+ // post event
+ Display.getCurrent().post(event);
+ }
+
+ /**
+ * Posts low-level {@link SWT.MouseMove} event with absolute coordinates.
+ */
+ public static void postMouseMoveAbs(Point p) {
+ postMouseMoveAbs(p.x, p.y);
+ }
+
+ /**
+ * Posts low-level {@link SWT.MouseMove} event with absolute coordinates.
+ */
+ public static void postMouseMoveAbs(int x, int y) {
+ // prepare event
+ Event event;
+ {
+ event = new Event();
+ event.type = SWT.MouseMove;
+ event.x = x;
+ event.y = y;
+ }
+ // post event
+ Display.getCurrent().post(event);
+ }
+
+ /**
+ * Posts low-level {@link SWT.MouseDown} event.
+ */
+ public static void postMouseDown(int button) {
+ postMouseDownUp(SWT.MouseDown, button);
+ }
+
+ /**
+ * Posts low-level {@link SWT.MouseUp} event.
+ */
+ public static void postMouseUp(int button) {
+ postMouseDownUp(SWT.MouseUp, button);
+ }
+
+ /**
+ * Posts low-level {@link SWT.MouseDown} or {@link SWT.MouseUp} event.
+ */
+ private static void postMouseDownUp(int type, int button) {
+ // prepare event
+ final Event event;
+ {
+ event = new Event();
+ event.type = type;
+ event.button = button;
+ }
+ // post event
+ Display.getCurrent().post(event);
+ }
+
+ ////////////////////////////////////////////////////////////////////////////
+ //
+ // Low-level keyboard events
+ //
+ ////////////////////////////////////////////////////////////////////////////
+ /**
+ * Posts low-level {@link SWT.KeyDown} or {@link SWT.KeyUp} event.
+ */
+ private static void postKeyEvent(int type, int keyCode, char character) {
+ // prepare event
+ final Event event;
+ {
+ event = new Event();
+ event.type = type;
+ event.keyCode = keyCode;
+ event.character = character;
+ }
+ // post event
+ Display.getCurrent().post(event);
+ }
+
+ /**
+ * Posts modifiers up/down event.
+ */
+ private static void postModifiers(int event, int modifiers) {
+ if ((modifiers & SWT.SHIFT) != 0) {
+ postKeyEvent(event, SWT.SHIFT, (char) 0);
+ }
+ if ((modifiers & SWT.CTRL) != 0) {
+ postKeyEvent(event, SWT.CTRL, (char) 0);
+ }
+ if ((modifiers & SWT.ALT) != 0) {
+ postKeyEvent(event, SWT.CTRL, (char) 0);
+ }
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698