/*
* spinner unit tests
*/
(function($) {
// Spinner Tests
module("spinner");
test("init", function() {
expect(3);
$("#spin").spinner();
ok(true, '.spinner() called on element');
$([]).spinner().remove();
ok(true, '.spinner() called on empty collection');
$('').spinner().remove();
ok(true, '.spinner() called on disconnected element');
});
test("destroy", function() {
expect(3);
$("#spin").spinner().spinner("destroy");
ok(true, '.spinner("destroy") called on element');
$([]).spinner().spinner("destroy").remove();
ok(true, '.spinner().spinner("destroy") called on empty collection');
$('').spinner().spinner("destroy").remove();
ok(true, '.spinner().spinner("destroy") called on disconnected element');
});
test("re-attach", function() {
expect(3);
el = $("#spin").spinner().spinner("destroy").spinner();
ok(true, '.spinner().spinner("destroy").spinner() called on element');
$([]).spinner().spinner("destroy").spinner().remove();
ok(true, '.spinner().spinner("destroy").spinner() called on empty collection');
$('').spinner().spinner("destroy").spinner().remove();
ok(true, '.spinner().spinner("destroy").spinner() called on disconnected element');
});
test("disable", function() {
expect(1);
$("#spin").spinner().spinner("disable");
ok(true, '.spinner("disable") called on element');
});
test("enable", function() {
expect(1);
$("#spin").spinner().spinner("disable").spinner("enable");
ok(true, '.spinner("enable") called on element');
});
test("defaults", function() {
expect(7);
el = $("#spin").spinner();
equals(el.data("currency.spinner"), false, "currency");
equals(el.data("disabled.spinner"), false, "disabled");
equals(el.data("incremental.spinner"), true, "incremental");
equals(el.data("max.spinner"), undefined, "max");
equals(el.data("min.spinner"), undefined, "min");
equals(el.data("start.spinner"), 0, "start");
equals(el.data("stepping.spinner"), 1, "stepping");
});
test("set defaults on init", function() {
expect(7);
el = $("#spin").spinner({ currency:true, disabled:true, incremental:false, max:200, min:-100, start:50, stepping:2 });
equals(el.data("currency.spinner"), true, "currency");
equals(el.data("disabled.spinner"), true, "disabled");
equals(el.data("incremental.spinner"), false, "incremental");
equals(el.data("max.spinner"), 200, "max");
equals(el.data("min.spinner"), -100, "min");
equals(el.data("start.spinner"), 50, "start");
equals(el.data("stepping.spinner"), 2, "stepping");
});
test("keydown on input", function() {
expect(6);
el = $("#spin").spinner();
equals(el.val(), 0, "start number");
el.simulate("keydown",{keyCode:$.simulate.VK_UP})
.simulate("keyup",{keyCode:$.simulate.VK_UP});
equals(el.val(), 1, "Up key");
el.simulate("keydown",{keyCode:$.simulate.VK_RIGHT})
.simulate("keyup",{keyCode:$.simulate.VK_RIGHT});
equals(el.val(), 1, "Right key");
el.simulate("keydown",{keyCode:$.simulate.VK_HOME})
.simulate("keyup",{keyCode:$.simulate.VK_HOME});
equals(el.val(), 0, "Home key to start");
el.simulate("keydown",{keyCode:$.simulate.VK_DOWN})
.simulate("keyup",{keyCode:$.simulate.VK_DOWN});
equals(el.val(), -1, "Down Key");
el.simulate("keydown",{keyCode:$.simulate.VK_LEFT})
.simulate("keyup",{keyCode:$.simulate.VK_LEFT});
equals(el.val(), -1, "Left Key");
});
test("keydown on input with options", function() {
expect(4);
el = $("#spin").spinner({ incremental:false, max:200, min:-100, start:50, stepping:10 });
equals(el.val(), 50, "start number");
el.simulate("keydown",{keyCode:$.simulate.VK_UP})
.simulate("keyup",{keyCode:$.simulate.VK_UP});
equals(el.val(), 60, "Stepping 10 on 50");
el.simulate("keydown",{keyCode:$.simulate.VK_END})
.simulate("keyup",{keyCode:$.simulate.VK_END});
equals(el.val(), 200, "End key to max");
el.simulate("keydown",{keyCode:$.simulate.VK_HOME})
.simulate("keyup",{keyCode:$.simulate.VK_HOME});
equals(el.val(), -100, "Home key to min");
});
test("currency and decimal options", function() {
expect(5);
el = $("#spin").spinner({ currency:"$", incremental:false, max:120, min:-50, stepping:0.3 });
equals(el.val(), "$0.00", "start number");
el.simulate("keydown",{keyCode:$.simulate.VK_UP})
.simulate("keyup",{keyCode:$.simulate.VK_UP});
equals(el.val(), "$0.30", "Stepping 0.30");
el.simulate("keydown",{keyCode:$.simulate.VK_END})
.simulate("keyup",{keyCode:$.simulate.VK_END});
equals(el.val(), "$120.00", "End key to max");
el.simulate("keydown",{keyCode:$.simulate.VK_HOME})
.simulate("keyup",{keyCode:$.simulate.VK_HOME});
equals(el.val(), "-$50.00", "Home key to min");
for ( var i = 1 ; i<=120 ; i++ ) {
el.simulate("keydown",{keyCode:$.simulate.VK_UP});
}
el.simulate("keyup",{keyCode:$.simulate.VK_UP});
equals(el.val(), "-$14.00", "keydown 120 times");
});
test("spin without auto-incremental stepping", function() {
expect(2);
el = $("#spin").spinner({ incremental:false });
for ( var i = 1 ; i<=120 ; i++ ) {
el.simulate("keydown",{keyCode:$.simulate.VK_UP});
}
el.simulate("keyup",{keyCode:$.simulate.VK_UP});
equals(el.val(), 120, "keydown 120 times");
for ( var i = 1 ; i<=210 ; i++ ) {
el.simulate("keydown",{keyCode:$.simulate.VK_DOWN});
}
el.simulate("keyup",{keyCode:$.simulate.VK_DOWN});
equals(el.val(), -90, "keydown 210 times");
});
test("spin with auto-incremental stepping", function() {
expect(2);
el = $("#spin").spinner();
for ( var i = 1 ; i<=120 ; i++ ) {
el.simulate("keydown",{keyCode:$.simulate.VK_UP});
}
el.simulate("keyup",{keyCode:$.simulate.VK_UP});
equals(el.val(), 300, "keydown 120 times (100+20*10)");
for ( var i = 1 ; i<=210 ; i++ ) {
el.simulate("keydown",{keyCode:$.simulate.VK_DOWN});
}
el.simulate("keyup",{keyCode:$.simulate.VK_DOWN});
equals(el.val(), -1800, "keydown 210 times (300-100-100*10-10*100)");
});
test("mouse click on buttons", function() {
expect(4);
el = $("#spin").spinner();
$(".ui-spinner-up").trigger("mousedown").trigger("mouseup");
equals(el.val(), 1, "Mouse click to up");
$(".ui-spinner-up").trigger("dblclick");
equals(el.val(), 2, "Mouse double click to up");
$(".ui-spinner-down").trigger("mousedown").trigger("mouseup");
equals(el.val(), 1, "Mouse click to down");
$(".ui-spinner-down").trigger("dblclick");
equals(el.val(), 0, "Mouse double click to down");
});
test("callback", function() {
expect(2);
var s = 0,
c = 0;
el = $("#spin").spinner({
spin: function(){
s++;
},
change: function(){
c++;
}
});
for ( var i = 1 ; i<=5 ; i++ ) {
el.simulate("keydown",{keyCode:$.simulate.VK_UP});
}
el.simulate("keyup",{keyCode:$.simulate.VK_UP});
equals(s, 5, "Spin 5 times");
el.simulate("keydown",{keyCode:$.simulate.VK_UP}).simulate("keyup",{keyCode:$.simulate.VK_UP});
equals(c, 2, "Change 2 times");
});
test("mouse wheel on input", function() {
expect(0);
});
})(jQuery);