Large diffs are not rendered by default.

@@ -0,0 +1,158 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>jQuery Mobile Slider Test Suite</title>

<script src="../../../external/requirejs/require.js"></script>
<script src="../../../js/requirejs.config.js"></script>
<script src="../../../js/jquery.tag.inserter.js"></script>
<script src="../../jquery.setNameSpace.js"></script>
<script src="../../../external/qunit/qunit.js"></script>
<script src="../../../external/qunit-assert-classes/qunit-assert-classes.js"></script>
<script src="../../../tests/jquery.testHelper.js"></script>
<script>
$.testHelper.asyncLoad([
[
"widgets/forms/slider",
"widgets/forms/slider.backcompat",
"widgets/forms/slider.tooltip"
],
[
"slider_events.js",
"slider_core.js",
"slider_backcompat.js"
],
[ "init" ]
]);
</script>

<link rel="stylesheet" href="../../../css/themes/default/jquery.mobile.css"/>
<link rel="stylesheet" href="../../../external/qunit/qunit.css"/>
<link rel="stylesheet" href="../../jqm-tests.css"/>
</head>
<body>

<div id="qunit"></div>

<div id="foo" data-nstest-role="page">
<div data-nstest-role="fieldcontain">
<input type="range" name="slider-1" id="range-slider-up" value="0" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" />
</div>
<div data-nstest-role="fieldcontain">
<input type="range" name="slider-1" class="textinput-test" value="0" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" />
</div>

<div data-nstest-role="fieldcontain">
<input type="range" name="slider-1" id="range-slider-down" value="10" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" />
</div>

<div data-nstest-role="fieldcontain">
<input type="range" name="background-slider" id="background-slider" value="10" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" data-nstest-highlight="true"/>
</div>

<div data-nstest-role="fieldcontain">
<input type="range" name="no-background-slider" id="no-background-slider" value="10" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a"/>
</div>

<div data-nstest-role="fieldcontain">
<input type="range" name="slider-1" id="range-slider-home" value="75" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" />
</div>

<div data-nstest-role="fieldcontain">
<label for="slider-1">Input slider:</label>
<input type="range" name="slider-1" id="range-slider-end" value="15" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" />
</div>

<div data-nstest-role="fieldcontain">
<input type="range" name="stepped" id="stepped" value="15" min="0" max="100" step="10" data-nstest-theme="b" data-nstest-track-theme="a" />
</div>

<div data-nstest-role="fieldcontain">
<select name="slider" id="slider-switch" data-nstest-role="slider">
<option value="off">Off</option>
<option value="on">On</option>
</select>
</div>

<div data-nstest-role="fieldcontain">
<input type="range" name="onchange" id="onchange" value="25" min="0" max="100" step="10" onchange="onChangeCounter()" data-nstest-theme="b" data-nstest-track-theme="a" />
</div>

<div data-role="fieldcontain">
<label for="slider">Input slider:</label>
<input type="range" name="slider" id="slider" value="25" min="0" max="100" class="should-be-native"/>
</div>

<div data-role="fieldcontain">
<label for="step-slider">Input slider:</label>
<input type="range" name="step-slider" id="step-slider" value="25" min="0" max="100" step="20"/>
</div>

<div data-role="fieldcontain">
<label for="empty-string-val-slider">Input slider:</label>
<input type="range" name="empty-string-val-slider" id="empty-string-val-slider" value="25" min="10" max="100" step="20"/>
</div>

<div data-role="fieldcontain">
<label id="label-id" for="label-id-slider">Input slider:</label>
<input type="range" name="slider" id="label-id-slider" value="25" min="0" max="100"/>
</div>

<div data-role="fieldcontain">
<label for="mousedown-which-events">Input slider:</label>
<input type="range" name="slider" id="mousedown-which-events" value="25" min="0" max="100"/>
</div>

<div data-role="fieldcontain">
<label for="start-stop-events">Input slider:</label>
<input type="range" name="slider" id="start-stop-events" value="25" min="0" max="100"/>
</div>

<div data-role="fieldcontain">
<label for="mouseup-refresh">Input slider:</label>
<input type="range" name="slider" id="mouseup-refresh" value="25" min="0" max="100"/>
</div>

