Skip to content

Commit 2a8a77a

Browse files
committed
Spinner: More tests. Don't trigger spin when programmatically stepping or paging.
1 parent c6c9572 commit 2a8a77a

File tree

3 files changed

+201
-25
lines changed

3 files changed

+201
-25
lines changed

tests/unit/spinner/spinner_core.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,4 +176,13 @@ test( "ARIA attributes", function() {
176176
equal( element.attr( "aria-valuemax" ), 10, "max option changed aria-valuemax changes" );
177177
});
178178

179+
test( "focus text field when pressing button", function() {
180+
expect( 2 );
181+
var element = $( "#spin" ).spinner();
182+
$( "body" ).focus();
183+
ok( element[ 0 ] !== document.activeElement, "not focused before" );
184+
element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown();
185+
ok( element[ 0 ] === document.activeElement, "focused after" );
186+
});
187+
179188
})( jQuery );

tests/unit/spinner/spinner_events.js

Lines changed: 191 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,48 +3,215 @@
33
module( "spinner: events" );
44

55
test( "start", function() {
6-
expect( 1 );
7-
var element = $( "#spin" ).spinner({
8-
start: function() {
9-
ok( true, "start" );
10-
}
11-
});
6+
expect( 6 );
7+
var element = $( "#spin" ).spinner();
128

9+
function shouldStart( expectation, msg ) {
10+
element.spinner( "option", "start", function() {
11+
ok( expectation, msg );
12+
});
13+
}
14+
15+
shouldStart( true, "key UP" );
1316
spinner_simulateKeyDownUp( element, $.ui.keyCode.UP );
17+
shouldStart( true, "key DOWN" );
18+
spinner_simulateKeyDownUp( element, $.ui.keyCode.DOWN );
19+
20+
shouldStart( true, "key PAGE_UP" );
21+
spinner_simulateKeyDownUp( element, $.ui.keyCode.PAGE_UP );
22+
shouldStart( true, "key PAGE_DOWN" );
23+
spinner_simulateKeyDownUp( element, $.ui.keyCode.PAGE_DOWN );
24+
25+
shouldStart( true, "button up" );
26+
element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown().mouseup();
27+
shouldStart( true, "button down" );
28+
element.spinner( "widget" ).find( ".ui-spinner-down" ).mousedown().mouseup();
29+
30+
shouldStart( false, "stepUp" );
31+
element.spinner( "stepUp" );
32+
shouldStart( false, "stepDown" );
33+
element.spinner( "stepDown" );
34+
35+
shouldStart( false, "pageUp" );
36+
element.spinner( "pageUp" );
37+
shouldStart( false, "pageDown" );
38+
element.spinner( "pageDown" );
39+
40+
shouldStart( false, "value" );
41+
element.spinner( "value", 999 );
1442
});
1543

1644
test( "spin", function() {
17-
expect( 1 );
18-
var element = $( "#spin" ).spinner({
19-
spin: function(){
20-
ok( true, "spin" );
21-
}
22-
});
45+
expect( 6 );
46+
var element = $( "#spin" ).spinner();
2347

48+
function shouldSpin( expectation, msg ) {
49+
element.spinner( "option", "spin", function() {
50+
ok( expectation, msg );
51+
});
52+
}
53+
54+
shouldSpin( true, "key UP" );
2455
spinner_simulateKeyDownUp( element, $.ui.keyCode.UP );
56+
shouldSpin( true, "key DOWN" );
57+
spinner_simulateKeyDownUp( element, $.ui.keyCode.DOWN );
58+
59+
shouldSpin( true, "key PAGE_UP" );
60+
spinner_simulateKeyDownUp( element, $.ui.keyCode.PAGE_UP );
61+
shouldSpin( true, "key PAGE_DOWN" );
62+
spinner_simulateKeyDownUp( element, $.ui.keyCode.PAGE_DOWN );
63+
64+
shouldSpin( true, "button up" );
65+
element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown().mouseup();
66+
shouldSpin( true, "button down" );
67+
element.spinner( "widget" ).find( ".ui-spinner-down" ).mousedown().mouseup();
68+
69+
shouldSpin( false, "stepUp" );
70+
element.spinner( "stepUp" );
71+
shouldSpin( false, "stepDown" );
72+
element.spinner( "stepDown" );
73+
74+
shouldSpin( false, "pageUp" );
75+
element.spinner( "pageUp" );
76+
shouldSpin( false, "pageDown" );
77+
element.spinner( "pageDown" );
78+
79+
shouldSpin( false, "value" );
80+
element.spinner( "value", 999 );
2581
});
2682

2783
test( "stop", function() {
28-
expect( 1 );
29-
var element = $( "#spin" ).spinner({
30-
stop: function(){
31-
ok( true, "stop" );
32-
}
33-
});
84+
expect( 6 );
85+
var element = $( "#spin" ).spinner();
3486

87+
function shouldStop( expectation, msg ) {
88+
element.spinner( "option", "stop", function() {
89+
ok( expectation, msg );
90+
});
91+
}
92+
93+
shouldStop( true, "key UP" );
94+
spinner_simulateKeyDownUp( element, $.ui.keyCode.UP );
95+
shouldStop( true, "key DOWN" );
3596
spinner_simulateKeyDownUp( element, $.ui.keyCode.DOWN );
97+
98+
shouldStop( true, "key PAGE_UP" );
99+
spinner_simulateKeyDownUp( element, $.ui.keyCode.PAGE_UP );
100+
shouldStop( true, "key PAGE_DOWN" );
101+
spinner_simulateKeyDownUp( element, $.ui.keyCode.PAGE_DOWN );
102+
103+
shouldStop( true, "button up" );
104+
element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown().mouseup();
105+
shouldStop( true, "button down" );
106+
element.spinner( "widget" ).find( ".ui-spinner-down" ).mousedown().mouseup();
107+
108+
shouldStop( false, "stepUp" );
109+
element.spinner( "stepUp" );
110+
shouldStop( false, "stepDown" );
111+
element.spinner( "stepDown" );
112+
113+
shouldStop( false, "pageUp" );
114+
element.spinner( "pageUp" );
115+
shouldStop( false, "pageDown" );
116+
element.spinner( "pageDown" );
117+
118+
shouldStop( false, "value" );
119+
element.spinner( "value", 999 );
36120
});
37121

