r3120 committed - spinner: unit test refactor and additions

r3120 committed - spinner: unit test refactor and additions


Revision: 3120
Author: pazu2k@gmail.com
Date: Sun Aug 23 20:10:11 2009
Log: spinner: unit test refactor and additions
http://code.google.com/p/jquery-ui/source/detail?r=3120
Modified:
/branches/dev/spinner/tests/unit/spinner/spinner.html
/branches/dev/spinner/tests/unit/spinner/spinner_core.js
/branches/dev/spinner/tests/unit/spinner/spinner_options.js
=======================================
--- /branches/dev/spinner/tests/unit/spinner/spinner.html    Tue Jul 28
07:46:46 2009
+++ /branches/dev/spinner/tests/unit/spinner/spinner.html    Sun Aug 23
20:10:11 2009
@@ -2,7 +2,7 @@
<html lang="en">
<head>
    <title>jQuery UI Spinner Test Suite</title>
-
+
    <script type="text/javascript" src="../../../jquery-1.3.2.js"></script>
    <script type="text/javascript" src="../../../ui/ui.core.js"></script>
    <script type="text/javascript" src="../../../ui/ui.spinner.js"></script>
=======================================
--- /branches/dev/spinner/tests/unit/spinner/spinner_core.js    Mon Aug 17
05:50:30 2009
+++ /branches/dev/spinner/tests/unit/spinner/spinner_core.js    Sun Aug 23
20:10:11 2009
@@ -3,9 +3,22 @@
*/
var el,
+    options,
    simulateKeyDownUp = function(el,kCode) {
        el.simulate("keydown",{keyCode:kCode})
            .simulate("keyup",{keyCode:kCode});
+    },
+    wrapper = function() {
+        return el.closest('.ui-spinner');
+    },
+    upButton = function() {
+        return wrapper().find('.ui-spinner-up');
+    },
+    downButton = function() {
+        return wrapper().find('.ui-spinner-down');
+    },
+    box = function() {
+        return $('.ui-spinner-box', wrapper());
    };