<div data-role="fieldcontain">
<label for="remove-events-slider">Input slider:</label>
<input type="range" name="remove-events-slider" id="remove-events-slider" value="25" min="0" max="100"/>
</div>

<label>Input slider:
<input type="range" name="disable-test" id="disable-test" value="17" min="0" max="100"/>
</label>

<label>Tooltip slider:
<input type="range" name="tooltip-test" id="tooltip-test" value="17" min="0" max="100" data-nstest-popup-enabled="true"/>
</label>

<label>Tooltip w/ Button value:
<input type="range" name="tooltip-test-both" id="tooltip-test-both" value="17" min="0" max="100" data-nstest-popup-enabled="true" data-nstest-show-value="true"/>
</label>

<label>Input slider:
<input type="range" name="disable-input-test" id="disable-input-test" value="17" min="0" max="100" />
</label>

<div data-role="fieldcontain">
<input type="range" name="slider-change-event" id="slider-change-event" value="2" min="0" max="4" step="1" />
</div>

<div data-role="fieldcontain">
<input type="range" name="mini-option-test" id="mini-option-test" data-nstest-mini="true" value="17" min="0" max="100" />
</div>

<div data-role="fieldcontain">
<input type="range" name="corners-option-test" id="corners-option-test" data-nstest-role="slider" data-nstest-corners="false" value="17" min="0" max="100" />
</div>

</div>

<div id="enhancetest">
<input type="range" name="slider-enhancetest" id="range-slider-enhancetest" value="75" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" />
</div>

</body>
</html>
@@ -13,6 +13,8 @@
<script src="../../../external/qunit-assert-classes/qunit-assert-classes.js"></script>
<script src="../../../tests/jquery.testHelper.js"></script>
<script>
$.mobileBackcompat = false;

