Move JavaScript DropDown implementation and tests to RAP core

Render "data" as property instead of "setData" call operation.
diff --git a/bundles/org.eclipse.rap.addons.dropdown/.classpath b/bundles/org.eclipse.rap.addons.dropdown/.classpath
index 7db29ef..64c5e31 100644
--- a/bundles/org.eclipse.rap.addons.dropdown/.classpath
+++ b/bundles/org.eclipse.rap.addons.dropdown/.classpath
@@ -3,6 +3,5 @@
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="js"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/bundles/org.eclipse.rap.addons.dropdown/META-INF/MANIFEST.MF b/bundles/org.eclipse.rap.addons.dropdown/META-INF/MANIFEST.MF
index 69577c2..0592929 100644
--- a/bundles/org.eclipse.rap.addons.dropdown/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.rap.addons.dropdown/META-INF/MANIFEST.MF
@@ -2,10 +2,9 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: DropDown
 Bundle-SymbolicName: org.eclipse.rap.addons.dropdown
-Bundle-Version: 0.2.0.qualifier
+Bundle-Version: 0.3.0.qualifier
 Bundle-Vendor: Eclipse.org - RAP Incubator
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Import-Package: org.osgi.framework;version="1.3.0"
-Export-Package: org.eclipse.rap.addons.dropdown;version="0.2.0",
- org.eclipse.rap.addons.dropdown.internal.resources;version="0.2.0";x-internal:=true
-Require-Bundle: org.eclipse.rap.rwt;bundle-version="2.2.0"
+Export-Package: org.eclipse.rap.addons.dropdown;version="0.2.0"
+Require-Bundle: org.eclipse.rap.rwt;bundle-version="2.3.0"
diff --git a/bundles/org.eclipse.rap.addons.dropdown/build.properties b/bundles/org.eclipse.rap.addons.dropdown/build.properties
index 745ecd4..018ec84 100644
--- a/bundles/org.eclipse.rap.addons.dropdown/build.properties
+++ b/bundles/org.eclipse.rap.addons.dropdown/build.properties
@@ -1,5 +1,4 @@
-source.. = src/,\
-           js/
+source.. = src/
 output.. = bin/
 bin.includes = META-INF/,\
                .
