From 2a8a77a9b287e247b2b191f9e282e82e370ee525 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Scott=20Gonz=C3=A1lez?= Date: Sun, 7 Aug 2011 19:11:49 -0400 Subject: [PATCH] Spinner: More tests. Don't trigger spin when programmatically stepping or paging. --- tests/unit/spinner/spinner_core.js | 9 ++ tests/unit/spinner/spinner_events.js | 215 ++++++++++++++++++++++++--- ui/jquery.ui.spinner.js | 2 +- 3 files changed, 201 insertions(+), 25 deletions(-) diff --git a/tests/unit/spinner/spinner_core.js b/tests/unit/spinner/spinner_core.js index e4a632640..55b806a7f 100644 --- a/tests/unit/spinner/spinner_core.js +++ b/tests/unit/spinner/spinner_core.js @@ -176,4 +176,13 @@ test( "ARIA attributes", function() { equal( element.attr( "aria-valuemax" ), 10, "max option changed aria-valuemax changes" ); }); +test( "focus text field when pressing button", function() { + expect( 2 ); + var element = $( "#spin" ).spinner(); + $( "body" ).focus(); + ok( element[ 0 ] !== document.activeElement, "not focused before" ); + element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown(); + ok( element[ 0 ] === document.activeElement, "focused after" ); +}); + })( jQuery ); diff --git a/tests/unit/spinner/spinner_events.js b/tests/unit/spinner/spinner_events.js index 98292b055..e9f5da1ce 100644 --- a/tests/unit/spinner/spinner_events.js +++ b/tests/unit/spinner/spinner_events.js @@ -3,48 +3,215 @@ module( "spinner: events" ); test( "start", function() { - expect( 1 ); - var element = $( "#spin" ).spinner({ - start: function() { - ok( true, "start" ); - } - }); + expect( 6 ); + var element = $( "#spin" ).spinner(); + function shouldStart( expectation, msg ) { + element.spinner( "option", "start", function() { + ok( expectation, msg ); + }); + } + + shouldStart( true, "key UP" ); spinner_simulateKeyDownUp( element, $.ui.keyCode.UP ); + shouldStart( true, "key DOWN" ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.DOWN ); + + shouldStart( true, "key PAGE_UP" ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.PAGE_UP ); + shouldStart( true, "key PAGE_DOWN" ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.PAGE_DOWN ); + + shouldStart( true, "button up" ); + element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown().mouseup(); + shouldStart( true, "button down" ); + element.spinner( "widget" ).find( ".ui-spinner-down" ).mousedown().mouseup(); + + shouldStart( false, "stepUp" ); + element.spinner( "stepUp" ); + shouldStart( false, "stepDown" ); + element.spinner( "stepDown" ); + + shouldStart( false, "pageUp" ); + element.spinner( "pageUp" ); + shouldStart( false, "pageDown" ); + element.spinner( "pageDown" ); + + shouldStart( false, "value" ); + element.spinner( "value", 999 ); }); test( "spin", function() { - expect( 1 ); - var element = $( "#spin" ).spinner({ - spin: function(){ - ok( true, "spin" ); - } - }); + expect( 6 ); + var element = $( "#spin" ).spinner(); + function shouldSpin( expectation, msg ) { + element.spinner( "option", "spin", function() { + ok( expectation, msg ); + }); + } + + shouldSpin( true, "key UP" ); spinner_simulateKeyDownUp( element, $.ui.keyCode.UP ); + shouldSpin( true, "key DOWN" ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.DOWN ); + + shouldSpin( true, "key PAGE_UP" ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.PAGE_UP ); + shouldSpin( true, "key PAGE_DOWN" ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.PAGE_DOWN ); + + shouldSpin( true, "button up" ); + element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown().mouseup(); + shouldSpin( true, "button down" ); + element.spinner( "widget" ).find( ".ui-spinner-down" ).mousedown().mouseup(); + + shouldSpin( false, "stepUp" ); + element.spinner( "stepUp" ); + shouldSpin( false, "stepDown" ); + element.spinner( "stepDown" ); + + shouldSpin( false, "pageUp" ); + element.spinner( "pageUp" ); + shouldSpin( false, "pageDown" ); + element.spinner( "pageDown" ); + + shouldSpin( false, "value" ); + element.spinner( "value", 999 ); }); test( "stop", function() { - expect( 1 ); - var element = $( "#spin" ).spinner({ - stop: function(){ - ok( true, "stop" ); - } - }); + expect( 6 ); + var element = $( "#spin" ).spinner(); + function shouldStop( expectation, msg ) { + element.spinner( "option", "stop", function() { + ok( expectation, msg ); + }); + } + + shouldStop( true, "key UP" ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.UP ); + shouldStop( true, "key DOWN" ); spinner_simulateKeyDownUp( element, $.ui.keyCode.DOWN ); + + shouldStop( true, "key PAGE_UP" ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.PAGE_UP ); + shouldStop( true, "key PAGE_DOWN" ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.PAGE_DOWN ); + + shouldStop( true, "button up" ); + element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown().mouseup(); + shouldStop( true, "button down" ); + element.spinner( "widget" ).find( ".ui-spinner-down" ).mousedown().mouseup(); + + shouldStop( false, "stepUp" ); + element.spinner( "stepUp" ); + shouldStop( false, "stepDown" ); + element.spinner( "stepDown" ); + + shouldStop( false, "pageUp" ); + element.spinner( "pageUp" ); + shouldStop( false, "pageDown" ); + element.spinner( "pageDown" ); + + shouldStop( false, "value" ); + element.spinner( "value", 999 ); }); test( "change", function() { - expect( 1 ); - var element = $( "#spin" ).spinner({ - change: function(){ - ok( true, "change" ); - } - }); + expect( 14 ); + var element = $( "#spin" ).spinner(); + function shouldChange( expectation, msg ) { + element.spinner( "option", "change", function() { + ok( expectation, msg ); + }); + } + + shouldChange( false, "key UP, before blur" ); spinner_simulateKeyDownUp( element, $.ui.keyCode.UP ); + shouldChange( true, "blur after key UP" ); element.blur(); + + shouldChange( false, "key DOWN, before blur" ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.DOWN ); + shouldChange( true, "blur after key DOWN" ); + element.blur(); + + shouldChange( false, "key PAGE_UP, before blur" ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.PAGE_UP ); + shouldChange( true, "blur after key PAGE_UP" ); + element.blur(); + + shouldChange( false, "key PAGE_DOWN, before blur" ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.PAGE_DOWN ); + shouldChange( true, "key PAGE_DOWN" ); + element.blur(); + + shouldChange( false, "many keys, before blur" ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.PAGE_DOWN ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.UP ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.UP ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.UP ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.DOWN ); + shouldChange( true, "blur after many keys" ); + element.blur(); + + shouldChange( false, "many keys, same final value, before blur" ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.UP ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.UP ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.DOWN ); + spinner_simulateKeyDownUp( element, $.ui.keyCode.DOWN ); + shouldChange( false, "blur after many keys, same final value" ); + + shouldChange( false, "button up, before blur" ); + element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown().mouseup(); + shouldChange( true, "blur after button up" ); + element.blur(); + + shouldChange( false, "button down, before blur" ); + element.spinner( "widget" ).find( ".ui-spinner-down" ).mousedown().mouseup(); + shouldChange( true, "blur after button down" ); + element.blur(); + + shouldChange( false, "many buttons, same final value, before blur" ); + element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown().mouseup(); + element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown().mouseup(); + element.spinner( "widget" ).find( ".ui-spinner-down" ).mousedown().mouseup(); + element.spinner( "widget" ).find( ".ui-spinner-down" ).mousedown().mouseup(); + shouldChange( false, "blur after many buttons, same final value" ); + element.blur(); + + shouldChange( true, "stepUp" ); + element.spinner( "stepUp" ); + + shouldChange( true, "stepDown" ); + element.spinner( "stepDown" ); + + shouldChange( true, "pageUp" ); + element.spinner( "pageUp" ); + + shouldChange( true, "pageDown" ); + element.spinner( "pageDown" ); + + shouldChange( true, "value" ); + element.spinner( "value", 999 ); + + shouldChange( false, "value, same value" ); + element.spinner( "value", 999 ); + + shouldChange( true, "max, value changed" ); + element.spinner( "option", "max", 900 ); + + shouldChange( false, "max, value not changed" ); + element.spinner( "option", "max", 1000 ); + + shouldChange( true, "min, value changed" ); + element.spinner( "option", "min", 950 ); + + shouldChange( false, "min, value not changed" ); + element.spinner( "option", "min", 200 ); }); })( jQuery ); diff --git a/ui/jquery.ui.spinner.js b/ui/jquery.ui.spinner.js index 71f6a2332..b36bdd9fd 100644 --- a/ui/jquery.ui.spinner.js +++ b/ui/jquery.ui.spinner.js @@ -253,7 +253,7 @@ $.widget( "ui.spinner", { // clamp the new value newVal = this._trimValue( newVal ); - if ( this._trigger( "spin", event, { value: newVal } ) !== false) { + if ( !this.spinning || this._trigger( "spin", event, { value: newVal } ) !== false) { this._value( newVal ); this.counter++; }