diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/unit/spinner/spinner.html | 42 | ||||
-rw-r--r-- | tests/unit/spinner/spinner_core.js | 171 | ||||
-rw-r--r-- | tests/unit/spinner/spinner_defaults.js | 15 | ||||
-rw-r--r-- | tests/unit/spinner/spinner_events.js | 64 | ||||
-rw-r--r-- | tests/unit/spinner/spinner_methods.js | 155 | ||||
-rw-r--r-- | tests/unit/spinner/spinner_options.js | 154 | ||||
-rw-r--r-- | tests/visual/index.html | 1 | ||||
-rw-r--r-- | tests/visual/spinner/spinner.html | 43 |
8 files changed, 645 insertions, 0 deletions
diff --git a/tests/unit/spinner/spinner.html b/tests/unit/spinner/spinner.html new file mode 100644 index 000000000..2729fce8d --- /dev/null +++ b/tests/unit/spinner/spinner.html @@ -0,0 +1,42 @@ +<!doctype html>
+<html lang="en">
+<head>
+ <title>jQuery UI Spinner Test Suite</title>
+
+ <link type="text/css" href="../../../themes/base/jquery.ui.spinner.css" rel="stylesheet" />
+
+ <script type="text/javascript" src="../../../jquery-1.4.3.js"></script>
+ <script type="text/javascript" src="../../../external/jquery.mousewheel-3.0.4.js"></script>
+ <script type="text/javascript" src="../../../external/glob.js"></script>
+ <script type="text/javascript" src="../../../ui/jquery.ui.core.js"></script>
+ <script type="text/javascript" src="../../../ui/jquery.ui.widget.js"></script>
+ <script type="text/javascript" src="../../../ui/jquery.ui.button.js"></script>
+ <script type="text/javascript" src="../../../ui/jquery.ui.spinner.js"></script>
+
+ <link rel="stylesheet" href="../../../external/qunit.css" type="text/css"/>
+ <script type="text/javascript" src="../../../external/qunit.js"></script>
+ <script type="text/javascript" src="../../jquery.simulate.js"></script>
+ <script type="text/javascript" src="../testsuite.js"></script>
+
+ <script type="text/javascript" src="spinner_core.js"></script>
+ <script type="text/javascript" src="spinner_defaults.js"></script>
+ <script type="text/javascript" src="spinner_events.js"></script>
+ <script type="text/javascript" src="spinner_methods.js"></script>
+ <script type="text/javascript" src="spinner_options.js"></script>
+</head>
+<body>
+
+
+<h1 id="qunit-header">jQuery UI Slider Test Suite</h1>
+<h2 id="qunit-banner"></h2>
+<h2 id="qunit-userAgent"></h2>
+<ol id="qunit-tests">
+</ol>
+
+<div id="qunit-fixture">
+ <input id="spin" class="foo">
+ <input id="spin2" value="2">
+</div>
+
+</body>
+</html>
diff --git a/tests/unit/spinner/spinner_core.js b/tests/unit/spinner/spinner_core.js new file mode 100644 index 000000000..88603708f --- /dev/null +++ b/tests/unit/spinner/spinner_core.js @@ -0,0 +1,171 @@ +/*
+ * spinner_core.js
+ */
+
+var simulateKeyDownUp = function(el, kCode, shift) {
+ el.simulate("keydown",{keyCode:kCode, shiftKey: shift || false })
+ .simulate("keyup",{keyCode:kCode, shiftKey: shift || false });
+};
+
+(function($) {
+
+// Spinner Tests
+module("spinner: core");
+
+test("destroy", function() {
+ // cheat a bit to get IE6 to pass
+ $("#spin").val(0);
+ var beforeHtml = $("#spin").parent().html();
+ var afterHtml = $("#spin").spinner().spinner("destroy").parent().html();
+ equal( afterHtml, beforeHtml, "before/after html should be the same" );
+});
+
+test("keydown UP on input, increases value not greater than max", function() {
+ var el = $("#spin").spinner({
+ max:100,
+ value:50,
+ step:10
+ });
+
+ simulateKeyDownUp(el, $.ui.keyCode.UP);
+ equals(el.val(), 60);
+
+ for (i = 0; i<11; i++) {
+ simulateKeyDownUp(el, $.ui.keyCode.UP);
+ }
+ equals(el.val(), 100);
+
+ el.spinner("value", 50);
+ simulateKeyDownUp(el, $.ui.keyCode.UP);
+ equals(el.val(), 60);
+});
+
+test("keydown DOWN on input, decreases value not less than min", function() {
+ var el = $("#spin").spinner({
+ min:-100,
+ value:50,
+ step:10
+ });
+
+ simulateKeyDownUp(el, $.ui.keyCode.DOWN);
+ equals(el.val(), 40);
+
+ for (i = 0; i<21; i++) {
+ simulateKeyDownUp(el, $.ui.keyCode.DOWN);
+ }
+ equals(el.val(), -100);
+
+ el.spinner("value", 50);
+ simulateKeyDownUp(el, $.ui.keyCode.DOWN);
+ equals(el.val(), 40);
+});
+
+test("keydown PGUP on input, increases value not greater than max", function() {
+ var el = $("#spin").spinner({
+ max: 500,
+ value: 0,
+ step: 10
+ });
+
+ simulateKeyDownUp(el, $.ui.keyCode.PAGE_UP);
+ equal(el.val(), 100);
+
+ for (i = 0; i<5; i++) {
+ simulateKeyDownUp(el, $.ui.keyCode.PAGE_UP);
+ }
+ equal(el.val(), 500);
+
+ el.spinner("value", 0);
+ simulateKeyDownUp(el, $.ui.keyCode.PAGE_UP);
+ equals(el.val(), 100);
+});
+
+test("keydown PGDN on input, decreases value not less than min", function() {
+ var el = $("#spin").spinner({
+ min:-500,
+ value:0,
+ step:10
+ });
+
+ simulateKeyDownUp(el, $.ui.keyCode.PAGE_DOWN);
+ equals(el.val(), -100);
+
+ for (i = 0; i<5; i++) {
+ simulateKeyDownUp(el, $.ui.keyCode.PAGE_DOWN);
+ }
+ equals(el.val(), -500);
+
+ el.spinner("value", 0);
+ simulateKeyDownUp(el, $.ui.keyCode.PAGE_DOWN);
+ equals(el.val(), -100);
+});
+
+test("mouse click on buttons", function() {
+ var el = $("#spin").spinner(),
+ val = 0;
+
+ $(".ui-spinner-up").trigger("mousedown").trigger("mouseup");
+ equals(el.val(), ++val, "mouse click to up");
+
+ $(".ui-spinner-down").trigger("mousedown").trigger("mouseup");
+ equals(el.val(), --val, "mouse click to down");
+
+ el.spinner("value", 50);
+ $(".ui-spinner-up").trigger("mousedown").trigger("mouseup");
+ equals(el.val(), 51);
+
+ el.spinner("value", 50);
+ $(".ui-spinner-down").trigger("mousedown").trigger("mouseup");
+ equals(el.val(), 49);
+});
+
+test("mouse wheel on input", function() {
+ expect(3);
+
+ var el = $("#spin").spinner();
+ el.trigger("mousewheel", 1);
+ equal(el.val(), 1);
+
+ // mousewheel handler uses a timeout, need to accomodate that
+ stop();
+ setTimeout(function() {
+ el.trigger("mousewheel", -1);
+ equal(el.val(), 0);
+
+ setTimeout(function() {
+ el.trigger("mousewheel", -1);
+ equal(el.val(), -1);
+ start();
+ }, 100);
+ }, 100);
+
+});
+
+test("reading HTML5 attributes", function() {
+ var el = $('<input id="spinner" type="number" min="-100" max="100" value="5" step="2">').spinner();
+ equals(el.spinner('option', 'value'), 5, 'value');
+ equals(el.spinner('option', 'max'), 100, 'max');
+ equals(el.spinner('option', 'min'), -100, 'min');
+ equals(el.spinner('option', 'step'), 2, 'step');
+});
+
+test("ARIA attributes", function() {
+ var el = $('#spin').spinner({ min: -5, max: 5, value: 2 }),
+ wrapper = el.spinner("widget");
+
+ equals(wrapper.attr('role'), 'spinbutton', 'role');
+ equals(wrapper.attr('aria-valuemin'), -5, 'aria-valuemin');
+ equals(wrapper.attr('aria-valuemax'), 5, 'aria-valuemax');
+ equals(wrapper.attr('aria-valuenow'), 2, 'aria-valuenow');
+
+ el.spinner('stepUp');
+
+ equals(wrapper.attr('aria-valuenow'), 3, 'stepUp 1 step changes aria-valuenow');
+
+ el.spinner('option', { min: -10, max: 10 });
+
+ equals(wrapper.attr('aria-valuemin'), -10, 'min option changed aria-valuemin changes');
+ equals(wrapper.attr('aria-valuemax'), 10, 'max option changed aria-valuemax changes');
+});
+
+})(jQuery);
diff --git a/tests/unit/spinner/spinner_defaults.js b/tests/unit/spinner/spinner_defaults.js new file mode 100644 index 000000000..2f5d77585 --- /dev/null +++ b/tests/unit/spinner/spinner_defaults.js @@ -0,0 +1,15 @@ +/*
+ * spinner_defaults.js
+ */
+
+var spinner_defaults = {
+ disabled: false,
+ incremental: true,
+ max: null,
+ min: null,
+ numberformat: null,
+ step: null,
+ value: null
+};
+
+commonWidgetTests('spinner', { defaults: spinner_defaults });
diff --git a/tests/unit/spinner/spinner_events.js b/tests/unit/spinner/spinner_events.js new file mode 100644 index 000000000..c0771ca2f --- /dev/null +++ b/tests/unit/spinner/spinner_events.js @@ -0,0 +1,64 @@ +/*
+ * spinner_events.js
+ */
+(function($) {
+
+module("spinner: events");
+
+test("start", function() {
+ var start = 0;
+
+ var el = $("#spin").spinner({
+ start: function(){
+ start++;
+ }
+ });
+
+ simulateKeyDownUp(el, $.ui.keyCode.UP);
+
+ equals(start, 1, "Start triggered");
+});
+
+test("spin", function() {
+ var spin = 0;
+
+ var el = $("#spin").spinner({
+ spin: function(){
+ spin++;
+ }
+ });
+
+ simulateKeyDownUp(el, $.ui.keyCode.UP);
+
+ equals(spin, 1, "Spin triggered");
+});
+
+test("stop", function() {
+ var stop = 0;
+
+ var el = $("#spin").spinner({
+ stop: function(){
+ stop++;
+ }
+ });
+
+ simulateKeyDownUp(el, $.ui.keyCode.DOWN);
+
+ equals(stop, 1, "Stop triggered");
+});
+
+test("change", function() {
+ var change = 0;
+
+ var el = $("#spin").spinner({
+ change: function(){
+ change++;
+ }
+ });
+
+ simulateKeyDownUp(el, $.ui.keyCode.UP);
+
+ equals(change, 1, "Change triggered");
+});
+
+})(jQuery);
diff --git a/tests/unit/spinner/spinner_methods.js b/tests/unit/spinner/spinner_methods.js new file mode 100644 index 000000000..fb58edbdf --- /dev/null +++ b/tests/unit/spinner/spinner_methods.js @@ -0,0 +1,155 @@ +/*
+ * spinner_methods.js
+ */
+(function($) {
+
+module("spinner: methods");
+
+test("disable", function() {
+ var el = $("#spin").spinner({ disabled: false }),
+ val = el.val(),
+ wrapper = $("#spin").spinner("widget");
+
+ ok(!wrapper.hasClass("ui-spinner-disabled"), "before: wrapper does not have ui-spinner-disabled class");
+ ok(!el.is(':disabled'), "before: input does not have disabled attribute");
+
+ el.spinner("disable");
+ ok(wrapper.hasClass("ui-spinner-disabled"), "after: wrapper has ui-spinner-disabled class");
+ ok(el.is(':disabled'), "after: input has disabled attribute");
+
+ simulateKeyDownUp(el, $.ui.keyCode.UP);
+ equals(val, el.val(), "keyboard - value does not change on key UP");
+
+ simulateKeyDownUp(el, $.ui.keyCode.DOWN);
+ equals(val, el.val(), "keyboard - value does not change on key DOWN");
+
+ simulateKeyDownUp(el, $.ui.keyCode.PAGE_UP);
+ equals(val, el.val(), "keyboard - value does not change on key PGUP");
+
+ simulateKeyDownUp(el, $.ui.keyCode.PAGE_DOWN);
+ equals(val, el.val(), "keyboard - value does not change on key PGDN");
+
+ wrapper.find(":ui-button").first().trigger('mousedown').trigger('mouseup');
+ equals(val, el.val(), "mouse - value does not change on clicking up button");
+
+ wrapper.find(":ui-button").last().trigger('mousedown').trigger('mouseup');
+ equals(val, el.val(), "mouse - value does not change on clicking down button");
+
+ el.spinner('stepUp', 6);
+ equals(6, el.val(), "script - stepUp 6 steps changes value");
+
+ el.spinner('stepDown');
+ equals(5, el.val(), "script - stepDown 1 step changes value");
+
+ el.spinner('pageUp');
+ equals(15, el.val(), "script - pageUp 1 page changes value");
+
+ el.spinner('pageDown');
+ equals(5, el.val(), "script - pageDown 1 page changes value");
+
+});
+
+test("enable", function() {
+ var el = $("#spin").spinner({ disabled: true })
+ val = el.val(),
+ wrapper = el.spinner("widget");
+
+ ok(wrapper.hasClass("ui-spinner-disabled"), "before: wrapper has ui-spinner-disabled class");
+ ok(el.is(':disabled'), "before: input has disabled attribute");
+
+ el.spinner("enable");
+
+ ok(!wrapper.hasClass(".ui-spinner-disabled"), "after: wrapper does not have ui-spinner-disabled class");
+ ok(!el.is(':disabled'), "after: input does not have disabled attribute");
+});
+
+test("pageDown", function() {
+ var el = $('#spin').spinner({
+ step: 2,
+ value: 0,
+ min: -100
+ });
+
+ el.spinner('pageDown');
+ equals(el.val(), -20, "pageDown 1 page");
+
+ el.spinner('pageDown', 3);
+ equals(el.val(), -80, "pageDown 3 pages");
+
+ el.val(-91).spinner('pageDown');
+ equals(el.val(), -100, "value close to min and pageDown 1 page");
+
+ el.spinner('pageDown', 10);
+ equals(el.val(), -100, "value at min and pageDown 10 pages");
+});
+
+test("pageUp", function() {
+ var el = $('#spin').spinner({
+ step: 2,
+ value: 0,
+ max: 100
+ });
+
+ el.spinner('pageUp');
+ equals(el.val(), 20, "pageUp 1 page");
+
+ el.spinner('pageUp', 3);
+ equals(el.val(), 80, "pageUp 3 pages");
+
+ el.val(91).spinner('pageUp');
+ equals(el.val(), 100, "value close to max and pageUp 1 page");
+
+ el.spinner('pageUp', 10);
+ equals(el.val(), 100, "value at max and pageUp 10 pages");
+
+});
+
+test("stepDown", function() {
+ expect(4);
+
+ el = $('#spin').spinner({ step: 2, page: 5, value: 0, min: -15 });
+
+ el.spinner('stepDown')
+ equals(el.val(), -2, "stepDown 1 step");
+
+ el.spinner('stepDown', 5)
+ equals(el.val(), -12, "stepDown 5 steps");
+
+ el.spinner('stepDown', 3);
+ equals(el.val(), -15, "close to min and stepDown 3 steps");
+
+ el.spinner('stepDown');
+ equals(el.val(), -15, "at min and stepDown 1 step");
+});
+
+test("stepUp", function() {
+ expect(4);
+
+ el = $('#spin').spinner({ step: 2, page: 5, value: 0, max: 15 });
+
+ el.spinner('stepUp')
+ equals(el.val(), 2, "stepUp 1 steps");
+
+ el.spinner('stepUp', 5)
+ equals(el.val(), 12, "stepUp 5 steps");
+
+ el.spinner('stepUp', 3);
+ equals(el.val(), 15, "close to min and stepUp 3 steps");
+
+ el.spinner('stepUp');
+ equals(el.val(), 15, "at min and stepUp 1 step");
+
+});
+
+test("value", function() {
+ expect(2);
+
+ el = $('#spin').spinner({ value: 0 });
+
+ el.spinner('value', 10);
+ equals(el.val(), 10, "change value via value method");
+
+ equals(10, el.spinner('value'), "get value via value method");
+});
+
+})(jQuery);
diff --git a/tests/unit/spinner/spinner_options.js b/tests/unit/spinner/spinner_options.js new file mode 100644 index 000000000..3db7e5c55 --- /dev/null +++ b/tests/unit/spinner/spinner_options.js @@ -0,0 +1,154 @@ +/*
+ * spinner_options.js
+ */
+(function($) {
+
+module("spinner: options");
+
+test("numberformat, number", function() {
+ var el = $("#spin").spinner({
+ value: "1",
+ numberformat: "n"
+ });
+ equal(el.val(), "1.00");
+});
+
+test("numberformat, number, simple", function() {
+ var el = $("#spin").spinner({
+ value: "1",
+ numberformat: "n0"
+ });
+ equal(el.val(), "1");
+});
+
+test("numberformat, currency", function() {
+ var el = $("#spin").spinner({
+ value: "1",
+ numberformat: "C"
+ });
+ equal(el.val(), "$1.00");
+});
+
+/* TODO figure out how to test this properly
+test("incremental - false (default)", function() {
+ var el = $("#spin").spinner({ incremental:false });
+
+ for ( var i = 1 ; i<=120 ; i++ ) {
+ el.simulate("keydown",{keyCode:$.ui.keyCode.UP});
+ }
+ el.simulate("keyup",{keyCode:$.ui.keyCode.UP});
+
+ equals(el.val(), 120, "incremental false - keydown 120 times");
+
+ for ( var i = 1 ; i<=210 ; i++ ) {
+ el.simulate("keydown",{keyCode:$.ui.keyCode.DOWN});
+ }
+ el.simulate("keyup",{keyCode:$.ui.keyCode.DOWN});
+
+ equals(el.val(), -90, "incremental false - keydown 210 times");
+});
+
+test("incremental - true (default)", function() {
+ var el = $("#spin").spinner();
+
+ for ( var i = 1 ; i<=120 ; i++ ) {
+ el.simulate("keydown",{keyCode:$.ui.keyCode.UP});
+ }
+ el.simulate("keyup",{keyCode:$.ui.keyCode.UP});
+
+ equals(el.val(), 300, "incremental true - keydown 120 times (100+20*10)");
+
+ for ( var i = 1 ; i<=210 ; i++ ) {
+ el.simulate("keydown",{keyCode:$.ui.keyCode.DOWN});
+ }
+ el.simulate("keyup",{keyCode:$.ui.keyCode.DOWN});
+
+ equals(el.val(), -1800, "incremental true - keydown 210 times (300-100-100*10-10*100)");
+});
+*/
+
+test("max", function() {
+ var el = $("#spin").spinner({ max: 100, value: 1000 });
+ equals(el.val(), 100, "max constrained if value option is greater");
+
+ el.spinner('value', 1000);
+ equals(el.val(), 100, "max constrained if value method is greater");
+
+ el.val(1000).blur();
+ equals(el.val(), 100, "max constrained if manual entry");
+});
+
+test("min", function() {
+ var el = $("#spin").spinner({ min: -100, value: -1000 });
+ equals(el.val(), -100, "min constrained if value option is greater");
+
+ el.spinner('value', -1000);
+ equals(el.val(), -100, "min constrained if value method is greater");
+
+ el.val(-1000).blur();
+ equals(el.val(), -100, "min constrained if manual entry");
+});
+
+test("step, 2", function() {
+ var el = $("#spin").spinner({ step: 2 });
+ equals(el.val(), "0", "value initialized to");
+
+ for ( var i = 0 ; i < 5 ; i++ ) {
+ simulateKeyDownUp(el, $.ui.keyCode.UP);
+ }
+ equals(el.val(), "10", "UP 5 times with step: 2");
+
+ el.spinner('value', '10.5');
+ equals(el.val(), "10.5", "value reset to");
+
+ el.spinner('option', 'step', 2);
+ for ( var i = 0 ; i < 5 ; i++ ) {
+ simulateKeyDownUp(el, $.ui.keyCode.UP);
+ }
+ equals(el.val(), "20.5", "UP 5 times with step: 2");
+});
+
+test("step, 0.7", function() {
+ var el = $("#spin").spinner({
+ step: 0.7,
+ numberformat: "n1"
+ });
+ equals(el.val(), "0.0", "value initialized to");
+
+ simulateKeyDownUp(el, $.ui.keyCode.DOWN);
+ equals(el.val(), "-0.7", "DOWN 1 time with step: 0.7");
+
+ for ( var i = 0 ; i < 11 ; i++ ) {
+ simulateKeyDownUp(el, $.ui.keyCode.UP);
+ }
+ equals(el.val(), "7.0", "UP 11 times with step: 0.7");
+});
+
+test("value, default, specified in markup", function() {
+ var el = $('#spin2').spinner();
+ equals(el.val(), 2, "starting value");
+});
+
+test("value, default, nothing specified", function() {
+ var el = $('#spin').spinner();
+ equals(el.val(), 0, "starting value");
+});
+
+test("value, override", function() {
+ var el = $('#spin').spinner({ value: 100 });
+ equals(el.val(), 100, "starting value");
+});
+
+test("value, override markup", function() {
+ var el = $('#spin2').spinner({ value: 100 });
+ equals(el.val(), 100, "starting value");
+});
+
+test("value, override later", function() {
+ var el = $('#spin').spinner();
+ equals(el.val(), 0, "starting value");
+ el.spinner('option', 'value', 1000);
+ equals(el.val(), 1000, "value option changed and set as current value");
+});
+
+})(jQuery);
diff --git a/tests/visual/index.html b/tests/visual/index.html index 05f6fd49a..c7b709279 100644 --- a/tests/visual/index.html +++ b/tests/visual/index.html @@ -43,6 +43,7 @@ <li><a href="dialog/dialog.html">Dialog</a></li> <li><a href="progressbar/progressbar.html">Progressbar</a></li> <li><a href="slider/slider.html">Slider</a></li> + <li><a href="spinner/spinner.html">Spinner</a></li> <li><a href="tabs/tabs.html">Tabs</a></li> </ul> diff --git a/tests/visual/spinner/spinner.html b/tests/visual/spinner/spinner.html new file mode 100644 index 000000000..dc723a514 --- /dev/null +++ b/tests/visual/spinner/spinner.html @@ -0,0 +1,43 @@ +<!doctype html>
+<html lang="en">
+<head>
+ <title>Spinner Visual Test Page</title>
+ <link rel="stylesheet" href="../visual.css" type="text/css" />
+ <link rel="stylesheet" href="../../../themes/base/jquery.ui.all.css" type="text/css" title="ui-theme" />
+ <script type="text/javascript" src="../../../jquery-1.4.3.js"></script>
+ <script type="text/javascript" src="../../../external/jquery.mousewheel-3.0.4.js"></script>
+ <script type="text/javascript" src="../../../ui/jquery.ui.core.js"></script>
+ <script type="text/javascript" src="../../../ui/jquery.ui.widget.js"></script>
+ <script type="text/javascript" src="../../../ui/jquery.ui.button.js"></script>
+ <script type="text/javascript" src="../../../ui/jquery.ui.spinner.js"></script>
+ <script type="text/javascript" src="http://jqueryui.com/themeroller/themeswitchertool/"></script>
+ <script type="text/javascript">
+ $(function() {
+ $.fn.themeswitcher && $('<div/>').css({
+ position: "absolute",
+ right: 10,
+ top: 10
+ }).appendTo(document.body).themeswitcher();
+
+ $('#spinner').spinner({
+ start: function(event, ui) {
+ console.log(event.type, ui.value, $(this).spinner("value"));
+ },
+ spin: function(event, ui) {
+ console.log(event.type, ui.value, $(this).spinner("value"));
+ },
+ stop: function(event) {
+ console.log(event.type, $(this).spinner("value"));
+ },
+ change: function(event) {
+ console.log(event.type, $(this).spinner("value"));
+ }
+ });
+ });
+ </script>
+</head>
+<body>
+
+<p><label for="spinner">Basic with event callbacks:</label> <input id="spinner"></p>
+</body>
+</html>
\ No newline at end of file |