Bug 334028: Rework event system
Removed RWTEvent (formerly named o.e.rwt.internal.events.Event)
diff --git a/bundles/org.eclipse.rap.jface/src/org/eclipse/jface/viewers/ColumnViewer.java b/bundles/org.eclipse.rap.jface/src/org/eclipse/jface/viewers/ColumnViewer.java
index ad214b6..f028d42 100755
--- a/bundles/org.eclipse.rap.jface/src/org/eclipse/jface/viewers/ColumnViewer.java
+++ b/bundles/org.eclipse.rap.jface/src/org/eclipse/jface/viewers/ColumnViewer.java
@@ -92,6 +92,7 @@
}
public void mouseDoubleClick(MouseEvent e) {
+ e.count = 1;
handleMouseDown(e);
}
});
diff --git a/bundles/org.eclipse.rap.jface/src/org/eclipse/jface/viewers/ColumnViewerEditorActivationEvent.java b/bundles/org.eclipse.rap.jface/src/org/eclipse/jface/viewers/ColumnViewerEditorActivationEvent.java
index 8dbf667..4bb446d 100755
--- a/bundles/org.eclipse.rap.jface/src/org/eclipse/jface/viewers/ColumnViewerEditorActivationEvent.java
+++ b/bundles/org.eclipse.rap.jface/src/org/eclipse/jface/viewers/ColumnViewerEditorActivationEvent.java
@@ -13,7 +13,6 @@
import java.util.EventObject;
-import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.TraverseEvent;
@@ -123,10 +122,7 @@
public ColumnViewerEditorActivationEvent(ViewerCell cell, MouseEvent event) {
super(cell);
-// RAP [rh] MouseEvent#count not implemented. Changed if-statement works as
-// long as conditions in the calling method don't change.
-// if (event.count >= 2) {
- if(event.getID() == SWT.MouseDoubleClick) {
+ if (event.count >= 2) {
eventType = MOUSE_DOUBLE_CLICK_SELECTION;
} else {
eventType = MOUSE_CLICK_SELECTION;
@@ -146,8 +142,7 @@
super(cell);
this.eventType = KEY_PRESSED;
this.sourceEvent = event;
-// RAP [rh] event timestamps not supported
-// this.time = event.time;
+ this.time = event.time;
this.keyCode = event.keyCode;
this.character = event.character;
this.stateMask = event.stateMask;
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/rap/rwt/internal/events/RWTEvent.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/rap/rwt/internal/events/RWTEvent.java
deleted file mode 100644
index eae260b..0000000
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/rap/rwt/internal/events/RWTEvent.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2002, 2011 Innoopract Informationssysteme GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Innoopract Informationssysteme GmbH - initial API and implementation
- ******************************************************************************/
-package org.eclipse.rap.rwt.internal.events;
-
-import java.util.EventObject;
-
-import org.eclipse.rap.rwt.Adaptable;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.internal.SWTEventListener;
-import org.eclipse.swt.internal.events.EventTable;
-import org.eclipse.swt.widgets.TypedListener;
-
-
-public abstract class RWTEvent extends EventObject {
-
- private static final long serialVersionUID = 1L;
-
- private final int id;
-
- public RWTEvent( Object source, int id ) {
- super( source );
- this.id = id;
- }
-
- public int getID() {
- return id;
- }
-
- protected static boolean hasListener( Adaptable adaptable, int[] eventTypes ) {
- boolean result = false;
- EventTable eventTable = adaptable.getAdapter( EventTable.class );
- for( int i = 0; !result && i < eventTypes.length; i++ ) {
- result = eventTable.hooks( eventTypes[ i ] );
- }
- return result;
- }
-
- protected static void addListener( Adaptable adaptable,
- int[] eventTypes,
- SWTEventListener listener )
- {
- if( listener == null ) {
- SWT.error( SWT.ERROR_NULL_ARGUMENT );
- }
- TypedListener typedListener = new TypedListener( listener );
- EventTable eventTable = adaptable.getAdapter( EventTable.class );
- for( int eventType : eventTypes ) {
- eventTable.hook( eventType, typedListener );
- }
- }
-
- protected static void removeListener( Adaptable adaptable,
- int[] eventTypes,
- SWTEventListener listener )
- {
- if( listener == null ) {
- SWT.error( SWT.ERROR_NULL_ARGUMENT );
- }
- EventTable eventTable = adaptable.getAdapter( EventTable.class );
- for( int eventType : eventTypes ) {
- eventTable.unhook( eventType, listener );
- }
- }
-
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/rap/rwt/lifecycle/ControlLCAUtil.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/rap/rwt/lifecycle/ControlLCAUtil.java
index fed727c..e6c2324 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/rap/rwt/lifecycle/ControlLCAUtil.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/rap/rwt/lifecycle/ControlLCAUtil.java
@@ -26,7 +26,6 @@
import org.eclipse.rap.rwt.internal.util.NumberFormatUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
-import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.MenuDetectEvent;
import org.eclipse.swt.events.MouseEvent;
@@ -146,17 +145,17 @@
public static void processMouseEvents( Control control ) {
if( WidgetLCAUtil.wasEventSent( control, ClientMessageConst.EVENT_MOUSE_DOWN ) ) {
- createMouseEvent( control, ClientMessageConst.EVENT_MOUSE_DOWN, SWT.MouseDown );
+ sendMouseEvent( control, ClientMessageConst.EVENT_MOUSE_DOWN, SWT.MouseDown );
}
if( WidgetLCAUtil.wasEventSent( control, ClientMessageConst.EVENT_MOUSE_DOUBLE_CLICK ) ) {
- createMouseEvent( control, ClientMessageConst.EVENT_MOUSE_DOUBLE_CLICK, SWT.MouseDoubleClick );
+ sendMouseEvent( control, ClientMessageConst.EVENT_MOUSE_DOUBLE_CLICK, SWT.MouseDoubleClick );
}
if( WidgetLCAUtil.wasEventSent( control, ClientMessageConst.EVENT_MOUSE_UP ) ) {
- createMouseEvent( control, ClientMessageConst.EVENT_MOUSE_UP, SWT.MouseUp );
+ sendMouseEvent( control, ClientMessageConst.EVENT_MOUSE_UP, SWT.MouseUp );
}
}
- private static void createMouseEvent( Control control, String eventName, int eventType ) {
+ private static void sendMouseEvent( Control control, String eventName, int eventType ) {
Event event = new Event();
event.widget = control;
event.type = eventType;
@@ -171,6 +170,11 @@
ClientMessageConst.EVENT_PARAM_TIME );
event.stateMask = EventLCAUtil.readStateMask( control, eventName )
| EventLCAUtil.translateButton( event.button );
+ if( WidgetLCAUtil.wasEventSent( control, ClientMessageConst.EVENT_MOUSE_DOUBLE_CLICK ) ) {
+ event.count = 2;
+ } else {
+ event.count = 1;
+ }
checkAndProcessMouseEvent( event );
}
@@ -270,14 +274,14 @@
if( ( control.getStyle() & SWT.NO_FOCUS ) == 0 ) {
WidgetLCAUtil.preserveListener( control,
PROP_FOCUS_LISTENER,
- FocusEvent.hasListener( control ) );
+ hasFocusListener( control ) );
}
WidgetLCAUtil.preserveListener( control,
PROP_KEY_LISTENER,
KeyEvent.hasListener( control ) );
WidgetLCAUtil.preserveListener( control,
PROP_TRAVERSE_LISTENER,
- TraverseEvent.hasListener( control ) );
+ control.isListening( SWT.Traverse ) );
WidgetLCAUtil.preserveListener( control,
PROP_MENU_DETECT_LISTENER,
MenuDetectEvent.hasListener( control ) );
@@ -537,7 +541,7 @@
*/
static void renderListenFocus( Control control ) {
if( ( control.getStyle() & SWT.NO_FOCUS ) == 0 ) {
- boolean newValue = FocusEvent.hasListener( control );
+ boolean newValue = hasFocusListener( control );
WidgetLCAUtil.renderListener( control, PROP_FOCUS_LISTENER, newValue, false );
}
}
@@ -553,7 +557,7 @@
}
static void renderListenTraverse( Control control ) {
- boolean newValue = TraverseEvent.hasListener( control );
+ boolean newValue = control.isListening( SWT.Traverse );
WidgetLCAUtil.renderListener( control, PROP_TRAVERSE_LISTENER, newValue, false );
}
@@ -932,4 +936,8 @@
return control.isListening( SWT.Activate ) || control.isListening( SWT.Deactivate );
}
+ private static boolean hasFocusListener( Control control ) {
+ return control.isListening( SWT.FocusIn ) || control.isListening( SWT.FocusOut );
+ }
+
}
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/ArmEvent.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/ArmEvent.java
index 16965ce..25443f1 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/ArmEvent.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/ArmEvent.java
@@ -47,24 +47,6 @@
* @deprecated not part of the API, do not use in application code
*/
@Deprecated
- public static void addListener( Adaptable adaptable, ArmListener listener ) {
- addListener( adaptable, EVENT_TYPES, listener );
- }
-
- /**
- * @since 2.0
- * @deprecated not part of the API, do not use in application code
- */
- @Deprecated
- public static void removeListener( Adaptable adaptable, ArmListener listener ) {
- removeListener( adaptable, EVENT_TYPES, listener );
- }
-
- /**
- * @since 2.0
- * @deprecated not part of the API, do not use in application code
- */
- @Deprecated
public static boolean hasListener( Adaptable adaptable ) {
return hasListener( adaptable, EVENT_TYPES );
}
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/ControlEvent.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/ControlEvent.java
index 37c8140..9a59aec 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/ControlEvent.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/ControlEvent.java
@@ -52,24 +52,6 @@
* @deprecated not part of the API, do not use in application code
*/
@Deprecated
- public static void addListener( Adaptable adaptable, ControlListener listener ) {
- addListener( adaptable, EVENT_TYPES, listener );
- }
-
- /**
- * @since 2.0
- * @deprecated not part of the API, do not use in application code
- */
- @Deprecated
- public static void removeListener( Adaptable adaptable, ControlListener listener ) {
- removeListener( adaptable, EVENT_TYPES, listener );
- }
-
- /**
- * @since 2.0
- * @deprecated not part of the API, do not use in application code
- */
- @Deprecated
public static boolean hasListener( Adaptable adaptable ) {
return hasListener( adaptable, EVENT_TYPES );
}
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/FocusEvent.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/FocusEvent.java
index d759b44..09a53e6 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/FocusEvent.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/FocusEvent.java
@@ -11,8 +11,6 @@
******************************************************************************/
package org.eclipse.swt.events;
-import org.eclipse.rap.rwt.Adaptable;
-import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Event;
@@ -32,8 +30,6 @@
private static final long serialVersionUID = 1L;
- private static final int[] EVENT_TYPES = { SWT.FocusIn, SWT.FocusOut };
-
/**
* Constructs a new instance of this class based on the
* information in the given untyped event.
@@ -44,31 +40,4 @@
super( event );
}
- /**
- * @since 2.0
- * @deprecated not part of the API, do not use in application code
- */
- @Deprecated
- public static void addListener( Adaptable adaptable, FocusListener listener ) {
- addListener( adaptable, EVENT_TYPES, listener );
- }
-
- /**
- * @since 2.0
- * @deprecated not part of the API, do not use in application code
- */
- @Deprecated
- public static void removeListener( Adaptable adaptable, FocusListener listener ) {
- removeListener( adaptable, EVENT_TYPES, listener );
- }
-
- /**
- * @since 2.0
- * @deprecated not part of the API, do not use in application code
- */
- @Deprecated
- public static boolean hasListener( Adaptable adaptable ) {
- return hasListener( adaptable, EVENT_TYPES );
- }
-
}
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/MenuDetectEvent.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/MenuDetectEvent.java
index 25e679e..6dd1f32 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/MenuDetectEvent.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/MenuDetectEvent.java
@@ -12,7 +12,6 @@
import org.eclipse.rap.rwt.Adaptable;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.internal.widgets.EventUtil;
import org.eclipse.swt.widgets.Event;
@@ -79,10 +78,6 @@
+ "}";
}
- protected boolean allowProcessing() {
- return EventUtil.allowProcessing( sourceEvent );
- }
-
/**
* @since 2.0
* @deprecated not part of the API, do not use in application code
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/MouseEvent.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/MouseEvent.java
index 339ca60..1578e8d 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/MouseEvent.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/MouseEvent.java
@@ -72,14 +72,14 @@
*/
public int y;
-// /**
-// * the number times the mouse has been clicked, as defined
-// * by the operating system; 1 for the first click, 2 for the
-// * second click and so on.
-// *
-// * @since 3.3
-// */
-// public int count;
+ /**
+ * the number times the mouse has been clicked, as defined
+ * by the operating system; 1 for the first click, 2 for the
+ * second click and so on.
+ *
+ * @since 2.0
+ */
+ public int count;
/**
* Constructs a new instance of this class based on the
@@ -95,6 +95,7 @@
y = event.y;
button = event.button;
stateMask = event.stateMask;
+ count = event.count;
}
/**
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/PaintEvent.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/PaintEvent.java
index 2c9d4dd..a56c111 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/PaintEvent.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/PaintEvent.java
@@ -11,8 +11,6 @@
*******************************************************************************/
package org.eclipse.swt.events;
-import org.eclipse.rap.rwt.Adaptable;
-import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.widgets.Event;
@@ -26,8 +24,6 @@
*/
public final class PaintEvent extends TypedEvent {
- private static final int[] EVENT_TYPES = { SWT.Paint };
-
/**
* the graphics context to use when painting that is configured to use the
* colors, font and damaged region of the control. It is valid only during the
@@ -78,33 +74,6 @@
}
/**
- * @since 2.0
- * @deprecated not part of the API, do not use in application code
- */
- @Deprecated
- public static boolean hasListener( Adaptable adaptable ) {
- return hasListener( adaptable, EVENT_TYPES );
- }
-
- /**
- * @since 2.0
- * @deprecated not part of the API, do not use in application code
- */
- @Deprecated
- public static void addListener( Adaptable adaptable, PaintListener listener ) {
- addListener( adaptable, EVENT_TYPES, listener );
- }
-
- /**
- * @since 2.0
- * @deprecated not part of the API, do not use in application code
- */
- @Deprecated
- public static void removeListener( Adaptable adaptable, PaintListener listener ) {
- removeListener( adaptable, EVENT_TYPES, listener );
- }
-
- /**
* Returns a string containing a concise, human-readable description of the
* receiver.
*
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/TraverseEvent.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/TraverseEvent.java
index a982921..7641de0 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/TraverseEvent.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/TraverseEvent.java
@@ -11,8 +11,6 @@
******************************************************************************/
package org.eclipse.swt.events;
-import org.eclipse.rap.rwt.Adaptable;
-import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Event;
@@ -90,8 +88,6 @@
private static final long serialVersionUID = 1L;
- private static final int[] EVENT_TYPES = { SWT.Traverse };
-
/**
* The traversal type.
* <p>
@@ -149,30 +145,4 @@
+ "}";
}
- /**
- * @since 2.0
- * @deprecated not part of the API, do not use in application code
- */
- @Deprecated
- public static void addListener( Adaptable adaptable, TraverseListener listener ) {
- addListener( adaptable, EVENT_TYPES, listener );
- }
-
- /**
- * @since 2.0
- * @deprecated not part of the API, do not use in application code
- */
- @Deprecated
- public static void removeListener( Adaptable adaptable, TraverseListener listener ) {
- removeListener( adaptable, EVENT_TYPES, listener );
- }
-
- /**
- * @since 2.0
- * @deprecated not part of the API, do not use in application code
- */
- @Deprecated
- public static boolean hasListener( Adaptable adaptable ) {
- return hasListener( adaptable, EVENT_TYPES );
- }
}
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/TypedEvent.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/TypedEvent.java
index 48879d4..7686ef4 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/TypedEvent.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/events/TypedEvent.java
@@ -11,17 +11,14 @@
******************************************************************************/
package org.eclipse.swt.events;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.rap.rwt.internal.events.RWTEvent;
-import org.eclipse.rap.rwt.internal.lifecycle.CurrentPhase;
-import org.eclipse.rap.rwt.internal.service.ContextProvider;
-import org.eclipse.rap.rwt.lifecycle.PhaseId;
-import org.eclipse.rap.rwt.service.IServiceStore;
+import org.eclipse.rap.rwt.Adaptable;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.internal.SWTEventListener;
+import org.eclipse.swt.internal.SWTEventObject;
+import org.eclipse.swt.internal.events.EventTable;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.TypedListener;
import org.eclipse.swt.widgets.Widget;
@@ -32,14 +29,9 @@
*
* @see org.eclipse.swt.widgets.Event
*/
-public class TypedEvent extends RWTEvent {
+public class TypedEvent extends SWTEventObject {
private static final long serialVersionUID = 1L;
- private static final String ATTR_SCHEDULED_EVENT_LIST
- = TypedEvent.class.getName() + "#scheduledEventList";
-
- protected Event sourceEvent;
-
/**
* the display where the event occurred
*
@@ -69,21 +61,6 @@
public Object data;
/**
- * Constructs a new instance of this class based on the
- * information in the argument.
- *
- * @param event the low level event to initialize the receiver with
- */
- public TypedEvent( Event event ) {
- super( event.widget, event.type );
- display = event.display;
- widget = event.widget;
- data = event.data;
- time = event.time;
- sourceEvent = event;
- }
-
- /**
* Constructs a new instance of this class.
*
* @param source the object that fired the event
@@ -91,80 +68,23 @@
* @since 1.3
*/
public TypedEvent( Object source ) {
- this( source, SWT.None );
+ super( source );
}
/**
- * Constructs a new instance of this class.
+ * Constructs a new instance of this class based on the
+ * information in the argument.
*
- * <p><strong>IMPORTANT:</strong> This method is <em>not</em> part of the RWT
- * public API. It is marked public only so that it can be shared
- * within the packages provided by RWT. It should never be accessed
- * from application code.
- * </p>
+ * @param event the low level event to initialize the receiver with
*/
- public TypedEvent( Object source, int id ) {
- super( source, id );
- widget = ( Widget )source;
- display = widget.getDisplay();
+ public TypedEvent( Event event ) {
+ super( event.widget );
+ this.display = event.display;
+ this.widget = event.widget;
+ this.time = event.time;
+ this.data = event.data;
}
- @Override
- public Object getSource() {
- // [rh] introduced to get rid of discouraged access warning when
- // application code accesses getSource() which is defined in
- // org.eclipse.rwt.internal.events.Event
- return super.getSource();
- }
-
- /**
- * <p><strong>IMPORTANT:</strong> This method is <em>not</em> part of the RWT
- * public API. It is marked public only so that it can be shared
- * within the packages provided by RWT. It should never be accessed
- * from application code.
- * </p>
- */
- public final void processEvent() {
- // TODO: [fappel] In case of session invalidation there's no phase.
- // So no event processing should take place, this situation
- // may improve with the new readAndDispatch mechanism in
- // place.
- PhaseId currentPhase = CurrentPhase.get();
- if( currentPhase != null ) {
- if( PhaseId.PREPARE_UI_ROOT.equals( currentPhase )
- || PhaseId.PROCESS_ACTION.equals( currentPhase ) )
- {
- // TODO [fappel]: changes of the event fields in the filter handler
- // methods should be forwarded to this event...
- sourceEvent.widget.notifyListeners( sourceEvent.type, sourceEvent );
- } else {
- addToScheduledEvents( this );
- }
- }
- }
-
- ///////////////////////////////////////////////
- // Methods to maintain list of scheduled events
-
- private static void addToScheduledEvents( TypedEvent event ) {
- getScheduledEventList().add( event );
- }
-
- @SuppressWarnings("unchecked")
- private static List<TypedEvent> getScheduledEventList() {
- IServiceStore serviceStore = ContextProvider.getServiceStore();
- List<TypedEvent> result
- = ( List<TypedEvent> )serviceStore.getAttribute( ATTR_SCHEDULED_EVENT_LIST );
- if( result == null ) {
- result = new ArrayList<TypedEvent>();
- serviceStore.setAttribute( ATTR_SCHEDULED_EVENT_LIST, result );
- }
- return result;
- }
-
- ///////////////////////////////
- // toString & getName from SWT
-
// this implementation is extended by subclasses
@Override
public String toString() {
@@ -179,4 +99,41 @@
}
return result;
}
+
+ protected static boolean hasListener( Adaptable adaptable, int[] eventTypes ) {
+ boolean result = false;
+ EventTable eventTable = adaptable.getAdapter( EventTable.class );
+ for( int i = 0; !result && i < eventTypes.length; i++ ) {
+ result = eventTable.hooks( eventTypes[ i ] );
+ }
+ return result;
+ }
+
+ protected static void addListener( Adaptable adaptable,
+ int[] eventTypes,
+ SWTEventListener listener )
+ {
+ if( listener == null ) {
+ SWT.error( SWT.ERROR_NULL_ARGUMENT );
+ }
+ TypedListener typedListener = new TypedListener( listener );
+ EventTable eventTable = adaptable.getAdapter( EventTable.class );
+ for( int eventType : eventTypes ) {
+ eventTable.hook( eventType, typedListener );
+ }
+ }
+
+ protected static void removeListener( Adaptable adaptable,
+ int[] eventTypes,
+ SWTEventListener listener )
+ {
+ if( listener == null ) {
+ SWT.error( SWT.ERROR_NULL_ARGUMENT );
+ }
+ EventTable eventTable = adaptable.getAdapter( EventTable.class );
+ for( int eventType : eventTypes ) {
+ eventTable.unhook( eventType, listener );
+ }
+ }
+
}
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Canvas.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Canvas.java
index 9677912..df9f87b 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Canvas.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Canvas.java
@@ -13,7 +13,6 @@
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
-import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Point;
@@ -129,7 +128,11 @@
*/
public void addPaintListener( PaintListener listener ) {
checkWidget();
- PaintEvent.addListener( this, listener );
+ if( listener == null ) {
+ error( SWT.ERROR_NULL_ARGUMENT );
+ }
+ TypedListener typedListener = new TypedListener( listener );
+ addListener( SWT.Paint, typedListener );
}
/**
@@ -152,7 +155,10 @@
*/
public void removePaintListener( PaintListener listener ) {
checkWidget();
- PaintEvent.removeListener( this, listener );
+ if( listener == null ) {
+ error( SWT.ERROR_NULL_ARGUMENT );
+ }
+ removeListener( SWT.Paint, listener );
}
/////////////
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Control.java
index be8b365..94e4cbf 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Control.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Control.java
@@ -16,13 +16,11 @@
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
import org.eclipse.swt.accessibility.Accessible;
-import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.ControlListener;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.DragDetectEvent;
import org.eclipse.swt.events.DragDetectListener;
-import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.GestureListener;
import org.eclipse.swt.events.HelpEvent;
@@ -35,7 +33,6 @@
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.TouchListener;
-import org.eclipse.swt.events.TraverseEvent;
import org.eclipse.swt.events.TraverseListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Cursor;
@@ -1507,7 +1504,12 @@
*/
public void addControlListener( ControlListener listener ) {
checkWidget();
- ControlEvent.addListener( this, listener );
+ if( listener == null ) {
+ error( SWT.ERROR_NULL_ARGUMENT );
+ }
+ TypedListener typedListener = new TypedListener( listener );
+ addListener( SWT.Move, typedListener );
+ addListener( SWT.Resize, typedListener );
}
/**
@@ -1529,7 +1531,11 @@
*/
public void removeControlListener( ControlListener listener ) {
checkWidget();
- ControlEvent.removeListener( this, listener );
+ if( listener == null ) {
+ error( SWT.ERROR_NULL_ARGUMENT );
+ }
+ removeListener( SWT.Move, listener );
+ removeListener( SWT.Resize, listener );
}
/**
@@ -1674,7 +1680,11 @@
*/
public void addTraverseListener( TraverseListener listener ) {
checkWidget();
- TraverseEvent.addListener( this, listener );
+ if( listener == null ) {
+ error( SWT.ERROR_NULL_ARGUMENT );
+ }
+ TypedListener typedListener = new TypedListener( listener );
+ addListener( SWT.Traverse, typedListener );
}
/**
@@ -1698,7 +1708,10 @@
*/
public void removeTraverseListener( TraverseListener listener ) {
checkWidget();
- TraverseEvent.removeListener( this, listener );
+ if( listener == null ) {
+ error( SWT.ERROR_NULL_ARGUMENT );
+ }
+ removeListener( SWT.Traverse, listener );
}
/**
@@ -1722,7 +1735,12 @@
*/
public void addFocusListener( FocusListener listener ) {
checkWidget();
- FocusEvent.addListener( this, listener );
+ if( listener == null ) {
+ error( SWT.ERROR_NULL_ARGUMENT );
+ }
+ TypedListener typedListener = new TypedListener( listener );
+ addListener( SWT.FocusIn, typedListener );
+ addListener( SWT.FocusOut, typedListener );
}
/**
@@ -1744,7 +1762,11 @@
*/
public void removeFocusListener( FocusListener listener ) {
checkWidget();
- FocusEvent.removeListener( this, listener );
+ if( listener == null ) {
+ error( SWT.ERROR_NULL_ARGUMENT );
+ }
+ removeListener( SWT.FocusIn, listener );
+ removeListener( SWT.FocusOut, listener );
}
/**
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Display.java
index 9efa727..d3be1f7 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Display.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Display.java
@@ -212,17 +212,15 @@
private Collection<Control> redrawControls;
private Control focusControl;
private EventTable filterTable;
+ private EventTable eventTable;
private transient Monitor monitor;
private transient IDisplayAdapter displayAdapter;
private WidgetAdapter widgetAdapter;
- private Set<Listener> closeListeners;
- private Set<Listener> disposeListeners;
private Runnable[] disposeList;
private Composite[] layoutDeferred;
private int layoutDeferredCount;
private Widget[] skinList;
private int skinCount;
- private Set<Listener> skinListeners;
private boolean beep;
/* Display Data */
@@ -575,22 +573,10 @@
if( listener == null ) {
error( SWT.ERROR_NULL_ARGUMENT );
}
- if( eventType == SWT.Close ) {
- if( closeListeners == null ) {
- closeListeners = new HashSet<Listener>();
- }
- closeListeners.add( listener );
- } else if( eventType == SWT.Dispose ) {
- if( disposeListeners == null ) {
- disposeListeners = new HashSet<Listener>();
- }
- disposeListeners.add( listener );
- } else if( eventType == SWT.Skin ) {
- if( skinListeners == null ) {
- skinListeners = new HashSet<Listener>();
- }
- skinListeners.add( listener );
+ if( eventTable == null ) {
+ eventTable = new EventTable();
}
+ eventTable.hook( eventType, listener );
}
/**
@@ -620,21 +606,20 @@
if( listener == null ) {
error( SWT.ERROR_NULL_ARGUMENT );
}
- if( eventType == SWT.Close && closeListeners != null ) {
- closeListeners.remove( listener );
- if( closeListeners.size() == 0 ) {
- closeListeners = null;
- }
- } else if ( eventType == SWT.Dispose && disposeListeners != null ) {
- disposeListeners.remove( listener );
- if( disposeListeners.size() == 0 ) {
- disposeListeners = null;
- }
- } else if ( eventType == SWT.Skin && skinListeners != null ) {
- skinListeners.remove( listener );
- if( skinListeners.size() == 0 ) {
- skinListeners = null;
- }
+ if( eventTable != null ) {
+ eventTable.unhook( eventType, listener );
+ }
+ }
+
+ void sendEvent( int eventType, Event event ) {
+ event.display = this;
+ event.type = eventType;
+ if( event.time == 0 ) {
+ event.time = EventUtil.getLastEventTime();
+ }
+ filterEvent( event );
+ if( eventTable != null ) {
+ eventTable.sendEvent( event );
}
}
@@ -685,16 +670,7 @@
public void close() {
checkDevice();
Event event = new Event();
- event.display = this;
- event.type = SWT.Close;
- notifyFilters( event );
- if( closeListeners != null ) {
- Listener[] listeners = new Listener[ closeListeners.size() ];
- closeListeners.toArray( listeners );
- for( int i = 0; i < listeners.length; i++ ) {
- listeners[ i ].handleEvent( event );
- }
- }
+ sendEvent( SWT.Close, event );
if( event.doit ) {
dispose();
}
@@ -710,6 +686,7 @@
scheduler.dispose();
}
filterTable = null;
+ eventTable = null;
}
@Override
@@ -718,22 +695,7 @@
}
private void sendDisposeEvent() {
- Event event = new Event();
- event.display = this;
- event.type = SWT.Dispose;
- notifyFilters( event );
- if( disposeListeners != null ) {
- Listener[] listeners = new Listener[ disposeListeners.size() ];
- disposeListeners.toArray( listeners );
- for( int i = 0; i < listeners.length; i++ ) {
- try {
- listeners[ i ].handleEvent( event );
- } catch( Throwable thr ) {
- String msg = "Exception while executing dispose-listener.";
- ServletLog.log( msg, thr );
- }
- }
- }
+ sendEvent( SWT.Dispose, new Event() );
}
private void disposeShells() {
@@ -1856,16 +1818,7 @@
private void sendSkinEvent( Widget widget ) {
Event event = new Event();
event.widget = widget;
- event.display = this;
- event.type = SWT.Skin;
- notifyFilters( event );
- if( skinListeners != null ) {
- Listener[] listeners = new Listener[ skinListeners.size() ];
- skinListeners.toArray( listeners );
- for( int i = 0; i < listeners.length; i++ ) {
- listeners[ i ].handleEvent( event );
- }
- }
+ sendEvent( SWT.Skin, event );
}
///////////////
@@ -2293,10 +2246,6 @@
return result;
}
- private void notifyFilters( Event event ) {
- filterEvent( event );
- }
-
/////////////////
// Inner classes
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/MenuItem.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/MenuItem.java
index c23af37..353f338 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/MenuItem.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/MenuItem.java
@@ -13,7 +13,6 @@
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
-import org.eclipse.swt.events.ArmEvent;
import org.eclipse.swt.events.ArmListener;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
@@ -506,7 +505,11 @@
*/
public void addArmListener( ArmListener listener ) {
checkWidget();
- ArmEvent.addListener( this, listener );
+ if( listener == null ) {
+ error( SWT.ERROR_NULL_ARGUMENT );
+ }
+ TypedListener typedListener = new TypedListener( listener );
+ addListener( SWT.Arm, typedListener );
}
/**
@@ -529,7 +532,7 @@
*/
public void removeArmListener( ArmListener listener ) {
checkWidget();
- ArmEvent.removeListener( this, listener );
+ removeListener( SWT.Arm, listener );
}
//////////////////
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/TableColumn.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/TableColumn.java
index 10a2cf2..ff2067b 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/TableColumn.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/TableColumn.java
@@ -15,11 +15,13 @@
import org.eclipse.rap.rwt.internal.theme.IThemeAdapter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
-import org.eclipse.swt.events.*;
+import org.eclipse.swt.events.ControlListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.internal.SerializableCompatibility;
-import org.eclipse.swt.internal.widgets.*;
+import org.eclipse.swt.internal.widgets.IColumnAdapter;
import org.eclipse.swt.internal.widgets.tablekit.TableThemeAdapter;
@@ -385,7 +387,12 @@
*/
public void addControlListener( ControlListener listener ) {
checkWidget();
- ControlEvent.addListener( this, listener );
+ if( listener == null ) {
+ error( SWT.ERROR_NULL_ARGUMENT );
+ }
+ TypedListener typedListener = new TypedListener( listener );
+ addListener( SWT.Move, typedListener );
+ addListener( SWT.Resize, typedListener );
}
/**
@@ -407,7 +414,11 @@
*/
public void removeControlListener( ControlListener listener ) {
checkWidget();
- ControlEvent.removeListener( this, listener );
+ if( listener == null ) {
+ error( SWT.ERROR_NULL_ARGUMENT );
+ }
+ removeListener( SWT.Move, listener );
+ removeListener( SWT.Resize, listener );
}
/**
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/TreeColumn.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/TreeColumn.java
index 61ccba4..0db22f6 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/TreeColumn.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/TreeColumn.java
@@ -16,7 +16,6 @@
import org.eclipse.rap.rwt.internal.theme.IThemeAdapter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
-import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.ControlListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
@@ -161,7 +160,12 @@
*/
public void addControlListener( ControlListener listener ) {
checkWidget();
- ControlEvent.addListener( this, listener );
+ if( listener == null ) {
+ error( SWT.ERROR_NULL_ARGUMENT );
+ }
+ TypedListener typedListener = new TypedListener( listener );
+ addListener( SWT.Move, typedListener );
+ addListener( SWT.Resize, typedListener );
}
/**
@@ -393,7 +397,11 @@
*/
public void removeControlListener( ControlListener listener ) {
checkWidget();
- ControlEvent.removeListener( this, listener );
+ if( listener == null ) {
+ error( SWT.ERROR_NULL_ARGUMENT );
+ }
+ removeListener( SWT.Move, listener );
+ removeListener( SWT.Resize, listener );
}
/**
diff --git a/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/menukit/MenuLCAUtil.java b/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/menukit/MenuLCAUtil.java
index 153459b..d079034 100644
--- a/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/menukit/MenuLCAUtil.java
+++ b/bundles/org.eclipse.rap.rwt/widgetkits/org/eclipse/swt/internal/widgets/menukit/MenuLCAUtil.java
@@ -24,7 +24,6 @@
import org.eclipse.rap.rwt.internal.protocol.IClientObject;
import org.eclipse.rap.rwt.lifecycle.WidgetLCAUtil;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ArmEvent;
import org.eclipse.swt.events.MenuEvent;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Menu;
@@ -92,8 +91,8 @@
boolean result = MenuEvent.hasListener( menu );
if( !result ) {
MenuItem[] items = menu.getItems();
- for( int i = 0; i < items.length && !result; i++ ) {
- result = ArmEvent.hasListener( items[ i ] );
+ for( int i = 0; !result && i < items.length && !result; i++ ) {
+ result = items[ i ].isListening( SWT.Arm );
}
}
return result;
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/rap/rwt/internal/events/RWTEvent_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/rap/rwt/internal/events/RWTEvent_Test.java
deleted file mode 100644
index e1b96f6..0000000
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/rap/rwt/internal/events/RWTEvent_Test.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * EclipseSource - initial API and implementation
- ******************************************************************************/
-package org.eclipse.rap.rwt.internal.events;
-
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-import junit.framework.TestCase;
-
-import org.eclipse.rap.rwt.Adaptable;
-import org.eclipse.swt.internal.SWTEventListener;
-import org.eclipse.swt.internal.events.EventTable;
-import org.eclipse.swt.widgets.TypedListener;
-import org.mockito.ArgumentCaptor;
-
-
-public class RWTEvent_Test extends TestCase {
-
- private Adaptable widget;
- private EventTable eventTable;
-
- public void testAddListener() {
- SWTEventListener listener = mock( SWTEventListener.class );
-
- RWTEvent.addListener( widget, new int[] { 1, 2 }, listener );
-
- ArgumentCaptor<TypedListener> captor = ArgumentCaptor.forClass( TypedListener.class );
- verify( eventTable ).hook( eq( 1 ), captor.capture() );
- assertSame( listener, captor.getValue().getEventListener() );
- verify( eventTable ).hook( eq( 2 ), captor.capture() );
- assertSame( listener, captor.getValue().getEventListener() );
- }
-
- public void testAddListenerWithNullListener() {
- try {
- RWTEvent.addListener( widget, new int[ 0 ], null );
- fail();
- } catch( IllegalArgumentException expected ) {
- }
- }
-
- public void testRemoveListener() {
- SWTEventListener listener = mock( SWTEventListener.class );
-
- RWTEvent.removeListener( widget, new int[] { 1, 2 }, listener );
-
- verify( eventTable ).unhook( 1, listener );
- verify( eventTable ).unhook( 2, listener );
- }
-
- public void testRemoveListenerWithNullListener() {
- try {
- RWTEvent.removeListener( widget, new int[ 0 ], null );
- fail();
- } catch( IllegalArgumentException expected ) {
- }
- }
-
- public void testHasListenerWithoutAnyRegisteredListener() {
- boolean hasListener = RWTEvent.hasListener( widget, new int[] { 1, 2 } );
-
- assertFalse( hasListener );
- }
-
- public void testHasListenerWithMatchingRegisteredListener() {
- RWTEvent.addListener( widget, new int[] { 1 }, mock( SWTEventListener.class ) );
-
- boolean hasListener = RWTEvent.hasListener( widget, new int[] { 1, 2 } );
-
- assertTrue( hasListener );
- }
-
- public void testHasListenerWithoutMatchingRegisteredListener() {
- RWTEvent.addListener( widget, new int[] { 1 }, mock( SWTEventListener.class ) );
-
- boolean hasListener = RWTEvent.hasListener( widget, new int[] { 47 } );
-
- assertFalse( hasListener );
- }
-
- @Override
- protected void setUp() throws Exception {
- eventTable = spy( new EventTable() );
- widget = mock( Adaptable.class );
- when( widget.getAdapter( EventTable.class ) ).thenReturn( eventTable );
- }
-}
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/ControlEvent_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/ControlEvent_Test.java
index b3d7ecc..d053f4a 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/ControlEvent_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/ControlEvent_Test.java
@@ -46,6 +46,18 @@
Fixture.tearDown();
}
+ public void testUntypedEventConstructor() throws Exception {
+ Event event = new Event();
+ event.display = display;
+ event.widget = mock( Widget.class );
+ event.time = 1;
+ event.data = new Object();
+
+ ControlEvent controlEvent = new ControlEvent( event );
+
+ EventTestHelper.assertFieldsEqual( controlEvent, event );
+ }
+
public void testResized() {
ControlListener listener = mock( ControlListener.class );
control.addControlListener( listener );
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/DisposeEvent_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/DisposeEvent_Test.java
index 85ce8bf..c6c549f 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/DisposeEvent_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/DisposeEvent_Test.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2002, 2010 Innoopract Informationssysteme GmbH and others.
+ * Copyright (c) 2002, 2012 Innoopract Informationssysteme GmbH and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -11,75 +11,26 @@
******************************************************************************/
package org.eclipse.swt.events;
+import static org.mockito.Mockito.mock;
import junit.framework.TestCase;
-import org.eclipse.rap.rwt.lifecycle.PhaseId;
-import org.eclipse.rap.rwt.testfixture.Fixture;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Widget;
public class DisposeEvent_Test extends TestCase {
- private static final String WIDGET_DISPOSED = "widgetDiposed|";
-
- private String log;
- private Display display;
- private Composite shell;
-
- protected void setUp() throws Exception {
- Fixture.setUp();
- Fixture.fakePhase( PhaseId.PROCESS_ACTION );
- log = "";
- display = new Display();
- shell = new Shell( display );
- }
-
- protected void tearDown() throws Exception {
- Fixture.tearDown();
- }
-
- public void testAddListener() {
- DisposeListener listener = new DisposeListener() {
- public void widgetDisposed( DisposeEvent event ) {
- log += WIDGET_DISPOSED;
- }
- };
- shell.addDisposeListener( listener );
-
- shell.notifyListeners( SWT.Dispose, new Event() );
-
- assertEquals( WIDGET_DISPOSED, log );
- }
-
- public void testRemoveListener() {
- DisposeListener listener = new DisposeListener() {
- public void widgetDisposed( DisposeEvent event ) {
- log += WIDGET_DISPOSED;
- }
- };
- shell.addDisposeListener( listener );
-
- shell.removeDisposeListener( listener );
-
- assertEquals( "", log );
- }
-
- // bug 328043
- public void testUntypedEvent() {
- DisposeListener listener = new DisposeListener() {
- public void widgetDisposed( DisposeEvent event ) {
- log += WIDGET_DISPOSED;
- }
- };
- shell.addDisposeListener( listener );
-
+ public void testUntypedEventConstructor() {
Event event = new Event();
- event.widget = shell;
- event.type = SWT.Dispose;
- event.display = display;
- shell.notifyListeners( SWT.Dispose, event );
-
- assertEquals( WIDGET_DISPOSED, log );
+ event.display = mock( Display.class );
+ event.widget = mock( Widget.class );
+ event.time = 7;
+ event.data = new Object();
+
+ DisposeEvent disposeEvent = new DisposeEvent( event );
+
+ EventTestHelper.assertFieldsEqual( disposeEvent, event );
}
+
}
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/FocusEvent_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/FocusEvent_Test.java
index 1249ad1..f1ba0e2 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/FocusEvent_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/FocusEvent_Test.java
@@ -13,25 +13,29 @@
import static org.eclipse.rap.rwt.internal.lifecycle.DisplayUtil.getId;
import static org.eclipse.rap.rwt.lifecycle.WidgetUtil.getId;
+import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
-
-import java.util.ArrayList;
-import java.util.List;
-
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
import junit.framework.TestCase;
import org.eclipse.rap.rwt.lifecycle.PhaseId;
import org.eclipse.rap.rwt.testfixture.Fixture;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Widget;
+import org.mockito.ArgumentCaptor;
public class FocusEvent_Test extends TestCase {
private Display display;
private Shell shell;
- private List<FocusEvent> events;
- private FocusAdapter listener;
+ private FocusListener focusListener;
@Override
protected void setUp() throws Exception {
@@ -39,17 +43,7 @@
display = new Display();
shell = new Shell( display );
shell.open();
- events = new ArrayList<FocusEvent>();
- listener = new FocusAdapter() {
- @Override
- public void focusLost( FocusEvent event ) {
- events.add( event );
- }
- @Override
- public void focusGained( FocusEvent event ) {
- events.add( event );
- }
- };
+ focusListener = mock( FocusListener.class );
Fixture.fakeNewRequest( display );
Fixture.fakePhase( PhaseId.PROCESS_ACTION );
}
@@ -59,7 +53,7 @@
Fixture.tearDown();
}
- public void testUntypedEventConstructor() throws Exception {
+ public void testUntypedEventConstructor() {
Event event = new Event();
event.display = display;
event.widget = mock( Widget.class );
@@ -74,49 +68,47 @@
Button unfocusControl = new Button( shell, SWT.PUSH );
unfocusControl.setText( "unfocusControl" );
unfocusControl.setFocus();
- unfocusControl.addFocusListener( listener );
+ unfocusControl.addFocusListener( focusListener );
Button focusControl = new Button( shell, SWT.PUSH );
focusControl.setText( "focusControl" );
Fixture.fakeSetParameter( getId( display ), "focusControl", getId( focusControl ) );
Fixture.readDataAndProcessAction( display );
- assertEquals( 1, events.size() );
- FocusEvent event = events.get( 0 );
- assertEquals( SWT.FocusOut, event.getID() );
- assertSame( unfocusControl, event.getSource() );
+ verify( focusListener, never() ).focusGained( any( FocusEvent.class ) );
+ ArgumentCaptor<FocusEvent> captor = ArgumentCaptor.forClass( FocusEvent.class );
+ verify( focusListener ).focusLost( captor.capture() );
+ assertEquals( unfocusControl, captor.getValue().widget );
}
public void testFocusGained() {
Control control = new Button( shell, SWT.PUSH );
- control.addFocusListener( listener );
+ control.addFocusListener( focusListener );
Fixture.fakeSetParameter( getId( display ), "focusControl", getId( control ) );
Fixture.readDataAndProcessAction( display );
- assertEquals( 1, events.size() );
- FocusEvent event = events.get( 0 );
- assertEquals( SWT.FocusIn, event.getID() );
- assertSame( control, event.getSource() );
+ verify( focusListener, never() ).focusLost( any( FocusEvent.class ) );
+ ArgumentCaptor<FocusEvent> captor = ArgumentCaptor.forClass( FocusEvent.class );
+ verify( focusListener ).focusGained( captor.capture() );
+ assertEquals( control, captor.getValue().widget );
}
public void testFocusGainedLostOrder() {
Button button1 = new Button( shell, SWT.PUSH );
- button1.addFocusListener( listener );
Button button2 = new Button( shell, SWT.PUSH );
- button2.addFocusListener( listener );
button1.setFocus();
- events.clear();
+ button1.addFocusListener( focusListener );
+ button2.addFocusListener( focusListener );
Fixture.fakeSetParameter( getId( display ), "focusControl", getId( button2 ) );
Fixture.readDataAndProcessAction( display );
- assertEquals( 2, events.size() );
- FocusEvent event1 = events.get( 0 );
- assertEquals( SWT.FocusOut, event1.getID() );
- assertSame( button1, event1.widget );
- FocusEvent event2 = events.get( 1 );
- assertEquals( SWT.FocusIn, event2.getID() );
- assertSame( button2, event2.widget );
+ ArgumentCaptor<FocusEvent> captor1 = ArgumentCaptor.forClass( FocusEvent.class );
+ verify( focusListener ).focusLost( captor1.capture() );
+ assertEquals( button1, captor1.getValue().widget );
+ ArgumentCaptor<FocusEvent> captor2 = ArgumentCaptor.forClass( FocusEvent.class );
+ verify( focusListener ).focusGained( captor2.capture() );
+ assertEquals( button2, captor2.getValue().widget );
}
}
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/KeyEvent_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/KeyEvent_Test.java
index f1708c9..1e48891 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/KeyEvent_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/KeyEvent_Test.java
@@ -11,9 +11,9 @@
package org.eclipse.swt.events;
import static org.eclipse.rap.rwt.lifecycle.WidgetUtil.getId;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
import java.util.HashMap;
import java.util.LinkedList;
@@ -23,11 +23,15 @@
import junit.framework.TestCase;
import org.eclipse.rap.rwt.internal.protocol.ClientMessageConst;
-import org.eclipse.rap.rwt.lifecycle.PhaseId;
import org.eclipse.rap.rwt.testfixture.Fixture;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.*;
-import org.mockito.ArgumentCaptor;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.swt.widgets.Widget;
+import org.mockito.InOrder;
public class KeyEvent_Test extends TestCase {
@@ -50,99 +54,74 @@
Fixture.tearDown();
}
- public void testCopyFieldsFromUntypedEvent() {
- Button button = new Button( shell, SWT.PUSH );
- KeyListener listener = mock( KeyListener.class );
- button.addKeyListener( listener );
- Object data = new Object();
+ public void testUntypedEventConstructor() throws Exception {
Event event = new Event();
+ event.display = display;
+ event.widget = mock( Widget.class );
+ event.time = 4325;
event.stateMask = 23;
event.keyCode = 42;
event.character = 'f';
event.doit = true;
- event.data = data;
-
- Fixture.fakePhase( PhaseId.PROCESS_ACTION );
- button.notifyListeners( SWT.KeyDown, event );
-
- ArgumentCaptor<KeyEvent> captor = ArgumentCaptor.forClass( KeyEvent.class );
- verify( listener, times( 1 ) ).keyPressed( captor.capture() );
- KeyEvent keyEvent = captor.getValue();
- assertSame( button, keyEvent.getSource() );
- assertSame( button, keyEvent.widget );
- assertSame( display, keyEvent.display );
- assertSame( data, keyEvent.data );
- assertEquals( 23, keyEvent.stateMask );
- assertEquals( 42, keyEvent.keyCode );
- assertEquals( 'f', keyEvent.character );
- assertEquals( true, keyEvent.doit );
- assertEquals( SWT.KeyDown, keyEvent.getID() );
+ event.data = new Object();
+
+ KeyEvent keyEvent = new KeyEvent( event );
+
+ EventTestHelper.assertFieldsEqual( keyEvent, event );
}
public void testKeySelectionEventsOrder() {
+ KeyListener keyListener = mock( KeyListener.class );
+ SelectionListener selectionListener = mock( SelectionListener.class );
Tree tree = createTreeWithKeyListener();
- tree.addSelectionListener( new SelectionListener() {
- public void widgetSelected( SelectionEvent event ) {
- events.add( event );
- }
- public void widgetDefaultSelected( SelectionEvent event ) {
- events.add( event );
- }
- } );
Fixture.fakeNewRequest( display );
fakeKeyDownRequest( tree, 65, 65 );
fakeSelectionRequest( tree, tree.getItem( 1 ) );
- events.clear();
+ tree.addKeyListener( keyListener );
+ tree.addSelectionListener( selectionListener );
Fixture.readDataAndProcessAction( display );
- assertEquals( 3, events.size() );
- assertEquals( SWT.KeyDown, ( ( TypedEvent )events.get( 0 ) ).getID() );
- assertEquals( SWT.Selection, ( ( TypedEvent )events.get( 1 ) ).getID() );
- assertEquals( SWT.KeyUp, ( ( TypedEvent )events.get( 2 ) ).getID() );
+ InOrder inOrder = inOrder( keyListener, selectionListener );
+ inOrder.verify( keyListener ).keyPressed( any( KeyEvent.class ) );
+ inOrder.verify( selectionListener ).widgetSelected( any( SelectionEvent.class ) );
+ inOrder.verify( keyListener ).keyReleased( any( KeyEvent.class ) );
}
public void testKeyTreeEventsOrder() {
+ KeyListener keyListener = mock( KeyListener.class );
+ TreeListener treeListener = mock( TreeListener.class );
Tree tree = createTreeWithKeyListener();
- tree.addTreeListener( new TreeListener() {
- public void treeExpanded( TreeEvent event ) {
- events.add( event );
- }
- public void treeCollapsed( TreeEvent event ) {
- events.add( event );
- }
- } );
Fixture.fakeNewRequest( display );
fakeKeyDownRequest( tree, 65, 65 );
fakeTreeRequest( tree.getItem( 1 ) );
- events.clear();
+ tree.addKeyListener( keyListener );
+ tree.addTreeListener( treeListener );
Fixture.readDataAndProcessAction( display );
- assertEquals( 3, events.size() );
- assertEquals( SWT.KeyDown, ( ( TypedEvent )events.get( 0 ) ).getID() );
- assertEquals( SWT.Expand, ( ( TypedEvent )events.get( 1 ) ).getID() );
- assertEquals( SWT.KeyUp, ( ( TypedEvent )events.get( 2 ) ).getID() );
+ InOrder inOrder = inOrder( keyListener, treeListener );
+ inOrder.verify( keyListener ).keyPressed( any( KeyEvent.class ) );
+ inOrder.verify( treeListener ).treeExpanded( any( TreeEvent.class ) );
+ inOrder.verify( keyListener ).keyReleased( any( KeyEvent.class ) );
}
public void testKeyHelpEventsOrder() {
+ KeyListener keyListener = mock( KeyListener.class );
+ HelpListener helpListener = mock( HelpListener.class );
Tree tree = createTreeWithKeyListener();
- tree.addHelpListener( new HelpListener() {
- public void helpRequested( HelpEvent event ) {
- events.add( event );
- }
- } );
Fixture.fakeNewRequest( display );
fakeKeyDownRequest( tree, 65, 65 );
fakeHelpRequest( tree );
- events.clear();
+ tree.addKeyListener( keyListener );
+ tree.addHelpListener( helpListener );
Fixture.readDataAndProcessAction( display );
- assertEquals( 3, events.size() );
- assertEquals( SWT.KeyDown, ( ( TypedEvent )events.get( 0 ) ).getID() );
- assertEquals( SWT.Help, ( ( TypedEvent )events.get( 1 ) ).getID() );
- assertEquals( SWT.KeyUp, ( ( TypedEvent )events.get( 2 ) ).getID() );
+ InOrder inOrder = inOrder( keyListener, helpListener );
+ inOrder.verify( keyListener ).keyPressed( any( KeyEvent.class ) );
+ inOrder.verify( helpListener ).helpRequested( any( HelpEvent.class ) );
+ inOrder.verify( keyListener ).keyReleased( any( KeyEvent.class ) );
}
private Tree createTreeWithKeyListener() {
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/MenuDetectEvent_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/MenuDetectEvent_Test.java
index 5d7fe8e..49ef28c 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/MenuDetectEvent_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/MenuDetectEvent_Test.java
@@ -10,57 +10,43 @@
******************************************************************************/
package org.eclipse.swt.events;
-import java.util.ArrayList;
-import java.util.List;
-
+import static org.mockito.Mockito.mock;
import junit.framework.TestCase;
import org.eclipse.rap.rwt.lifecycle.PhaseId;
import org.eclipse.rap.rwt.testfixture.Fixture;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Widget;
public class MenuDetectEvent_Test extends TestCase {
private Display display;
- private Shell shell;
protected void setUp() throws Exception {
Fixture.setUp();
Fixture.fakePhase( PhaseId.PROCESS_ACTION );
display = new Display();
- shell = new Shell( display );
}
protected void tearDown() throws Exception {
Fixture.tearDown();
}
- public void testCopyFieldsFromUntypedEvent() {
- final List<MenuDetectEvent> log = new ArrayList<MenuDetectEvent>();
- Button button = new Button( shell, SWT.PUSH );
- button.addMenuDetectListener( new MenuDetectListener() {
- public void menuDetected( MenuDetectEvent event ) {
- log.add( event );
- }
- } );
- Object data = new Object();
+ public void testUntypedEventConstructor() throws Exception {
Event event = new Event();
+ event.display = display;
+ event.widget = mock( Widget.class );
+ event.time = 4325;
event.x = 10;
event.y = 20;
event.doit = true;
- event.data = data;
- Fixture.fakePhase( PhaseId.PROCESS_ACTION );
- button.notifyListeners( SWT.MenuDetect, event );
- MenuDetectEvent menuDetectEvent = log.get( 0 );
- assertSame( button, menuDetectEvent.getSource() );
- assertSame( button, menuDetectEvent.widget );
- assertSame( display, menuDetectEvent.display );
- assertSame( data, menuDetectEvent.data );
- assertEquals( event.x, menuDetectEvent.x );
- assertEquals( event.y, menuDetectEvent.y );
- assertEquals( event.doit, menuDetectEvent.doit );
- assertEquals( SWT.MenuDetect, menuDetectEvent.getID() );
+ event.data = new Object();
+
+ MenuDetectEvent menuDeteectEvent = new MenuDetectEvent( event );
+
+ EventTestHelper.assertFieldsEqual( menuDeteectEvent, event );
}
+
}
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/MouseEvent_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/MouseEvent_Test.java
index 43a843d..0943d0b 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/MouseEvent_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/MouseEvent_Test.java
@@ -13,6 +13,7 @@
import static org.eclipse.rap.rwt.lifecycle.WidgetUtil.getId;
import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@@ -37,6 +38,8 @@
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Widget;
+import org.mockito.ArgumentCaptor;
+import org.mockito.InOrder;
public class MouseEvent_Test extends TestCase {
@@ -95,6 +98,7 @@
event.x = 10;
event.y = 20;
event.stateMask = 23;
+ event.count = 8;
MouseEvent mouseEvent = new MouseEvent( event );
@@ -156,66 +160,81 @@
}
public void testTypedMouseEventOrderWithClick() {
+ MouseListener mouseListener = mock( MouseListener.class );
shell.setLocation( 100, 100 );
shell.open();
- shell.addMouseListener( new LoggingMouseListener( events ) );
+ shell.addMouseListener( mouseListener );
int eventX = shell.getLocation().x + shell.getClientArea().x + 1;
int eventY = shell.getLocation().y + shell.getClientArea().y + 1;
+
// Simulate request that sends a mouseDown + mouseUp sequence
Fixture.fakeNewRequest( display );
fakeMouseDownRequest( shell, eventX, eventY );
fakeMouseUpRequest( shell, eventX, eventY );
Fixture.readDataAndProcessAction( display );
- assertEquals( 2, events.size() );
- MouseEvent mouseDown = ( ( MouseEvent )events.get( 0 ) );
- assertEquals( SWT.MouseDown, mouseDown.getID() );
+
+ InOrder inOrder = inOrder( mouseListener );
+ ArgumentCaptor<MouseEvent> downCaptor = ArgumentCaptor.forClass( MouseEvent.class );
+ inOrder.verify( mouseListener ).mouseDown( downCaptor.capture() );
+ MouseEvent mouseDown = downCaptor.getValue();
assertSame( shell, mouseDown.widget );
assertEquals( 1, mouseDown.button );
assertEquals( 15, mouseDown.x );
assertEquals( 53, mouseDown.y );
- MouseEvent mouseUp = ( ( MouseEvent )events.get( 1 ) );
- assertEquals( SWT.MouseUp, mouseUp.getID() );
+ assertEquals( 1, mouseDown.count );
+ ArgumentCaptor<MouseEvent> upCaptor = ArgumentCaptor.forClass( MouseEvent.class );
+ inOrder.verify( mouseListener ).mouseUp( upCaptor.capture() );
+ MouseEvent mouseUp = upCaptor.getValue();
assertSame( shell, mouseUp.widget );
assertEquals( 1, mouseUp.button );
assertEquals( 15, mouseUp.x );
assertEquals( 53, mouseUp.y );
assertTrue( ( mouseUp.stateMask & SWT.BUTTON1 ) != 0 );
+ assertEquals( 1, mouseUp.count );
}
public void testTypedMouseEventOrderWithDoubleClick() {
+ MouseListener mouseListener = mock( MouseListener.class );
shell.setLocation( 100, 100 );
shell.open();
- shell.addMouseListener( new LoggingMouseListener( events ) );
+ shell.addMouseListener( mouseListener );
int eventX = shell.getLocation().x + shell.getClientArea().x + 1;
int eventY = shell.getLocation().y + shell.getClientArea().y + 1;
+
// Simulate request that sends a mouseDown + mouseUp + dblClick sequence
Fixture.fakeNewRequest( display );
fakeMouseDownRequest( shell, eventX, eventY );
fakeMouseUpRequest( shell, eventX, eventY );
fakeMouseDoubleClickRequest( shell, eventX, eventY );
Fixture.readDataAndProcessAction( display );
- assertEquals( 3, events.size() );
- MouseEvent mouseDown = ( ( MouseEvent )events.get( 0 ) );
- assertEquals( SWT.MouseDown, mouseDown.getID() );
+
+ InOrder inOrder = inOrder( mouseListener );
+ ArgumentCaptor<MouseEvent> downCaptor = ArgumentCaptor.forClass( MouseEvent.class );
+ inOrder.verify( mouseListener ).mouseDown( downCaptor.capture() );
+ MouseEvent mouseDown = downCaptor.getValue();
assertSame( shell, mouseDown.widget );
assertEquals( 1, mouseDown.button );
assertEquals( 15, mouseDown.x );
assertEquals( 53, mouseDown.y );
- assertTrue( ( mouseDown.stateMask & SWT.BUTTON1 ) != 0 );
- MouseEvent mouseDoubleClick = ( ( MouseEvent )events.get( 1 ) );
- assertEquals( SWT.MouseDoubleClick, mouseDoubleClick.getID() );
+ assertEquals( 2, mouseDown.count );
+ ArgumentCaptor<MouseEvent> doubleClickCaptor = ArgumentCaptor.forClass( MouseEvent.class );
+ inOrder.verify( mouseListener ).mouseDoubleClick( doubleClickCaptor.capture() );
+ MouseEvent mouseDoubleClick = doubleClickCaptor.getValue();
assertSame( shell, mouseDoubleClick.widget );
assertEquals( 1, mouseDoubleClick.button );
assertEquals( 15, mouseDoubleClick.x );
assertEquals( 53, mouseDoubleClick.y );
assertTrue( ( mouseDoubleClick.stateMask & SWT.BUTTON1 ) != 0 );
- MouseEvent mouseUp = ( ( MouseEvent )events.get( 2 ) );
- assertEquals( SWT.MouseUp, mouseUp.getID() );
+ assertEquals( 2, mouseDoubleClick.count );
+ ArgumentCaptor<MouseEvent> upCaptor = ArgumentCaptor.forClass( MouseEvent.class );
+ inOrder.verify( mouseListener ).mouseUp( upCaptor.capture() );
+ MouseEvent mouseUp = upCaptor.getValue();
assertSame( shell, mouseUp.widget );
assertEquals( 1, mouseUp.button );
assertEquals( 15, mouseUp.x );
assertEquals( 53, mouseUp.y );
assertTrue( ( mouseUp.stateMask & SWT.BUTTON1 ) != 0 );
+ assertEquals( 2, mouseUp.count );
}
public void testUntypedMouseEventOrderWithClick() {
@@ -324,50 +343,43 @@
}
public void testMouseSelectionEventsOrder() {
+ MouseListener mouseListener = mock( MouseListener.class );
+ SelectionListener selectionListener = mock( SelectionListener.class );
Table table = createTableWithMouseListener();
- table.addSelectionListener( new SelectionListener() {
- public void widgetSelected( SelectionEvent event ) {
- events.add( event );
- }
- public void widgetDefaultSelected( SelectionEvent event ) {
- events.add( event );
- }
- } );
Fixture.fakeNewRequest( display );
fakeMouseDownRequest( table, 30, 50 );
fakeMouseDoubleClickRequest( table, 30, 50 );
fakeMouseUpRequest( table, 30, 50 );
fakeSelectionRequest( table, table.getItem( 1 ) );
- events.clear();
+ table.addMouseListener( mouseListener );
+ table.addSelectionListener( selectionListener );
Fixture.readDataAndProcessAction( display );
- assertEquals( 4, events.size() );
- assertEquals( SWT.MouseDown, ( ( TypedEvent )events.get( 0 ) ).getID() );
- assertEquals( SWT.MouseDoubleClick, ( ( TypedEvent )events.get( 1 ) ).getID() );
- assertEquals( SWT.Selection, ( ( TypedEvent )events.get( 2 ) ).getID() );
- assertEquals( SWT.MouseUp, ( ( TypedEvent )events.get( 3 ) ).getID() );
+ InOrder inOrder = inOrder( selectionListener, mouseListener );
+ inOrder.verify( mouseListener ).mouseDown( any( MouseEvent.class ) );
+ inOrder.verify( mouseListener ).mouseDoubleClick( any( MouseEvent.class ) );
+ inOrder.verify( selectionListener ).widgetSelected( any( SelectionEvent.class ) );
+ inOrder.verify( mouseListener ).mouseUp( any( MouseEvent.class ) );
}
public void testMouseMenuDetectEventsOrder() {
+ MouseListener mouseListener = mock( MouseListener.class );
+ MenuDetectListener menuDetectListener = mock( MenuDetectListener.class );
Table table = createTableWithMouseListener();
- table.addMenuDetectListener( new MenuDetectListener() {
- public void menuDetected( MenuDetectEvent event ) {
- events.add( event );
- }
- } );
Fixture.fakeNewRequest( display );
fakeMouseDownRequest( table, 30, 50 );
fakeMouseUpRequest( table, 30, 50 );
fakeMenuDetectRequest( table, 30, 50 );
- events.clear();
+ table.addMouseListener( mouseListener );
+ table.addMenuDetectListener( menuDetectListener );
Fixture.readDataAndProcessAction( display );
- assertEquals( 3, events.size() );
- assertEquals( SWT.MouseDown, ( ( TypedEvent )events.get( 0 ) ).getID() );
- assertEquals( SWT.MenuDetect, ( ( TypedEvent )events.get( 1 ) ).getID() );
- assertEquals( SWT.MouseUp, ( ( TypedEvent )events.get( 2 ) ).getID() );
+ InOrder inOrder = inOrder( menuDetectListener, mouseListener );
+ inOrder.verify( mouseListener ).mouseDown( any( MouseEvent.class ) );
+ inOrder.verify( menuDetectListener ).menuDetected( any( MenuDetectEvent.class ) );
+ inOrder.verify( mouseListener ).mouseUp( any( MouseEvent.class ) );
}
private Table createTableWithMouseListener() {
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/PaintEvent_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/PaintEvent_Test.java
new file mode 100644
index 0000000..fbcaa78
--- /dev/null
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/PaintEvent_Test.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2012 EclipseSource and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * EclipseSource - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.swt.events;
+
+import static org.mockito.Mockito.mock;
+import junit.framework.TestCase;
+
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Widget;
+
+
+public class PaintEvent_Test extends TestCase {
+
+ public void testUntypedEventConstructor() throws Exception {
+ Event event = new Event();
+ event.display = mock( Display.class );
+ event.widget = mock( Widget.class );
+ event.time = 321;
+ event.gc = mock( GC.class );
+ event.x = 3;
+ event.y = 4;
+ event.width = 5;
+ event.height = 6;
+ event.count = 99;
+
+ PaintEvent paintEvent = new PaintEvent( event );
+
+ EventTestHelper.assertFieldsEqual( paintEvent, event );
+ }
+
+}
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/TreeEvent_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/TreeEvent_Test.java
index feced56..764a383 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/TreeEvent_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/TreeEvent_Test.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2002, 2008 Innoopract Informationssysteme GmbH and others.
+ * Copyright (c) 2002, 2012 Innoopract Informationssysteme GmbH and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -11,49 +11,25 @@
******************************************************************************/
package org.eclipse.swt.events;
+import static org.mockito.Mockito.mock;
import junit.framework.TestCase;
-import org.eclipse.rap.rwt.lifecycle.PhaseId;
-import org.eclipse.rap.rwt.testfixture.Fixture;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Widget;
public class TreeEvent_Test extends TestCase {
- private static final String TREE_EXPANDED = "treeExpanded";
- private static final String TREE_COLLAPSED = "treeCollapsed";
-
- private String log = "";
- private Display display;
-
- protected void setUp() throws Exception {
- Fixture.setUp();
- Fixture.fakePhase( PhaseId.PROCESS_ACTION );
- display = new Display();
+ public void testUntypedEventConstructor() {
+ Event event = new Event();
+ event.display = mock( Display.class );
+ event.widget = mock( Widget.class );
+ event.time = 7;
+ event.data = new Object();
+
+ TreeEvent treeEvent = new TreeEvent( event );
+
+ EventTestHelper.assertFieldsEqual( treeEvent, event );
}
- protected void tearDown() throws Exception {
- Fixture.tearDown();
- }
-
- public void testAddRemoveListener() {
- TreeListener listener = new TreeListener() {
- public void treeCollapsed( TreeEvent e ) {
- log += TREE_COLLAPSED;
- }
- public void treeExpanded( TreeEvent e ) {
- log += TREE_EXPANDED;
- }
- };
- Shell shell = new Shell( display, SWT.NONE );
- Tree tree = new Tree( shell, SWT.NONE );
- tree.addTreeListener( listener );
- log = "";
- tree.notifyListeners( SWT.Collapse, new Event() );
- assertEquals( TREE_COLLAPSED, log );
-
- log = "";
- tree.notifyListeners( SWT.Expand, new Event() );
- assertEquals( TREE_EXPANDED, log );
- }
}
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/TypedEvent_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/TypedEvent_Test.java
index bad222b..16a3fdf 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/TypedEvent_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/events/TypedEvent_Test.java
@@ -81,6 +81,7 @@
TestTypedEvent typedEvent = new TestTypedEvent( event );
+ assertSame( event.widget, typedEvent.getSource() );
EventTestHelper.assertFieldsEqual( typedEvent, event );
}
@@ -151,22 +152,10 @@
public void testSourceConstructor() {
TypedEvent event = new TypedEvent( shell );
- assertSame( shell, event.widget );
- assertSame( shell.getDisplay(), event.display );
- }
-
- public void testEventConstructor() {
- Event event = new Event();
- event.widget = shell;
- event.display = shell.getDisplay();
- event.data = new Object();
- TypedEvent typedEvent = new TypedEvent( event );
-
- assertSame( event.widget, typedEvent.getSource() );
- assertSame( event.widget, typedEvent.widget );
- assertSame( event.display, typedEvent.display );
- assertSame( event.data, typedEvent.data );
+ assertSame( shell, event.getSource() );
+ assertNull( event.widget );
+ assertNull( event.display );
}
public void testEventConstructorWithNullWidget() {
@@ -186,14 +175,6 @@
}
}
- public void testSourceIdConstructorWithNullWidget() {
- try {
- new TypedEvent( null, SWT.Arm );
- fail();
- } catch( IllegalArgumentException expected ) {
- }
- }
-
private static void fakeMouseDownRequest( Widget widget, int x, int y ) {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put( ClientMessageConst.EVENT_PARAM_BUTTON, Integer.valueOf( 1 ) );
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/events/EventLCAUtil_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/events/EventLCAUtil_Test.java
index 2b86b5d..cbbc993 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/events/EventLCAUtil_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/events/EventLCAUtil_Test.java
@@ -12,7 +12,9 @@
import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_WIDGET_SELECTED;
import static org.eclipse.rap.rwt.lifecycle.WidgetUtil.getId;
+import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -21,12 +23,15 @@
import junit.framework.TestCase;
+import org.eclipse.rap.rwt.lifecycle.PhaseId;
import org.eclipse.rap.rwt.testfixture.Fixture;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Scrollable;
import org.eclipse.swt.widgets.Shell;
import org.mockito.ArgumentCaptor;
@@ -42,6 +47,7 @@
display = new Display();
shell = new Shell( display );
Fixture.fakeNewRequest( display );
+ Fixture.fakePhase( PhaseId.PROCESS_ACTION );
}
@Override
@@ -143,7 +149,55 @@
assertTrue( ( button & SWT.BUTTON5 ) != 0 );
}
- public void testProcessScrollBarSelection() {
- fail( "tests mising" );
+ public void testProcessVerticalScrollBarSelection() {
+ SelectionListener listener = mock( SelectionListener.class );
+ Scrollable scrollable = createScrollable( listener );
+
+ simulateScrollbarSelected( scrollable, "vertical", Boolean.TRUE );
+ EventLCAUtil.processScrollBarSelection( scrollable );
+
+ verify( listener ).widgetSelected( any( SelectionEvent.class ) );
+ verify( listener, never() ).widgetDefaultSelected( any( SelectionEvent.class ) );
+ }
+
+ public void testProcessHorizontalScrollBarSelection() {
+ SelectionListener listener = mock( SelectionListener.class );
+ Scrollable scrollable = createScrollable( listener );
+
+ simulateScrollbarSelected( scrollable, "horizontal", Boolean.TRUE );
+ EventLCAUtil.processScrollBarSelection( scrollable );
+
+ verify( listener ).widgetSelected( any( SelectionEvent.class ) );
+ verify( listener, never() ).widgetDefaultSelected( any( SelectionEvent.class ) );
+ }
+
+ public void testProcessVerticalAndHorizontalScrollBarSelection() {
+ SelectionListener listener = mock( SelectionListener.class );
+ Scrollable scrollable = createScrollable( listener );
+
+ Map<String, Object> parameters = new HashMap<String, Object>();
+ parameters.put( "vertical", Boolean.TRUE );
+ parameters.put( "horizontal", Boolean.TRUE );
+ Fixture.fakeNotifyOperation( getId( scrollable ), "scrollBarSelected", parameters );
+ EventLCAUtil.processScrollBarSelection( scrollable );
+
+ verify( listener, times( 2 ) ).widgetSelected( any( SelectionEvent.class ) );
+ verify( listener, never() ).widgetDefaultSelected( any( SelectionEvent.class ) );
+ }
+
+ private Scrollable createScrollable( SelectionListener listener ) {
+ Scrollable result = new ScrolledComposite( shell, SWT.H_SCROLL | SWT.V_SCROLL );
+ result.getVerticalBar().addSelectionListener( listener );
+ result.getHorizontalBar().addSelectionListener( listener );
+ return result;
+ }
+
+ private static void simulateScrollbarSelected( Scrollable scrollable,
+ String paramKey,
+ Object paramValue )
+ {
+ Map<String, Object> parameters = new HashMap<String, Object>();
+ parameters.put( paramKey, paramValue );
+ Fixture.fakeNotifyOperation( getId( scrollable ), "scrollBarSelected", parameters );
}
}
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/Decorator_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/Decorator_Test.java
index ddebd22..2f30245 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/Decorator_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/Decorator_Test.java
@@ -16,11 +16,14 @@
import org.eclipse.rap.rwt.lifecycle.PhaseId;
import org.eclipse.rap.rwt.testfixture.Fixture;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
@SuppressWarnings("deprecation")
// TODO [rh] rename to ControlDecorator_Test
@@ -43,7 +46,8 @@
assertEquals( 0, decoration.getMarginWidth() );
assertFalse( decoration.isVisible() );
assertEquals( new Rectangle( 0, 0, 0, 0 ), decoration.getBounds() );
- assertFalse( FocusEvent.hasListener( control ) );
+ assertFalse( control.isListening( SWT.FocusIn ) );
+ assertFalse( control.isListening( SWT.FocusOut ) );
assertEquals( 1, Decorator.getDecorators( control ).length );
decoration = new ControlDecorator( control, SWT.LEFT, shell );
@@ -110,28 +114,41 @@
assertEquals( 5, decoration.getMarginWidth() );
}
- public void testShowOnlyOnFocus() {
+ public void testSetShowOnlyOnFocusToTrue() {
Composite composite = new Composite( shell, SWT.NONE );
Control control = new Button( composite, SWT.PUSH );
ControlDecorator decoration = new ControlDecorator( control, SWT.RIGHT, null );
- assertFalse( decoration.getShowOnlyOnFocus() );
- assertFalse( FocusEvent.hasListener( control ) );
+
decoration.setShowOnlyOnFocus( true );
+
assertTrue( decoration.getShowOnlyOnFocus() );
- assertTrue( FocusEvent.hasListener( control ) );
- decoration.setShowOnlyOnFocus( false );
- assertFalse( decoration.getShowOnlyOnFocus() );
- assertFalse( FocusEvent.hasListener( control ) );
+ assertTrue( control.isListening( SWT.FocusIn ) );
+ assertTrue( control.isListening( SWT.FocusOut ) );
}
- public void testShowOnlyOnFocusCalledTwice() {
+ public void testSetShowOnlyOnFocusToFalse() {
+ Composite composite = new Composite( shell, SWT.NONE );
+ Control control = new Button( composite, SWT.PUSH );
+ ControlDecorator decoration = new ControlDecorator( control, SWT.RIGHT, null );
+ decoration.setShowOnlyOnFocus( true );
+
+ decoration.setShowOnlyOnFocus( false );
+
+ assertFalse( decoration.getShowOnlyOnFocus() );
+ assertFalse( control.isListening( SWT.FocusIn ) );
+ assertFalse( control.isListening( SWT.FocusOut ) );
+ }
+
+ public void testSetShowOnlyOnFocusCalledTwice() {
Control control = new Button( shell, SWT.PUSH );
ControlDecorator decoration = new ControlDecorator( control, SWT.RIGHT, null );
decoration.setShowOnlyOnFocus( true );
- assertTrue( FocusEvent.hasListener( control ) );
+
decoration.setShowOnlyOnFocus( true );
decoration.setShowOnlyOnFocus( false );
- assertFalse( FocusEvent.hasListener( control ) );
+
+ assertFalse( control.isListening( SWT.FocusIn ) );
+ assertFalse( control.isListening( SWT.FocusOut ) );
}
public void testShowHover() {
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/displaykit/DNDSupport_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/displaykit/DNDSupport_Test.java
index 6b3fe45..ea94eb4 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/displaykit/DNDSupport_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/internal/widgets/displaykit/DNDSupport_Test.java
@@ -61,7 +61,8 @@
private Display display;
private Shell shell;
- private List<TypedEvent> log;
+ private List<TypedEvent> events;
+ private List<Integer> eventTypes;
private Control sourceControl;
private Control targetControl;
private DragSource dragSource;
@@ -76,7 +77,8 @@
shell.open();
sourceControl = new Label( shell, SWT.NONE );
targetControl = new Label( shell, SWT.NONE );
- log = new ArrayList<TypedEvent>();
+ events = new ArrayList<TypedEvent>();
+ eventTypes = new ArrayList<Integer>();
Fixture.fakeNewRequest( display );
Fixture.fakePhase( PhaseId.PROCESS_ACTION );
transfers = new Transfer[] {
@@ -132,7 +134,8 @@
addLogger( dragSource );
sourceControl.addDragDetectListener( new DragDetectListener() {
public void dragDetected( DragDetectEvent event ) {
- log.add( event );
+ events.add( event );
+ eventTypes.add( Integer.valueOf( SWT.DragDetect ) );
}
} );
@@ -151,7 +154,7 @@
dragSource.addDragListener( new DragSourceAdapter() {
@Override
public void dragStart( DragSourceEvent event ) {
- log.add( event );
+ events.add( event );
}
} );
@@ -159,7 +162,7 @@
createDragSourceEvent( "dragStart", 20, 30, "move", 1 );
Fixture.executeLifeCycleFromServerThread();
- DragSourceEvent dragSourceEvent = ( DragSourceEvent )log.get( 0 );
+ DragSourceEvent dragSourceEvent = ( DragSourceEvent )events.get( 0 );
assertEquals( 4, dragSourceEvent.x );
assertEquals( 4, dragSourceEvent.y );
}
@@ -248,7 +251,7 @@
}
@Override
public void drop( DropTargetEvent event ) {
- log.add( event );
+ events.add( event );
}
} );
addLogger( dragSource );
@@ -290,12 +293,14 @@
dropTarget.addDropListener( new DropTargetAdapter() {
@Override
public void dropAccept( DropTargetEvent event ) {
- log.add( event );
+ events.add( event );
+ eventTypes.add( Integer.valueOf( DND.DropAccept ) );
event.detail = DND.DROP_NONE;
}
@Override
public void drop( DropTargetEvent event ) {
- log.add( event );
+ events.add( event );
+ eventTypes.add( Integer.valueOf( DND.Drop ) );
}
} );
addLogger( dragSource );
@@ -318,9 +323,9 @@
fakeDragSourceEvent( "dragFinished", 1 );
Fixture.readDataAndProcessAction( display );
- assertEquals( 1, log.size() );
+ assertEquals( 1, events.size() );
DragSourceEvent event = getDragSourceEvent( 0 );
- assertEquals( DND.DragEnd, event.getID() );
+ assertEquals( DND.DragEnd, getEventType( 0 ) );
assertTrue( event.doit ); // Actual SWT behavior
}
@@ -332,12 +337,12 @@
dropTarget.addDropListener( new DropTargetAdapter() {
@Override
public void dropAccept( DropTargetEvent event ) {
- log.add( event );
+ events.add( event );
event.detail = DND.DROP_COPY;
}
@Override
public void drop( DropTargetEvent event ) {
- log.add( event );
+ events.add( event );
}
} );
@@ -677,10 +682,9 @@
Fixture.executeLifeCycleFromServerThread();
DropTargetEvent dragOperationChanged = getDropTargetEvent( 1 );
- assertEquals( DND.DragOperationChanged, dragOperationChanged.getID() );
+ assertEquals( DND.DragOperationChanged, getEventType( 1 ) );
assertTrue( ( dragOperationChanged.detail & DND.DROP_COPY ) != 0 );
- DropTargetEvent dragOver = getDropTargetEvent( 2 );
- assertEquals( DND.DragOver, dragOver.getID() );
+ assertEquals( DND.DragOver, getEventType( 2 ) );
}
public void testOperationsField() {
@@ -700,7 +704,7 @@
fakeDropTargetEvent( "dropAccept", 8 );
Fixture.readDataAndProcessAction( display );
- assertEquals( 6, log.size() );
+ assertEquals( 6, events.size() );
assertEquals( DND.DROP_MOVE | DND.DROP_LINK, getDropTargetEvent( 0 ).operations );
assertEquals( DND.DROP_MOVE | DND.DROP_LINK, getDropTargetEvent( 1 ).operations );
assertEquals( DND.DROP_MOVE | DND.DROP_LINK, getDropTargetEvent( 2 ).operations );
@@ -768,13 +772,16 @@
private void addLogger( DragSource dragSource ) {
dragSource.addDragListener( new DragSourceListener() {
public void dragStart( DragSourceEvent event ) {
- log.add( event );
+ events.add( event );
+ eventTypes.add( Integer.valueOf( DND.DragStart ) );
}
public void dragSetData( DragSourceEvent event ) {
- log.add( event );
+ events.add( event );
+ eventTypes.add( Integer.valueOf( DND.DragSetData ) );
}
public void dragFinished( DragSourceEvent event ) {
- log.add( event );
+ events.add( event );
+ eventTypes.add( Integer.valueOf( DND.DragEnd ) );
}
} );
}
@@ -783,31 +790,10 @@
dropTarget.addDropListener( new LoggingDropTargetListener() );
}
- private class LoggingDropTargetListener implements DropTargetListener {
- public void dragEnter( DropTargetEvent event ) {
- log.add( event );
- }
- public void dragLeave( DropTargetEvent event ) {
- log.add( event );
- }
- public void dragOperationChanged( DropTargetEvent event ) {
- log.add( event );
- }
- public void dragOver( DropTargetEvent event ) {
- log.add( event );
- }
- public void drop( DropTargetEvent event ) {
- log.add( event );
- }
- public void dropAccept( DropTargetEvent event ) {
- log.add( event );
- }
- }
-
private int[] getEventOrder() {
- int[] result = new int[ log.size() ];
+ int[] result = new int[ eventTypes.size() ];
for( int i = 0; i < result.length; i++ ) {
- result[ i ] = log.get( i ).getID();
+ result[ i ] = eventTypes.get( i ).intValue();
}
return result;
}
@@ -820,13 +806,44 @@
}
} );
}
+
+ private int getEventType( int index ) {
+ return eventTypes.get( index ).intValue();
+ }
private DropTargetEvent getDropTargetEvent( int index ) {
- return ( DropTargetEvent )log.get( index );
+ return ( DropTargetEvent )events.get( index );
}
private DragSourceEvent getDragSourceEvent( int index ) {
- return ( DragSourceEvent )log.get( index );
+ return ( DragSourceEvent )events.get( index );
+ }
+
+ private class LoggingDropTargetListener implements DropTargetListener {
+ public void dragEnter( DropTargetEvent event ) {
+ events.add( event );
+ eventTypes.add( Integer.valueOf( DND.DragEnter ) );
+ }
+ public void dragLeave( DropTargetEvent event ) {
+ events.add( event );
+ eventTypes.add( Integer.valueOf( DND.DragLeave ) );
+ }
+ public void dragOperationChanged( DropTargetEvent event ) {
+ events.add( event );
+ eventTypes.add( Integer.valueOf( DND.DragOperationChanged ) );
+ }
+ public void dragOver( DropTargetEvent event ) {
+ events.add( event );
+ eventTypes.add( Integer.valueOf( DND.DragOver ) );
+ }
+ public void drop( DropTargetEvent event ) {
+ events.add( event );
+ eventTypes.add( Integer.valueOf( DND.Drop ) );
+ }
+ public void dropAccept( DropTargetEvent event ) {
+ events.add( event );
+ eventTypes.add( Integer.valueOf( DND.DropAccept ) );
+ }
}
}
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Canvas_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Canvas_Test.java
index 3f3a042..2343cf3 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Canvas_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Canvas_Test.java
@@ -61,18 +61,6 @@
assertEquals( event.height, canvas.getClientArea().height );
}
- public void testRemovePaintListener() {
- PaintListener listener = new PaintListener() {
- public void paintControl( PaintEvent event ) {
- paintEventLog.add( event );
- }
- };
- canvas.addPaintListener( listener );
- canvas.removePaintListener( listener );
- canvas.redraw();
- assertEquals( 0, paintEventLog.size() );
- }
-
public void testResize() {
canvas.addPaintListener( new PaintListener() {
public void paintControl( PaintEvent event ) {
@@ -108,6 +96,15 @@
assertTrue( canvas.isListening( SWT.Paint ) );
}
+ public void testRemovePaintListener() {
+ PaintListener listener = mock( PaintListener.class );
+ canvas.addPaintListener( listener );
+
+ canvas.removePaintListener( listener );
+
+ assertFalse( canvas.isListening( SWT.Paint ) );
+ }
+
public void testRemovePaintListenerUnregistersUntypedEvent() {
PaintListener listener = mock( PaintListener.class );
canvas.addPaintListener( listener );
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Display_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Display_Test.java
index 7e3c34c..10b19b3 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Display_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Display_Test.java
@@ -16,6 +16,7 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
import java.io.IOException;
@@ -27,18 +28,39 @@
import org.eclipse.rap.rwt.RWT;
import org.eclipse.rap.rwt.graphics.Graphics;
import org.eclipse.rap.rwt.internal.application.RWTFactory;
-import org.eclipse.rap.rwt.internal.lifecycle.*;
-import org.eclipse.rap.rwt.lifecycle.*;
-import org.eclipse.rap.rwt.testfixture.*;
+import org.eclipse.rap.rwt.internal.lifecycle.DisplayUtil;
+import org.eclipse.rap.rwt.internal.lifecycle.EntryPointUtil;
+import org.eclipse.rap.rwt.internal.lifecycle.IDisplayLifeCycleAdapter;
+import org.eclipse.rap.rwt.internal.lifecycle.IUIThreadHolder;
+import org.eclipse.rap.rwt.internal.lifecycle.LifeCycleUtil;
+import org.eclipse.rap.rwt.internal.lifecycle.RWTLifeCycle;
+import org.eclipse.rap.rwt.lifecycle.IEntryPoint;
+import org.eclipse.rap.rwt.lifecycle.ILifeCycleAdapter;
+import org.eclipse.rap.rwt.lifecycle.IWidgetAdapter;
+import org.eclipse.rap.rwt.lifecycle.PhaseId;
+import org.eclipse.rap.rwt.lifecycle.UICallBack;
+import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
+import org.eclipse.rap.rwt.testfixture.Fixture;
import org.eclipse.rap.rwt.testfixture.internal.NoOpRunnable;
-import org.eclipse.swt.*;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.SWTError;
+import org.eclipse.swt.SWTException;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Cursor;
+import org.eclipse.swt.graphics.Device;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.internal.widgets.IDisplayAdapter;
import org.eclipse.swt.layout.FillLayout;
+import org.mockito.ArgumentCaptor;
public class Display_Test extends TestCase {
@@ -1014,28 +1036,6 @@
assertTrue( display.isDisposed() );
}
- public void testDisposeWithExceptionsInListeners() {
- Display display = new Display();
- Shell shell = new Shell( display );
- shell.addDisposeListener( new DisposeListener() {
- public void widgetDisposed( DisposeEvent event ) {
- throw new RuntimeException();
- }
- } );
- display.addListener( SWT.Dispose, new Listener() {
- public void handleEvent( Event event ) {
- throw new RuntimeException();
- }
- } );
- display.disposeExec( new Runnable() {
- public void run() {
- throw new RuntimeException();
- }
- } );
- display.dispose();
- assertTrue( display.isDisposed() );
- }
-
public void testSystemCursor() {
Display display = new Display();
Cursor arrow = display.getSystemCursor( SWT.CURSOR_ARROW );
@@ -1457,13 +1457,95 @@
verify( listener, never() ).handleEvent( any( Event.class ) );
}
+
+ public void testAddListenerWithNullArgument() {
+ Display display = new Display();
+
+ try {
+ display.addListener( 123, null );
+ fail();
+ } catch( IllegalArgumentException expected ) {
+ }
+ }
+ public void testRemoveListenerWithNullArgument() {
+ Display display = new Display();
+
+ try {
+ display.removeListener( 123, null );
+ fail();
+ } catch( IllegalArgumentException expected ) {
+ }
+ }
+
+ public void testAddListener() {
+ Display display = new Display();
+ Listener listener = mock( Listener.class );
+
+ display.addListener( 123, listener );
+ Event event = new Event();
+ display.sendEvent( 123, event );
+
+ verify( listener ).handleEvent( event );
+ }
+
+ public void testRemoveListener() {
+ Display display = new Display();
+ Listener listener = mock( Listener.class );
+ display.addListener( 123, listener );
+
+ display.removeListener( 123, listener );
+ display.sendEvent( 123, new Event() );
+
+ verifyZeroInteractions( listener );
+ }
+
+ public void testSendEvent() {
+ Display display = new Display();
+ Listener listener = mock( Listener.class );
+ display.addListener( 123, listener );
+
+ display.sendEvent( 123, new Event() );
+
+ ArgumentCaptor<Event> captor = ArgumentCaptor.forClass( Event.class );
+ verify( listener ).handleEvent( captor.capture() );
+ assertEquals( 123, captor.getValue().type );
+ assertEquals( display, captor.getValue().display );
+ assertTrue( captor.getValue().time > 0 );
+ }
+
+ public void testSendEventWithPredefinedTime() {
+ Display display = new Display();
+ Listener listener = mock( Listener.class );
+ display.addListener( 123, listener );
+
+ Event event = new Event();
+ event.time = 4;
+ display.sendEvent( 123, event );
+
+ ArgumentCaptor<Event> captor = ArgumentCaptor.forClass( Event.class );
+ verify( listener ).handleEvent( captor.capture() );
+ assertEquals( 123, captor.getValue().type );
+ assertEquals( display, captor.getValue().display );
+ assertEquals( event.time, captor.getValue().time );
+ }
+
+ public void testRemoveListenerWithoutAddingListener() {
+ Display display = new Display();
+ Listener listener = mock( Listener.class );
+
+ display.removeListener( 123, listener );
+ display.sendEvent( 123, new Event() );
+
+ verifyZeroInteractions( listener );
+ }
+
private static void setCursorLocation( Display display, int x, int y ) {
IDisplayAdapter adapter = display.getAdapter( IDisplayAdapter.class );
adapter.setCursorLocation( x, y );
}
- public static final class EnsureIdEntryPoint implements IEntryPoint {
+ public static class EnsureIdEntryPoint implements IEntryPoint {
public int createUI() {
Display display = new Display();
Shell shell = new Shell( display );
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/TableColumn_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/TableColumn_Test.java
index 0c3c2a4..e8665e8 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/TableColumn_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/TableColumn_Test.java
@@ -394,6 +394,48 @@
}
}
+ public void testAddControlListenerWithNullArgument() {
+ Table table = new Table( shell, SWT.NONE );
+ TableColumn column = new TableColumn( table, SWT.NONE );
+
+ try {
+ column.addControlListener( null );
+ } catch( IllegalArgumentException expected ) {
+ }
+ }
+
+ public void testAddControlListener() {
+ Table table = new Table( shell, SWT.NONE );
+ TableColumn column = new TableColumn( table, SWT.NONE );
+
+ column.addControlListener( mock( ControlListener.class ) );
+
+ assertTrue( column.isListening( SWT.Move ) );
+ assertTrue( column.isListening( SWT.Resize ) );
+ }
+
+ public void testRemoveControlListenerWithNullArgument() {
+ Table table = new Table( shell, SWT.NONE );
+ TableColumn column = new TableColumn( table, SWT.NONE );
+
+ try {
+ column.removeControlListener( null );
+ } catch( IllegalArgumentException expected ) {
+ }
+ }
+
+ public void testRemoveControlListener() {
+ ControlListener listener = mock( ControlListener.class );
+ Table table = new Table( shell, SWT.NONE );
+ TableColumn column = new TableColumn( table, SWT.NONE );
+ column.addControlListener( listener );
+
+ column.removeControlListener( listener );
+
+ assertFalse( column.isListening( SWT.Move ) );
+ assertFalse( column.isListening( SWT.Resize ) );
+ }
+
protected void setUp() throws Exception {
Fixture.setUp();
Fixture.fakePhase( PhaseId.PROCESS_ACTION );
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/TreeColumn_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/TreeColumn_Test.java
index 3818e69..a5e3a00 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/TreeColumn_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/TreeColumn_Test.java
@@ -22,6 +22,7 @@
import org.eclipse.rap.rwt.lifecycle.PhaseId;
import org.eclipse.rap.rwt.testfixture.Fixture;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ControlListener;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
@@ -315,6 +316,44 @@
}
}
+ public void testAddControlListenerWithNullArgument() {
+ TreeColumn column = new TreeColumn( tree, SWT.NONE );
+
+ try {
+ column.addControlListener( null );
+ } catch( IllegalArgumentException expected ) {
+ }
+ }
+
+ public void testAddControlListener() {
+ TreeColumn column = new TreeColumn( tree, SWT.NONE );
+
+ column.addControlListener( mock( ControlListener.class ) );
+
+ assertTrue( column.isListening( SWT.Move ) );
+ assertTrue( column.isListening( SWT.Resize ) );
+ }
+
+ public void testRemoveControlListenerWithNullArgument() {
+ TreeColumn column = new TreeColumn( tree, SWT.NONE );
+
+ try {
+ column.removeControlListener( null );
+ } catch( IllegalArgumentException expected ) {
+ }
+ }
+
+ public void testRemoveControlListener() {
+ ControlListener listener = mock( ControlListener.class );
+ TreeColumn column = new TreeColumn( tree, SWT.NONE );
+ column.addControlListener( listener );
+
+ column.removeControlListener( listener );
+
+ assertFalse( column.isListening( SWT.Move ) );
+ assertFalse( column.isListening( SWT.Resize ) );
+ }
+
//////////////////
// Helping classes
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Widget_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Widget_Test.java
index e7942c8..fde54b6 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Widget_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Widget_Test.java
@@ -289,10 +289,17 @@
public void testRemoveListener() {
// Ensure that removing a listener that was never added is ignored
// silently see https://bugs.eclipse.org/251816
- shell.removeListener( SWT.Activate, new Listener() {
- public void handleEvent( Event event ) {
- }
- } );
+ shell.removeListener( SWT.Activate, mock( Listener.class ) );
+ }
+
+ // bug 328043
+ public void testUntypedDisposeListener() {
+ DisposeListener listener = mock( DisposeListener.class );
+ shell.addDisposeListener( listener );
+
+ shell.notifyListeners( SWT.Dispose, new Event() );
+
+ verify( listener ).widgetDisposed( any( DisposeEvent.class ) );
}
public void testNotifyListeners() {