diff --git a/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDown.js b/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDown.js
deleted file mode 100644
index 2e8c2f5..0000000
--- a/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDown.js
+++ /dev/null
@@ -1,631 +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
- ******************************************************************************/
-
-//@ sourceURL=DropDown.js
-
-(function(){
-
-  var TAB = String.fromCharCode( 9 );
-  var getPadding = function() {
-    var manager = rwt.theme.AppearanceManager.getInstance();
-    var stylemap = manager.styleFrom( "list-item", {} );
-    return stylemap.padding || [ 5, 5, 5, 5 ];
-  };
-  var getShadow = function() {
-    var manager = rwt.theme.AppearanceManager.getInstance();
-    var stylemap = manager.styleFrom( "combo-list", {} );
-    return stylemap.shadow || null;
-  };
-  var styleMap = null;
-  var getStyleMap = function() {
-    if( styleMap == null ) {
-      var manager = rwt.theme.AppearanceManager.getInstance();
-      try {
-        styleMap = manager.styleFrom( "dropdown", {} );
-      } catch( ex ) {
-      }
-      if( styleMap == null ) {
-        styleMap = {};
-        styleMap.border = new rwt.html.Border( 1, "solid", "#000000" );
-      }
-      styleMap.padding = getPadding();
-      styleMap.shadow = getShadow();
-    }
-   return styleMap;
-  };
-
-  var eventTypes = {
-    Selection : SWT.Selection,
-    DefaultSelection : SWT.DefaultSelection,
-    Show : SWT.Show,
-    Hide : SWT.Hide
-  };
-
-  var forwardedKeys = {
-    Enter : true,
-    Up : true,
-    Down : true,
-    PageUp : true,
-    PageDown : true,
-    Escape : true
-  };
-
-  /**
-   * @public
-   * @namespace
-   * @name rwt
-   */
-  /**
-   * @public
-   * @namespace
-   */
-  rwt.dropdown = {};
-
-  /**
-   * @class Instances of DropDown represent the server-side counterpart of a DropDown widget
-   */
-  rwt.dropdown.DropDown = function( parent, markupEnabled ) {
-    this._ = {};
-    this._.hideTimer = new rwt.client.Timer( 0 );
-    this._.hideTimer.addEventListener( "interval", checkFocus, this );
-    this._.popup = createPopup(); // TODO: create on demand
-    this._.grid = createGrid( this._.popup, markupEnabled );
-    this._.visibleItemCount = 5;
-    this._.parent = parent;
-    this._.items = [];
-    this._.columns = null;
-    this._.inMouseSelection = false;
-    this._.events = createEventsMap();
-    this._.parent.addEventListener( "keypress", onTextKeyEvent, this );
-    this._.parent.addEventListener( "flush", onTextFlush, this );
-    this._.grid._sendSelectionChange = bind( this, onSelection );
-    this._.grid.addEventListener( "keypress", onKeyEvent, this );
-    this._.grid.addEventListener( "mousedown", onMouseDown, this );
-    this._.grid.addEventListener( "mouseup", onMouseUp, this );
-    this._.popup.addEventListener( "appear", onAppear, this );
-    this._.popup.getFocusRoot().addEventListener( "changeFocusedChild", onFocusChange, this );
-    this._.parentFocusRoot = parent.getFocusRoot();
-    this._.parentFocusRoot.addEventListener( "changeFocusedChild", onFocusChange, this );
-    parent.addEventListener( "appear", onTextAppear, this );
-    this._.visibility = false;
-  };
-
-  rwt.dropdown.DropDown.prototype = {
-
-    classname : "rwt.dropdown.DropDown",
-
-    setItems : function( items ) {
-      this.setSelectionIndex( -1 );
-      this._.items = rwt.util.Arrays.copy( items );
-      renderGridItems.call( this );
-      if( this._.grid.isSeeable() ) {
-        renderLayout.call( this );
-      }
-      updateScrollBars.call( this );
-      if( this._.visibility && items.length > 0 ) {
-        this.show();
-      } else if( this._.visibility && items.length === 0 ) {
-        this._.popup.hide();
-      }
-    },
-
-    getItemCount : function() {
-      return this._.grid.getRootItem().getChildrenLength();
-    },
-
-    /**
-     * Not intended to be called by ClientScripting
-     */
-    setVisibleItemCount : function( itemCount ) {
-      this._.visibleItemCount = itemCount;
-      if( this._.grid.isSeeable() ) {
-        renderLayout.call( this );
-      }
-      // TODO: hide dropdown completely if no items are visible
-      updateScrollBars.call( this );
-    },
-
-    setSelectionIndex : function( index ) {
-      if( index < -1 || index >= this.getItemCount() || isNaN( index ) ) {
-        throw new Error( "Can not select item: Index " + index + " not valid" );
-      }
-      if( this.getSelectionIndex() === index ) {
-        return;
-      }
-      // This is more than optimization, it prevents too early rendering that can crash the client:
-      this._.grid._inServerResponse = rwt.util.Functions.returnTrue;
-      this._.grid.deselectAll();
-      if( index > -1 ) {
-        var item = this._.grid.getRootItem().getChild( index );
-        this._.grid.selectItem( item );
-        this._.grid.setFocusItem( item );
-        this._.grid._scrollIntoView( index, item );
-      } else {
-        this._.grid.setFocusItem( null );
-        this._.grid.setTopItemIndex( 0 );
-      }
-      delete this._.grid._inServerResponse;
-      this._.grid._sendSelectionChange(); // Not called for selection changes by API/Server
-    },
-
-    getSelectionIndex : function() {
-      var selection = this._.grid._selection;
-      var result = -1;
-      if( selection[ 0 ] ) {
-        result = this._.grid.getRootItem().indexOf( selection[ 0 ] );
-      }
-      return result;
-    },
-
-    setVisible : function( value ) {
-      if( value ) {
-        this.show();
-      } else {
-        this.hide();
-      }
-    },
-
-    getVisible : function() {
-      return this._.visibility;
-    },
-
-    show : function() {
-      checkDisposed( this );
-      if( !this._.visibility ) {
-        this._.visibility = true;
-        fireEvent.call( this, "Show" );
-        if( !rwt.remote.EventUtil.getSuspended() ) {
-          rap.getRemoteObject( this ).set( "visible", true );
-        }
-      }
-      if( this._.items.length > 0 && this._.parent.isCreated() && !this._.popup.isSeeable() ) {
-        this._.grid.setFont( this._.parent.getFont() );
-        renderLayout.call( this );
-        this._.popup.show();
-        if( !hasFocus( this._.parent ) ) {
-          this._.grid.getFocusRoot().setFocusedChild( this._.grid );
-        }
-      }
-    },
-
-    hide : function() {
-      checkDisposed( this );
-      if( this._.visibility ) {
-        this._.visibility = false;
-        fireEvent.call( this, "Hide" );
-        if( !rwt.remote.EventUtil.getSuspended() ) {
-          rap.getRemoteObject( this ).set( "visible", false );
-        }
-      }
-      this._.popup.setVisibility( false ); // makes it disappear immediately
-      this._.popup.setDisplay( false ); // forces the popup to appear after all parents are layouted
-    },
-
-    setData : function( key, value ) {
-      if( !this._.widgetData ) {
-        this._.widgetData = {};
-      }
-      if( arguments.length === 1 && key instanceof Object ) {
-        rwt.util.Objects.mergeWith( this._.widgetData, key );
-      } else {
-        this._.widgetData[ key ] = value;
-      }
-    },
-
-    getData : function( key ) {
-      if( !this._.widgetData ) {
-        return null;
-      }
-      var data = this._.widgetData[ key ];
-      return data === undefined ? null : data;
-    },
-
-    addListener : function( type, listener ) {
-      if( this._.events[ type ] ) {
-        if( this._.events[ type ].indexOf( listener ) === -1 ) {
-          this._.events[ type ].push( listener );
-        }
-      } else {
-        throw new Error( "Unkown type " + type );
-      }
-    },
-
-    removeListener : function( type, listener ) {
-      if( this._ && this._.events[ type ] ) {
-        var index = this._.events[ type ].indexOf( listener );
-        rwt.util.Arrays.removeAt( this._.events[ type ], index );
-      }
-    },
-
-    /**
-     * Experimental!
-     */
-    setColumns : function( columns ) {
-      this._.columns = columns;
-      this._.grid.setColumnCount( columns.length );
-      if( this._.grid.isSeeable() ) {
-        renderLayout.call( this );
-      }
-    },
-
-    /**
-     * Not intended to be called by ClientScripting
-     */
-    destroy : function() {
-      if( !this.isDisposed() ) {
-        var parentFocusRoot = this._.parentFocusRoot;
-        if( parentFocusRoot && !parentFocusRoot.isDisposed() ) {
-          parentFocusRoot.removeEventListener( "changeFocusedChild", onFocusChange, this );
-        }
-        var popupFocusRoot = this._.popup.getFocusRoot();
-        if( popupFocusRoot && !popupFocusRoot.isDisposed() ) {
-          popupFocusRoot.removeEventListener( "changeFocusedChild", onFocusChange, this );
-        }
-        this._.grid.getRootItem().setItemCount( 0 );
-        if( !this._.parent.isDisposed() ) {
-          this._.parent.removeEventListener( "appear", onTextAppear, this );
-          this._.parent.removeEventListener( "keydown", onTextKeyEvent, this );
-          this._.parent.removeEventListener( "flush", onTextFlush, this );
-          this._.parent.removeEventListener( "keypress", onTextKeyEvent, this );
-          this._.popup.destroy();
-        }
-        this._.hideTimer.dispose();
-        if( this._.widgetData ) {
-          for( var key in this._.widgetData ) {
-            this._.widgetData[ key ] = null;
-          }
-        }
-        for( var key in this._ ) {
-          this._[ key ] = null;
-        }
-        this._ = null;
-      }
-    },
-
-    isDisposed : function() {
-      return this._ === null;
-    },
-
-    toString : function() {
-      return "DropDown";
-    }
-
-  };
-
-  ////////////
-  // "statics"
-
-  rwt.dropdown.DropDown.searchItems = function( items, query, limit ) {
-    var resultIndicies = [];
-    var filter = function( item, index ) {
-      if( query.test( item ) ) {
-        resultIndicies.push( index );
-        return true;
-      } else {
-        return false;
-      }
-    };
-    var resultLimit = typeof limit === "number" ? limit : 0;
-    var resultItems = filterArray( items, filter, resultLimit );
-    return {
-      "items" : resultItems,
-      "indicies" : resultIndicies,
-      "query" : query,
-      "limit" : resultLimit
-    };
-  };
-
-  rwt.dropdown.DropDown.createQuery = function( str, caseSensitive, ignorePosition ) {
-    var escapedStr = rwt.dropdown.DropDown.escapeRegExp( str );
-    return new RegExp( ( ignorePosition ? "" : "^" ) + escapedStr, caseSensitive ? "" : "i" );
-  };
-
-  rwt.dropdown.DropDown.escapeRegExp = function( str ) {
-    return str.replace( /[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&" );
-  };
-
-  ////////////
-  // Internals
-
-  var renderLayout = function() {
-    var font = this._.grid.getFont();
-    // NOTE: Guessing the lineheight to be 1.3
-    var padding = getStyleMap().padding;
-    var itemHeight = Math.floor( font.getSize() * 1.3 ) + padding[ 0 ] + padding[ 2 ];
-    var visibleItems = Math.min( this._.visibleItemCount, this.getItemCount() );
-    var gridWidth = calcGridWidth.apply( this );
-    var gridHeight = visibleItems * itemHeight;
-    renderPosition.call( this );
-    var frameWidth = getStyleMap().border.getWidthLeft() * 2;
-    this._.popup.setWidth( gridWidth + frameWidth );
-    this._.popup.setHeight( gridHeight + frameWidth );
-    this._.grid.setDimension( gridWidth, gridHeight );
-    renderItemMetrics.apply( this, [ itemHeight, gridWidth, padding ] );
-  };
-
-  var renderPosition = function() {
-    this._.popup.positionRelativeTo( this._.parent, 0, this._.parent.getHeight() );
-    var docHeight = rwt.widgets.base.ClientDocument.getInstance().getInnerHeight();
-    if( this._.popup.getTop() + this._.popup.getHeight() > docHeight ) {
-      this._.popup.positionRelativeTo( this._.parent, 0, -1 * this._.popup.getHeight() );
-    }
-  };
-
-  var calcGridWidth = function() {
-    var frameWidth = getStyleMap().border.getWidthLeft() * 2;
-    var result = this._.parent.getWidth() - frameWidth;
-    if( this._.columns ) {
-      var columnsSum = 0;
-      for( var i = 0; i < this._.columns.length; i++ ) {
-        columnsSum += this._.columns[ i ];
-      }
-      if( columnsSum > result ) {
-        result = columnsSum;
-      }
-    }
-    return result;
-  };
-
-  var renderItemMetrics = function( itemHeight, itemWidth, padding ) {
-    this._.grid.setItemHeight( itemHeight );
-    if( this._.columns != null ) {
-      var left = 0;
-      for( var i = 0; i < this._.columns.length; i++ ) {
-        var column = this._.columns[ i ];
-        this._.grid.setItemMetrics(
-          i,  // column
-          left, // left
-          column, // width
-          0, // imageLeft
-          0, // imageWidth
-          left + padding[ 3 ], // textLeft
-          column - padding[ 1 ] - padding[ 3 ], // textWidth
-          0, // checkLeft
-          0 // checkWith
-        );
-        left += column;
-      }
-    } else {
-      this._.grid.setItemMetrics(
-        0,  // column
-        0, // left
-        itemWidth, // width
-        0, // imageLeft
-        0, // imageWidth
-        padding[ 3 ], // textLeft
-        itemWidth - padding[ 1 ] - padding[ 3 ], // textWidth
-        0, // checkLeft
-        0 // checkWith
-      );
-    }
-  };
-
-  var renderGridItems = function() {
-    var rootItem = this._.grid.getRootItem();
-    var items = this._.items;
-    this._.grid._inServerResponse = rwt.util.Functions.returnTrue;
-    rootItem.setItemCount( 0 );
-    rootItem.setItemCount( items.length );
-    for( var i = 0; i < items.length; i++ ) {
-      var gridItem = new rwt.widgets.GridItem( rootItem, i, false );
-      if( this._.columns ) {
-        gridItem.setTexts( items[ i ].split( TAB ) );
-      } else {
-        gridItem.setTexts( [ items[ i ] ] );
-      }
-    }
-    delete this._.grid._inServerResponse;
-  };
-
-  var onTextAppear = function() {
-    if( this._.visibility ) {
-      this.show();
-    }
-  };
-
-  var onTextKeyEvent = function( event ) {
-    var key = event.getKeyIdentifier();
-    if( this._.visibility && forwardedKeys[ key ] ) {
-      event.preventDefault();
-      if( key === "Down" && this.getSelectionIndex() === -1 && this.getItemCount() > 0 ) {
-        this.setSelectionIndex( 0 );
-      } else if( key === "Up" && this.getSelectionIndex() === 0 ) {
-        this.setSelectionIndex( -1 );
-      } else if( key === "Down" && this.getSelectionIndex() === this.getItemCount() - 1 ) {
-        this.setSelectionIndex( -1 );
-      } else if( key === "Up" && this.getSelectionIndex() === -1 && this.getItemCount() > 0 ) {
-        this.setSelectionIndex( this.getItemCount() - 1 );
-      } else {
-        this._.grid.dispatchEvent( event );
-      }
-    }
-  };
-
-  var onTextFlush = function( event ) {
-    var changes = event.getData();
-    if( this._.visibility && ( changes.top || changes.left || changes.width || changes.height ) ) {
-      renderLayout.call( this );
-    }
-  };
-
-  var onKeyEvent = function( event ) {
-    switch( event.getKeyIdentifier() ) {
-      case "Enter":
-        rwt.client.Timer.once( function() {
-          // NOTE : This async call ensures that the key events is processed before the
-          //        DefaultSelection event. A better solution would be to do this for all forwarded
-          //        key events, but this would be complicated since the event is disposed by the
-          //        time dispatch would be called on the grid.
-          fireEvent.call( this, "DefaultSelection" );
-        }, this, 0 );
-      break;
-      case "Escape":
-        this.hide();
-      break;
-    }
-  };
-
-  var onSelection = function( event ) {
-    if( !rwt.remote.EventUtil.getSuspended() ) {
-      rap.getRemoteObject( this ).set( "selectionIndex", this.getSelectionIndex() );
-    }
-    fireEvent.call( this, "Selection" );
-  };
-
-  var onMouseDown = function( event ) {
-    if( event.getOriginalTarget() instanceof rwt.widgets.base.GridRow ) {
-      this._.inMouseSelection = true;
-    }
-  };
-
-  var onMouseUp = function( event ) {
-    if( this._.inMouseSelection && event.getOriginalTarget() instanceof rwt.widgets.base.GridRow ) {
-      this._.inMouseSelection = false;
-      fireEvent.call( this, "DefaultSelection" );
-    }
-  };
-
-  var onAppear = function( event ) {
-    // NOTE: widget absolute position can change without changing it's relative postion, therefore:
-    renderPosition.call( this );
-  };
-
-  var onFocusChange = function( event ) {
-    // NOTE : There is no secure way to get the newly focused widget at this point because
-    //        it may have another focus root. Therefore we use this timeout and check afterwards:
-    this._.hideTimer.start();
-  };
-
-  var fireEvent = function( type ) {
-    var event = {
-      "text" : "",
-      "index" : -1
-    };
-    if( type === "Selection" || type === "DefaultSelection" ) {
-      var selection = this._.grid._selection;
-      if( selection.length > 0 ) {
-        event.index = this.getSelectionIndex();
-        event.text = this._.items[ event.index ];
-      }
-      notify.apply( this, [ type, event ] );
-      if( !rwt.remote.EventUtil.getSuspended() ) { // TODO [tb] : ClientScripting must reset flag
-        // TODO : merge multiple changes? How long?
-        rap.getRemoteObject( this ).notify( type, event );
-        if( type === "DefaultSelection" && selection.length > 0 ) {
-          this.hide();
-        }
-      }
-    } else {
-      notify.apply( this, [ type, event ] );
-    }
-  };
-
-  var checkFocus = function() {
-    this._.hideTimer.stop();
-    if( !hasFocus( this._.parent ) && !hasFocus( this._.popup ) && this._.visibility ) {
-      this.hide();
-    }
-  };
-
-  var updateScrollBars = function() {
-    var scrollable = this._.visibleItemCount < this.getItemCount();
-    // TODO [tb] : Horizontal scrolling would require measuring all items preferred width
-    this._.grid.setScrollBarsVisible( false, scrollable );
-  };
-
-  var notify = function( type, event ) {
-    var listeners = this._.events[ type ];
-    var eventProxy = rwt.util.Objects.merge( {
-      "widget" : this,
-      "type" : eventTypes[ type ]
-    }, event );
-    for( var i = 0; i < listeners.length; i++ ) {
-      listeners[ i ]( eventProxy );
-    }
-  };
-
-  var createPopup = function() {
-    var result = new rwt.widgets.base.Popup();
-    result.addToDocument();
-    result.setBorder( getStyleMap().border );
-    result.setBackgroundColor( "#ffffff" );
-    result.setDisplay( false );
-    result.setShadow( getStyleMap().shadow );
-    result.setRestrictToPageOnOpen( false );
-    result.setAutoHide( false );
-    return result;
-  };
-
-  var createGrid = function( parent, markupEnabled ) {
-    var result = new rwt.widgets.Grid( {
-      "fullSelection" : true,
-      "appearance" : "table",
-      "markupEnabled" : markupEnabled
-    } );
-    result.setLocation( 0, 0 );
-    result.setParent( parent );
-    result.setTreeColumn( -1 ); // TODO [tb] : should be default?
-    result.setScrollBarsVisible( false, false );
-    result._sendItemFocusChange = rwt.util.Functions.returnTrue;
-    result._sendTopItemIndexChange = rwt.util.Functions.returnTrue;
-    result.getRenderConfig().focused = true;
-    result.addEventListener( "changeFocused", function() {
-      result.getRenderConfig().focused = true;
-    } );
-    return result;
-  };
-
-  var checkDisposed = function( dropdown ) {
-    if( dropdown.isDisposed() ) {
-      throw new Error( "DropDown is disposed" );
-    }
-  };
-
-  var createEventsMap = function() {
-    var result = {};
-    for( var key in eventTypes ) {
-      result[ key ] = [];
-    }
-    return result;
-  };
-
-  var bind = function( context, method ) {
-    return function() {
-      return method.apply( context, arguments );
-    };
-  };
-
-  var hasFocus = function( control ) {
-    var root = control.getFocusRoot();
-    var result =    control.getFocused()
-                 || ( control.contains && control.contains( root.getFocusedChild() ) );
-    return result;
-  };
-
-  var filterArray = function( arr, func, limit ) {
-    var result = [];
-    if( typeof arr.filter === "function" && limit === 0 ) {
-      result = arr.filter( func );
-    } else {
-      for( var i = 0; i < arr.length; i++ ) {
-        if( func( arr[ i ], i ) ) {
-          result.push( arr[ i ] );
-          if( limit !== 0 && result.length === limit ) {
-            break;
-          }
-        }
-      }
-    }
-    return result;
-  };
-
-
-}());
diff --git a/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDownHandler.js b/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDownHandler.js
deleted file mode 100644
index 064eb32..0000000
--- a/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDownHandler.js
+++ /dev/null
@@ -1,45 +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
- ******************************************************************************/
-
-(function(){
-  'use strict';
-
-  rap.registerTypeHandler( "rwt.dropdown.DropDown", {
-
-    factory : function( properties ) {
-      var control = rwt.remote.ObjectRegistry.getObject( properties.parent );
-      return new rwt.dropdown.DropDown( control, properties.markupEnabled );
-    },
-
-    properties : [ "items", "visible", "visibleItemCount", "columns" ],
-
-    events : [ "Selection", "DefaultSelection" ],
-
-    methods : [ "setData", "addListener", "removeListener" ],
-
-    methodHandler: {
-      "addListener": function( widget, properties ) {
-        rwt.remote.HandlerUtil.callWithTarget( properties.listenerId, function( targetFunction ) {
-          widget.addListener( properties.eventType, targetFunction );
-        } );
-      },
-      "removeListener": function( widget, properties ) {
-        rwt.remote.HandlerUtil.callWithTarget( properties.listenerId, function( targetFunction ) {
-          widget.removeListener( properties.eventType, targetFunction );
-        } );
-      }
-    },
-
-    destructor : "destroy"
-
-  } );
-
-}());
diff --git a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/DropDown.java b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/DropDown.java
index fa87f9f..1790de9 100644
--- a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/DropDown.java
+++ b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/DropDown.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013 EclipseSource.
+ * Copyright (c) 2013, 2014 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
@@ -10,7 +10,6 @@
  ******************************************************************************/
 package org.eclipse.rap.addons.dropdown;
 
-import org.eclipse.rap.addons.dropdown.internal.resources.DropDownResources;
 import org.eclipse.rap.json.JsonArray;
 import org.eclipse.rap.json.JsonObject;
 import org.eclipse.rap.json.JsonValue;
@@ -61,7 +60,9 @@
  * </p>
  *
  */
-@SuppressWarnings("restriction")
+@SuppressWarnings({
+  "restriction", "deprecation"
+})
 public class DropDown extends Widget {
 
   private static final String COLUMNS = "columns";
@@ -97,7 +98,6 @@
   public DropDown( Control parent ) {
     super( parent, 0 );
     this.parent = parent;
-    DropDownResources.ensure();
     getRemoteObject().set( "parent", WidgetUtil.getId( parent ) );
     getRemoteObject().setHandler( new InternalOperationHandler() );
     disposeListener = new Listener() {
@@ -385,9 +385,8 @@
     //             This implementation assumes the client merges the new values with the existing
     //             ones, which is the case in the WebClient
     if( WidgetDataUtil.getDataKeys().contains( key ) ) {
-      @SuppressWarnings( "deprecation" )
       JsonObject data = new JsonObject().add( key, JsonUtil.createJsonValue( value ) );
-      remoteObject.call( "setData", data );
+      remoteObject.set( "data", data );
     }
   }
 
diff --git a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/internal/resources/DropDownResources.java b/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/internal/resources/DropDownResources.java
deleted file mode 100644
index 87b9b83..0000000
--- a/bundles/org.eclipse.rap.addons.dropdown/src/org/eclipse/rap/addons/dropdown/internal/resources/DropDownResources.java
+++ /dev/null
@@ -1,83 +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.dropdown.internal.resources;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.eclipse.rap.rwt.RWT;
-import org.eclipse.rap.rwt.client.service.JavaScriptLoader;
-
-
-public final class DropDownResources {
-
-  public static final String[] SCRIPTS = new String[] {
-    "rwt/dropdown/DropDown.js",
-    "rwt/dropdown/DropDownHandler.js"
-  };
-
-  private static final boolean DEBUG = true;
-
-  public static void ensure() {
-    ensureRegistered();
-    ensureLoaded();
-  }
-
-  private static void ensureRegistered() {
-    if( DEBUG && RWT.getResourceManager().isRegistered( SCRIPTS[ 0 ] ) ) {
-      deregister();
-    }
-    if( !RWT.getResourceManager().isRegistered( SCRIPTS[ 0 ] ) ) {
-      try {
-        register();
-      } catch( IOException exception ) {
-        throw new RuntimeException( "Failed to register resources", exception );
-      }
-    }
-  }
-
-  private static void ensureLoaded() {
-    for( String script : SCRIPTS ) {
-      JavaScriptLoader loader = RWT.getClient().getService( JavaScriptLoader.class );
-      loader.require( RWT.getResourceManager().getLocation( script ) );
-    }
-  }
-
-  private static void register() throws IOException {
-    for( String script : SCRIPTS ) {
-      InputStream inputStream = getResourceAsStream( script );
-      try {
-        RWT.getResourceManager().register( script, inputStream );
-      } finally {
-        inputStream.close();
-      }
-    }
-  }
-
-  private static void deregister() {
-    for( String script : SCRIPTS ) {
-      RWT.getResourceManager().unregister( script );
-    }
-  }
-
-  public static InputStream getResourceAsStream( String resourceName ) {
-    ClassLoader classLoader = DropDownResources.class.getClassLoader();
-    InputStream inputStream = classLoader.getResourceAsStream( resourceName );
-    if( inputStream == null ) {
-      throw new RuntimeException( "Resource not found: " + resourceName );
-    }
-    return inputStream;
-  }
-
-  private DropDownResources() {
-  }
-
-}
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/.classpath b/tests/org.eclipse.rap.addons.dropdown.test/.classpath
index 7db29ef..64c5e31 100644
--- a/tests/org.eclipse.rap.addons.dropdown.test/.classpath
+++ b/tests/org.eclipse.rap.addons.dropdown.test/.classpath
@@ -3,6 +3,5 @@
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="js"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/DropDown JS Tests.launch b/tests/org.eclipse.rap.addons.dropdown.test/DropDown JS Tests.launch
deleted file mode 100644
index bc00a50..0000000
--- a/tests/org.eclipse.rap.addons.dropdown.test/DropDown JS Tests.launch
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.pde.ui.EquinoxLauncher">
-<booleanAttribute key="append.args" value="true"/>
-<booleanAttribute key="automaticAdd" value="false"/>
-<booleanAttribute key="automaticValidate" value="true"/>
-<stringAttribute key="bootstrap" value=""/>
-<stringAttribute key="checked" value="[NONE]"/>
-<booleanAttribute key="clearConfig" value="true"/>
-<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/RAP Client Tests"/>
-<booleanAttribute key="default" value="true"/>
-<booleanAttribute key="default_auto_start" value="true"/>
-<intAttribute key="default_start_level" value="4"/>
-<booleanAttribute key="includeOptional" value="false"/>
-<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
-</listAttribute>
-<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consolelog -console -clean"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true -Dosgi.noShutdown=true&#13;&#10;-Dorg.osgi.service.http.port=8081&#13;&#10;-Dorg.eclipse.rap.rwt.developmentMode=true"/>
-<stringAttribute key="pde.version" value="3.3"/>
-<booleanAttribute key="show_selected_only" value="false"/>
-<stringAttribute key="target_bundles" value="com.ibm.icu.base@default:default,javax.servlet@default:default,javax.xml@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.runtime@default:true,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.util@default:default,org.eclipse.jetty.continuation@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.rap.jface@default:default,org.eclipse.rap.rwt.osgi@default:default,org.hamcrest.core@default:default,org.junit@default:default,org.mockito.mockito-all@default:default,org.mozilla.javascript@default:default"/>
-<booleanAttribute key="tracing" value="false"/>
-<booleanAttribute key="useCustomFeatures" value="false"/>
-<booleanAttribute key="useDefaultConfigArea" value="false"/>
-<stringAttribute key="workspace_bundles" value="org.eclipse.rap.addons.dropdown.test@default:default,org.eclipse.rap.addons.dropdown@default:default,org.eclipse.rap.clientscripting@default:default,org.eclipse.rap.jstestrunner@default:default,org.eclipse.rap.rwt.jstest@default:default,org.eclipse.rap.rwt@default:default"/>
-</launchConfiguration>
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/OSGI-INF/resourceContribution.xml b/tests/org.eclipse.rap.addons.dropdown.test/OSGI-INF/resourceContribution.xml
deleted file mode 100644
index a084f30..0000000
--- a/tests/org.eclipse.rap.addons.dropdown.test/OSGI-INF/resourceContribution.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.rap.addons.dropdown.test.resources">
-   <implementation class="org.eclipse.rap.addons.dropdown.test.internal.DropDownResourcesContribution"/>
-   <service>
-      <provide interface="org.eclipse.rap.rwt.jstest.TestContribution"/>
-   </service>
-</scr:component>
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/OSGI-INF/testContribution.xml b/tests/org.eclipse.rap.addons.dropdown.test/OSGI-INF/testContribution.xml
deleted file mode 100644
index 8374fd0..0000000
--- a/tests/org.eclipse.rap.addons.dropdown.test/OSGI-INF/testContribution.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.rap.addons.dropdown.testResources">
-   <implementation class="org.eclipse.rap.addons.dropdown.test.internal.DropDownTestContribution"/>
-   <service>
-      <provide interface="org.eclipse.rap.rwt.jstest.TestContribution"/>
-   </service>
-</scr:component>
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/build.properties b/tests/org.eclipse.rap.addons.dropdown.test/build.properties
index 9bb83a0..018ec84 100644
--- a/tests/org.eclipse.rap.addons.dropdown.test/build.properties
+++ b/tests/org.eclipse.rap.addons.dropdown.test/build.properties
@@ -1,7 +1,5 @@
-source.. = src/,\
-           js/
+source.. = src/
 output.. = bin/
 bin.includes = META-INF/,\
-               .,\
-               OSGI-INF/
+               .
 javacDefaultEncoding.. = UTF-8
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/js/rwt/dropdown/DropDown_Test.js b/tests/org.eclipse.rap.addons.dropdown.test/js/rwt/dropdown/DropDown_Test.js
deleted file mode 100644
index 0010d58..0000000
--- a/tests/org.eclipse.rap.addons.dropdown.test/js/rwt/dropdown/DropDown_Test.js
+++ /dev/null
@@ -1,1233 +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
- ******************************************************************************/
-
-(function(){
-'use strict';
-
-var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
-var DropDown = rwt.dropdown.DropDown;
-
-var ITEM_HEIGHT = 25; // Depends on padding which is currently taken from list theming
-var PADDING_LEFT = 10;
-var PADDING_RIGHT = 10;
-
-var shell;
-var widget;
-var dropdown;
-var popup;
-var grid;
-var hideTimer;
-
-rwt.qx.Class.define( "rwt.dropdown.DropDown_Test", {
-
-  extend : rwt.qx.Object,
-
-  members : {
-
-    setUp : function() {
-      shell = TestUtil.createShellByProtocol( "w2" );
-      shell.open();
-      shell.setBorder( null );
-      shell.setLocation( 10, 20 );
-      this.createExample();
-      TestUtil.flush();
-    },
-
-    tearDown : function() {
-      shell.destroy();
-      dropdown.destroy();
-    },
-
-    testConstructor_AddsPopupToDocument : function() {
-      assertIdentical( rwt.widgets.base.ClientDocument.getInstance(), popup.getParent() );
-    },
-
-    testConstructor_SetsDefaultPopUpStyling : function() {
-      assertEquals( "solid", popup.getBorder().getStyle() );
-      assertEquals( "#000000", popup.getBorder().getColor() );
-      assertEquals( [ 1, 1, 1, 1] , popup.getBorder().getWidths() );
-      assertEquals( "#ffffff", popup.getBackgroundColor() );
-    },
-
-    testConstructor_DoesNotMakePopUpVisible : function() {
-      TestUtil.flush();
-      assertFalse( popup.isSeeable() );
-    },
-
-    testConstructor_CreatesGridInPopup : function() {
-      assertTrue( grid instanceof rwt.widgets.Grid );
-      assertIdentical( popup, grid.getParent() );
-    },
-
-    testConstructor_PositionsGrid : function() {
-      assertEquals( 0, grid.getLeft() );
-      assertEquals( 0, grid.getTop() );
-    },
-
-    testConstructor_SetsMarkupEnabledFalse : function() {
-      assertTrue( !grid.getRenderConfig().markupEnabled );
-    },
-
-    testConstructor_SetsMarkupEnabledTrue : function() {
-      widget = new rwt.widgets.Composite();
-      widget.setParent( shell );
-      dropdown = new rwt.dropdown.DropDown( widget, true );
-      grid = dropdown._.grid;
-
-      assertTrue( grid.getRenderConfig().markupEnabled );
-    },
-
-    testConstructor_FakesGridFocus : function() {
-      assertTrue( grid.getRenderConfig().focused );
-    },
-
-    testConstructor_FakesGridFocusAfterBlur : function() {
-      grid.setFocused( false );
-      assertTrue( grid.getRenderConfig().focused );
-    },
-
-    testConstructor_HideScrollbars : function() {
-      assertFalse( grid.getVerticalBar().getVisibility() );
-      assertFalse( grid.getHorizontalBar().getVisibility() );
-    },
-
-    testSetData_SetDataWithTwoParameters : function() {
-      dropdown.setData( "foo", "bar" );
-
-      assertEquals( "bar", dropdown.getData( "foo" ) );
-    },
-
-    testSetData_SetDataWithMap : function() {
-      dropdown.setData( "x", "y" );
-      dropdown.setData( { "foo" : "bar" } );
-
-      assertEquals( "y", dropdown.getData( "x" ) );
-      assertEquals( "bar", dropdown.getData( "foo" ) );
-    },
-
-    testShow_DoesNotMakePopUpSeeableIfNoItemsAreSet : function() {
-      showDropDown( [] );
-
-      assertFalse( popup.isSeeable() );
-    },
-
-    testShow_MakesPopUpSeeable : function() {
-      showDropDown();
-
-      assertTrue( popup.isSeeable() );
-    },
-
-    testSetItems_MakesPopUpSeeableIfVisibleIsTrueAndLengthIsGreaterZero : function() {
-      showDropDown( [] );
-
-      dropdown.setItems( [ "a" ] );
-      TestUtil.flush();
-
-      assertTrue( popup.isSeeable() );
-    },
-
-    testSetItems_MakesPopUpNotSeeableIfLengthIsZero : function() {
-      showDropDown();
-
-      dropdown.setItems( [] );
-      TestUtil.flush();
-
-      assertFalse( popup.isSeeable() );
-      assertTrue( dropdown.getVisible() );
-    },
-
-    testShow_FocusesGrid : function() {
-      showDropDown();
-
-      assertTrue( grid.getFocused() );
-    },
-
-    testShow_LeavesParentFocused : function() {
-      widget.setTabIndex( 1 );
-      widget.focus();
-      showDropDown();
-
-      assertFalse( grid.getFocused() );
-      assertTrue( widget.getFocused() );
-    },
-
-    testShow_LeavesSiblingFocused : function() {
-      var focusable = new rwt.widgets.Button( "push" );
-      focusable.setParent( widget );
-      TestUtil.flush();
-      focusable.focus();
-      showDropDown();
-
-      assertFalse( grid.getFocused() );
-      assertTrue( focusable.getFocused() );
-    },
-
-    testDoNotHideOnParentClick : function() {
-      var focusable = new rwt.widgets.Button( "push" );
-      focusable.setParent( widget );
-      showDropDown();
-
-      TestUtil.click( focusable );
-      forceTimer();
-
-      assertTrue( popup.isSeeable() );
-    },
-
-    testDoNotHideOnFocusableParentClick : function() {
-      widget.setTabIndex( 1 );
-      widget.contains = rwt.util.Functions.returnFalse;
-      showDropDown();
-
-      TestUtil.click( widget );
-      forceTimer();
-
-      assertTrue( popup.isSeeable() );
-    },
-
-    testHideOnShellClick : function() {
-      showDropDown();
-
-      TestUtil.click( shell );
-      forceTimer();
-
-      assertFalse( popup.isSeeable() );
-    },
-
-    testHideOnEscape : function() {
-      showDropDown();
-
-      TestUtil.press( grid, "Escape" );
-
-      assertFalse( popup.isSeeable() );
-    },
-
-    testHideOnEnter : function() {
-      showDropDown();
-      dropdown.setItems( [ "a", "b" ] );
-      dropdown.setSelectionIndex( 0 );
-
-      TestUtil.press( grid, "Enter" );
-      TestUtil.forceTimerOnce();
-
-      assertFalse( popup.isSeeable() );
-    },
-
-    testHideOnItemClick : function() {
-      dropdown.setItems( [ "a", "b" ] );
-      showDropDown();
-
-      clickItem( 1 );
-
-      assertFalse( popup.isSeeable() );
-    },
-
-    testDoNotHideOnScrollbarClick : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      dropdown.setVisibleItemCount( 2 );
-      showDropDown();
-
-      TestUtil.click( grid.getVerticalBar() );
-
-      assertTrue( popup.isSeeable() );
-    },
-
-    testShellClickAfterDropDownDisposeDoesNotCrash : function() {
-      showDropDown();
-      dropdown.destroy();
-      TestUtil.flush();
-
-      TestUtil.click( shell );
-      forceTimer();
-
-      assertFalse( popup.isSeeable() );
-    },
-
-    testShellClickAfterWidgetDisposeDoesNotCrash : function() {
-      widget.focus();
-      widget.destroy();
-      dropdown.destroy();
-      TestUtil.flush();
-
-      TestUtil.click( shell );
-      forceTimer();
-
-      assertFalse( popup.isSeeable() );
-    },
-
-    testShow_CalledBeforeCreatedMakesPopUpVisible : function() {
-      dropdown.destroy();
-      this.createExample();
-
-      showDropDown();
-
-      assertTrue( popup.isSeeable() );
-    },
-
-    testHide_MakesPopUpInvisible : function() {
-      showDropDown();
-
-      dropdown.hide();
-      TestUtil.flush();
-
-      assertFalse( popup.isSeeable() );
-    },
-
-    testHide_SendsVisible : function() {
-      showDropDown();
-
-      dropdown.hide();
-      rwt.remote.Connection.getInstance().send();
-
-      var message = TestUtil.getMessageObject();
-      assertFalse( message.findSetProperty( "w3", "visible" ) );
-    },
-
-    testHide_DoesNotSendVisibleInResponse : function() {
-      showDropDown();
-      TestUtil.clearRequestLog();
-
-      TestUtil.fakeResponse( true );
-      dropdown.hide();
-      TestUtil.fakeResponse( false );
-      rwt.remote.Connection.getInstance().send();
-
-      var message = TestUtil.getMessageObject();
-      assertNull( message.findSetOperation( "w3", "visible" ) );
-    },
-
-    testHide_DoesNotSendVisibleIfAlreadyInvisible : function() {
-      dropdown.hide();
-      rwt.remote.Connection.getInstance().send();
-
-      var message = TestUtil.getMessageObject();
-      assertNull( message.findSetOperation( "w3", "visible" ) );
-    },
-
-    testShow_PositionsPopUp : function() {
-      showDropDown();
-
-      assertEquals( 20, popup.getLeft() );
-      assertEquals( 70, popup.getTop() );
-    },
-
-    testShow_PositionsPopUpWhileParentIsInLayoutQueueForTop : function() {
-      // NOTE: this won't be effective if the text changes position soley because it's parent
-      // changes position. For this case the popup will re-layout in the appear event (see below),
-      // but this assumes that it is not visible while the text parent changes position.
-      widget.setTop( 50 );
-      showDropDown();
-
-      assertEquals( 20, popup.getLeft() );
-      assertEquals( 100, popup.getTop() );
-    },
-
-    testShow_PositionsPopUpWhileParentIsInLayoutQueueForLeft : function() {
-      widget.setLeft( 20 );
-      showDropDown();
-
-      assertEquals( 30, popup.getLeft() );
-      assertEquals( 70, popup.getTop() );
-    },
-
-    testShow_PositionsPopUpWhileParentIsInLayoutQueueForHeight : function() {
-      widget.setHeight( 50 );
-      showDropDown();
-
-      assertEquals( 20, popup.getLeft() );
-      assertEquals( 90, popup.getTop() );
-    },
-
-    testShow_LayoutsPopUpWhileParentIsInLayoutQueueForWidth : function() {
-      widget.setWidth( 150 );
-      showDropDown();
-
-      assertEquals( 150, popup.getWidth() );
-    },
-
-    testShow_LayoutsPopUpWhenParentAppearsAfterShellChangesPosition : function() {
-      showDropDown();
-      dropdown.hide();
-
-      shell.setTop( 50 );
-      dropdown.show();
-      TestUtil.flush();
-
-      assertEquals( 100, popup.getTop() );
-    },
-
-    testShow_LayoutsPopUpOnTopOfParentIfNotEnoughSpace : function() {
-      var doc = rwt.widgets.base.ClientDocument.getInstance();
-      doc.getInnerHeight = function() { return 100; };
-
-      shell.setTop( 40 );
-      showDropDown();
-
-      assertEquals( 33, popup.getTop() );
-      delete doc.getInnerHeight;
-    },
-
-    testShow_SendsVisible : function() {
-      showDropDown();
-      rwt.remote.Connection.getInstance().send();
-
-      var message = TestUtil.getMessageObject();
-      assertTrue( message.findSetProperty( "w3", "visible" ) );
-    },
-
-    testShow_DoesNotSendVisibleInResponse : function() {
-      TestUtil.fakeResponse( true );
-      showDropDown();
-      TestUtil.fakeResponse( false );
-      rwt.remote.Connection.getInstance().send();
-
-      var message = TestUtil.getMessageObject();
-      assertNull( message.findSetOperation( "w3", "visible" ) );
-    },
-
-    testShow_DoesNotSendVisibleIfAlreadyVisible : function() {
-      showDropDown();
-      TestUtil.clearRequestLog();
-
-      dropdown.show();
-      rwt.remote.Connection.getInstance().send();
-
-      var message = TestUtil.getMessageObject();
-      assertNull( message.findSetOperation( "w3", "visible" ) );
-    },
-
-    testShow_SetsPopUpWidth : function() {
-      showDropDown();
-
-      assertEquals( 100, popup.getWidth() );
-    },
-
-    testShow_PopUpInnerHeightOverVisibleItemCount : function() {
-      var items = [ "a", "b", "c", "d", "a", "b", "c", "d", "a", "b", "c", "d", "a", "b", "c" ];
-      dropdown.setItems( items );
-      dropdown.setVisibleItemCount( 7 );
-      showDropDown();
-
-      assertEquals( 7 * ITEM_HEIGHT, popup.getInnerHeight() );
-    },
-
-    testShow_PopUpInnerHeightUnderVisibleItemCount : function() {
-      var items = [ "a", "b" ];
-      dropdown.setItems( items );
-      dropdown.setVisibleItemCount( 7 );
-      showDropDown();
-
-      assertEquals( 2 * ITEM_HEIGHT, popup.getInnerHeight() );
-    },
-
-    testSetVisibleItemCount_UpdatesScrollbar : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-
-      dropdown.setVisibleItemCount( 2 );
-
-      assertTrue( grid.getVerticalBar().getDisplay() );
-    },
-
-    testSetVisibleItemCount_RendersLayout : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      dropdown.setVisibleItemCount( 3 );
-      showDropDown();
-
-      dropdown.setVisibleItemCount( 2 );
-      TestUtil.flush();
-
-      assertEquals( 2 * ITEM_HEIGHT, popup.getInnerHeight() );
-      assertEquals( 2 * ITEM_HEIGHT, grid.getHeight() );
-    },
-
-    testSetItems_UpdatesScrollbar : function() {
-      dropdown.setVisibleItemCount( 2 );
-
-      dropdown.setItems( [ "a", "b", "c" ] );
-
-      assertTrue( grid.getVerticalBar().getDisplay() );
-    },
-
-    testSetItems_RendersLayout : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      dropdown.setVisibleItemCount( 3 );
-      showDropDown();
-
-      dropdown.setItems( [ "a", "b" ] );
-      TestUtil.flush();
-
-      assertEquals( 2 * ITEM_HEIGHT, popup.getInnerHeight() );
-      assertEquals( 2 * ITEM_HEIGHT, grid.getHeight() );
-    },
-
-    testShow_LayoutsGrid : function() {
-      showDropDown();
-
-      assertEquals( popup.getInnerWidth(), grid.getWidth() );
-      assertEquals( popup.getInnerHeight(), grid.getHeight() );
-    },
-
-    testShow_setsItemMetrics: function() {
-      showDropDown();
-
-      var config = grid.getRenderConfig();
-      assertEquals( 0, config.itemLeft[ 0 ] );
-      assertEquals( grid.getWidth(), config.itemWidth[ 0 ] );
-      assertEquals( PADDING_LEFT, config.itemTextLeft[ 0 ] );
-      assertEquals( grid.getWidth() - PADDING_RIGHT - PADDING_LEFT, config.itemTextWidth[ 0 ] );
-    },
-
-    testShow_SetsGridFont : function() {
-      var font = rwt.html.Font.fromString( "Arial 12px" );
-      shell.setFont( font );
-      widget.setFont( "inherit" );
-      showDropDown();
-
-      assertIdentical( font, grid.getFont() );
-    },
-
-    testShow_SetsItemHeightFor10pxFont : function() {
-      var font = rwt.html.Font.fromString( "Arial 10px" );
-      widget.setFont( font );
-      showDropDown();
-
-      assertEquals( 6 + 6 + 13, grid._itemHeight );
-    },
-
-    testShow_SetsItemHeightFor12pxFont : function() {
-      var font = rwt.html.Font.fromString( "Arial 12px" );
-      widget.setFont( font );
-      showDropDown();
-
-      assertEquals( 6 + 6 + 15, grid._itemHeight );
-    },
-
-    testSetItems_SetsItemsOnGrid : function() {
-      showDropDown();
-
-      dropdown.setItems( [ "a", "b", "c" ] );
-
-      assertEquals( [ "a", "b", "c" ], getGridItems() );
-    },
-
-    testSetColumns_setsColumnCount : function() {
-      dropdown.setColumns( [ 30, 40 ] );
-
-      var config = grid.getRenderConfig();
-      assertEquals( 2, config.columnCount );
-    },
-
-    testSetColumns_setsItemMetrics : function() {
-      dropdown.setColumns( [ 30, 40 ] );
-      showDropDown();
-
-      var config = grid.getRenderConfig();
-      assertEquals( 0, config.itemLeft[ 0 ] );
-      assertEquals( 30, config.itemWidth[ 0 ] );
-      assertEquals( 30, config.itemLeft[ 1 ] );
-      assertEquals( 40, config.itemWidth[ 1 ] );
-      assertEquals( PADDING_LEFT, config.itemTextLeft[ 0 ] );
-      assertEquals( 30 - PADDING_RIGHT - PADDING_LEFT, config.itemTextWidth[ 0 ] );
-      assertEquals( 30 + PADDING_LEFT, config.itemTextLeft[ 1 ] );
-      assertEquals( 40 - PADDING_RIGHT - PADDING_LEFT, config.itemTextWidth[ 1 ] );
-    },
-
-    testSetColumns_setsPopUpWidth : function() {
-      dropdown.setColumns( [ 100, 200, 100 ] );
-      showDropDown();
-
-      assertEquals( 400, popup.getInnerWidth() );
-    },
-
-    testSetColumns_setsPopUpWidthAfterAppear : function() {
-      showDropDown();
-      dropdown.setColumns( [ 100, 200, 100 ] );
-      TestUtil.flush();
-
-      assertEquals( 400, popup.getInnerWidth() );
-    },
-
-    testSetColumns_setsPopUpWidthAfterParentAppear : function() {
-      widget.destroy();
-      dropdown.destroy();
-      this.createExample();
-      dropdown.show();
-      dropdown.setColumns( [ 100, 200, 100 ] );
-      TestUtil.flush();
-
-      assertEquals( 400, popup.getInnerWidth() );
-    },
-
-    testSetColumns_setsDoesNotSetPopUpWidthIfSmaller : function() {
-      dropdown.setColumns( [ 30 ] );
-      showDropDown();
-
-      assertEquals( 100, popup.getWidth() );
-    },
-
-    testSetColumns_separatesItemsByTabulator : function() {
-      dropdown.setColumns( [ 30, 40 ] );
-      var tab = String.fromCharCode( 9 );
-
-      dropdown.setItems( [ "foo" + tab + "bar" ] );
-      showDropDown();
-
-      var gridItem = grid.getRootItem().getChild( 0 );
-      assertEquals( "foo", gridItem.getText( 0 ) );
-      assertEquals( "bar", gridItem.getText( 1 ) );
-    },
-
-    testGetItemCount : function() {
-      showDropDown();
-
-      dropdown.setItems( [ "a", "b", "c" ] );
-
-      assertEquals( 3, dropdown.getItemCount() );
-    },
-
-    testGetVisible_returnsFalse : function() {
-      assertFalse( dropdown.getVisible() );
-    },
-
-    testGetVisible_returnsTrue : function() {
-      showDropDown();
-      assertTrue( dropdown.getVisible() );
-    },
-
-    testAddSelectionListener : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      showDropDown();
-      var logger = TestUtil.getLogger();
-
-      dropdown.addListener( "Selection", logger.log );
-      dropdown.setSelectionIndex( 1 );
-
-      assertEquals( 1, logger.getLog().length );
-    },
-
-    testAddShowListener : function() {
-      var logger = TestUtil.getLogger();
-      dropdown.addListener( "Show", logger.log );
-
-      showDropDown();
-
-      assertEquals( 1, logger.getLog().length );
-    },
-
-    testAddShowListener_notifiesEventForEmptyItems : function() {
-      var logger = TestUtil.getLogger();
-      dropdown.addListener( "Show", logger.log );
-
-      showDropDown( [] );
-
-      assertEquals( 1, logger.getLog().length );
-    },
-
-    testRemoveShowListener : function() {
-      var logger = TestUtil.getLogger();
-      dropdown.addListener( "Show", logger.log );
-      dropdown.removeListener( "Show", logger.log );
-
-      showDropDown();
-
-      assertEquals( 0, logger.getLog().length );
-    },
-
-    testAddHideListener : function() {
-      showDropDown();
-      var logger = TestUtil.getLogger();
-      dropdown.addListener( "Hide", logger.log );
-
-      dropdown.hide();
-
-      assertEquals( 1, logger.getLog().length );
-    },
-
-    testAddHideListener_notifiesEventForEmptyItems : function() {
-      showDropDown( [] );
-      var logger = TestUtil.getLogger();
-      dropdown.addListener( "Hide", logger.log );
-
-      dropdown.hide();
-
-      assertEquals( 1, logger.getLog().length );
-    },
-
-    testRemoveHideListener : function() {
-      showDropDown();
-      var logger = TestUtil.getLogger();
-      dropdown.addListener( "Hide", logger.log );
-      dropdown.removeListener( "Hide", logger.log );
-
-      dropdown.hide();
-
-      assertEquals( 0, logger.getLog().length );
-    },
-
-    testRemoveSelectionListener : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      showDropDown();
-      var logger = TestUtil.getLogger();
-
-      dropdown.addListener( "Selection", logger.log );
-      dropdown.removeListener( "Selection", logger.log );
-      TestUtil.click( getItem( 0 ) );
-
-      assertEquals( 0, logger.getLog().length );
-    },
-
-    testSelectionEventFields : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      showDropDown();
-      var logger = TestUtil.getLogger();
-
-      dropdown.addListener( "Selection", logger.log );
-      dropdown.setSelectionIndex( 1 );
-
-      var event = logger.getLog()[ 0 ];
-      assertIdentical( dropdown, event.widget );
-      assertIdentical( "b", event.text );
-      assertIdentical( 1, event.index );
-      assertIdentical( SWT.Selection, event.type );
-    },
-
-    testSelectionEventFields_Unescaped : function() {
-      dropdown.setItems( [ "a", "&bb ", "c" ] ); // the *trailing* space is important
-      showDropDown();
-      var logger = TestUtil.getLogger();
-
-      dropdown.addListener( "Selection", logger.log );
-      clickItem( 1 );
-
-      var event = logger.getLog()[ 0 ];
-      assertIdentical( "&bb ", event.text );
-    },
-
-    testSelectionEventFields_NoItemSelected : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      showDropDown();
-      dropdown.setSelectionIndex( 1 );
-      var logger = TestUtil.getLogger();
-
-      dropdown.addListener( "Selection", logger.log );
-      dropdown.setSelectionIndex( -1 );
-
-      var event = logger.getLog()[ 0 ];
-      assertIdentical( dropdown, event.widget );
-      assertEquals( "", event.text );
-    },
-
-    testSelectionEventNotify_NoItemSelected : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      showDropDown();
-      dropdown.setSelectionIndex( 1 );
-
-      TestUtil.protocolListen( "w3", { "Selection" : true } );
-      dropdown.setSelectionIndex( -1 );
-
-      var message = TestUtil.getMessageObject();
-      assertEquals( "", message.findNotifyProperty( "w3", "Selection", "text" ) );
-      assertEquals( -1, message.findNotifyProperty( "w3", "Selection", "index" ) );
-    },
-
-    testSelectionEventNotify : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      showDropDown();
-
-      TestUtil.protocolListen( "w3", { "Selection" : true } );
-      dropdown.setSelectionIndex( 1 );
-
-      var message = TestUtil.getMessageObject();
-      assertEquals( "b", message.findNotifyProperty( "w3", "Selection", "text" ) );
-      assertEquals( 1, message.findNotifyProperty( "w3", "Selection", "index" ) );
-    },
-
-    testAddDefaultSelectionListener_FiresOnEnter : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      showDropDown();
-      var logger = TestUtil.getLogger();
-
-      dropdown.addListener( "DefaultSelection", logger.log );
-      dropdown.setSelectionIndex( 1 );
-      TestUtil.pressOnce( grid, "Enter" );
-      TestUtil.forceTimerOnce();
-
-      assertEquals( 1, logger.getLog().length );
-    },
-
-    testAddDefaultSelectionListener_FiresOnClick : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      showDropDown();
-      var logger = TestUtil.getLogger();
-
-      dropdown.addListener( "DefaultSelection", logger.log );
-      clickItem( 1 );
-      TestUtil.forceTimerOnce();
-
-      assertEquals( 1, logger.getLog().length );
-    },
-
-    testAddDefaultSelectionListener_FiresOnTextEnter : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      showDropDown();
-      var logger = TestUtil.getLogger();
-
-      dropdown.addListener( "DefaultSelection", logger.log );
-      dropdown.setSelectionIndex( 1 );
-      widget.focus();
-      TestUtil.pressOnce( widget, "Enter" );
-      TestUtil.forceTimerOnce();
-
-      assertEquals( 1, logger.getLog().length );
-    },
-
-    testAddDefaultSelectionListener_HidesNotOnTextEnterWithoutSelection : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      showDropDown();
-      var logger = TestUtil.getLogger();
-
-      dropdown.addListener( "DefaultSelection", logger.log );
-      widget.focus();
-      TestUtil.pressOnce( widget, "Enter" );
-      TestUtil.forceTimerOnce();
-
-      assertTrue( dropdown.getVisible() );
-    },
-
-    testDefaultSelectionEventFields : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      showDropDown();
-      var logger = TestUtil.getLogger();
-
-      dropdown.addListener( "DefaultSelection", logger.log );
-      clickItem( 1 );
-      TestUtil.pressOnce( grid, "Enter" );
-      TestUtil.forceTimerOnce();
-
-      var event = logger.getLog()[ 0 ];
-      assertIdentical( dropdown, event.widget );
-      assertIdentical( "b", event.text );
-      assertIdentical( 1, event.index );
-      assertIdentical( SWT.DefaultSelection, event.type );
-    },
-
-    testGetSelectionIndex_InitialValueIsMinusOne : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-
-      assertEquals( -1, dropdown.getSelectionIndex() );
-    },
-
-    testGetSelectionIndex_ValueIsMinusOneForNoItems : function() {
-      assertEquals( -1, dropdown.getSelectionIndex() );
-    },
-
-    testGetSelectionIndex_ValueAfterSelection : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      showDropDown();
-
-      clickItem( 1 );
-
-      assertEquals( 1, dropdown.getSelectionIndex() );
-    },
-
-    testSetSelectionIndex : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-
-      dropdown.setSelectionIndex( 1 );
-
-      assertEquals( 1, dropdown.getSelectionIndex() );
-    },
-
-    testSetSelectionIndex_ScrollToSelection : function() {
-      dropdown.setVisibleItemCount( 3 );
-      showDropDown();
-      dropdown.setItems( [ "a", "b", "c", "d", "e", "f" ] );
-
-      dropdown.setSelectionIndex( 5 );
-
-      assertEquals( 3, grid.getTopItemIndex() );
-    },
-
-
-    testSetSelectionIndex_DoesNotFireEventIfValueIsUnchanged : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      showDropDown();
-      var logger = TestUtil.getLogger();
-
-      dropdown.addListener( "Selection", logger.log );
-      dropdown.setSelectionIndex( 1 );
-      dropdown.setSelectionIndex( 1 );
-
-      assertEquals( 1, logger.getLog().length );
-    },
-
-    testResetSelectionIndex_ResetScrollPosition : function() {
-      dropdown.setVisibleItemCount( 3 );
-      showDropDown();
-      dropdown.setItems( [ "a", "b", "c", "d", "e", "f" ] );
-      dropdown.setSelectionIndex( 5 );
-
-      dropdown.setSelectionIndex( -1 );
-
-      assertEquals( 0, grid.getTopItemIndex() );
-    },
-
-    testSetItems_ResetsSelection : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      dropdown.setSelectionIndex( 1 );
-      dropdown.setItems( [ "a", "b", "d" ] );
-
-      assertEquals( -1, dropdown.getSelectionIndex() );
-    },
-
-    testSetSelectionIndex_RemoteSet : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-
-      dropdown.setSelectionIndex( 1 );
-      rwt.remote.Connection.getInstance().send();
-
-      var message = TestUtil.getMessageObject();
-      assertEquals( 1, message.findSetProperty( "w3", "selectionIndex" ) );
-    },
-
-    testSetItemsFromServerDoesNotRemoteSetIndex : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      dropdown.setSelectionIndex( 1 );
-      TestUtil.clearRequestLog();
-
-      TestUtil.fakeResponse( true );
-      dropdown.setItems( [ "a", "b", "c" ] );
-      TestUtil.fakeResponse( false );
-      rwt.remote.Connection.getInstance().send();
-
-      var message = TestUtil.getMessageObject();
-      assertNull( message.findSetOperation( "w3", "selectionIndex" ) );
-    },
-
-    testSetSelectionIndex_ValueIsMinusOne : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-
-      dropdown.setSelectionIndex( -1 );
-
-      assertEquals( -1, dropdown.getSelectionIndex() );
-    },
-
-    testSetSelectionIndex_ValueOutOfBoundsThrowsException : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-
-      try {
-        dropdown.setSelectionIndex( 4 );
-        fail();
-      } catch( ex ) {
-        // expected
-      }
-    },
-
-    testKeyEventForwarding_Escape : function() {
-      showDropDown();
-      var logger = TestUtil.getLogger();
-
-      grid.addEventListener( "keypress", logger.log );
-      widget.focus();
-      TestUtil.pressOnce( widget, "Escape" );
-
-      assertEquals( 1, logger.getLog().length );
-      assertTrue( logger.getLog()[ 0 ].getDefaultPrevented() );
-    },
-
-    testKeyEventForwarding_Up : function() {
-      showDropDown( [ "a", "b" ] );
-      dropdown.setSelectionIndex( 1 );
-      var logger = TestUtil.getLogger();
-
-      grid.addEventListener( "keypress", logger.log );
-      widget.focus();
-      TestUtil.pressOnce( widget, "Up" );
-
-      assertEquals( 1, logger.getLog().length );
-      assertTrue( logger.getLog()[ 0 ].getDefaultPrevented() );
-    },
-
-    testKeyEventForwarding_UpNotVisible : function() {
-      var logger = TestUtil.getLogger();
-
-      grid.addEventListener( "keypress", logger.log );
-      widget.focus();
-      TestUtil.pressOnce( widget, "Up" );
-
-      assertEquals( 0, logger.getLog().length );
-    },
-
-    testKeyEventForwarding_Down : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      dropdown.setSelectionIndex( 1 );
-      showDropDown();
-      var logger = TestUtil.getLogger();
-
-      grid.addEventListener( "keypress", logger.log );
-      widget.focus();
-      TestUtil.pressOnce( widget, "Down" );
-
-      assertEquals( 1, logger.getLog().length );
-      assertTrue( logger.getLog()[ 0 ].getDefaultPrevented() );
-    },
-
-    testKeyEventForwarding_PageUp : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      dropdown.setSelectionIndex( 1 );
-      showDropDown();
-      var logger = TestUtil.getLogger();
-
-      grid.addEventListener( "keypress", logger.log );
-      widget.focus();
-      TestUtil.pressOnce( widget, "PageUp" );
-
-      assertEquals( 1, logger.getLog().length );
-      assertTrue( logger.getLog()[ 0 ].getDefaultPrevented() );
-    },
-
-    testKeyEventForwarding_PageDown : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      dropdown.setSelectionIndex( 1 );
-      showDropDown();
-      var logger = TestUtil.getLogger();
-
-      grid.addEventListener( "keypress", logger.log );
-      widget.focus();
-      TestUtil.pressOnce( widget, "PageDown" );
-
-      assertEquals( 1, logger.getLog().length );
-      assertTrue( logger.getLog()[ 0 ].getDefaultPrevented() );
-    },
-
-    testPressDownAfterSelectionResetSelectsFirstItem : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      dropdown.setSelectionIndex( 1 );
-      showDropDown();
-      dropdown.setSelectionIndex( -1 );
-      TestUtil.flush();
-
-      widget.focus();
-      TestUtil.pressOnce( widget, "Down" );
-
-      assertEquals( 0, dropdown.getSelectionIndex() );
-    },
-
-    testPressDownAfterSelectionResetFocusesFirstItem : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      dropdown.setSelectionIndex( 1 );
-      showDropDown();
-      dropdown.setSelectionIndex( -1 );
-      TestUtil.flush();
-
-      widget.focus();
-      TestUtil.pressOnce( widget, "Down" );
-
-      assertTrue( grid.isFocusItem( grid.getRootItem().getChild( 0 ) ) );
-    },
-
-    testPressUpAfterSelectionResetsSelectsLastItem : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      showDropDown();
-      dropdown.setSelectionIndex( -1 );
-      TestUtil.flush();
-
-      widget.focus();
-      TestUtil.pressOnce( widget, "Up" );
-
-      assertEquals( 2, dropdown.getSelectionIndex() );
-    },
-
-    testPressUpAfterSelectionFirstItemResetsFocus : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      showDropDown();
-      TestUtil.flush();
-
-      widget.focus();
-      TestUtil.pressOnce( widget, "Down" );
-      TestUtil.pressOnce( widget, "Up" );
-
-      assertFalse( grid.isFocusItem( grid.getRootItem().getChild( 0 ) ) );
-    },
-
-    testPressUpOnFirstItemResetsSelection : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      dropdown.setSelectionIndex( 0 );
-      showDropDown();
-      TestUtil.flush();
-
-      widget.focus();
-      TestUtil.pressOnce( widget, "Up" );
-
-      assertEquals( -1, dropdown.getSelectionIndex() );
-    },
-
-    testPressDownOnLastItemResetsSelection : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      dropdown.setSelectionIndex( 2 );
-      showDropDown();
-      TestUtil.flush();
-
-      widget.focus();
-      TestUtil.pressOnce( widget, "Down" );
-
-      assertEquals( -1, dropdown.getSelectionIndex() );
-    },
-
-    testSelectionResetResetsLeadItem : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      showDropDown();
-      widget.focus();
-      TestUtil.pressOnce( widget, "Down" );// calling setSelectionIndex would not change lead item
-
-      dropdown.setSelectionIndex( -1 );
-      TestUtil.pressOnce( widget, "Down" );
-
-      assertEquals( 0, dropdown.getSelectionIndex() );
-    },
-
-    testPressDownAfterItemResetSelectsFirstItem : function() {
-      dropdown.setItems( [ "a", "b", "c" ] );
-      showDropDown();
-      dropdown.setSelectionIndex( 2 );
-
-      dropdown.setItems( [ "x", "y" ] );
-      TestUtil.flush();
-
-      widget.focus();
-      TestUtil.pressOnce( widget, "Down" );
-
-      assertEquals( 0, dropdown.getSelectionIndex() );
-    },
-
-    testDestroy_DisposesDropDown : function() {
-      dropdown.destroy();
-
-      assertTrue( dropdown.isDisposed() );
-    },
-
-    testDestroy_AfterControlDispose : function() {
-      widget.destroy();
-      dropdown.destroy();
-
-      assertTrue( dropdown.isDisposed() );
-    },
-
-    testDestroy_DisposesPopup : function() {
-      dropdown.destroy();
-      TestUtil.flush();
-
-      assertTrue( popup.isDisposed() );
-    },
-
-    testDestroy_ClearsReferences : function() {
-      dropdown.setData( "foo", {} );
-      var privateObj = dropdown._;
-      var props = privateObj.widgetData;
-      dropdown.destroy();
-
-      assertTrue( TestUtil.hasNoObjects( dropdown, true ) );
-      assertTrue( TestUtil.hasNoObjects( privateObj ) );
-      assertTrue( TestUtil.hasNoObjects( props ) );
-    },
-
-    testDestroy_DeregistersAppearListener : function() {
-      widget.setVisibility( false );
-
-      dropdown.destroy();
-      widget.setVisibility( true );
-      // Succeeds by not crashing
-    },
-
-    testDestroy_DeregistersFlushListener : function() {
-      dropdown.destroy();
-      widget.setTop( 45 );
-      TestUtil.flush();
-      // Succeeds by not crashing
-    },
-
-    testDestroy_RemoveListenerDoesNotCrash : function() {
-      var listener = function(){};
-      dropdown.addListener( "Selection", listener );
-      dropdown.destroy();
-
-      dropdown.removeListener( "Selection", listener );
-    },
-
-    testDestroy_DocumentClick : function() {
-      showDropDown();
-      dropdown.destroy();
-      TestUtil.click( TestUtil.getDocument() );
-
-      assertFalse( popup.isSeeable() );
-    },
-
-    ///////////
-    // Helper
-
-    createExample : function() {
-      widget = new rwt.widgets.Composite();
-      widget.setFont( rwt.html.Font.fromString( "Arial 10px" ) );
-      widget.setParent( shell );
-      widget.setLocation( 10, 20 );
-      widget.setDimension( 100, 30 );
-      dropdown = new rwt.dropdown.DropDown( widget );
-      rwt.remote.ObjectRegistry.add(
-        "w3",
-        dropdown,
-        rwt.remote.HandlerRegistry.getHandler( "rwt.dropdown.DropDown" )
-      );
-      popup = dropdown._.popup;
-      grid = dropdown._.grid;
-      hideTimer = dropdown._.hideTimer;
-    }
-
-  }
-
-} );
-
-var showDropDown = function( items ) {
-  if( items ) {
-    dropdown.setItems( items );
-  } else if( dropdown.getItemCount() === 0 ) {
-    dropdown.setItems( [ "a" ] );
-  }
-  dropdown.show();
-  TestUtil.flush();
-  TestUtil.flush();
-};
-
-var getGridItems = function() {
-  var result = [];
-  var items = grid.getRootItem()._children;
-  for( var i = 0; i < items.length; i++ ) {
-    result[ i ] = items[ i ].getText( 0 );
-  }
-  return result;
-};
-
-var clickItem = function( index ) {
-  TestUtil.click( getItem( index ) );
-};
-
-var doubleClickItem = function( index ) {
-  TestUtil.doubleClick( getItem( index ) );
-};
-
-var getItem = function( index ) {
-  return grid.getRowContainer()._findRowByItem( grid.getRootItem().getChild( index ) );
-};
-
-var forceTimer = function() {
-  TestUtil.forceInterval( hideTimer );
-};
-
-
-}());
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/DropDown_Test.java b/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/DropDown_Test.java
index b7764e7..96e2af7 100644
--- a/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/DropDown_Test.java
+++ b/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/DropDown_Test.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013 EclipseSource.
+ * Copyright (c) 2013, 2014 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
@@ -56,7 +56,9 @@
 import org.mockito.stubbing.Answer;
 
 