38122
test( "change", function() {
39-
expect( 1 );
40-
var element = $( "#spin" ).spinner({
41-
change: function(){
42-
ok( true, "change" );
43-
}
44-
});
123+
expect( 14 );
124+
var element = $( "#spin" ).spinner();
125+
126+
function shouldChange( expectation, msg ) {
127+
element.spinner( "option", "change", function() {
128+
ok( expectation, msg );
129+
});
130+
}
131+
132+
shouldChange( false, "key UP, before blur" );
133+
spinner_simulateKeyDownUp( element, $.ui.keyCode.UP );
134+
shouldChange( true, "blur after key UP" );
135+
element.blur();
136+
137+
shouldChange( false, "key DOWN, before blur" );
138+
spinner_simulateKeyDownUp( element, $.ui.keyCode.DOWN );
139+
shouldChange( true, "blur after key DOWN" );
140+
element.blur();
45141

142+
shouldChange( false, "key PAGE_UP, before blur" );
143+
spinner_simulateKeyDownUp( element, $.ui.keyCode.PAGE_UP );
144+
shouldChange( true, "blur after key PAGE_UP" );
145+
element.blur();
146+
147+
shouldChange( false, "key PAGE_DOWN, before blur" );
148+
spinner_simulateKeyDownUp( element, $.ui.keyCode.PAGE_DOWN );
149+
shouldChange( true, "key PAGE_DOWN" );
150+
element.blur();
151+
152+
shouldChange( false, "many keys, before blur" );
153+
spinner_simulateKeyDownUp( element, $.ui.keyCode.PAGE_DOWN );
154+
spinner_simulateKeyDownUp( element, $.ui.keyCode.UP );
155+
spinner_simulateKeyDownUp( element, $.ui.keyCode.UP );
156+
spinner_simulateKeyDownUp( element, $.ui.keyCode.UP );
157+
spinner_simulateKeyDownUp( element, $.ui.keyCode.DOWN );
158+
shouldChange( true, "blur after many keys" );
159+
element.blur();
160+
161+
shouldChange( false, "many keys, same final value, before blur" );
162+
spinner_simulateKeyDownUp( element, $.ui.keyCode.UP );
46163
spinner_simulateKeyDownUp( element, $.ui.keyCode.UP );
164+
spinner_simulateKeyDownUp( element, $.ui.keyCode.DOWN );
165+
spinner_simulateKeyDownUp( element, $.ui.keyCode.DOWN );
166+
shouldChange( false, "blur after many keys, same final value" );
167+
168+
shouldChange( false, "button up, before blur" );
169+
element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown().mouseup();
170+
shouldChange( true, "blur after button up" );
47171
element.blur();
172+
173+
shouldChange( false, "button down, before blur" );
174+
element.spinner( "widget" ).find( ".ui-spinner-down" ).mousedown().mouseup();
175+
shouldChange( true, "blur after button down" );
176+
element.blur();
177+
178+
shouldChange( false, "many buttons, same final value, before blur" );
179+
element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown().mouseup();
180+
element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown().mouseup();
181+
element.spinner( "widget" ).find( ".ui-spinner-down" ).mousedown().mouseup();
182+
element.spinner( "widget" ).find( ".ui-spinner-down" ).mousedown().mouseup();
183+
shouldChange( false, "blur after many buttons, same final value" );
184+
element.blur();
185+
186+
shouldChange( true, "stepUp" );
187+
element.spinner( "stepUp" );
188+
189+
shouldChange( true, "stepDown" );
190+
element.spinner( "stepDown" );
191+
192+
shouldChange( true, "pageUp" );
193+
element.spinner( "pageUp" );
194+
195+
shouldChange( true, "pageDown" );
196+
element.spinner( "pageDown" );
197+
198+
shouldChange( true, "value" );
199+
element.spinner( "value", 999 );
200+
201+
shouldChange( false, "value, same value" );
202+
element.spinner( "value", 999 );
203+
204+
shouldChange( true, "max, value changed" );
205+
element.spinner( "option", "max", 900 );
206+
207+
shouldChange( false, "max, value not changed" );
208+
element.spinner( "option", "max", 1000 );
209+
210+
shouldChange( true, "min, value changed" );
211+
element.spinner( "option", "min", 950 );
212+
213+
shouldChange( false, "min, value not changed" );
214+
element.spinner( "option", "min", 200 );
48215
});
49216

50217
})( jQuery );

ui/jquery.ui.spinner.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ $.widget( "ui.spinner", {
253253
// clamp the new value
254254
newVal = this._trimValue( newVal );
255255

256-
if ( this._trigger( "spin", event, { value: newVal } ) !== false) {
256+
if ( !this.spinning || this._trigger( "spin", event, { value: newVal } ) !== false) {
257257
this._value( newVal );
258258
this.counter++;
259259
}

0 commit comments

Comments
 (0)