3 var simulateKeyDownUp = TestHelpers.spinner.simulateKeyDownUp;
5 module( "spinner: core" );
7 test( "keydown UP on input, increases value not greater than max", function() {
9 var element = $( "#spin" ).val( 70 ).spinner({
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 );
26 test( "keydown DOWN on input, decreases value not less than min", function() {
28 var element = $( "#spin" ).val( 50 ).spinner({
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 );
45 test( "keydown PAGE_UP on input, increases value not greater than max", function() {
47 var element = $( "#spin" ).val( 70 ).spinner({
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 );
64 test( "keydown PAGE_DOWN on input, decreases value not less than min", function() {
66 var element = $( "#spin" ).val( 50 ).spinner({
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 );
83 asyncTest( "blur input while spinning with UP", function() {
86 element = $( "#spin" ).val( 10 ).spinner();
89 element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } );
90 equal( element.val(), 11 );
91 setTimeout( step2, 750 );
95 value = element.val();
96 ok( value > 11, "repeating while key is down" );
98 setTimeout( step3, 250 );
102 equal( element.val(), value, "stopped repeating on blur" );
106 element[ 0 ].focus();
110 test( "mouse click on up button, increases value not greater than max", function() {
112 var element = $( "#spin" ).val( 18 ).spinner({
115 button = element.spinner( "widget" ).find( ".ui-spinner-up" );
117 button.trigger( "mousedown" ).trigger( "mouseup" );
118 equal( element.val(), 19 );
119 button.trigger( "mousedown" ).trigger( "mouseup" );
120 equal( element.val(), 20 );
121 button.trigger( "mousedown" ).trigger( "mouseup" );
122 equal( element.val(), 20 );
125 test( "mouse click on up button, increases value not greater than max", function() {
127 var element = $( "#spin" ).val( 2 ).spinner({
130 button = element.spinner( "widget" ).find( ".ui-spinner-down" );
132 button.trigger( "mousedown" ).trigger( "mouseup" );
133 equal( element.val(), 1 );
134 button.trigger( "mousedown" ).trigger( "mouseup" );
135 equal( element.val(), 0 );
136 button.trigger( "mousedown" ).trigger( "mouseup" );
137 equal( element.val(), 0 );
140 test( "mousewheel on input", function() {
143 var element = $( "#spin" ).val( 0 ).spinner({
147 element.trigger( "mousewheel" );
148 equal( element.val(), 0, "mousewheel event without delta does not change value" );
150 element.trigger( "mousewheel", 1 );
151 equal( element.val(), 2 );
153 element.trigger( "mousewheel", -0.2 );
154 equal( element.val(), 0 );
156 element.trigger( "mousewheel", -15 );
157 equal(element.val(), -2 );
160 test( "reading HTML5 attributes", function() {
162 var markup = "<input type='number' min='-100' max='100' value='5' step='2'>",
163 element = $( markup ).spinner();
164 equal( element.spinner( "option", "min" ), -100, "min from markup" );
165 equal( element.spinner( "option", "max" ), 100, "max from markup" );
166 equal( element.spinner( "option", "step" ), 2, "step from markup" );
168 element = $( markup ).spinner({
173 equal( element.spinner( "option", "min" ), -200, "min from options" );
174 equal( element.spinner( "option", "max" ), 200, "max from options" );
175 equal( element.spinner( "option", "step" ), 5, "stop from options" );
178 test( "ARIA attributes", function() {
180 var element = $( "#spin" ).val( 2 ).spinner({ min: -5, max: 5 });
182 equal( element.attr( "role" ), "spinbutton", "role" );
183 equal( element.attr( "aria-valuemin" ), "-5", "aria-valuemin" );
184 equal( element.attr( "aria-valuemax" ), "5", "aria-valuemax" );
185 equal( element.attr( "aria-valuenow" ), "2", "aria-valuenow" );
187 element.spinner( "stepUp" );
189 equal( element.attr( "aria-valuenow" ), "3", "stepUp 1 step changes aria-valuenow" );
191 element.spinner( "option", { min: -10, max: 10 } );
193 equal( element.attr( "aria-valuemin" ), "-10", "min option changed aria-valuemin changes" );
194 equal( element.attr( "aria-valuemax" ), "10", "max option changed aria-valuemax changes" );
196 element.spinner( "option", "min", null );
197 equal( element.attr( "aria-valuemin" ), undefined, "aria-valuemin not set when no min" );
199 element.spinner( "option", "max", null );
200 equal( element.attr( "aria-valuemax" ), undefined, "aria-valuemax not set when no max" );
203 test( "focus text field when pressing button", function() {
205 var element = $( "#spin" ).spinner();
207 ok( element[ 0 ] !== document.activeElement, "not focused before" );
208 element.spinner( "widget" ).find( ".ui-spinner-up" ).mousedown();
209 ok( element[ 0 ] === document.activeElement, "focused after" );
212 test( "don't clear invalid value on blur", function() {
214 var element = $( "#spin" ).spinner();
215 element.focus().val( "a" ).blur();
216 equal( element.val(), "a" );
219 test( "precision", function() {
221 var element = $( "#spin" ).val( 0.05 ).spinner({
224 element.spinner( "stepUp" );
225 equal( element.val(), "0.0501", "precision from step" );
227 element.val( 1.05 ).spinner( "option", {
231 element.spinner( "stepDown" );
232 equal( element.val(), "0.05", "precision from min" );