aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/unit/autocomplete/autocomplete.html1
-rw-r--r--tests/unit/autocomplete/autocomplete_events.js173
-rw-r--r--tests/unit/dialog/dialog_tickets.js31
-rw-r--r--tests/unit/menu/menu.html38
-rw-r--r--tests/unit/menu/menu_defaults.js1
-rw-r--r--tests/unit/menu/menu_events.js82
-rw-r--r--tests/unit/menu/menu_test_helpers.js6
-rw-r--r--tests/unit/position/position_deprecated.html4
-rw-r--r--tests/unit/spinner/spinner_core.js31
-rw-r--r--tests/unit/spinner/spinner_defaults.js4
-rw-r--r--tests/unit/spinner/spinner_methods.js26
-rw-r--r--tests/unit/spinner/spinner_options.js108
-rw-r--r--tests/unit/widget/widget_core.js60
-rw-r--r--tests/unit/widget/widget_extend.js5
-rw-r--r--tests/visual/menu/menu.html110
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