$.testHelper.asyncLoad([
[
"widgets/forms/slider",
@@ -29,44 +31,42 @@
<link rel="stylesheet" href="../../../css/themes/default/jquery.mobile.css"/>
<link rel="stylesheet" href="../../../external/qunit/qunit.css"/>
<link rel="stylesheet" href="../../jqm-tests.css"/>

<script src="../../swarminject.js"></script>
</head>
<body>

<div id="qunit"></div>

<div id="foo" data-nstest-role="page">
<div data-nstest-role="fieldcontain">
<input type="range" name="slider-1" id="range-slider-up" value="0" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" />
<input type="range" name="slider-1" data-nstest-role="slider" id="range-slider-up" value="0" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" />
</div>
<div data-nstest-role="fieldcontain">
<input type="range" name="slider-1" class="textinput-test" value="0" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" />
<input type="range" name="slider-1" data-nstest-role="slider" class="textinput-test" value="0" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" />
</div>

<div data-nstest-role="fieldcontain">
<input type="range" name="slider-1" id="range-slider-down" value="10" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" />
<input type="range" name="slider-1"data-nstest-role="slider" id="range-slider-down" value="10" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" />
</div>

<div data-nstest-role="fieldcontain">
<input type="range" name="background-slider" id="background-slider" value="10" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" data-nstest-highlight="true"/>
<input type="range" name="background-slider" data-nstest-role="slider" id="background-slider" value="10" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" data-nstest-highlight="true"/>
</div>

<div data-nstest-role="fieldcontain">
<input type="range" name="no-background-slider" id="no-background-slider" value="10" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a"/>
<input type="range" name="no-background-slider" data-nstest-role="slider" id="no-background-slider" value="10" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a"/>
</div>

<div data-nstest-role="fieldcontain">
<input type="range" name="slider-1" id="range-slider-home" value="75" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" />
<input type="range" name="slider-1" data-nstest-role="slider" id="range-slider-home" value="75" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" />
</div>

<div data-nstest-role="fieldcontain">
<label for="slider-1">Input slider:</label>
<input type="range" name="slider-1" id="range-slider-end" value="15" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" />
<input type="range" name="slider-1" data-nstest-role="slider" id="range-slider-end" value="15" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" />
</div>

<div data-nstest-role="fieldcontain">
<input type="range" name="stepped" id="stepped" value="15" min="0" max="100" step="10" data-nstest-theme="b" data-nstest-track-theme="a" />
<input type="range" name="stepped" data-nstest-role="slider" id="stepped" value="15" min="0" max="100" step="10" data-nstest-theme="b" data-nstest-track-theme="a" />
</div>

<div data-nstest-role="fieldcontain">
@@ -77,7 +77,7 @@
</div>

<div data-nstest-role="fieldcontain">
<input type="range" name="onchange" id="onchange" value="25" min="0" max="100" step="10" onchange="onChangeCounter()" data-nstest-theme="b" data-nstest-track-theme="a" />
<input type="range" name="onchange" id="onchange" data-nstest-role="slider" value="25" min="0" max="100" step="10" onchange="onChangeCounter()" data-nstest-theme="b" data-nstest-track-theme="a" />
</div>

<div data-role="fieldcontain">
@@ -87,63 +87,63 @@

<div data-role="fieldcontain">
<label for="step-slider">Input slider:</label>
<input type="range" name="step-slider" id="step-slider" value="25" min="0" max="100" step="20"/>
<input type="range" name="step-slider" data-nstest-role="slider" id="step-slider" value="25" min="0" max="100" step="20"/>
</div>

<div data-role="fieldcontain">
<label for="empty-string-val-slider">Input slider:</label>
<input type="range" name="empty-string-val-slider" id="empty-string-val-slider" value="25" min="10" max="100" step="20"/>
<input type="range" name="empty-string-val-slider" data-nstest-role="slider" id="empty-string-val-slider" value="25" min="10" max="100" step="20"/>
</div>

<div data-role="fieldcontain">
<label id="label-id" for="label-id-slider">Input slider:</label>
<input type="range" name="slider" id="label-id-slider" value="25" min="0" max="100"/>
<input type="range" name="slider" data-nstest-role="slider" id="label-id-slider" value="25" min="0" max="100"/>
</div>

<div data-role="fieldcontain">
<label for="mousedown-which-events">Input slider:</label>
<input type="range" name="slider" id="mousedown-which-events" value="25" min="0" max="100"/>
<input type="range" name="slider" data-nstest-role="slider" id="mousedown-which-events" value="25" min="0" max="100"/>
</div>

<div data-role="fieldcontain">
<label for="start-stop-events">Input slider:</label>
<input type="range" name="slider" id="start-stop-events" value="25" min="0" max="100"/>
<input type="range" name="slider" data-nstest-role="slider" id="start-stop-events" value="25" min="0" max="100"/>
</div>

<div data-role="fieldcontain">
<label for="mouseup-refresh">Input slider:</label>
<input type="range" name="slider" id="mouseup-refresh" value="25" min="0" max="100"/>
<input type="range" name="slider" data-nstest-role="slider" id="mouseup-refresh" value="25" min="0" max="100"/>
</div>

<div data-role="fieldcontain">
<label for="remove-events-slider">Input slider:</label>
<input type="range" name="remove-events-slider" id="remove-events-slider" value="25" min="0" max="100"/>
<input type="range" name="remove-events-slider" data-nstest-role="slider" id="remove-events-slider" value="25" min="0" max="100"/>
</div>

<label>Input slider:
<input type="range" name="disable-test" id="disable-test" value="17" min="0" max="100"/>
<input type="range" name="disable-test" data-nstest-role="slider" id="disable-test" value="17" min="0" max="100"/>
</label>

<label>Tooltip slider:
<input type="range" name="tooltip-test" id="tooltip-test" value="17" min="0" max="100" data-nstest-popup-enabled="true"/>
<input type="range" name="tooltip-test" data-nstest-role="slider" id="tooltip-test" value="17" min="0" max="100" data-nstest-popup-enabled="true"/>
</label>

<label>Tooltip w/ Button value:
<input type="range" name="tooltip-test-both" id="tooltip-test-both" value="17" min="0" max="100" data-nstest-popup-enabled="true" data-nstest-show-value="true"/>
<input type="range" name="tooltip-test-both" data-nstest-role="slider" id="tooltip-test-both" value="17" min="0" max="100" data-nstest-popup-enabled="true" data-nstest-show-value="true"/>
</label>

<label>Input slider:
<input type="range" name="disable-input-test" id="disable-input-test" value="17" min="0" max="100" />
<input type="range" name="disable-input-test" data-nstest-role="slider" id="disable-input-test" value="17" min="0" max="100" />
</label>

<div data-role="fieldcontain">
<input type="range" name="slider-change-event" id="slider-change-event" value="2" min="0" max="4" step="1" />
<input type="range" name="slider-change-event" data-nstest-role="slider" id="slider-change-event" value="2" min="0" max="4" step="1" />
</div>

</div>

<div id="enhancetest">
<input type="range" name="slider-enhancetest" id="range-slider-enhancetest" value="75" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" />
<input type="range" name="slider-enhancetest" data-nstest-role="slider" id="range-slider-enhancetest" value="75" min="0" max="100" data-nstest-theme="b" data-nstest-track-theme="a" />
</div>

</body>
@@ -0,0 +1,24 @@
/*
* mobile slider unit tests
*/
( function( $ ) {

module( "jquery.mobile.slider.js backcompat" );

test( "data-highlight works properly", function() {
var $highlighted = $( "#background-slider" ),
$unhighlighted = $( "#no-background-slider" );

deepEqual( $highlighted.siblings( ".ui-slider-track" ).find( ".ui-slider-bg" ).length, 1,
"highlighted slider should have a div for the track bg" );
deepEqual( $unhighlighted.siblings( ".ui-slider-track" ).find( ".ui-slider-bg" ).length, 0,
"unhighlighted slider _not_ should have a div for the track bg" );
} );

test( "backcompat tests", function(assert) {
assert.hasClasses( $( "#mini-option-test" ).siblings( ".ui-slider-track" ), "ui-mini" );
assert.lacksClasses( $( "#corners-option-test" ).siblings( ".ui-slider-track" ),
"ui-corner-all" );
} );

} )( jQuery );
@@ -30,23 +30,6 @@ test( "empty string value results defaults to slider min value", function() {
deepEqual( slider.val( '' ).slider( 'refresh' ).val(), slider.attr( 'min' ), "val is equal to min attr" );
} );

test( "flip toggle switch title should be current selected value attr", function() {
var slider = $( "#slider-switch" );

deepEqual( slider.siblings( ".ui-slider-switch" ).find( "a" ).attr( 'title' ),
$( slider.find( "option" )[ slider[ 0 ].selectedIndex ] ).text(),
"verify that the link title is set to the selected option text" );
} );

test( "data-highlight works properly", function() {
var $highlighted = $( "#background-slider" ),
$unhighlighted = $( "#no-background-slider" );

deepEqual( $highlighted.siblings( ".ui-slider-track" ).find( ".ui-slider-bg" ).length, 1,
"highlighted slider should have a div for the track bg" );
deepEqual( $unhighlighted.siblings( ".ui-slider-track" ).find( ".ui-slider-bg" ).length, 0,
"unhighlighted slider _not_ should have a div for the track bg" );
} );

test( "labels that have id keep that id", function() {
var label = $( "[for=label-id-slider]" );
@@ -77,7 +60,7 @@ test( "slider tooltip", function() {
deepEqual( tooltip.is( ":visible" ), false, "is initially hidden" );
} );

test( "slider is enabled/disabled correctly", function() {
test( "slider is enabled/disabled correctly", function( assert ) {
var slider = $( "#disable-test" ),
track = slider.siblings( "div" );

@@ -86,9 +69,11 @@ test( "slider is enabled/disabled correctly", function() {
prefix + "'aria-disabled' is " + expectedDisabled );
deepEqual( !!slider.attr( "disabled" ), expectedDisabled,
prefix + "'disabled' property is " + expectedDisabled );
deepEqual( track.hasClass( "ui-state-disabled" ), expectedDisabled,
prefix + "track class 'ui-state-disabled' is " +
( expectedDisabled ? "on" : "off" ) );
if ( expectedDisabled ) {
assert.hasClasses( track, "ui-state-disabled" );
} else {
assert.lacksClasses( track, "ui-state-disabled" );
}
};

testDisabled( "Initially: ", false );
@@ -107,12 +92,12 @@ test( "slider tooltip & button values should match after input value changes", f
ok( slider.val() === sliderHandle.text(), "slider text should match handle text" );
} );

test( "slider input is disabled correctly", function() {
test( "slider input is disabled correctly", function( assert ) {
var slider = $( "#disable-input-test" );

slider.slider( "disable" );

ok( slider.hasClass( "ui-state-disabled" ), "disabling slider also disables the input" );
assert.hasClasses( slider, "ui-state-disabled" );
} );

} )( jQuery );
@@ -110,48 +110,6 @@ test( "input type should degrade to number when slider is created", function() {
deepEqual( $( "#range-slider-up" ).attr( "type" ), "number" );
} );

// generic switch test function
var sliderSwitchTest = function( opts ) {
var slider = $( "#slider-switch" ),
handle = slider.siblings( '.ui-slider-switch' ).find( 'a' ),
switchValues = {
'off': 0,
'on': 1
};

// One for the select and one for the aria-valuenow
expect( opts.keyCodes.length * 2 );

$.each( opts.keyCodes, function( i, elem ) {
// reset the values
slider[ 0 ].selectedIndex = switchValues[ opts.start ];
handle.attr( { 'aria-valuenow': opts.start } );

// stub the keycode and trigger the event
$.Event.prototype.keyCode = $.mobile.keyCode[ elem ];
handle.trigger( 'keydown' );

deepEqual( handle.attr( 'aria-valuenow' ), opts.finish, "handle value is " + opts.finish );
deepEqual( slider[ 0 ].selectedIndex, switchValues[ opts.finish ], "select input has correct index" );
} );
};

test( "switch should select on with up, right, page up and end", function() {
sliderSwitchTest( {
start: 'off',
finish: 'on',
keyCodes: [ 'UP', 'RIGHT', 'PAGE_UP', 'END' ]
} );
} );

test( "switch should select off with down, left, page down and home", function() {
sliderSwitchTest( {
start: 'on',
finish: 'off',
keyCodes: [ 'DOWN', 'LEFT', 'PAGE_DOWN', 'HOME' ]
} );
} );

test( "onchange should not be called on create", function() {
equal( onChangeCnt, 0, "onChange should not have been called" );
} );
@@ -175,36 +133,6 @@ var createEvent = function( name, target, x, y ) {
return event;
};

test( "toggle switch should fire one change event when clicked", function() {
var control = $( "#slider-switch" ),
widget = control.data( "mobile-slider" ),
slider = widget.slider,
handle = widget.handle,
changeCount = 0,
changeFunc = function( e ) {
ok( control[ 0 ].selectedIndex !== currentValue, "change event should only be triggered if the value changes" );
++changeCount;
},
event = null,
offset = handle.offset(),
currentValue = control[ 0 ].selectedIndex;

control.bind( "change", changeFunc );

// The toggle switch actually updates on mousedown and mouseup events, so we go through
// the motions of generating all the events that happen during a click to make sure that
// during all of those events, the value only changes once.

slider.trigger( createEvent( "mousedown", handle[ 0 ], offset.left + 10, offset.top + 10 ) );
slider.trigger( createEvent( "mouseup", handle[ 0 ], offset.left + 10, offset.top + 10 ) );
slider.trigger( createEvent( "click", handle[ 0 ], offset.left + 10, offset.top + 10 ) );

control.unbind( "change", changeFunc );

ok( control[ 0 ].selectedIndex !== currentValue, "value did change" );
deepEqual( changeCount, 1, "change event should be fired once during a click" );
} );

var assertLeftCSS = function( obj, opts ) {
var integerLeft, compare, css, threshold;

@@ -224,156 +152,6 @@ var assertLeftCSS = function( obj, opts ) {
}
};

asyncTest( "toggle switch handle should snap in the old position if dragged less than half of the slider width, in the new position if dragged more than half of the slider width", function() {
var control = $( "#slider-switch" ),
widget = control.data( "mobile-slider" ),
slider = widget.slider,
handle = widget.handle,
width = handle.width(),
offset = null;

$.testHelper.sequence( [
function() {
// initialize the switch
control.val( 'on' ).slider( 'refresh' );
},

function() {
assertLeftCSS( handle, {
percent: '100%',
pixels: handle.parent().css( 'width' ),
message: 'handle starts on the right side'
} );

// simulate dragging less than a half
offset = handle.offset();
slider.trigger( createEvent( "mousedown", handle[ 0 ], offset.left + width - 10, offset.top + 10 ) );
slider.trigger( createEvent( "mousemove", handle[ 0 ], offset.left + width - 20, offset.top + 10 ) );
slider.trigger( createEvent( "mouseup", handle[ 0 ], offset.left + width - 20, offset.top + 10 ) );
},

function() {
assertLeftCSS( handle, {
percent: '100%',
pixels: handle.parent().css( 'width' ),
message: 'handle ends on the right side'
} );

// initialize the switch
control.val( 'on' ).slider( 'refresh' );
},

function() {
assertLeftCSS( handle, {
percent: '100%',
pixels: handle.parent().css( 'width' ),
message: 'handle starts on the right side'
} );

// simulate dragging more than a half
offset = handle.offset();
slider.trigger( createEvent( "mousedown", handle[ 0 ], offset.left + 10, offset.top + 10 ) );
slider.trigger( createEvent( "mousemove", handle[ 0 ], offset.left - ( width / 2 + 10 ), offset.top + 10 ) );
slider.trigger( createEvent( "mouseup", handle[ 0 ], offset.left - ( width / 2 + 10 ), offset.top + 10 ) );
},

function() {
assertLeftCSS( handle, {
percent: '0%',
pixels: '0px',
message: 'handle ends on the left side'
} );

start();
}
], 500 );
} );

asyncTest( "toggle switch handle should not move if user is dragging and value is changed", function() {
var control = $( "#slider-switch" ),
widget = control.data( "mobile-slider" ),
slider = widget.slider,
handle = widget.handle,
width = handle.width(),
offset = null;

$.testHelper.sequence( [
function() {
// initialize the switch
control.val( 'on' ).slider( 'refresh' );
},

function() {
assertLeftCSS( handle, {
percent: '100%',
pixels: handle.parent().css( 'width' ),
message: 'handle starts on the right side'
} );

// simulate dragging more than a half
offset = handle.offset();
slider.trigger( createEvent( "mousedown", handle[ 0 ], offset.left + 10, offset.top + 10 ) );
slider.trigger( createEvent( "mousemove", handle[ 0 ], offset.left - ( width / 2 ), offset.top + 10 ) );
},

function() {
var min, max;
if ( handle.css( 'left' ).indexOf( "%" ) > -1 ) {
min = "0%";
max = "100%";
} else {
min = "0px";
max = handle.parent().css( 'width' );
}

notEqual( handle.css( 'left' ), min, 'handle is not on the left side' );
notEqual( handle.css( 'left' ), max, 'handle is not on the right side' );

// reset slider state so it is ready for other tests
slider.trigger( createEvent( "mouseup", handle[ 0 ], offset.left - ( width / 2 ), offset.top + 10 ) );

start();
}
], 500 );
} );

asyncTest( "toggle switch should refresh when disabled", function() {
var control = $( "#slider-switch" ),
handle = control.data( "mobile-slider" ).handle;

$.testHelper.sequence( [
function() {
// set the initial value
control.val( 'off' ).slider( 'refresh' );
},

function() {
assertLeftCSS( handle, {
percent: '0%',
pixels: '0px',
message: 'handle starts on the left side'
} );

// disable and change value
control.slider( 'disable' );
control.val( 'on' ).slider( 'refresh' );
},

function() {
assertLeftCSS( handle, {
percent: '100%',
pixels: handle.parent().css( 'width' ),
message: 'handle ends on the right side'
} );

// reset slider state so it is ready for other tests
control.slider( 'enable' );

start();
}
], 500 );
} );

asyncTest( "drag should start only when clicked with left button", function() {
expect( 5 );