(function($) {
@@ -110,20 +123,17 @@
});
test("mouse wheel on input", function() {
-    expect(0);
-
+    ok(false, 'missing test - untested code is broken code');
});
test("reading HTML5 attributes", function() {
    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('value'), 5, 'value');
    equals(el.spinner('option', 'max'), 100, 'max');
    equals(el.spinner('option', 'min'), -100, 'min');
    equals(el.spinner('option', 'step'), 2, 'step');
-    equals(el.spinner('option', 'page'), 5, 'page');
-
});
})(jQuery);
=======================================
--- /branches/dev/spinner/tests/unit/spinner/spinner_options.js    Tue Jul 28
07:46:46 2009
+++ /branches/dev/spinner/tests/unit/spinner/spinner_options.js    Sun Aug 23
20:10:11 2009
@@ -5,14 +5,76 @@
module("spinner: options");
-test("buttons", function() {
-    ok(false, 'missing test - untested code is broken code');
+test("buttons - show (default)", function() {
+    expect(4);
+
+    el = $('#spin');
+    el.spinner({
+        buttons: 'show'
+    });
+
+    ok(upButton().is(':visible'), "show - before hover: up button visible");
+    ok(downButton().is(':visible'), "show - before hover: down button
visible");
+
+    el.trigger('mouseover');
+
+    ok(upButton().is(':visible'), "show - after hover: up button visible");
+    ok(downButton().is(':visible'), "show - after hover: down button
visible");
+
+    el.trigger('mouseout');
});
-test("currency", function() {
-    expect(13);
-
-    el = $("#spin").spinner({ currency:"$", incremental:false, max:120,
min:-50, step:0.3 });
+test("buttons - hide", function() {
+    expect(4);
+
+    el = $('#spin');
+    el.spinner({
+        buttons: 'hide'
+    });
+
+    ok(upButton().is(':hidden'), "hide - before hover: up button hidden");
+    ok(downButton().is(':hidden'), "hide - before hover: down button hidden");
+
+    el.trigger('mouseover');
+
+    ok(upButton().is(':hidden'), "hide - after hover: up button hidden");
+    ok(downButton().is(':hidden'), "hide - after hover: down button hidden");
+
+    el.trigger('mouseout');
+});
+
+test("buttons - auto", function() {
+    expect(4);
+
+    el = $('#spin');
+    el.spinner({
+        buttons: 'auto'
+    });
+
+    ok(upButton().is(':hidden'), "auto - before hover: up button hidden");
+    ok(downButton().is(':hidden'), "auto - before hover: down button hidden");
+
+    el.trigger('mouseover');
+
+    ok(upButton().is(':visible'), "auto - after hover: up button visible");
+    ok(downButton().is(':visible'), "auto - after hover: down button
visible");
+
+    el.trigger('mouseout');
+});
+
+test("currency - single character currency symbol", function() {
+    expect(5);
+
+    el = $("#spin");
+
+    options = {
+        currency:"$",
+        max:120,
+        min:-50,
+        step:0.3
+    };
+
+    el.spinner(options);
    equals(el.val(), "$0.00", "start number");
@@ -35,40 +97,82 @@
    el.simulate("keyup",{keyCode:$.ui.keyCode.UP});
    equals(el.val(), "-$14.00", "keydown 120 times");
-
-    el.spinner('destroy').val('');
-
-    el = $("#spin").spinner({ currency: 'HK$', step: 1500.50, value: 1000 });
+});
+
+test("currency - combined character currency symbol", function() {
+    expect(2);
+
+    el = $('#spin');
+
+    options = {
+        currency: 'HK$',
+        step: 1500.50,
+        value: 1000
+    }
+
+    el.spinner(options);
    equals(el.val(), "HK$1,000.00", "Hong Kong Dollar");
    simulateKeyDownUp(el, $.ui.keyCode.UP);
-    equals(el.val(), "HK$2,500.50", "Hong Kong Dollar step-up once");
-
-    // space and comma
-
-    el.spinner('destroy').val('').spinner({ currency: '$',
groupSeparator: ' ', radixPoint: '.', step: 1500.50, value: 1000 });
+    equals(el.val(), "HK$2,500.50", "Hong Kong Dollar step-up once");
+});
+
+test("currency - space as group separator", function() {
+    expect(2);
+
+    el = $('#spin');
+
+    options = {
+        currency: '$',
+        groupSeparator: ' ',
+        radixPoint: '.',
+        step: 1500.50,
+        value: 1000
+    }
+
+    el.spinner(options);
    equals(el.val(), "$1 000.00", "Australian Dollar");
    simulateKeyDownUp(el, $.ui.keyCode.UP);
    equals(el.val(), "$2 500.50", "Australian Dollar step-up once");
-
-    // apos and point
-
-    el.spinner('destroy').val('').spinner({ currency: 'Fr ',
groupSeparator: "'", radixPoint: '.', step: 1500.50, value: 1000 });
+});
+
+test("currency - apos as group separator", function() {
+    expect(2);
+
+    el = $('#spin');
+    options = {
+        currency: 'Fr ',
+        groupSeparator: "'",
+        radixPoint: '.',
+        step: 1500.50,
+        value: 1000
+    }
+    el.spinner(options);
    equals(el.val(), "Fr 1'000.00", "Swiss Franc");
    simulateKeyDownUp(el, $.ui.keyCode.UP);
    equals(el.val(), "Fr 2'500.50", "Swiss Franc step-up once");
-
-    // point and comma
-
-    el.spinner('destroy').val('').spinner({ currency: 'RUB',
groupSeparator: ".", radixPoint: ',', step: 1.5, value: 1000 });
+});
+
+test("currency - period as group separator and comma as radixPoint",
function() {
+    expect(2);
+
+    el = $('#spin');
+    options = {
+        currency: 'RUB',
+        groupSeparator: ".",
+        radixPoint: ',',
+        step: 1.5,
+        value: 1000
+    }
+    el.spinner(options);
    equals(el.val(), "RUB1.000,00", "Russian Ruble");
@@ -77,17 +181,65 @@
    equals(el.val(), "RUB1.001,50", "Russian Ruble step-up once");
});
-test("dir", function() {
-    ok(false, 'missing test - untested code is broken code');
+test("dir - left-to-right (default)", function() {
+    expect(2);
+
+    el = $("#spin");
+    el.spinner();
+
+    ok(upButton().position().left > box().position().left, 'input on left up
button on right');
+    ok(downButton().position().left > box().position().left, 'input on left
down button on right');
});
-test("groupSeparator", function() {
-    ok(false, 'missing test - untested code is broken code');
+test("dir - right-to-left", function() {
+    expect(2);
+
+    el = $("#spin");
+    el.spinner({ dir: 'rtl' });
+
+    ok(upButton().position().left < box().position().left, 'input on right up
button on left');
+    ok(downButton().position().left < box().position().left, 'input on right
down button on left');
});
-test("incremental: false", function() {
-    expect(2);
-
+test("groupSeparator - comma separator (default)", function() {
+    expect(1);
+
+    el = $('#spin');
+    options = {
+        groupSeparator: ',',
+        value: 1000000
+    };
+    el.spinner(options);
+    equals(el.val(), "1,000,000", "value contains 2 commas separated by 3
digits");
+});
+
+test("groupSeparator - space separator", function() {
+    expect(1);
+
+    el = $('#spin');
+    options = {
+        groupSeparator: ' ',
+        value: 1000000
+    };
+    el.spinner(options);
+    equals(el.val(), "1 000 000", "value contains 2 spaces separated by 3
digits");
+});
+
+test("groupSeparator - apos separator", function() {
+    expect(1);
+
+    el = $('#spin');
+    options = {
+        groupSeparator: "'",
+        value: 1000000
+    };
+    el.spinner(options);
+    equals(el.val(), "1'000'000", "value contains apos separated by 3
digits");
+});
+
+test("incremental - false (default)", function() {
+    expect(2);
+
    el = $("#spin").spinner({ incremental:false });
    for ( var i = 1 ; i<=120 ; i++ ) {
@@ -95,46 +247,65 @@
    }
    el.simulate("keyup",{keyCode:$.ui.keyCode.UP});
-    equals(el.val(), 120, "keydown 120 times");
+    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, "keydown 210 times");
+    equals(el.val(), -90, "incremental false - keydown 210 times");
});
-test("incremental: true", function() {
+test("incremental - true", function() {
    expect(2);
-
-    el = $("#spin").spinner({ incremental: true });
+
+    el.spinner('option', 'incremental', true );
    for ( var i = 1 ; i<=120 ; i++ ) {
-            el.simulate("keydown",{keyCode:$.ui.keyCode.UP});
+        el.simulate("keydown",{keyCode:$.ui.keyCode.UP});
    }
    el.simulate("keyup",{keyCode:$.ui.keyCode.UP});
-    equals(el.val(), 300, "keydown 120 times (100+20*10)");
+    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("keydown",{keyCode:$.ui.keyCode.DOWN});
    }
    el.simulate("keyup",{keyCode:$.ui.keyCode.DOWN});
-    equals(el.val(), -1800, "keydown 210 times (300-100-100*10-10*100)");
+    equals(el.val(), -1800, "incremental true - keydown 210 times
(300-100-100*10-10*100)");
});
+
test("items", function() {
    ok(false, 'missing test - untested code is broken code');
});
test("max", function() {
-    ok(false, 'missing test - untested code is broken code');
+    expect(3);
+
+    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);
+    equals(el.val(), 100, "max constrained if manual entry");
});
test("min", function() {
-    ok(false, 'missing test - untested code is broken code');
+    expect(3);
+
+    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);
+    equals(el.val(), -100, "max constrained if manual entry");
});
test("mouseWheel", function() {
@@ -146,7 +317,21 @@
});
test("page", function() {
-    ok(false, 'missing test - untested code is broken code');
+    expect(3);
+
+    el = $("#spin").spinner({ step: 2, page:2.5 });
+
+    equals(el.val(), "0", "start number");
+
+    simulateKeyDownUp(el, $.ui.keyCode.PAGE_DOWN);
+
+    equals(el.val(), "-5", "PAGE_DOWN on spinner once");
+
+    for ( var i = 1 ; i<=11 ; i++ ) {
+        simulateKeyDownUp(el, $.ui.keyCode.PAGE_UP);
+    }
+
+    equals(el.val(), "50", "PAGE_UP 11 times on spinner");
});
test("precision", function() {
@@ -166,34 +351,49 @@
});
test("spinnerClass", function() {
-    ok(false, 'missing test - untested code is broken code');
+    expect(1);
+
+    el = $('#spin');
+    el.spinner({spinnerClass: 'my-spinner-class'});
+
+    ok(wrapper().hasClass('my-spinner-class'), 'spinner container has custom
class');
});
test("step", function() {
    expect(3);
-    el = $("#spin").spinner({ currency:false, incremental:false, step:0.7 });
+    el = $("#spin").spinner({ step:0.7 });
    equals(el.val(), "0.0", "start number");
    simulateKeyDownUp(el, $.ui.keyCode.DOWN);
-    equals(el.val(), "-0.7", "stepping 0.7");
+    equals(el.val(), "-0.7", "DOWN once on spinner");
    for ( var i = 1 ; i<=11 ; i++ ) {
-        el.simulate("keydown",{keyCode:$.ui.keyCode.UP});
-    }
-    el.simulate("keyup",{keyCode:$.ui.keyCode.UP});
-
-    equals(el.val(), "7.0", "keydown 11 times");
+        simulateKeyDownUp(el, $.ui.keyCode.UP);
+    }
+
+    equals(el.val(), "7.0", "UP 11 times on spinner");
});
test("value", function() {
-    ok(false, 'missing test - untested code is broken code');
+    expect(2);
+
+    el = $('#spin').spinner({ value: 100 });
+
+    equals(el.val(), 100, "starting value");
+
+    el.spinner('option', 'value', 1000);
+
+    equals(el.val(), 100, "value option changed but spinner value remains
un-changed");
});
test("width", function() {
-    ok(false, 'missing test - untested code is broken code');
+    expect(1);
+
+    el = $('#spin').spinner({ width: 1000 });
+    equals(el.width(), 1000, "spinner width changed");
});
})(jQuery);