blob: 45b533c1ca9bc5f632f97911b4686b5813d7d18c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2012 EclipseSource and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* EclipseSource - initial API and implementation
******************************************************************************/
qx.Class.define( "org.eclipse.rwt.test.tests.SliderTest", {
extend : qx.core.Object,
construct : function() {
org.eclipse.rwt.test.fixture.TestUtil.prepareTimerUse();
},
members : {
testCreateSliderByProtocol : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var shell = TestUtil.createShellByProtocol( "w2" );
var processor = rwt.protocol.MessageProcessor;
processor.processOperation( {
"target" : "w3",
"action" : "create",
"type" : "rwt.widgets.Slider",
"properties" : {
"style" : [],
"parent" : "w2"
}
} );
var ObjectManager = rwt.protocol.ObjectRegistry;
var widget = ObjectManager.getObject( "w3" );
assertTrue( widget instanceof rwt.widgets.Slider );
assertIdentical( shell, widget.getParent() );
assertTrue( widget.getUserData( "isControl") );
assertEquals( "slider", widget.getAppearance() );
assertFalse( widget._horizontal );
shell.destroy();
widget.destroy();
},
testCreateSliderHorizontalByProtocol : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var shell = TestUtil.createShellByProtocol( "w2" );
var processor = rwt.protocol.MessageProcessor;
processor.processOperation( {
"target" : "w3",
"action" : "create",
"type" : "rwt.widgets.Slider",
"properties" : {
"style" : [ "HORIZONTAL" ],
"parent" : "w2"
}
} );
var ObjectManager = rwt.protocol.ObjectRegistry;
var widget = ObjectManager.getObject( "w3" );
assertTrue( widget instanceof rwt.widgets.Slider );
assertIdentical( shell, widget.getParent() );
assertTrue( widget.getUserData( "isControl") );
assertEquals( "slider", widget.getAppearance() );
assertTrue( widget._horizontal );
shell.destroy();
widget.destroy();
},
testSetMinimumByProtocol : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var shell = TestUtil.createShellByProtocol( "w2" );
var processor = rwt.protocol.MessageProcessor;
processor.processOperation( {
"target" : "w3",
"action" : "create",
"type" : "rwt.widgets.Slider",
"properties" : {
"style" : [],
"parent" : "w2",
"minimum" : 50
}
} );
var ObjectManager = rwt.protocol.ObjectRegistry;
var widget = ObjectManager.getObject( "w3" );
assertEquals( 50, widget._minimum );
shell.destroy();
widget.destroy();
},
testSetMaximumByProtocol : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var shell = TestUtil.createShellByProtocol( "w2" );
var processor = rwt.protocol.MessageProcessor;
processor.processOperation( {
"target" : "w3",
"action" : "create",
"type" : "rwt.widgets.Slider",
"properties" : {
"style" : [],
"parent" : "w2",
"maximum" : 150
}
} );
var ObjectManager = rwt.protocol.ObjectRegistry;
var widget = ObjectManager.getObject( "w3" );
assertEquals( 150, widget._maximum );
shell.destroy();
widget.destroy();
},
testSetSelectionByProtocol : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var shell = TestUtil.createShellByProtocol( "w2" );
var processor = rwt.protocol.MessageProcessor;
processor.processOperation( {
"target" : "w3",
"action" : "create",
"type" : "rwt.widgets.Slider",
"properties" : {
"style" : [],
"parent" : "w2",
"selection" : 50
}
} );
var ObjectManager = rwt.protocol.ObjectRegistry;
var widget = ObjectManager.getObject( "w3" );
assertEquals( 50, widget._selection );
shell.destroy();
widget.destroy();
},
testSetIncrementByProtocol : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var shell = TestUtil.createShellByProtocol( "w2" );
var processor = rwt.protocol.MessageProcessor;
processor.processOperation( {
"target" : "w3",
"action" : "create",
"type" : "rwt.widgets.Slider",
"properties" : {
"style" : [],
"parent" : "w2",
"increment" : 5
}
} );
var ObjectManager = rwt.protocol.ObjectRegistry;
var widget = ObjectManager.getObject( "w3" );
assertEquals( 5, widget._increment );
shell.destroy();
widget.destroy();
},
testSetPageIncrementByProtocol : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var shell = TestUtil.createShellByProtocol( "w2" );
var processor = rwt.protocol.MessageProcessor;
processor.processOperation( {
"target" : "w3",
"action" : "create",
"type" : "rwt.widgets.Slider",
"properties" : {
"style" : [],
"parent" : "w2",
"pageIncrement" : 20
}
} );
var ObjectManager = rwt.protocol.ObjectRegistry;
var widget = ObjectManager.getObject( "w3" );
assertEquals( 20, widget._pageIncrement );
shell.destroy();
widget.destroy();
},
testSetThumbByProtocol : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var shell = TestUtil.createShellByProtocol( "w2" );
var processor = rwt.protocol.MessageProcessor;
processor.processOperation( {
"target" : "w3",
"action" : "create",
"type" : "rwt.widgets.Slider",
"properties" : {
"style" : [],
"parent" : "w2",
"thumb" : 20
}
} );
var ObjectManager = rwt.protocol.ObjectRegistry;
var widget = ObjectManager.getObject( "w3" );
assertEquals( 20, widget._thumbLength );
shell.destroy();
widget.destroy();
},
testSetHasSelectionListenerByProtocol : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var shell = TestUtil.createShellByProtocol( "w2" );
var processor = rwt.protocol.MessageProcessor;
processor.processOperation( {
"target" : "w3",
"action" : "create",
"type" : "rwt.widgets.Slider",
"properties" : {
"style" : [],
"parent" : "w2"
}
} );
TestUtil.protocolListen( "w3", { "Selection" : true } );
var ObjectManager = rwt.protocol.ObjectRegistry;
var widget = ObjectManager.getObject( "w3" );
assertTrue( widget._hasSelectionListener );
shell.destroy();
widget.destroy();
},
testCreateDispose : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider();
assertTrue( slider.isSeeable() );
slider.destroy();
TestUtil.flush();
assertTrue( slider.isDisposed() );
},
testAppearances : function() {
var slider = this._createSlider();
assertEquals( "slider", slider.getAppearance() );
// TODO [tb] : what do we need that subwidget anyway?
assertEquals( "slider-thumb", slider._thumb.getAppearance() );
assertEquals( "slider-max-button", slider._maxButton.getAppearance() );
assertEquals( "slider-min-button", slider._minButton.getAppearance() );
slider.destroy();
},
testStatesHorizontal : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var widget = this._createSlider( true );
assertTrue( widget.hasState( "rwt_HORIZONTAL" ) );
assertTrue( widget._minButton.hasState( "horizontal" ) );
assertTrue( widget._maxButton.hasState( "horizontal" ) );
assertTrue( widget._minButton.hasState( "rwt_HORIZONTAL" ) );
assertTrue( widget._maxButton.hasState( "rwt_HORIZONTAL" ) );
assertTrue( widget._thumb.hasState( "rwt_HORIZONTAL" ) );
assertFalse( widget.hasState( "rwt_VERTICAL" ) );
assertFalse( widget.hasState( "vertical" ) );
assertFalse( widget._minButton.hasState( "vertical" ) );
assertFalse( widget._maxButton.hasState( "vertical" ) );
assertFalse( widget._minButton.hasState( "rwt_VERTICAL" ) );
assertFalse( widget._maxButton.hasState( "rwt_VERTICAL" ) );
assertFalse( widget._thumb.hasState( "rwt_VERTICAL" ) );
widget.destroy();
},
testStatesVertical : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var widget = this._createSlider( false );
assertTrue( widget.hasState( "rwt_VERTICAL" ) );
assertTrue( widget._minButton.hasState( "vertical" ) );
assertTrue( widget._maxButton.hasState( "vertical" ) );
assertTrue( widget._minButton.hasState( "rwt_VERTICAL" ) );
assertTrue( widget._maxButton.hasState( "rwt_VERTICAL" ) );
assertTrue( widget._thumb.hasState( "rwt_VERTICAL" ) );
assertFalse( widget.hasState( "rwt_HORIZONTAL" ) );
assertFalse( widget._minButton.hasState( "horizontal" ) );
assertFalse( widget._maxButton.hasState( "horizontal" ) );
assertFalse( widget._minButton.hasState( "rwt_HORIZONTAL" ) );
assertFalse( widget._maxButton.hasState( "rwt_HORIZONTAL" ) );
assertFalse( widget._thumb.hasState( "rwt_HORIZONTAL" ) );
widget.destroy();
},
testBasicLayoutVertical : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var widget = this._createSlider( false );
var slider = TestUtil.getElementLayout( widget.getElement() );
var min = TestUtil.getElementLayout( widget._minButton.getElement() );
var max = TestUtil.getElementLayout ( widget._maxButton.getElement() );
var thumb = TestUtil.getElementLayout( widget._thumb.getElement() );
assertEquals( [ 10, 10, 20, 100 ], slider );
assertEquals( [ 0, 0, 20, 16 ], min );
assertEquals( [ 0, 84, 20, 16 ], max );
assertEquals( [ 0, 16, 20, 7 ], thumb );
widget.destroy();
},
testBasicLayoutHorizontal : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var widget = this._createSlider( true );
var slider = TestUtil.getElementLayout( widget.getElement() );
var min = TestUtil.getElementLayout( widget._minButton.getElement() );
var max = TestUtil.getElementLayout ( widget._maxButton.getElement() );
var thumb = TestUtil.getElementLayout( widget._thumb.getElement() );
assertEquals( [ 10, 10, 100, 20 ], slider );
assertEquals( [ 0, 0, 16, 20 ], min );
assertEquals( [ 84, 0, 16, 20 ], max );
assertEquals( [ 16, 0, 7, 20 ], thumb );
widget.destroy();
},
testThumbPositionNoScaling : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
var thumb = slider._thumb;
// With minimum/maximum initially set to 0/100:
slider.setHeight( 100 + 2 * 16 ); // to exclude the buttons
assertEquals( 16 + 0 , thumb.getTop() );
slider.setSelection( 30 );
assertEquals( 16 + 30, thumb.getTop() );
slider.destroy();
},
testThumbSizeNoScaling : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
var thumb = slider._thumb;
slider.setHeight( 100 + 2 * 16 );
assertEquals( 10 , thumb.getHeight() );
slider.setThumb( 30 );
assertEquals( 30, thumb.getHeight() );
slider.destroy();
},
testThumbPositionWithScaling : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
var thumb = slider._thumb;
slider.setHeight( 100 + 2 * 16 );
slider.setSelection( 25 + 0 );
slider.setMinimum( 25 );
slider.setMaximum( 75 );
assertEquals( 16 + 0, thumb.getTop() );
slider.setSelection( 35 );
assertEquals( 16 + 20, thumb.getTop() );
slider.destroy();
},
testThumbSizeWithScaling : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
var thumb = slider._thumb;
slider.setHeight( 100 + 2 * 16 ); // to exclude the buttons
assertEquals( 10 , thumb.getHeight() );
slider.setSelection( 25 + 0 );
slider.setMinimum( 25 );
slider.setMaximum( 75 );
assertEquals( 20 , thumb.getHeight() );
slider.setThumb( 30 );
assertEquals( 60, thumb.getHeight() );
slider.destroy();
},
testClickOnMaxButton : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
assertEquals( 0, slider._selection );
TestUtil.click( slider._maxButton );
assertEquals( 5, slider._selection );
assertTrue( slider._requestScheduled );
slider.destroy();
},
testClickOnMinButton : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
slider.setSelection( 50 );
assertEquals( 50, slider._selection );
TestUtil.click( slider._minButton );
assertEquals( 45, slider._selection );
assertTrue( slider._requestScheduled );
slider.destroy();
},
testClickOnMinButtonLimit : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
slider.setSelection( 5 );
assertEquals( 5, slider._selection );
TestUtil.click( slider._minButton );
assertEquals( 0, slider._selection );
assertTrue( slider._requestScheduled );
slider._requestScheduled = false;
TestUtil.click( slider._minButton );
assertEquals( 0, slider._selection );
assertTrue( slider._requestScheduled );
slider.destroy();
},
testClickOnMaxButtonLimit : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
slider.setThumb( 7 );
slider.setSelection( 90 );
TestUtil.click( slider._maxButton );
assertEquals( 93, slider._selection );
assertTrue( slider._requestScheduled );
slider._requestScheduled = false;
TestUtil.click( slider._maxButton );
assertEquals( 93, slider._selection );
assertTrue( slider._requestScheduled );
slider.destroy();
},
testSendEvent : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
org.eclipse.swt.WidgetManager.getInstance().add( slider, "w99" );
TestUtil.click( slider._maxButton );
assertTrue( slider._requestScheduled );
TestUtil.forceTimerOnce();
assertFalse( slider._requestScheduled );
assertEquals( 0, TestUtil.getRequestsSend() );
rwt.remote.Server.getInstance().send();
assertEquals( 5, TestUtil.getMessageObject().findSetProperty( "w99", "selection" ) );
TestUtil.clearRequestLog();
slider.setHasSelectionListener( true );
TestUtil.click( slider._maxButton );
assertTrue( slider._requestScheduled );
TestUtil.forceTimerOnce();
assertFalse( slider._requestScheduled );
assertEquals( 1, TestUtil.getRequestsSend() );
assertEquals( 10, TestUtil.getMessageObject().findSetProperty( "w99", "selection" ) );
assertNotNull( TestUtil.getMessageObject().findNotifyOperation( "w99", "Selection" ) );
slider.destroy();
},
testHoldMaxButton : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
var node = slider._maxButton.getElement();
TestUtil.fakeMouseEventDOM( node, "mousedown" );
assertEquals( 5, slider._selection );
TestUtil.forceInterval( slider._delayTimer ); // start scrolling
TestUtil.forceInterval( slider._repeatTimer );
assertEquals( 10, slider._selection );
TestUtil.forceInterval( slider._repeatTimer );
assertEquals( 15, slider._selection );
assertTrue( slider._requestScheduled );
TestUtil.forceTimerOnce(); // add request parameter
assertFalse( slider._requestScheduled );
TestUtil.forceInterval( slider._repeatTimer );
assertTrue( slider._requestScheduled );
assertEquals( 20, slider._selection );
TestUtil.fakeMouseEventDOM( node, "mouseup" );
assertFalse( slider._repeatTimer.isEnabled() );
},
testHoldMaxButtonAbort : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
var node = slider._maxButton.getElement();
TestUtil.fakeMouseEventDOM( node, "mousedown" );
assertEquals( 5, slider._selection );
TestUtil.fakeMouseEventDOM( node, "mouseout" );
try {
TestUtil.forceInterval( slider._delayTimer ); // try start scrolling
} catch( ex ) {
// expected
}
assertFalse( slider._repeatTimer.isEnabled() );
assertEquals( 5, slider._selection );
},
testHoldMinButton : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
slider.setMaximum( 110 ); // the place needed by thumb
slider.setSelection( 100 );
assertEquals( 100, slider._selection );
var node = slider._minButton.getElement();
TestUtil.fakeMouseEventDOM( node, "mousedown" );
assertEquals( 95, slider._selection );
TestUtil.forceInterval( slider._delayTimer ); // start scrolling
TestUtil.forceInterval( slider._repeatTimer );
assertEquals( 90, slider._selection );
TestUtil.forceInterval( slider._repeatTimer );
assertEquals( 85, slider._selection );
assertTrue( slider._requestScheduled );
TestUtil.forceTimerOnce(); // add request parameter
assertFalse( slider._requestScheduled );
TestUtil.forceInterval( slider._repeatTimer );
assertTrue( slider._requestScheduled );
assertEquals( 80, slider._selection );
TestUtil.fakeMouseEventDOM( node, "mouseup" );
assertFalse( slider._repeatTimer.isEnabled() );
slider.destroy();
},
testHoldMinButtonAbort : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
slider.setMaximum( 110 ); // the place needed by thumb
slider.setSelection( 100 );
var node = slider._minButton.getElement();
TestUtil.fakeMouseEventDOM( node, "mousedown" );
assertEquals( 95, slider._selection );
TestUtil.fakeMouseEventDOM( node, "mouseout" );
try {
TestUtil.forceInterval( slider._delayTimer ); // start scrolling
} catch( ex ) {
// expected
}
assertFalse( slider._repeatTimer.isEnabled() );
assertEquals( 95, slider._selection );
slider.destroy();
},
testHoldMinButtonContinue : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
slider.setMaximum( 110 ); // the place needed by thumb
slider.setSelection( 100 );
var node = slider._minButton.getElement();
TestUtil.fakeMouseEventDOM( node, "mousedown" );
assertEquals( 95, slider._selection );
TestUtil.fakeMouseEventDOM( node, "mouseout" );
TestUtil.fakeMouseEventDOM( document.body, "mouseover" );
TestUtil.fakeMouseEventDOM( document.body, "mouseout" );
TestUtil.fakeMouseEventDOM( node, "mouseover" );
TestUtil.forceInterval( slider._delayTimer ); // start scrolling
assertTrue( slider._repeatTimer.isEnabled() );
slider.destroy();
},
testHoldMinButtonDontContinue : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
slider.setMaximum( 110 ); // the place needed by thumb
slider.setSelection( 100 );
var node = slider._minButton.getElement();
TestUtil.fakeMouseEventDOM( node, "mousedown" );
assertEquals( 95, slider._selection );
TestUtil.fakeMouseEventDOM( node, "mouseout" );
TestUtil.fakeMouseEventDOM( document.body, "mouseover" );
TestUtil.fakeMouseEventDOM( document.body, "mouseout" );
TestUtil.fakeMouseEventDOM( node.parentNode, "mouseover" );
try {
TestUtil.forceInterval( slider._delayTimer ); // start scrolling
} catch( ex ) {
// expected
}
assertFalse( slider._repeatTimer.isEnabled() );
slider.destroy();
},
testClickLineVertical : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
slider.setSelection( 2 );
assertEquals( 2, slider._selection );
var node = slider.getElement();
var left = qx.event.type.MouseEvent.buttons.left;
TestUtil.fakeMouseEventDOM( node, "mousedown", left, 11, 10 + 16 + 50 );
TestUtil.fakeMouseEventDOM( node, "mouseup", left, 11, 10 + 16 + 50 );
assertEquals( 12, slider._selection );
TestUtil.fakeMouseEventDOM( node, "mousedown", left, 11, 10 + 16 + 1 );
TestUtil.fakeMouseEventDOM( node, "mouseup", left, 11, 10 + 16 + 1 );
assertEquals( 2, slider._selection );
TestUtil.fakeMouseEventDOM( node, "mousedown", left, 11, 10 + 16 + 1 );
TestUtil.fakeMouseEventDOM( node, "mouseup", left, 11, 10 + 16 + 1 );
assertEquals( 0, slider._selection );
slider.setSelection( 85 );
TestUtil.fakeMouseEventDOM( node, "mousedown", left, 11, 10 + 84 - 1 );
TestUtil.fakeMouseEventDOM( node, "mouseup", left, 11, 10 + 84 - 1 );
assertEquals( 90, slider._selection );
slider.destroy();
},
testClickLineHorizontal : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( true );
slider.setSelection( 2 );
assertEquals( 2, slider._selection );
var node = slider.getElement();
var left = qx.event.type.MouseEvent.buttons.left;
TestUtil.fakeMouseEventDOM( node, "mousedown", left, 10 + 16 + 50, 11 );
TestUtil.fakeMouseEventDOM( node, "mouseup", left, 10 + 16 + 50, 11 );
assertEquals( 12, slider._selection );
TestUtil.fakeMouseEventDOM( node, "mousedown", left, 10 + 16 + 1, 11 );
TestUtil.fakeMouseEventDOM( node, "mouseup", left, 10 + 16 + 1, 11 );
assertEquals( 2, slider._selection );
TestUtil.fakeMouseEventDOM( node, "mousedown", left, 10 + 16 + 1, 11 );
TestUtil.fakeMouseEventDOM( node, "mouseup", left, 10 + 16 + 1, 11 );
assertEquals( 0, slider._selection );
slider.setSelection( 85 );
TestUtil.fakeMouseEventDOM( node, "mousedown", left, 10 + 84 - 1, 11 );
TestUtil.fakeMouseEventDOM( node, "mouseup", left, 10 + 84 - 1, 11 );
assertEquals( 90, slider._selection );
slider.destroy();
},
testHoldOnLine : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
var node = slider.getElement();
var left = qx.event.type.MouseEvent.buttons.left;
var thumb = slider._thumb.getHeight();
// scale is 100 - 32 = 68 : 100 => thumb is 6.8
// last page-increment occured when distance between thumb middle
// and mouse is smaller than one increment (also 6.8).
// Thumb-middle on selection 50 is: 10 + 16 + 50 * 0.68 + 6.8 / 2 = 63.4
// The mouse will be moved there after the scrolling started:
TestUtil.fakeMouseEventDOM( node, "mousedown", left, 11, 50 );
assertEquals( 10, slider._selection );
TestUtil.forceInterval( slider._delayTimer ); // start scrolling
TestUtil.forceInterval( slider._repeatTimer );
TestUtil.fakeMouseEventDOM( node, "mousemove", left, 11, 63 );
TestUtil.forceInterval( slider._repeatTimer );
TestUtil.forceInterval( slider._repeatTimer );
assertEquals( 40, slider._selection );
TestUtil.forceInterval( slider._repeatTimer );
assertEquals( 50, slider._selection );
TestUtil.fakeMouseEventDOM( node, "mousemove", left, 11, 64 );
TestUtil.forceInterval( slider._repeatTimer );
assertEquals( 60, slider._selection );
// direction change not allowed:
TestUtil.fakeMouseEventDOM( node, "mousemove", left, 11, 30 );
TestUtil.forceInterval( slider._repeatTimer );
assertEquals( 60, slider._selection );
slider.destroy();
},
testHoldOnLineAbort : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
var node = slider.getElement();
var left = qx.event.type.MouseEvent.buttons.left;
var thumb = slider._thumb.getHeight();
TestUtil.fakeMouseEventDOM( node, "mousedown", left, 11, 50 );
assertEquals( 10, slider._selection );
TestUtil.fakeMouseEventDOM( node, "mouseup", left, 11, 50 );
try {
TestUtil.forceInterval( slider._delayTimer ); // start scrolling
} catch( ex ) {
// expected
}
assertFalse( slider._repeatTimer.isEnabled() );
slider.destroy();
},
testHoldOnLineMouseUpOnThumb : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
var node = slider.getElement();
var left = qx.event.type.MouseEvent.buttons.left;
var thumb = slider._thumb.getElement();
TestUtil.fakeMouseEventDOM( node, "mousedown", left, 11, 50 );
assertEquals( 10, slider._selection );
TestUtil.fakeMouseEventDOM( thumb, "mouseup", left, 11, 50 );
try {
TestUtil.forceInterval( slider._delayTimer ); // start scrolling
} catch( ex ) {
// expected
}
assertFalse( slider._repeatTimer.isEnabled() );
slider.destroy();
},
testHoldOnLineMouseOut : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
var node = slider.getElement();
var left = qx.event.type.MouseEvent.buttons.left;
var thumb = slider._thumb.getHeight();
TestUtil.fakeMouseEventDOM( node, "mouseover", left, 11, 90 );
TestUtil.fakeMouseEventDOM( node, "mousedown", left, 11, 90 );
assertEquals( 10, slider._selection );
TestUtil.forceInterval( slider._delayTimer ); // start scrolling
TestUtil.forceInterval( slider._repeatTimer );
assertEquals( 20, slider._selection );
TestUtil.fakeMouseEventDOM( node, "mouseout", left, 9, 90 );
TestUtil.fakeMouseEventDOM( document.body, "mouseover", left, 9, 90 );
assertFalse( slider._repeatTimer.isEnabled() );
TestUtil.fakeMouseEventDOM( node, "mouseover", left, 11, 90 );
assertTrue( slider._repeatTimer.isEnabled() );
slider.destroy();
},
testHoldOnLineMouseOutAbort : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
var node = slider.getElement();
var left = qx.event.type.MouseEvent.buttons.left;
var thumb = slider._thumb.getHeight();
TestUtil.fakeMouseEventDOM( node, "mouseover", left, 11, 90 );
TestUtil.fakeMouseEventDOM( node, "mousedown", left, 11, 90 );
assertEquals( 10, slider._selection );
TestUtil.forceInterval( slider._delayTimer ); // start scrolling
TestUtil.forceInterval( slider._repeatTimer );
assertEquals( 20, slider._selection );
TestUtil.fakeMouseEventDOM( node, "mouseout", left, 9, 90 );
assertFalse( slider._repeatTimer.isEnabled() );
TestUtil.fakeMouseEventDOM( document.body, "mouseup", left, 0, 0 );
TestUtil.fakeMouseEventDOM( node, "mouseover", left, 11, 90 );
assertFalse( slider._repeatTimer.isEnabled() );
slider.destroy();
},
testKeyControlVertical : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( false );
assertEquals( 0, slider._selection );
TestUtil.press( slider, "Right" );
assertEquals( 5, slider._selection );
TestUtil.press( slider, "Down" );
assertEquals( 10, slider._selection );
TestUtil.press( slider, "Left" );
assertEquals( 5, slider._selection );
TestUtil.press( slider, "Up" );
assertEquals( 0, slider._selection );
TestUtil.press( slider, "PageDown" );
assertEquals( 10, slider._selection );
TestUtil.press( slider, "PageUp" );
assertEquals( 0, slider._selection );
TestUtil.press( slider, "End" );
assertEquals( 90, slider._selection );
TestUtil.press( slider, "Right" );
assertEquals( 90, slider._selection );
TestUtil.press( slider, "Home" );
assertEquals( 0, slider._selection );
TestUtil.press( slider, "Left" );
assertEquals( 0, slider._selection );
slider.destroy();
},
testKeyControlHorizontal : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( true );
assertEquals( 0, slider._selection );
TestUtil.press( slider, "Right" );
assertEquals( 5, slider._selection );
TestUtil.press( slider, "Up" );
assertEquals( 10, slider._selection );
TestUtil.press( slider, "Left" );
assertEquals( 5, slider._selection );
TestUtil.press( slider, "Down" );
assertEquals( 0, slider._selection );
TestUtil.press( slider, "PageUp" );
assertEquals( 10, slider._selection );
TestUtil.press( slider, "PageDown" );
assertEquals( 0, slider._selection );
TestUtil.press( slider, "End" );
assertEquals( 90, slider._selection );
TestUtil.press( slider, "Right" );
assertEquals( 90, slider._selection );
TestUtil.press( slider, "Home" );
assertEquals( 0, slider._selection );
TestUtil.press( slider, "Left" );
assertEquals( 0, slider._selection );
slider.destroy();
},
testMouseWheel : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( true );
assertEquals( 0, slider._selection );
TestUtil.fakeWheel( slider, 1 );
assertEquals( 0, slider._selection );
TestUtil.fakeWheel( slider, -1 );
assertEquals( 0, slider._selection );
TestUtil.fakeWheel( slider, -1 );
assertEquals( 0, slider._selection );
slider.focus();
TestUtil.fakeWheel( slider, 1 );
assertEquals( 0, slider._selection );
TestUtil.fakeWheel( slider, -1 );
assertEquals( 5, slider._selection );
TestUtil.fakeWheel( slider, -1 );
assertEquals( 10, slider._selection );
slider.destroy();
},
testDragThumb : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var left = qx.event.type.MouseEvent.buttons.left;
var slider = this._createSlider( true );
var node = slider._thumb.getElement();
assertEquals( 0, slider._selection );
assertEquals( 16, TestUtil.getElementBounds( node ).left );
// Note: 10 pixel = 14.7 units
TestUtil.fakeMouseEventDOM( node, "mouseover", left, 10 + 16, 11 );
TestUtil.fakeMouseEventDOM( node, "mousedown", left, 10 + 16, 11 );
TestUtil.fakeMouseEventDOM( node, "mousemove", left, 10 + 16 + 10, 11 );
assertEquals( 16 + 10, TestUtil.getElementBounds( node ).left );
assertEquals( 15, slider._selection );
TestUtil.fakeMouseEventDOM( node, "mousemove", left, 10 + 16 + 5, 11 );
assertEquals( 16 + 5, TestUtil.getElementBounds( node ).left );
assertEquals( 7, slider._selection );
TestUtil.fakeMouseEventDOM( node, "mouseup", left, 10 + 16 + 5, 11 );
TestUtil.fakeMouseEventDOM( node, "mousemove", left, 10 + 16 + 10, 11 );
assertEquals( 16 + 5, TestUtil.getElementBounds( node ).left );
assertEquals( 7, slider._selection );
slider.destroy();
},
testDragThumbMouseOut : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var left = qx.event.type.MouseEvent.buttons.left;
var slider = this._createSlider( true );
var node = slider._thumb.getElement();
assertEquals( 0, slider._selection );
assertEquals( 16, TestUtil.getElementBounds( node ).left );
TestUtil.fakeMouseEventDOM( node, "mouseover", left, 10 + 16, 11 );
TestUtil.fakeMouseEventDOM( node, "mousedown", left, 10 + 16, 11 );
TestUtil.fakeMouseEventDOM( node, "mouseout", left, 10 + 16, 9 );
TestUtil.fakeMouseEventDOM( node, "mousemove", left, 10 + 16, 9 );
assertEquals( 16, TestUtil.getElementBounds( node ).left );
TestUtil.fakeMouseEventDOM( node, "mousemove", left, 10 + 16 + 5, 9 );
assertEquals( 16 + 5, TestUtil.getElementBounds( node ).left );
TestUtil.fakeMouseEventDOM( node, "mouseup", left, 10 + 16 + 5, 9 );
TestUtil.fakeMouseEventDOM( node, "mousemove", left, 10 + 16 + 10 );
assertEquals( 16 + 5, TestUtil.getElementBounds( node ).left );
slider.destroy();
},
testDragThumbLimit : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var left = qx.event.type.MouseEvent.buttons.left;
var slider = this._createSlider( true );
var node = slider._thumb.getElement();
assertEquals( 0, slider._selection );
assertEquals( 16, TestUtil.getElementBounds( node ).left );
TestUtil.fakeMouseEventDOM( node, "mouseover", left, 10 + 16, 11 );
TestUtil.fakeMouseEventDOM( node, "mousedown", left, 10 + 16, 11 );
TestUtil.fakeMouseEventDOM( node, "mousemove", left, 10 + 16 - 10, 11 );
assertEquals( 16, TestUtil.getElementBounds( node ).left );
assertEquals( 0, slider._selection );
TestUtil.fakeMouseEventDOM( node, "mousemove", left, 10 + 16 + 120, 11 );
assertEquals( 77, TestUtil.getElementBounds( node ).left );
assertEquals( 90, slider._selection );
slider.destroy();
},
testDispose : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var slider = this._createSlider( true );
var thumb = slider._thumb;
var minButton = slider._minButton;
var maxButton = slider._maxButton;
var timer = slider._repeatTimer;
var parent = slider.getElement().parentNode;
var parentLength = parent.childNodes.length;
slider.destroy();
TestUtil.flush();
assertNull( slider._thumb );
assertNull( slider._minButton );
assertNull( slider._maxButton );
assertNull( slider._repeatTimer );
assertNull( slider.getElement() );
assertNull( slider.__listeners );
assertTrue( parent.childNodes.length === parentLength - 1 );
assertTrue( minButton.isDisposed() );
assertTrue( maxButton.isDisposed() );
assertTrue( timer.isDisposed() );
},
/////////
// Helper
_createSlider : function( horizontal ) {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var result = new rwt.widgets.Slider( horizontal );
result.addToDocument();
result.setLeft( 10 );
result.setTop( 10 );
if( horizontal ) {
result.setWidth( 100 );
result.setHeight( 20 );
} else {
result.setWidth( 20 );
result.setHeight( 100 );
}
result.setIncrement( 5 );
TestUtil.flush();
return result;
}
}
} );