Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Buschtöns2013-08-04 12:13:48 +0000
committerTim Buschtöns2013-08-04 12:13:48 +0000
commit609e4b00d6eff50568b50453565ec1d628bad95a (patch)
tree510834a9a29825cb194a865771391a7c72b319ab
parent7ed695ddc46d6edea66a92d5e095bae4b2b3cbb7 (diff)
downloadorg.eclipse.rap.incubator.dropdown-609e4b00d6eff50568b50453565ec1d628bad95a.tar.gz
org.eclipse.rap.incubator.dropdown-609e4b00d6eff50568b50453565ec1d628bad95a.tar.xz
org.eclipse.rap.incubator.dropdown-609e4b00d6eff50568b50453565ec1d628bad95a.zip
Refactor AutoSuggest to be able to remove Model.java
-rw-r--r--bundles/org.eclipse.rap.addons.autosuggest/js/rwt/remote/Model.js35
-rw-r--r--bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggest.java59
-rw-r--r--bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/AutoSuggestClientListener.java (renamed from bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/ModelListener.java)20
-rw-r--r--bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/ClientModelListener.java56
-rw-r--r--bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/Model.java134
-rw-r--r--tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/AutoSuggestJs_Test.java4
-rw-r--r--tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/fixture/rwt-mock.js5
-rw-r--r--tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/index.html4
-rw-r--r--tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/AutoSuggestSpec.js6
-rw-r--r--tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/ModelSpec.js13
-rw-r--r--tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/internal/Model_Test.java319
11 files changed, 103 insertions, 552 deletions
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/js/rwt/remote/Model.js b/bundles/org.eclipse.rap.addons.autosuggest/js/rwt/remote/Model.js
index f7670f1..8b33b5a 100644
--- a/bundles/org.eclipse.rap.addons.autosuggest/js/rwt/remote/Model.js
+++ b/bundles/org.eclipse.rap.addons.autosuggest/js/rwt/remote/Model.js
@@ -80,16 +80,39 @@
notifyInternal( this, event, properties );
},
- addListener : function( event, listener ) {
- if( !this._.listeners[ event ] ) {
- this._.listeners[ event ] = [];
+ addListener : function() {
+ var event, listener;
+ if( arguments.length === 1 ) {
+ listener = arguments[ 0 ].listener;
+ event = arguments[ 0 ].type;
+ } else {
+ event = arguments[ 0 ];
+ listener = arguments[ 1 ];
}
- if( this._.listeners[ event ].indexOf( listener ) === -1 ) {
- this._.listeners[ event ].push( listener );
+ if( typeof listener === "string" ) {
+ var that = this;
+ rwt.remote.HandlerUtil.callWithTarget( listener, function( listener ) {
+ that.addListener( event, listener );
+ } );
+ } else {
+ if( !this._.listeners[ event ] ) {
+ this._.listeners[ event ] = [];
+ }
+ if( this._.listeners[ event ].indexOf( listener ) === -1 ) {
+ this._.listeners[ event ].push( listener );
+ }
}
},
- removeListener : function( event, listener ) {
+ removeListener : function() {
+ var event, listener;
+ if( arguments.length === 1 ) {
+ listener = rwt.remote.ObjectRegistry.getObject( arguments[ 0 ].listener );
+ event = arguments[ 0 ].event;
+ } else {
+ event = arguments[ 0 ];
+ listener = arguments[ 1 ];
+ }
if( this._ && this._.listeners[ event ] ) {
var index = this._.listeners[ event ].indexOf( listener );
rwt.util.Arrays.removeAt( this._.listeners[ event ], index );
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggest.java b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggest.java
index 732eb0f..3b446c6 100644
--- a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggest.java
+++ b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/AutoSuggest.java
@@ -15,16 +15,18 @@ import static org.eclipse.rap.rwt.lifecycle.WidgetUtil.getId;
import java.util.ArrayList;
import java.util.List;
-import org.eclipse.rap.addons.autosuggest.internal.ClientModelListener;
-import org.eclipse.rap.addons.autosuggest.internal.Model;
-import org.eclipse.rap.addons.autosuggest.internal.ModelListener;
+import org.eclipse.rap.addons.autosuggest.internal.AutoSuggestClientListener;
import org.eclipse.rap.addons.autosuggest.internal.resources.AutoSuggestScript;
import org.eclipse.rap.addons.autosuggest.internal.resources.EventDelegatorScript;
+import org.eclipse.rap.addons.autosuggest.internal.resources.ModelResources;
import org.eclipse.rap.addons.dropdown.DropDown;
import org.eclipse.rap.clientscripting.ClientListener;
import org.eclipse.rap.clientscripting.Script;
import org.eclipse.rap.clientscripting.WidgetDataWhiteList;
import org.eclipse.rap.json.JsonObject;
+import org.eclipse.rap.rwt.RWT;
+import org.eclipse.rap.rwt.remote.AbstractOperationHandler;
+import org.eclipse.rap.rwt.remote.RemoteObject;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
@@ -34,17 +36,16 @@ import org.eclipse.swt.widgets.Text;
public class AutoSuggest {
private static final String EVENT_TYPE_SELECTION = "suggestionSelected";
- private static final String MODEL_ID_KEY
- = "org.eclipse.rap.addons.autosuggest#Model";
+ private static final String REMOTE_TYPE = "rwt.remote.Model";
+ private static final String MODEL_ID_KEY = "org.eclipse.rap.addons.autosuggest#Model";
private final Text text;
private final DropDown dropDown;
- private final Model model;
private final List<SuggestionSelectedListener> selectionListeners;
- private final ModelListener modelListener;
private ClientListener textClientListener;
private int[] textClientListenerTypes;
private boolean isDisposed;
+ private final RemoteObject remoteObject;
public AutoSuggest( Text text ) {
if( text == null ) {
@@ -55,13 +56,17 @@ public class AutoSuggest {
}
this.text = text;
dropDown = new DropDown( text );
- model = new Model();
- selectionListeners = new ArrayList<SuggestionSelectedListener>( 1 );
- modelListener = new ModelListener() {
- public void handleEvent( JsonObject argument ) {
- notifySelectionListeners();
+ ModelResources.ensure();
+ remoteObject = RWT.getUISession().getConnection().createRemoteObject( REMOTE_TYPE );
+ remoteObject.setHandler( new AbstractOperationHandler() {
+ @Override
+ public void handleNotify( String event, JsonObject properties ) {
+ if( EVENT_TYPE_SELECTION.equals( event ) ) {
+ notifySelectionListeners();
+ }
}
- };
+ } );
+ selectionListeners = new ArrayList<SuggestionSelectedListener>( 1 );
connectClientObjects();
attachClientListeners();
text.addListener( SWT.Dispose, new Listener() {
@@ -73,7 +78,7 @@ public class AutoSuggest {
public void setDataSource( DataSource dataSource ) {
checkDisposed();
- model.set( "dataSourceId", dataSource != null ? dataSource.getId() : null );
+ remoteObject.set( "dataSourceId", dataSource != null ? dataSource.getId() : null );
if( dataSource != null ) {
ColumnTemplate template = dataSource.getTemplate();
if( template != null ) {
@@ -94,7 +99,7 @@ public class AutoSuggest {
public void setAutoComplete( boolean value ) {
checkDisposed();
- model.set( "autoComplete", value );
+ remoteObject.set( "autoComplete", value );
}
public void addSelectionListener( SuggestionSelectedListener listener ) {
@@ -106,7 +111,7 @@ public class AutoSuggest {
selectionListeners.add( listener );
}
if( selectionListeners.size() == 1 ) {
- model.addListener( EVENT_TYPE_SELECTION, modelListener );
+ remoteObject.listen( EVENT_TYPE_SELECTION, true );
}
}
@@ -116,15 +121,15 @@ public class AutoSuggest {
throw new NullPointerException( "Parameter was null: listener" );
}
selectionListeners.remove( listener );
- if( selectionListeners.isEmpty() ) {
- model.removeListener( EVENT_TYPE_SELECTION, modelListener );
+ if( selectionListeners.size() == 0 ) {
+ remoteObject.listen( EVENT_TYPE_SELECTION, false );
}
}
public void dispose() {
isDisposed = true;
dropDown.dispose();
- model.dispose();
+ remoteObject.destroy();
removeTextClientListeners();
}
@@ -175,19 +180,21 @@ public class AutoSuggest {
}
private void attachClientListenerToModel( Script script, String... types ) {
- ClientModelListener clientModelListener = new ClientModelListener( script );
+ AutoSuggestClientListener clientListener = new AutoSuggestClientListener( script );
+ String listenerId = clientListener.getId();
for( String type : types ) {
- model.addListener( type, clientModelListener );
+ remoteObject.call( "addListener",
+ new JsonObject().add( "listener", listenerId ).add( "type", type ) );
}
- model.set( "autoSuggestListenerId", clientModelListener.getId() );
+ remoteObject.set( "autoSuggestListenerId", listenerId );
}
private void connectClientObjects() {
WidgetDataWhiteList.addKey( MODEL_ID_KEY );
- model.set( "textWidgetId", getId( text ) );
- model.set( "dropDownWidgetId", getId( dropDown ) );
- dropDown.setData( MODEL_ID_KEY, model.getId() );
- text.setData( MODEL_ID_KEY, model.getId() );
+ remoteObject.set( "textWidgetId", getId( text ) );
+ remoteObject.set( "dropDownWidgetId", getId( dropDown ) );
+ dropDown.setData( MODEL_ID_KEY, remoteObject.getId() );
+ text.setData( MODEL_ID_KEY, remoteObject.getId() );
}
private void removeTextClientListeners() {
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/ModelListener.java b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/AutoSuggestClientListener.java
index d826d65..6675748 100644
--- a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/ModelListener.java
+++ b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/AutoSuggestClientListener.java
@@ -10,9 +10,23 @@
******************************************************************************/
package org.eclipse.rap.addons.autosuggest.internal;
-import org.eclipse.rap.json.JsonObject;
+import org.eclipse.rap.clientscripting.Script;
+import org.eclipse.rap.clientscripting.internal.ClientFunction;
-public interface ModelListener {
- void handleEvent( JsonObject argument );
+@SuppressWarnings( "restriction" )
+public final class AutoSuggestClientListener extends ClientFunction {
+
+ public AutoSuggestClientListener( String scriptCode ) {
+ super( scriptCode );
+ }
+
+ public AutoSuggestClientListener( Script script ) {
+ super( script );
+ }
+
+ public String getId() {
+ return getRemoteId();
+ }
+
}
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/ClientModelListener.java b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/ClientModelListener.java
deleted file mode 100644
index f34a44d..0000000
--- a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/ClientModelListener.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 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.addons.autosuggest.internal;
-
-import org.eclipse.rap.clientscripting.Script;
-import org.eclipse.rap.clientscripting.internal.ClientFunction;
-import org.eclipse.rap.clientscripting.internal.ClientListenerBinding;
-import org.eclipse.rap.json.JsonObject;
-
-
-@SuppressWarnings( "restriction" )
-public final class ClientModelListener extends ClientFunction implements ModelListener {
-
- public ClientModelListener( String scriptCode ) {
- super( scriptCode );
- }
-
- public ClientModelListener( Script script ) {
- super( script );
- }
-
- public void handleEvent( JsonObject argument ) { }
-
- public String getId() {
- return getRemoteId();
- }
-
- void addTo( Model model, String eventType ) {
- final ClientListenerBinding binding = addTo( model.getId(), eventType );
- if( binding != null ) {
- model.addListener( "destroy", new ModelListener() {
- public void handleEvent( JsonObject argument ) {
- binding.dispose();
- }
- } );
- }
- }
-
- void removeFrom( Model model, String eventType ) {
- removeFrom( model.getId(), eventType );
- }
-
- // For Testing only:
- ClientListenerBinding findBinding( Model model, String eventType ) {
- return findBinding( model.getId(), eventType );
- }
-
-}
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/Model.java b/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/Model.java
deleted file mode 100644
index f7bc039..0000000
--- a/bundles/org.eclipse.rap.addons.autosuggest/src/org/eclipse/rap/addons/autosuggest/internal/Model.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 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.addons.autosuggest.internal;
-
-import java.util.*;
-
-import org.eclipse.rap.addons.autosuggest.internal.resources.ModelResources;
-import org.eclipse.rap.json.JsonObject;
-import org.eclipse.rap.json.JsonValue;
-import org.eclipse.rap.rwt.RWT;
-import org.eclipse.rap.rwt.remote.AbstractOperationHandler;
-import org.eclipse.rap.rwt.remote.RemoteObject;
-
-
-public class Model {
-
- private static final String REMOTE_TYPE = "rwt.remote.Model";
-
- private RemoteObject remoteObject;
- private Map<String, List<ModelListener>> listeners = new HashMap<String, List<ModelListener>>();
-
- private boolean isDisposed;
-
- public Model() {
- ModelResources.ensure();
- remoteObject = RWT.getUISession().getConnection().createRemoteObject( REMOTE_TYPE );
- remoteObject.setHandler( new AbstractOperationHandler() {
- @Override
- public void handleNotify( String event, JsonObject properties ) {
- notifyInternal( event, properties );
- }
- } );
- }
-
- public void set( String name, String value ) {
- remoteObject.set( name, value );
- }
-
- public void set( String name, int value ) {
- remoteObject.set( name, value );
- }
-
- public void set( String name, boolean value ) {
- remoteObject.set( name, value );
- }
-
- public void set( String name, JsonValue value ) {
- remoteObject.set( name, value );
- }
-
- public void addListener( String eventType, ModelListener listener ) {
- checkArguments( eventType, listener );
- if( listener instanceof ClientModelListener ) {
- ( ( ClientModelListener )listener ).addTo( this, eventType );
- } else {
- addServerListener( eventType, listener );
- }
- }
-
- public void removeListener( String eventType, ModelListener listener ) {
- checkArguments( eventType, listener );
- if( listener instanceof ClientModelListener ) {
- ( ( ClientModelListener )listener ).removeFrom( this, eventType );
- } else {
- boolean removed = getListeners( eventType ).remove( listener );
- if( removed && !hasListeners( eventType ) ) {
- remoteObject.listen( eventType, false );
- }
- }
- }
-
- public void dispose() {
- if( !isDisposed ) {
- isDisposed = true;
- remoteObject.destroy();
- notifyInternal( "destroy", null ); // TODO : find other solution or also fire on client
- }
- }
-
- public boolean isDisposed() {
- return isDisposed;
- }
-
- public String getId() {
- return remoteObject.getId();
- }
-
- private static void checkArguments( Object... arguments ) {
- for( Object argument : arguments ) {
- if( argument == null ) {
- throw new IllegalArgumentException( "Argument may not be null" );
- }
- }
- }
-
- private void addServerListener( String eventType, ModelListener listener ) {
- if( !hasListeners( eventType ) ) {
- remoteObject.listen( eventType, true );
- }
- List<ModelListener> eventListeners = getListeners( eventType );
- if( !eventListeners.contains( listener ) ) {
- eventListeners.add( listener );
- }
- }
-
- private List<ModelListener> getListeners( String eventType ) {
- List<ModelListener> result = listeners.get( eventType );
- if( result == null ) {
- result = new ArrayList<ModelListener>();
- listeners.put( eventType, result );
- }
- return result;
- }
-
- private boolean hasListeners( String eventType ) {
- return listeners.containsKey( eventType ) && !listeners.get( eventType ).isEmpty();
- }
-
- private void notifyInternal( String event, JsonObject properties ) {
- List<ModelListener> eventListeners = getListeners( event );
- for( ModelListener eventListener : eventListeners ) {
- eventListener.handleEvent( properties );
- }
- }
-
-}
diff --git a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/AutoSuggestJs_Test.java b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/AutoSuggestJs_Test.java
index 7b012a1..da366de 100644
--- a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/AutoSuggestJs_Test.java
+++ b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/AutoSuggestJs_Test.java
@@ -42,8 +42,8 @@ public class AutoSuggestJs_Test {
@Test
public void testListenerSpec() {
jasmine.addResource( "AutoSuggest.js", LOCAL, AUTO_SUGGEST_JS );
- jasmine.parseScript( CLIENTSCRIPTING, "org/eclipse/rap/clientscripting/SWT.js" );
- jasmine.parseScript( CLIENTSCRIPTING, "org/eclipse/rap/clientscripting/Function.js" );
+ jasmine.parseScript( CLIENTSCRIPTING, "rwt/scripting/SWT.js" );
+ jasmine.parseScript( CLIENTSCRIPTING, "rwt/scripting/FunctionFactory.js" );
jasmine.parseScript( LOCAL, "jasmine/specs/AutoSuggestSpec.js" );
jasmine.execute();
}
diff --git a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/fixture/rwt-mock.js b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/fixture/rwt-mock.js
index 481440a..b3596bd 100644
--- a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/fixture/rwt-mock.js
+++ b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/fixture/rwt-mock.js
@@ -33,6 +33,11 @@ rwt = {
}
}
},
+ remote : {
+ HandlerUtil : {
+ callWithTarget : function() {}
+ }
+ },
qx : {
Class : {
// NOTE: Rhino may create global objects such as "org" without asking. They can
diff --git a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/index.html b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/index.html
index 77075be..7727e50 100644
--- a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/index.html
+++ b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/index.html
@@ -6,8 +6,8 @@
<script type="text/javascript" src="fixture/rwt-mock.js"></script>
<script type="text/javascript" src="fixture/rap-mock.js"></script>
<script type="text/javascript" src="../../../../bundles/org.eclipse.rap.addons.autosuggest/js/rwt/remote/Model.js"></script>
- <script type="text/javascript" src="../../../../../org.eclipse.rap.incubator.clientscripting/bundles/org.eclipse.rap.clientscripting/js/org/eclipse/rap/clientscripting/SWT.js"></script>
- <script type="text/javascript" src="../../../../../org.eclipse.rap.incubator.clientscripting/bundles/org.eclipse.rap.clientscripting/js/org/eclipse/rap/clientscripting/Function.js"></script>
+ <script type="text/javascript" src="../../../../../org.eclipse.rap.incubator.clientscripting/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/SWT.js"></script>
+ <script type="text/javascript" src="../../../../../org.eclipse.rap.incubator.clientscripting/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/FunctionFactory.js"></script>
<script type="text/javascript" src="specs/ModelSpec.js"></script>
<script type="text/javascript" src="specs/AutoSuggestSpec.js"></script>
<script type="text/javascript">
diff --git a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/AutoSuggestSpec.js b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/AutoSuggestSpec.js
index de717ca..fd83554 100644
--- a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/AutoSuggestSpec.js
+++ b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/AutoSuggestSpec.js
@@ -14,10 +14,8 @@
var createClientListener = function( name ) {
// NOTE : Using + "" to convert Java string to JavaScript string. Alternatives?
var listenerScript = TestUtil.getResource( name ) + "";
- var listener = new org.eclipse.rap.clientscripting.Function( listenerScript );
- return function() {
- listener.call.apply( listener, arguments );
- };
+ var listener = rwt.scripting.FunctionFactory.createFunction( listenerScript, "handleEvent" );
+ return listener;
};
var getVarFromScript = function( scriptName, functionName ) {
diff --git a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/ModelSpec.js b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/ModelSpec.js
index 5333e36..32ab3e3 100644
--- a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/ModelSpec.js
+++ b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/ModelSpec.js
@@ -38,6 +38,19 @@
expect( log.length ).toBe( 1 );
} );
+ it( "resloves listener id", function() {
+ spyOn( rwt.remote.HandlerUtil, "callWithTarget" ).andCallFake( function( target, callback ) {
+ if( target === "fooid" ) {
+ callback( logger );
+ }
+ } );
+
+ model.addListener( { type : "Selection", listener : "fooid" } );
+ model.notify( "Selection", { "foo" : "bar" } );
+
+ expect( log.length ).toBe( 1 );
+ } );
+
} );
describe( "removeListener", function() {
diff --git a/tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/internal/Model_Test.java b/tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/internal/Model_Test.java
deleted file mode 100644
index 708d1b6..0000000
--- a/tests/org.eclipse.rap.addons.autosuggest.test/src/org/eclipse/rap/addons/autosuggest/internal/Model_Test.java
+++ /dev/null
@@ -1,319 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2013 EclipseSource.
- * 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.addons.autosuggest.internal;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyBoolean;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.reset;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import org.eclipse.rap.addons.autosuggest.internal.ClientModelListener;
-import org.eclipse.rap.addons.autosuggest.internal.Model;
-import org.eclipse.rap.addons.autosuggest.internal.ModelListener;
-import org.eclipse.rap.clientscripting.internal.ClientListenerBinding;
-import org.eclipse.rap.json.JsonObject;
-import org.eclipse.rap.json.JsonValue;
-import org.eclipse.rap.rwt.RWT;
-import org.eclipse.rap.rwt.remote.Connection;
-import org.eclipse.rap.rwt.remote.OperationHandler;
-import org.eclipse.rap.rwt.remote.RemoteObject;
-import org.eclipse.rap.rwt.testfixture.Fixture;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-
-
-@SuppressWarnings("restriction")
-public class Model_Test {
-
- private static final String REMOTE_TYPE = "rwt.remote.Model";
- private RemoteObject remoteObject;
- private OperationHandler handler;
- private Model model;
- private Connection connection;
-
- @Before
- public void setUp() {
- Fixture.setUp();
- Fixture.fakeNewRequest();
- remoteObject = mock( RemoteObject.class );
- when( remoteObject.getId() ).thenReturn( "modelId" );
- connection = spy( RWT.getUISession().getConnection() );
- when( connection.createRemoteObject( REMOTE_TYPE ) ).thenReturn( remoteObject );
- Fixture.fakeConnection( connection );
- doAnswer( new Answer<Object>(){
- public Object answer( InvocationOnMock invocation ) throws Throwable {
- handler = ( OperationHandler )invocation.getArguments()[ 0 ];
- return null;
- }
- } ).when( remoteObject ).setHandler( any( OperationHandler.class ) );
- model = new Model();
- }
-
- @After
- public void tearDown() {
- Fixture.tearDown();
- }
-
- @Test
- public void testConstructor_CreatesRemoteObject() {
- verify( connection ).createRemoteObject( eq( REMOTE_TYPE ) );
- }
-
- @Test
- public void testGetId() {
- when( remoteObject.getId() ).thenReturn( "foo" );
-
- assertEquals( "foo", model.getId() );
- }
-
- @Test
- public void testDispose_CallsRemoteObjectDestroy() {
- model.dispose();
-
- verify( remoteObject ).destroy();
- }
-
- @Test
- public void testDispose_callTwiceHasNoEffect() {
- model.dispose();
- model.dispose();
-
- verify( remoteObject, times( 1 ) ).destroy();
- }
-
- @Test
- public void testIsDisposed_returnsFalse() {
- assertFalse( model.isDisposed() );
- }
-
- @Test
- public void testIsDisposed_returnsTrueAfterDispose() {
- model.dispose();
-
- assertTrue( model.isDisposed() );
- }
-
- @Test
- public void testDispose_DisposesListenerBinding() {
- ClientModelListener listener = new ClientModelListener( "" );
- model.addListener( "foo", listener );
- ClientListenerBinding binding = listener.findBinding( model, "foo" );
-
- model.dispose();
-
- assertTrue( binding.isDisposed() );
- }
-
- @Test
- public void testSet_CallsRemoteObjectSetString() {
- model.set( "foo", "bar" );
-
- verify( remoteObject ).set( eq( "foo" ), eq( "bar" ) );
- }
-
- @Test
- public void testSet_CallsRemoteObjectSetInt() {
- model.set( "foo", 1 );
-
- verify( remoteObject ).set( eq( "foo" ), eq( 1 ) );
- }
-
- @Test
- public void testSet_CallsRemoteObjectSetJsonValue() {
- model.set( "foo", JsonValue.valueOf( "bar" ) );
-
- verify( remoteObject ).set( eq( "foo" ), eq( JsonValue.valueOf( "bar" ) ) );
- }
-
- @Test
- public void testAddListener_SetsListenTrue() {
- model.addListener( "foo", mock( ModelListener.class ) );
-
- verify( remoteObject ).listen( eq( "foo" ), eq( true ) );
- }
-
- @Test
- public void testAddListener_ThrowsExceptionForNullListener() {
- try{
- model.addListener( "foo", null );
- fail();
- } catch( IllegalArgumentException ex ) {
- // expected
- }
-
- verify( remoteObject, never() ).listen( anyString(), anyBoolean() );
- }
- @Test
- public void testAddListener_ThrowsExceptionForNullType() {
- try{
- model.addListener( null, mock( ModelListener.class ) );
- fail();
- } catch( IllegalArgumentException ex ) {
- // expected
- }
-
- verify( remoteObject, never() ).listen( anyString(), anyBoolean() );
- }
-
- @Test
- public void testAddListener_DoesNotSetListenTrueIfNotFirstListener() {
- model.addListener( "foo", mock( ModelListener.class ) );
- reset( remoteObject );
-
- model.addListener( "foo", mock( ModelListener.class ) );
-
- verify( remoteObject, never() ).listen( eq( "foo" ), eq( true ) );
- }
-
- @Test
- public void testAddListener_SetsListenTrueForDifferentEventType() {
- model.addListener( "foo", mock( ModelListener.class ) );
- reset( remoteObject );
-
- model.addListener( "bar", mock( ModelListener.class ) );
-
- verify( remoteObject ).listen( eq( "bar" ), eq( true ) );
- }
-
- @Test
- public void testAddListener_DoesNotSetListenTrueIfClientListener() {
- model.addListener( "foo", new ClientModelListener( "" ) );
-
- verify( remoteObject, never() ).listen( eq( "foo" ), eq( true ) );
- }
-
- @Test
- public void testAddListener_CreatesListenerBinding() {
- ClientModelListener listener = new ClientModelListener( "" );
-
- model.addListener( "foo", listener );
-
- assertNotNull( listener.findBinding( model, "foo" ) );
- }
-
- @Test
- public void testRemoveListener_SetsListenFalse() {
- ModelListener listener = mock( ModelListener.class );
- model.addListener( "foo", listener );
- reset( remoteObject );
-
- model.removeListener( "foo", listener );
-
- verify( remoteObject ).listen( eq( "foo" ), eq( false ) );
- }
-
- @Test
- public void testRemoveListener_DoesNotSetListenFalseIfListenerRemains() {
- ModelListener listener = mock( ModelListener.class );
- model.addListener( "foo", listener );
- model.addListener( "foo", mock( ModelListener.class ) );
- reset( remoteObject );
-
- model.removeListener( "foo", listener );
-
- verify( remoteObject, never() ).listen( eq( "foo" ), eq( false ) );
- }
-
- @Test
- public void testRemoveListener_DoesSetListenFalseIfDifferentEventTypeRemains() {
- ModelListener listener = mock( ModelListener.class );
- model.addListener( "bar", listener );
- model.addListener( "foo", mock( ModelListener.class ) );
- reset( remoteObject );
-
- model.removeListener( "bar", listener );
-
- verify( remoteObject ).listen( eq( "bar" ), eq( false ) );
- }
-
-
- @Test
- public void testRemoveListener_DoesNotSetListenFalseIfListenerWasNotRegistered() {
- ModelListener listener = mock( ModelListener.class );
-
- model.removeListener( "foo", listener );
-
- verify( remoteObject, never() ).listen( eq( "foo" ), eq( false ) );
- }
-
- @Test
- public void testRemoveListener_ThrowsExceptionForNullListener() {
- try{
- model.removeListener( "foo", null );
- fail();
- } catch( IllegalArgumentException ex ) {
- // expected
- }
-
- verify( remoteObject, never() ).listen( anyString(), anyBoolean() );
- }
- @Test
- public void testRemoveListener_ThrowsExceptionForNullType() {
- try{
- model.removeListener( null, mock( ModelListener.class ) );
- fail();
- } catch( IllegalArgumentException ex ) {
- // expected
- }
-
- verify( remoteObject, never() ).listen( anyString(), anyBoolean() );
- }
-
- @Test
- public void testRemoveListener_DisposesListenerBinding() {
- ClientModelListener listener = new ClientModelListener( "" );
- model.addListener( "foo", listener );
- ClientListenerBinding binding = listener.findBinding( model, "foo" );
-
- model.removeListener( "foo", listener );
-
- assertTrue( binding.isDisposed() );
- }
-
- @Test
- public void testProcessClientNotify_CallHandleEvent() {
- ModelListener listener = mock( ModelListener.class );
- model.addListener( "foo", listener );
- JsonObject argument = mock( JsonObject.class );
-
- handler.handleNotify( "foo", argument );
-
- verify( listener ).handleEvent( eq( argument ) );
- }
-
- @Test
- public void testProcessClientNotify_DoNotCallHandleEventTwice() {
- ModelListener listener = mock( ModelListener.class );
- model.addListener( "foo", listener );
- model.addListener( "foo", listener );
- handler.handleNotify( "foo", mock( JsonObject.class ) );
-
- verify( listener, times( 1 ) ).handleEvent( any( JsonObject.class ) );
- }
-
-
-}

Back to the top