-@SuppressWarnings("restriction")
+@SuppressWarnings({
+  "restriction", "deprecation"
+})
 public class DropDown_Test {
 
   private Text text;
@@ -359,7 +361,7 @@
     WidgetUtil.registerDataKeys( "foo", "bar" );
     dropdown.setData( "foo", "bar" );
 
-    verify( remoteObject ).call( eq( "setData" ), eq( new JsonObject().add( "foo", "bar" ) ) );
+    verify( remoteObject ).set( eq( "data" ), eq( new JsonObject().add( "foo", "bar" ) ) );
   }
 
   @Test
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/test/internal/DropDownResourcesContribution.java b/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/test/internal/DropDownResourcesContribution.java
deleted file mode 100644
index 4f8c0a9..0000000
--- a/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/test/internal/DropDownResourcesContribution.java
+++ /dev/null
@@ -1,35 +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.dropdown.test.internal;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.eclipse.rap.addons.dropdown.internal.resources.DropDownResources;
-import org.eclipse.rap.rwt.jstest.TestContribution;
-
-
-@SuppressWarnings( "restriction" )
-public class DropDownResourcesContribution implements TestContribution {
-
-  public String getName() {
-    return "dropdown-resources";
-  }
-
-  public String[] getResources() {
-    return DropDownResources.SCRIPTS;
-  }
-
-  public InputStream getResourceAsStream( String resourceName ) throws IOException {
-    return DropDownResources.getResourceAsStream( resourceName );
-  }
-
-}
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/test/internal/DropDownTestContribution.java b/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/test/internal/DropDownTestContribution.java
deleted file mode 100644
index 7e36e31..0000000
--- a/tests/org.eclipse.rap.addons.dropdown.test/src/org/eclipse/rap/addons/dropdown/test/internal/DropDownTestContribution.java
+++ /dev/null
@@ -1,40 +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.dropdown.test.internal;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.eclipse.rap.rwt.jstest.TestContribution;
-
-
-public class DropDownTestContribution implements TestContribution {
-
-  private static final ClassLoader CLASSLOADER = DropDownTestContribution.class.getClassLoader();
-
-  private static final String[] ALL_TEST_RESOURCES = new String[] {
-    "/rwt/dropdown/DropDown_Test.js"
-  };
-
-  public String getName() {
-    return "dropdown-tests";
-  }
-
-  public String[] getResources() {
-    return ALL_TEST_RESOURCES;
-  }
-
-  public InputStream getResourceAsStream( String resourceName ) throws IOException {
-    return CLASSLOADER.getResourceAsStream( resourceName );
-  }
-
-}