diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/unit/autocomplete/autocomplete.html | 1 | ||||
-rw-r--r-- | tests/unit/autocomplete/autocomplete_events.js | 173 | ||||
-rw-r--r-- | tests/unit/dialog/dialog_tickets.js | 31 | ||||
-rw-r--r-- | tests/unit/menu/menu.html | 38 | ||||
-rw-r--r-- | tests/unit/menu/menu_defaults.js | 1 | ||||
-rw-r--r-- | tests/unit/menu/menu_events.js | 82 | ||||
-rw-r--r-- | tests/unit/menu/menu_test_helpers.js | 6 | ||||
-rw-r--r-- | tests/unit/position/position_deprecated.html | 4 | ||||
-rw-r--r-- | tests/unit/spinner/spinner_core.js | 31 | ||||
-rw-r--r-- | tests/unit/spinner/spinner_defaults.js | 4 | ||||
-rw-r--r-- | tests/unit/spinner/spinner_methods.js | 26 | ||||
-rw-r--r-- | tests/unit/spinner/spinner_options.js | 108 | ||||
-rw-r--r-- | tests/unit/widget/widget_core.js | 60 | ||||
-rw-r--r-- | tests/unit/widget/widget_extend.js | 5 | ||||
-rw-r--r-- | tests/visual/menu/menu.html | 110 |
15 files changed, 479 insertions, 201 deletions
diff --git a/tests/unit/autocomplete/autocomplete.html b/tests/unit/autocomplete/autocomplete.html index 8dc86c621..e5987350b 100644 --- a/tests/unit/autocomplete/autocomplete.html +++ b/tests/unit/autocomplete/autocomplete.html @@ -39,6 +39,7 @@ <div id="ac-wrap1" class="ac-wrap"></div> <div id="ac-wrap2" class="ac-wrap"><input id="autocomplete" class="foo"></div> <div id="autocomplete-contenteditable" contenteditable="" tabindex=0></div> +<textarea id="autocomplete-textarea"></textarea> </div> </body> diff --git a/tests/unit/autocomplete/autocomplete_events.js b/tests/unit/autocomplete/autocomplete_events.js index c6d42ddcc..6813cfa71 100644 --- a/tests/unit/autocomplete/autocomplete_events.js +++ b/tests/unit/autocomplete/autocomplete_events.js @@ -4,110 +4,75 @@ module( "autocomplete: events" ); var data = [ "Clojure", "COBOL", "ColdFusion", "Java", "JavaScript", "Scala", "Scheme" ]; -asyncTest( "all events", function() { - expect( 13 ); - var element = $( "#autocomplete" ) - .autocomplete({ - autoFocus: false, - delay: 0, - source: data, - search: function( event ) { - equal( event.originalEvent.type, "keydown", "search originalEvent" ); - }, - response: function( event, ui ) { - deepEqual( ui.content, [ - { label: "Clojure", value: "Clojure" }, - { label: "Java", value: "Java" }, - { label: "JavaScript", value: "JavaScript" } - ], "response ui.content" ); - ui.content.splice( 0, 1 ); - }, - open: function( event ) { - ok( menu.is( ":visible" ), "menu open on open" ); - }, - focus: function( event, ui ) { - equal( event.originalEvent.type, "menufocus", "focus originalEvent" ); - deepEqual( ui.item, { label: "Java", value: "Java" }, "focus ui.item" ); - }, - close: function( event ) { - equal( event.originalEvent.type, "menuselect", "close originalEvent" ); - ok( menu.is( ":hidden" ), "menu closed on close" ); - }, - select: function( event, ui ) { - equal( event.originalEvent.type, "menuselect", "select originalEvent" ); - deepEqual( ui.item, { label: "Java", value: "Java" }, "select ui.item" ); - }, - change: function( event, ui ) { - equal( event.originalEvent.type, "blur", "change originalEvent" ); - deepEqual( ui.item, { label: "Java", value: "Java" }, "chnage ui.item" ); - ok( menu.is( ":hidden" ), "menu closed on change" ); - start(); - } - }), - menu = element.autocomplete( "widget" ); - - element.focus().val( "j" ).keydown(); - setTimeout(function() { - ok( menu.is( ":visible" ), "menu is visible after delay" ); - element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); - element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); - // blurring through jQuery causes a bug in IE 6 which causes the - // autocompletechange event to occur twice - element[0].blur(); - }, 50 ); -}); - -asyncTest( "all events - contenteditable", function() { - expect( 13 ); - var element = $( "#autocomplete-contenteditable" ) - .autocomplete({ - autoFocus: false, - delay: 0, - source: data, - search: function( event ) { - equal( event.originalEvent.type, "keydown", "search originalEvent" ); - }, - response: function( event, ui ) { - deepEqual( ui.content, [ - { label: "Clojure", value: "Clojure" }, - { label: "Java", value: "Java" }, - { label: "JavaScript", value: "JavaScript" } - ], "response ui.content" ); - ui.content.splice( 0, 1 ); - }, - open: function( event ) { - ok( menu.is( ":visible" ), "menu open on open" ); - }, - focus: function( event, ui ) { - equal( event.originalEvent.type, "menufocus", "focus originalEvent" ); - deepEqual( ui.item, { label: "Java", value: "Java" }, "focus ui.item" ); - }, - close: function( event ) { - equal( event.originalEvent.type, "menuselect", "close originalEvent" ); - ok( menu.is( ":hidden" ), "menu closed on close" ); - }, - select: function( event, ui ) { - equal( event.originalEvent.type, "menuselect", "select originalEvent" ); - deepEqual( ui.item, { label: "Java", value: "Java" }, "select ui.item" ); - }, - change: function( event, ui ) { - equal( event.originalEvent.type, "blur", "change originalEvent" ); - deepEqual( ui.item, { label: "Java", value: "Java" }, "chnage ui.item" ); - ok( menu.is( ":hidden" ), "menu closed on change" ); - start(); - } - }), - menu = element.autocomplete( "widget" ); - - element.focus().text( "j" ).keydown(); - setTimeout(function() { - ok( menu.is( ":visible" ), "menu is visible after delay" ); - element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); - element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); - // TODO: blurring through jQuery causes a bug in IE 6 which causes the - // autocompletechange event to occur twice - element[0].blur(); - }, 50 ); +$.each([ + { + type: "input", + selector: "#autocomplete", + valueMethod: "val" + }, + { + type: "textarea", + selector: "#autocomplete-textarea", + valueMethod: "val" + }, + { + type: "contenteditable", + selector: "#autocomplete-contenteditable", + valueMethod: "text" + } +], function( i, settings ) { + asyncTest( "all events - " + settings.type, function() { + expect( 13 ); + var element = $( settings.selector ) + .autocomplete({ + autoFocus: false, + delay: 0, + source: data, + search: function( event ) { + equal( event.originalEvent.type, "keydown", "search originalEvent" ); + }, + response: function( event, ui ) { + deepEqual( ui.content, [ + { label: "Clojure", value: "Clojure" }, + { label: "Java", value: "Java" }, + { label: "JavaScript", value: "JavaScript" } + ], "response ui.content" ); + ui.content.splice( 0, 1 ); + }, + open: function( event ) { + ok( menu.is( ":visible" ), "menu open on open" ); + }, + focus: function( event, ui ) { + equal( event.originalEvent.type, "menufocus", "focus originalEvent" ); + deepEqual( ui.item, { label: "Java", value: "Java" }, "focus ui.item" ); + }, + close: function( event ) { + equal( event.originalEvent.type, "menuselect", "close originalEvent" ); + ok( menu.is( ":hidden" ), "menu closed on close" ); + }, + select: function( event, ui ) { + equal( event.originalEvent.type, "menuselect", "select originalEvent" ); + deepEqual( ui.item, { label: "Java", value: "Java" }, "select ui.item" ); + }, + change: function( event, ui ) { + equal( event.originalEvent.type, "blur", "change originalEvent" ); + deepEqual( ui.item, { label: "Java", value: "Java" }, "chnage ui.item" ); + ok( menu.is( ":hidden" ), "menu closed on change" ); + start(); + } + }), + menu = element.autocomplete( "widget" ); + + element.focus()[ settings.valueMethod ]( "j" ).keydown(); + setTimeout(function() { + ok( menu.is( ":visible" ), "menu is visible after delay" ); + element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); + element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); + // blurring through jQuery causes a bug in IE 6 which causes the + // autocompletechange event to occur twice + element[0].blur(); + }, 50 ); + }); }); asyncTest( "change without selection", function() { diff --git a/tests/unit/dialog/dialog_tickets.js b/tests/unit/dialog/dialog_tickets.js index 1cfdcefea..b203ca7d5 100644 --- a/tests/unit/dialog/dialog_tickets.js +++ b/tests/unit/dialog/dialog_tickets.js @@ -3,7 +3,36 @@ */ (function($) { -module("dialog: tickets"); +module( "dialog: tickets" ); + +asyncTest( "#3123: Prevent tabbing out of modal dialogs", function() { + expect( 3 ); + + var el = $( "<div><input id='t3123-first'><input id='t3123-last'></div>" ).dialog({ modal: true }), + inputs = el.find( "input" ), + widget = el.dialog( "widget" ); + + inputs.eq( 1 ).focus(); + equal( document.activeElement, inputs[1], "Focus set on second input" ); + inputs.eq( 1 ).simulate( "keydown", { keyCode: $.ui.keyCode.TAB }); + + setTimeout( checkTab, 2 ); + + function checkTab() { + ok( $.contains( widget, document.activeElement ), "Tab key event moved focus within the modal" ); + + // check shift tab + $( document.activeElement ).simulate( "keydown", { keyCode: $.ui.keyCode.TAB, shiftKey: true }); + setTimeout( checkShiftTab, 2 ); + } + + function checkShiftTab() { + ok( $.contains( widget, document.activeElement ), "Shift-Tab key event moved focus within the modal" ); + + el.remove(); + start(); + } +}); test("#4826: setting resizable false toggles resizable on dialog", function() { expect(6); diff --git a/tests/unit/menu/menu.html b/tests/unit/menu/menu.html index dc5b71a00..014123144 100644 --- a/tests/unit/menu/menu.html +++ b/tests/unit/menu/menu.html @@ -207,6 +207,44 @@ <li class="foo"><a class="foo" href="#">Amesville</a></li> </ul> +<div id="menu5"> + <blockquote><a href="#">Aberdeen</a></blockquote> + <blockquote><a href="#">Ada</a></blockquote> + <blockquote><a href="#">Adamsville</a></blockquote> + <blockquote><a href="#">Addyston</a></blockquote> + <blockquote> + <a href="#">Delphi</a> + <div> + <blockquote><a href="#">Ada</a></blockquote> + <blockquote><a href="#">Saarland</a></blockquote> + <blockquote><a href="#">Salzburg</a></blockquote> + </div> + </blockquote> + <blockquote><a href="#">Saarland</a></blockquote> + <blockquote> + <a href="#">Salzburg</a> + <div> + <blockquote> + <a href="#">Delphi</a> + <div> + <blockquote><a href="#">Ada</a></blockquote> + <blockquote><a href="#">Saarland</a></blockquote> + <blockquote><a href="#">Salzburg</a></blockquote> + </div> + </blockquote> + <blockquote> + <a href="#">Delphi</a> + <div> + <blockquote><a href="#">Ada</a></blockquote> + <blockquote><a href="#">Saarland</a></blockquote> + <blockquote><a href="#">Salzburg</a></blockquote> + </div> + </blockquote> + <blockquote><a href="#">Perch</a></blockquote> + </div> + </blockquote> +</div> + <div id="log"></div> </div> diff --git a/tests/unit/menu/menu_defaults.js b/tests/unit/menu/menu_defaults.js index dd182ca09..1756e4648 100644 --- a/tests/unit/menu/menu_defaults.js +++ b/tests/unit/menu/menu_defaults.js @@ -5,6 +5,7 @@ commonWidgetTests( "menu", { my: "left top", at: "right top" }, + items: "ul", // callbacks create: null diff --git a/tests/unit/menu/menu_events.js b/tests/unit/menu/menu_events.js index 9ea54faf0..55ec1e2ff 100644 --- a/tests/unit/menu/menu_events.js +++ b/tests/unit/menu/menu_events.js @@ -21,6 +21,23 @@ test("handle click on menu", function() { equals( $("#log").html(), "1,3,2,afterclick,1,click,", "Click order not valid."); }); +test("handle click on custom item menu", function() { + expect(1); + var ac = $('#menu5').menu({ + select: function(event, ui) { + menu_log(); + }, + items: "div" + }); + menu_log("click",true); + menu_click($('#menu5'),"1"); + menu_log("afterclick"); + menu_click( ac,"2"); + menu_click($('#menu5'),"3"); + menu_click( ac,"1"); + equals( $("#log").html(), "1,3,2,afterclick,1,click,", "Click order not valid."); +}); + test( "handle blur: click", function() { expect( 4 ); var $menu = $( "#menu1" ).menu({ @@ -41,6 +58,71 @@ test( "handle blur: click", function() { $("#remove").remove(); }); +test( "handle blur on custom item menu: click", function() { + expect( 4 ); + var $menu = $( "#menu5" ).menu({ + focus: function( event, ui ) { + equal( event.originalEvent.type, "click", "focus triggered 'click'" ); + equal( event.type, "menufocus", "focus event.type is 'menufocus'" ); + + }, + blur: function( event, ui ) { + equal( event.originalEvent.type, "click", "blur triggered 'click'" ); + equal( event.type, "menublur", "blur event.type is 'menublur'" ); + }, + items: "div" + }); + + menu_click($('#menu5'),"1"); + $( "<a>", { id: "remove"} ).appendTo("body").trigger( "click" ); + + $("#remove").remove(); +}); + +asyncTest( "handle submenu auto collapse: mouseleave", function() { + expect( 4 ); + var $menu = $( "#menu2" ).menu(); + + $menu.find( "li:nth-child(7)" ).trigger( "mouseover" ); + setTimeout(function() { + equal( $menu.find( "ul[aria-expanded='true']" ).length, 1, "first submenu expanded" ); + $menu.find( "li:nth-child(7) li:first" ).trigger( "mouseover" ); + setTimeout(function() { + equal( $menu.find( "ul[aria-expanded='true']" ).length, 2, "second submenu expanded" ); + $menu.find( "ul[aria-expanded='true']:first" ).trigger( "mouseleave" ); + equal( $menu.find( "ul[aria-expanded='true']" ).length, 1, "second submenu collapsed" ); + $menu.trigger( "mouseleave" ); + equal( $menu.find( "ul[aria-expanded='true']" ).length, 0, "first submenu collapsed" ); + start(); + }, 400); + }, 200); +}); + +asyncTest( "handle custom menu item submenu auto collapse: mouseleave", function() { + expect( 5 ); + var $menu = $( "#menu5" ).menu( { items: "div" } ); + + $menu.children( ":nth-child(7)" ).trigger( "mouseover" ); + setTimeout(function() { + equal( $menu.find( "div[aria-expanded='true']" ).length, 1, "first submenu expanded" ); + $menu.children( ":nth-child(7)" ).find( "div:first" ).children( ":first" ).trigger( "mouseover" ); + setTimeout(function() { + equal( $menu.find( "div[aria-expanded='true']" ).length, 2, "second submenu expanded" ); + $menu.find( "div[aria-expanded='true']:first" ).trigger( "mouseleave" ); + equal( $menu.find( "div[aria-expanded='true']" ).length, 1, "second submenu collapsed" ); + + $menu.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN }); + ok( $menu.find( ".ui-state-active" ).is( "#menu5 :nth-child(7) a" ), + "down keypress selected an item from the first submenu" ); + + $menu.trigger( "mouseleave" ); + equal( $menu.find( "div[aria-expanded='true']" ).length, 0, "first submenu collapsed" ); + start(); + }, 400); + }, 200); +}); + + test("handle keyboard navigation on menu without scroll and without submenus", function() { expect(12); var element = $('#menu1').menu({ diff --git a/tests/unit/menu/menu_test_helpers.js b/tests/unit/menu/menu_test_helpers.js index 717cfc45d..e83795e5a 100644 --- a/tests/unit/menu/menu_test_helpers.js +++ b/tests/unit/menu/menu_test_helpers.js @@ -5,10 +5,10 @@ function menu_log( message, clear ) { if ( message === undefined ) { message = $( "#log" ).data( "lastItem" ); } - $( "#log" ).prepend( message + "," ); + $( "#log" ).prepend( $.trim( message ) + "," ); } function menu_click( menu, item ) { $( "#log" ).data( "lastItem", item ); - menu.find( "li:eq(" + item + ") a" ).trigger( "click" ); -} + menu.children( ":eq(" + item + ")" ).find( "a:first" ).trigger( "click" ); +}
\ No newline at end of file diff --git a/tests/unit/position/position_deprecated.html b/tests/unit/position/position_deprecated.html index 16d88ea2e..c80490f74 100644 --- a/tests/unit/position/position_deprecated.html +++ b/tests/unit/position/position_deprecated.html @@ -55,5 +55,9 @@ elements smaller than 10px have a line-height set on them to avoid a bug in IE6 <div style="width: 50px; height: 10px;"></div> </div> +<div id="fractions-parent" style="position: absolute; left: 10.7432222px; top: 10.532325px; height: 30px; width: 201px;"> + <div id="fractions-element"></div> +</div> + </body> </html> diff --git a/tests/unit/spinner/spinner_core.js b/tests/unit/spinner/spinner_core.js index 57b6b3320..e12d1af2f 100644 --- a/tests/unit/spinner/spinner_core.js +++ b/tests/unit/spinner/spinner_core.js @@ -109,14 +109,12 @@ test( "mouse click on up button, increases value not greater than max", function }); test( "mousewheel on input", function() { - expect( 5 ); + expect( 4 ); - var element = $( "#spin" ).spinner({ + var element = $( "#spin" ).val( 0 ).spinner({ step: 2 }); - equal( element.val(), 0 ); - element.trigger( "mousewheel" ); equal( element.val(), 0, "mousewheel event without delta does not change value" ); @@ -149,22 +147,28 @@ test( "reading HTML5 attributes", function() { }); test( "ARIA attributes", function() { - expect( 7 ); + expect( 9 ); var element = $( "#spin" ).val( 2 ).spinner({ min: -5, max: 5 }); equal( element.attr( "role" ), "spinbutton", "role" ); - equal( element.attr( "aria-valuemin" ), -5, "aria-valuemin" ); - equal( element.attr( "aria-valuemax" ), 5, "aria-valuemax" ); - equal( element.attr( "aria-valuenow" ), 2, "aria-valuenow" ); + equal( element.attr( "aria-valuemin" ), "-5", "aria-valuemin" ); + equal( element.attr( "aria-valuemax" ), "5", "aria-valuemax" ); + equal( element.attr( "aria-valuenow" ), "2", "aria-valuenow" ); element.spinner( "stepUp" ); - equal( element.attr( "aria-valuenow" ), 3, "stepUp 1 step changes aria-valuenow" ); + equal( element.attr( "aria-valuenow" ), "3", "stepUp 1 step changes aria-valuenow" ); element.spinner( "option", { min: -10, max: 10 } ); - equal( element.attr( "aria-valuemin" ), -10, "min option changed aria-valuemin changes" ); - equal( element.attr( "aria-valuemax" ), 10, "max option changed aria-valuemax changes" ); + equal( element.attr( "aria-valuemin" ), "-10", "min option changed aria-valuemin changes" ); + equal( element.attr( "aria-valuemax" ), "10", "max option changed aria-valuemax changes" ); + + element.spinner( "option", "min", null ); + equal( element.attr( "aria-valuemin" ), undefined, "aria-valuemin not set when no min" ); + + element.spinner( "option", "max", null ); + equal( element.attr( "aria-valuemax" ), undefined, "aria-valuemax not set when no max" ); }); test( "focus text field when pressing button", function() { @@ -192,10 +196,11 @@ test( "precision", function() { equal( element.val(), "0.0501", "precision from step" ); element.val( 1.05 ).spinner( "option", { - step: 1 + step: 1, + min: -9.95 }); element.spinner( "stepDown" ); - equal( element.val(), "0.05", "precision from value" ); + equal( element.val(), "0.05", "precision from min" ); }); })( jQuery ); diff --git a/tests/unit/spinner/spinner_defaults.js b/tests/unit/spinner/spinner_defaults.js index f155a658e..3321f8733 100644 --- a/tests/unit/spinner/spinner_defaults.js +++ b/tests/unit/spinner/spinner_defaults.js @@ -2,8 +2,8 @@ commonWidgetTests( "spinner", { defaults: { disabled: false, incremental: true, - max: Number.MAX_VALUE, - min: -Number.MAX_VALUE, + max: null, + min: null, numberFormat: null, page: 10, step: 1, diff --git a/tests/unit/spinner/spinner_methods.js b/tests/unit/spinner/spinner_methods.js index fbfcf1bb3..a9fd6c889 100644 --- a/tests/unit/spinner/spinner_methods.js +++ b/tests/unit/spinner/spinner_methods.js @@ -54,7 +54,7 @@ test( "disable", function() { test( "enable", function() { expect( 5 ); - var element = $( "#spin" ).spinner({ disabled: true }) + var element = $( "#spin" ).val( 1 ).spinner({ disabled: true }) wrapper = element.spinner( "widget" ); ok( wrapper.hasClass( "ui-spinner-disabled" ), "before: wrapper has ui-spinner-disabled class" ); @@ -66,7 +66,7 @@ test( "enable", function() { ok( !element.is( ":disabled" ), "after: input does not have disabled attribute" ); spinner_simulateKeyDownUp( element, $.ui.keyCode.UP ); - equals( 1, element.val(), "keyboard - value does not change on key UP" ); + equals( 2, element.val(), "keyboard - value changes on key UP" ); }); test( "pageDown", function() { @@ -117,23 +117,23 @@ test( "stepDown", function() { }); element.spinner( "stepDown" ); - equals( element.val(), -2, "stepDown 1 step" ); + equals( element.val(), "-1", "stepDown 1 step" ); element.spinner( "stepDown", 5 ); - equals( element.val(), -12, "stepDown 5 steps" ); + equals( element.val(), "-11", "stepDown 5 steps" ); element.spinner( "stepDown", 4 ); - equals( element.val(), -15, "close to min and stepDown 4 steps" ); + equals( element.val(), "-15", "close to min and stepDown 4 steps" ); element.spinner( "stepDown" ); - equals( element.val(), -15, "at min and stepDown 1 step" ); + equals( element.val(), "-15", "at min and stepDown 1 step" ); }); test( "stepUp", function() { expect( 4 ); var element = $( "#spin" ).val( 0 ).spinner({ step: 2, - max: 15 + max: 16 }); element.spinner( "stepUp" ); @@ -143,20 +143,22 @@ test( "stepUp", function() { equals( element.val(), 12, "stepUp 5 steps" ); element.spinner( "stepUp", 4 ); - equals( element.val(), 15, "close to min and stepUp 4 steps" ); + equals( element.val(), 16, "close to min and stepUp 4 steps" ); element.spinner( "stepUp" ); - equals( element.val(), 15, "at max and stepUp 1 step" ); + equals( element.val(), 16, "at max and stepUp 1 step" ); }); test( "value", function() { expect( 2 ); - var element = $( "#spin" ).val( 0 ).spinner(); + var element = $( "#spin" ).val( 0 ).spinner({ + step: 3 + }); element.spinner( "value", 10 ); - equals( element.val(), 10, "change value via value method" ); + equals( element.val(), 9, "change value via value method" ); - equals( element.spinner( "value" ), 10, "get value via value method" ); + equals( element.spinner( "value" ), 9, "get value via value method" ); }); })( jQuery ); diff --git a/tests/unit/spinner/spinner_options.js b/tests/unit/spinner/spinner_options.js index 647455fe5..2b557cb69 100644 --- a/tests/unit/spinner/spinner_options.js +++ b/tests/unit/spinner/spinner_options.js @@ -2,6 +2,71 @@ module( "spinner: options" ); +test( "incremental, false", function() { + expect( 100 ); + + var i, diff, + prev = 0, + element = $( "#spin" ).val( prev ).spinner({ + incremental: false, + spin: function( event, ui ) { + equal( ui.value - prev, 1 ); + prev = ui.value; + } + }); + + for ( i = 0; i < 100; i++ ) { + element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } ); + } +}); + +test( "incremental, true", function() { + expect( 100 ); + + function fill( num, val ) { + return $.map( new Array( num ), function() { + return val; + }); + } + + var i, diff, + prev = 0, + expected = [].concat( fill( 18, 1 ), fill( 37, 2 ), fill( 14, 3 ), + fill( 9, 4 ), fill( 6, 5 ), fill( 5, 6 ), fill ( 5, 7 ), + fill( 4, 8 ), fill( 2, 9 ) ), + element = $( "#spin" ).val( prev ).spinner({ + incremental: true, + spin: function( event, ui ) { + equal( ui.value - prev, expected[ i ] ); + prev = ui.value; + } + }); + + for ( i = 0; i < 100; i++ ) { + element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } ); + } +}); + +test( "incremental, function", function() { + expect( 100 ); + + var i, + prev = 0, + element = $( "#spin" ).val( prev ).spinner({ + incremental: function( i ) { + return i; + }, + spin: function( event, ui ) { + equal( ui.value - prev, i + 1 ); + prev = ui.value; + } + }); + + for ( i = 0; i < 100; i++ ) { + element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } ); + } +}); + test( "numberFormat, number", function() { expect( 2 ); var element = $( "#spin" ).val( 0 ).spinner({ numberFormat: "n" }); @@ -26,44 +91,6 @@ test( "numberFormat, currency", function() { equal( element.val(), "$1.00", "formatted after step" ); }); -/* 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() { expect( 3 ); var element = $( "#spin" ).val( 1000 ).spinner({ max: 100 }); @@ -96,10 +123,11 @@ test( "step, 2", function() { equals( element.val(), "2", "stepUp" ); element.spinner( "value", "10.5" ); - equals( element.val(), "10.5", "value reset to 10.5" ); + equals( element.val(), "10", "value reset to 10" ); + element.val( "4.5" ); element.spinner( "stepUp" ); - equals( element.val(), "12.5", "stepUp" ); + equals( element.val(), "6", "stepUp" ); }); test( "step, 0.7", function() { diff --git a/tests/unit/widget/widget_core.js b/tests/unit/widget/widget_core.js index 41ae8ffb4..0510da4b4 100644 --- a/tests/unit/widget/widget_core.js +++ b/tests/unit/widget/widget_core.js @@ -571,23 +571,23 @@ test( ".widget() - overriden", function() { test( "._bind() to element (default)", function() { expect( 12 ); - var self; + var that; $.widget( "ui.testWidget", { _create: function() { - self = this; + that = this; this._bind({ keyup: this.keyup, keydown: "keydown" }); }, keyup: function( event ) { - equals( self, this ); - equals( self.element[0], event.currentTarget ); + equals( that, this ); + equals( that.element[0], event.currentTarget ); equals( "keyup", event.type ); }, keydown: function( event ) { - equals( self, this ); - equals( self.element[0], event.currentTarget ); + equals( that, this ); + equals( that.element[0], event.currentTarget ); equals( "keydown", event.type ); } }); @@ -611,23 +611,23 @@ test( "._bind() to element (default)", function() { test( "._bind() to descendent", function() { expect( 12 ); - var self; + var that; $.widget( "ui.testWidget", { _create: function() { - self = this; + that = this; this._bind( this.element.find( "strong" ), { keyup: this.keyup, keydown: "keydown" }); }, keyup: function( event ) { - equals( self, this ); - equals( self.element.find( "strong" )[0], event.currentTarget ); + equals( that, this ); + equals( that.element.find( "strong" )[0], event.currentTarget ); equals( "keyup", event.type ); }, keydown: function(event) { - equals( self, this ); - equals( self.element.find( "strong" )[0], event.currentTarget ); + equals( that, this ); + equals( that.element.find( "strong" )[0], event.currentTarget ); equals( "keydown", event.type ); } }); @@ -987,31 +987,31 @@ test( "._trigger() - instance as element", function() { $( "#widget" ).testWidget().remove(); }); }); - + test( "auto-destroy - .remove() on parent", function() { shouldDestroy( true, function() { $( "#widget" ).testWidget().parent().remove(); }); }); - + test( "auto-destroy - .remove() on child", function() { shouldDestroy( false, function() { $( "#widget" ).testWidget().children().remove(); }); }); - + test( "auto-destroy - .empty()", function() { shouldDestroy( false, function() { $( "#widget" ).testWidget().empty(); }); }); - + test( "auto-destroy - .empty() on parent", function() { shouldDestroy( true, function() { $( "#widget" ).testWidget().parent().empty(); }); }); - + test( "auto-destroy - .detach()", function() { shouldDestroy( false, function() { $( "#widget" ).testWidget().detach(); @@ -1040,4 +1040,30 @@ test( "redefine", function() { equal( $.ui.testWidget.foo, "bar", "static properties remain" ); }); +asyncTest( "_delay", function() { + expect( 6 ); + var order = 0, + that; + $.widget( "ui.testWidget", { + defaultElement: null, + _create: function() { + that = this; + var timer = this._delay(function() { + strictEqual( this, that ); + equal( order, 1 ); + start(); + }, 500); + ok( timer !== undefined ); + timer = this._delay("callback"); + ok( timer !== undefined ); + }, + callback: function() { + strictEqual( this, that ); + equal( order, 0 ); + order += 1; + } + }); + $( "#widget" ).testWidget(); +}); + }( jQuery ) ); diff --git a/tests/unit/widget/widget_extend.js b/tests/unit/widget/widget_extend.js index fb78ecfb7..90e686e18 100644 --- a/tests/unit/widget/widget_extend.js +++ b/tests/unit/widget/widget_extend.js @@ -6,7 +6,6 @@ test( "$.widget.extend()", function() { optionsCopy = { xnumber2: 1, xstring2: "x", xxx: "newstring" }, merged = { xnumber1: 5, xnumber2: 1, xstring1: "peter", xstring2: "x", xxx: "newstring" }, deep1 = { foo: { bar: true } }, - deep1copy = { foo: { bar: true } }, deep2 = { foo: { baz: true }, foo2: document }, deep2copy = { foo: { baz: true }, foo2: document }, deepmerged = { foo: { bar: true, baz: true }, foo2: document }, @@ -93,10 +92,10 @@ test( "$.widget.extend()", function() { deepEqual( defaults, defaultsCopy, "Check if not modified: options1 must not be modified" ); deepEqual( options1, options1Copy, "Check if not modified: options1 must not be modified" ); deepEqual( options2, options2Copy, "Check if not modified: options2 must not be modified" ); - + var input = { key: [ 1, 2, 3 ] - } + }; var output = $.widget.extend( {}, input ); deepEqual( input, output, "don't clone arrays" ); input.key[0] = 10; diff --git a/tests/visual/menu/menu.html b/tests/visual/menu/menu.html index 5720d04d9..06e34cbdd 100644 --- a/tests/visual/menu/menu.html +++ b/tests/visual/menu/menu.html @@ -16,16 +16,30 @@ right: 10, top: 10 }).appendTo(document.body).themeswitcher(); - + function create() { menus.menu({ select: function(event, ui) { $("<div/>").text("Selected: " + ui.item.text()).appendTo("#log"); } }); + + $("#menu5").menu({ + select: function(event, ui) { + $("<div/>").text("Selected: " + ui.item.text()).appendTo("#log"); + }, + items: "div" + }); + + $("#menu6").menu({ + select: function(event, ui) { + $("<div/>").text("Selected: " + ui.item.text()).appendTo("#log"); + }, + items: ".menuElement" + }); } - var menus = $("#menu1, #menu2, #menu3, #menu4"); + var menus = $("#menu1, #menu2, #menu3, .menu4"); create(); $("#toggle-destroy").toggle(function() { @@ -41,11 +55,14 @@ <style> body { font-size:62.5%; } .ui-menu { width: 200px; margin-bottom: 2em; } - #menu4 { height: 200px; overflow: auto; } + .menu4 { height: 200px; overflow: auto; } + .address-item { border-bottom: 1px solid #999; } + .address-header { display: block; margin-bottom: .2em; font-weight: bold; } + .address-content { display: block; margin-bottom: .2em; padding-left: 10px; } </style> </head> <body> - + <ul id="menu1"> <li><a href="#">Aberdeen</a></li> <li><a href="#">Ada</a></li> @@ -132,7 +149,7 @@ </li> </ul> -<ul id="menu4"> +<ul class="menu4"> <li><a href="#">Aberdeen</a></li> <li><a href="#">Ada</a></li> <li><a href="#">Adamsville</a></li> @@ -173,6 +190,87 @@ <li><a href="#">Amesville</a></li> </ul> +<div id="menu5"> + <blockquote><a href="#">Aberdeen</a></blockquote> + <blockquote><a href="#">Ada</a></blockquote> + <blockquote><a href="#">Adamsville</a></blockquote> + <blockquote><a href="#">Addyston</a></blockquote> + <blockquote> + <a href="#">Delphi</a> + <div> + <blockquote><a href="#">Ada</a></blockquote> + <blockquote><a href="#">Saarland</a></blockquote> + <blockquote><a href="#">Salzburg</a></blockquote> + </div> + </blockquote> + <blockquote><a href="#">Saarland</a></blockquote> + <blockquote> + <a href="#">Salzburg</a> + <div> + <blockquote> + <a href="#">Delphi</a> + <div> + <blockquote><a href="#">Ada</a></blockquote> + <blockquote><a href="#">Saarland</a></blockquote> + <blockquote><a href="#">Salzburg</a></blockquote> + </div> + </blockquote> + <blockquote> + <a href="#">Delphi</a> + <div> + <blockquote><a href="#">Ada</a></blockquote> + <blockquote><a href="#">Saarland</a></blockquote> + <blockquote><a href="#">Salzburg</a></blockquote> + </div> + </blockquote> + <blockquote><a href="#">Perch</a></blockquote> + </div> + </blockquote> +</div> + +<div class="menuElement" id="menu6"> + <div class="address-item"> + <a href="#"> + <span class="address-header">John Doe</span> + <span class="address-content">78 West Main St Apt 3A</span> + <span class="address-content">Bloomsburg, PA 12345</span> + </a> + </div> + <div class="address-item"> + <a href="#"> + <span class="address-header">Jane Doe</span> + <span class="address-content">78 West Main St Apt 3A</span> + <span class="address-content">Bloomsburg, PA 12345</span> + </a> + </div> + <div class="address-item"> + <a href="#"> + <span class="address-header">James Doe</span> + <span class="address-content">78 West Main St Apt 3A</span> + <span class="address-content">Bloomsburg, PA 12345</span> + </a> + </div> + <div class="address-item"> + <a href="#"> + <span class="address-header">Jenny Doe</span> + <span class="address-content">78 West Main St Apt 3A</span> + <span class="address-content">Bloomsburg, PA 12345</span> + </a> + </div> + <div class="address-item"> + <a href="#"> + <span class="address-header">John Doe</span> + <span class="address-content">78 West Main St Apt 3A</span> + <span class="address-content">Bloomsburg, PA 12345</span> + </a> + <div class="menuElement"> + <div><a href="#">Ada</a></div> + <div><a href="#">Saarland</a></div> + <div><a href="#">Salzburg</a></div> + </div> + </div> +</div> + <div class="ui-widget" style="clear: left; margin-top:2em; font-family:Arial"> Log: <div id="log" style="height: 400px; width: 300px; overflow: auto;" class="ui-widget-content"></div> @@ -182,4 +280,4 @@ <button id="toggle-destroy">Destroy / Create</button> </body> -</html> +</html>
\ No newline at end of file |