1 |
(function( $ ) { |
2 |
|
3 |
var simulateKeyDownUp = TestHelpers.spinner.simulateKeyDownUp; |
4 |
|
5 |
module( "spinner: core" ); |
6 |
|
7 |
test( "keydown UP on input, increases value not greater than max", function() { |
8 |
expect( 5 ); |
9 |
var element = $( "#spin" ).val( 70 ).spinner({ |
10 |
max: 100, |
11 |
step: 10 |
12 |
}); |
13 |
|
14 |
simulateKeyDownUp( element, $.ui.keyCode.UP ); |
15 |
equal( element.val(), 80 ); |
16 |
simulateKeyDownUp( element, $.ui.keyCode.UP ); |
17 |
equal( element.val(), 90 ); |
18 |
simulateKeyDownUp( element, $.ui.keyCode.UP ); |
19 |
equal( element.val(), 100 ); |
20 |
simulateKeyDownUp( element, $.ui.keyCode.UP ); |
21 |
equal( element.val(), 100 ); |
22 |
simulateKeyDownUp( element, $.ui.keyCode.UP ); |
23 |
equal( element.val(), 100 ); |
24 |
}); |
25 |
|
26 |
test( "keydown DOWN on input, decreases value not less than min", function() { |
27 |
expect( 5 ); |
28 |
var element = $( "#spin" ).val( 50 ).spinner({ |
29 |
min: 20, |
30 |
step: 10 |
31 |
}); |
32 |
|
33 |
simulateKeyDownUp( element, $.ui.keyCode.DOWN ); |
34 |
equal( element.val(), 40 ); |
35 |
simulateKeyDownUp( element, $.ui.keyCode.DOWN ); |
36 |
equal( element.val(), 30 ); |
37 |
simulateKeyDownUp( element, $.ui.keyCode.DOWN ); |
38 |
equal( element.val(), 20 ); |
39 |
simulateKeyDownUp( element, $.ui.keyCode.DOWN ); |
40 |
equal( element.val(), 20 ); |
41 |
simulateKeyDownUp( element, $.ui.keyCode.DOWN ); |
42 |
equal( element.val(), 20 ); |
43 |
}); |
44 |
|
45 |
test( "keydown PAGE_UP on input, increases value not greater than max", function() { |
46 |
expect( 5 ); |
47 |
var element = $( "#spin" ).val( 70 ).spinner({ |
48 |
max: 100, |
49 |
page: 10 |
50 |
}); |
51 |
|
52 |
simulateKeyDownUp( element, $.ui.keyCode.PAGE_UP ); |
53 |
equal( element.val(), 80 ); |
54 |
simulateKeyDownUp( element, $.ui.keyCode.PAGE_UP ); |
55 |
equal( element.val(), 90 ); |
56 |
simulateKeyDownUp( element, $.ui.keyCode.PAGE_UP ); |
57 |
equal( element.val(), 100 ); |
58 |
simulateKeyDownUp( element, $.ui.keyCode.PAGE_UP ); |
59 |
equal( element.val(), 100 ); |
60 |
simulateKeyDownUp( element, $.ui.keyCode.PAGE_UP ); |
61 |
equal( element.val(), 100 ); |
62 |
}); |
63 |
|
64 |
test( "keydown PAGE_DOWN on input, decreases value not less than min", function() { |
65 |
expect( 5 ); |
66 |
var element = $( "#spin" ).val( 50 ).spinner({ |
67 |
min: 20, |
68 |
page: 10 |
69 |
}); |
70 |
|
71 |
simulateKeyDownUp( element, $.ui.keyCode.PAGE_DOWN ); |
72 |
equal( element.val(), 40 ); |
73 |
simulateKeyDownUp( element, $.ui.keyCode.PAGE_DOWN ); |
74 |
equal( element.val(), 30 ); |
75 |
simulateKeyDownUp( element, $.ui.keyCode.PAGE_DOWN ); |
76 |
equal( element.val(), 20 ); |
77 |
simulateKeyDownUp( element, $.ui.keyCode.PAGE_DOWN ); |
78 |
equal( element.val(), 20 ); |
79 |
simulateKeyDownUp( element, $.ui.keyCode.PAGE_DOWN ); |
80 |
equal( element.val(), 20 ); |
81 |
}); |
82 |
|
83 |
asyncTest( "blur input while spinning with UP", function() { |
84 |
expect( 3 ); |
85 |
var value, |
86 |
element = $( "#spin" ).val( 10 ).spinner(); |
87 |
|
88 |
function step1() { |
89 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } ); |
90 |
equal( element.val(), 11 ); |
91 |
setTimeout( step2, 750 ); |
92 |
} |
93 |
|
94 |
function step2() { |
95 |
value = element.val(); |
96 |
ok( value > 11, "repeating while key is down" ); |
97 |
|
98 |
element.bind( "blur", function() { |
99 |
value = element.val(); |
100 |
setTimeout( step3, 750 ); |
101 |
})[ 0 ].blur(); |
102 |
} |
103 |
|
104 |
function step3() { |
105 |
equal( element.val(), value, "stopped repeating on blur" ); |
106 |
start(); |
107 |
} |
108 |
|
109 |
element[ 0 ].focus(); |
110 |
setTimeout( step1 ); |
111 |
}); |
112 |
|
113 |
test( "mouse click on up button, increases value not greater than max", function() { |
114 |
expect( 3 ); |
115 |
var element = $( "#spin" ).val( 18 ).spinner({ |
116 |
max: 20 |
117 |
}), |
118 |
button = element.spinner( "widget" ).find( ".ui-spinner-up" ); |
119 |
|
120 |
button.trigger( "mousedown" ).trigger( "mouseup" ); |
121 |
equal( element.val(), 19 ); |
122 |
button.trigger( "mousedown" ).trigger( "mouseup" ); |
123 |
equal( element.val(), 20 ); |
124 |
button.trigger( "mousedown" ).trigger( "mouseup" ); |
125 |
equal( element.val(), 20 ); |
126 |
}); |
127 |
|
128 |
test( "mouse click on up button, increases value not greater than max", function() { |
129 |
expect( 3 ); |
130 |
var element = $( "#spin" ).val( 2 ).spinner({ |
131 |
min: 0 |
132 |
}), |
133 |
button = element.spinner( "widget" ).find( ".ui-spinner-down" ); |
134 |
|
135 |
button.trigger( "mousedown" ).trigger( "mouseup" ); |
136 |
equal( element.val(), 1 ); |
137 |
button.trigger( "mousedown" ).trigger( "mouseup" ); |
138 |
equal( element.val(), 0 ); |
139 |
button.trigger( "mousedown" ).trigger( "mouseup" ); |
140 |
equal( element.val(), 0 ); |
141 |
}); |
142 |
|
143 |
test( "mousewheel on input", function() { |
144 |
expect( 4 ); |
145 |
|
146 |
var element = $( "#spin" ).val( 0 ).spinner({ |
147 |
step: 2 |
148 |
}); |
149 |
|
150 |
element.trigger( "mousewheel" ); |
151 |
equal( element.val(), 0, "mousewheel event without delta does not change value" ); |
152 |
|
153 |
element.trigger( "mousewheel", 1 ); |
154 |
equal( element.val(), 2 ); |
155 |
|
156 |
element.trigger( "mousewheel", -0.2 ); |
157 |
equal( element.val(), 0 ); |
158 |
|
159 |
element.trigger( "mousewheel", -15 ); |
160 |
equal(element.val(), -2 ); |
161 |
}); |
162 |
|
163 |
test( "reading HTML5 attributes", function() { |
164 |
expect( 6 ); |
165 |
var markup = "<input type='number' min='-100' max='100' value='5' step='2'>", |
166 |
element = $( markup ).spinner(); |
167 |
equal( element.spinner( "option", "min" ), -100, "min from markup" ); |
168 |
equal( element.spinner( "option", "max" ), 100, "max from markup" ); |
169 |
equal( element.spinner( "option", "step" ), 2, "step from markup" ); |
170 |
|
171 |
element = $( markup ).spinner({ |
172 |
min: -200, |
173 |
max: 200, |
174 |
step: 5 |
175 |
}); |
176 |
equal( element.spinner( "option", "min" ), -200, "min from options" ); |
177 |
equal( element.spinner( "option", "max" ), 200, "max from options" ); |
178 |
equal( element.spinner( "option", "step" ), 5, "stop from options" ); |
179 |
}); |
180 |
|
181 |
test( "ARIA attributes", function() { |
182 |
expect( 9 ); |
183 |
var element = $( "#spin" ).val( 2 ).spinner({ min: -5, max: 5 }); |
184 |
|
185 |
equal( element.attr( "role" ), "spinbutton", "role" ); |
186 |
equal( element.attr( "aria-valuemin" ), "-5", "aria-valuemin" ); |
187 |
equal( element.attr( "aria-valuemax" ), "5", "aria-valuemax" ); |
188 |
equal( element.attr( "aria-valuenow" ), "2", "aria-valuenow" ); |
189 |
|
190 |
element.spinner( "stepUp" ); |
191 |
|
192 |
equal( element.attr( "aria-valuenow" ), "3", "stepUp 1 step changes aria-valuenow" ); |
193 |
|
194 |
element.spinner( "option", { min: -10, max: 10 } ); |
195 |
|
196 |
equal( element.attr( "aria-valuemin" ), "-10", "min option changed aria-valuemin changes" ); |
197 |
equal( element.attr( "aria-valuemax" ), "10", "max option changed aria-valuemax changes" ); |
198 |
|
199 |
element.spinner( "option", "min", null ); |
200 |
equal( element.attr( "aria-valuemin" ), undefined, "aria-valuemin not set when no min" ); |
201 |
|
202 |
element.spinner( "option", "max", null ); |
203 |
equal( element.attr( "aria-valuemax" ), undefined, "aria-valuemax not set when no max" ); |
204 |
}); |
205 |
|
206 |
test( "focus text field when pressing button", function() { |
207 |
expect( 2 ); |
208 |
var element = $( "#spin" ).spinner(); |
209 |
$( "body" ).focus(); |
210 |
ok( element[ 0 ] !== document.activeElement, "not focused before" ); |
211 |
element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown(); |
212 |
ok( element[ 0 ] === document.activeElement, "focused after" ); |
213 |
}); |
214 |
|
215 |
test( "don't clear invalid value on blur", function() { |
216 |
expect( 1 ); |
217 |
var element = $( "#spin" ).spinner(); |
218 |
element.focus().val( "a" ).blur(); |
219 |
equal( element.val(), "a" ); |
220 |
}); |
221 |
|
222 |
test( "precision", function() { |
223 |
expect( 2 ); |
224 |
var element = $( "#spin" ).val( 0.05 ).spinner({ |
225 |
step: 0.0001 |
226 |
}); |
227 |
element.spinner( "stepUp" ); |
228 |
equal( element.val(), "0.0501", "precision from step" ); |
229 |
|
230 |
element.val( 1.05 ).spinner( "option", { |
231 |
step: 1, |
232 |
min: -9.95 |
233 |
}); |
234 |
element.spinner( "stepDown" ); |
235 |
equal( element.val(), "0.05", "precision from min" ); |
236 |
}); |
237 |
|
238 |
})( jQuery ); |