diff options
author | Mike Sherov <mike.sherov@gmail.com> | 2013-04-07 14:16:31 -0400 |
---|---|---|
committer | Mike Sherov <mike.sherov@gmail.com> | 2013-04-07 14:16:31 -0400 |
commit | 1c1b64fcf017471970c3903a2bc89cc7d108aaa3 (patch) | |
tree | 73d59649bbe62afb195c1c2d74cdda8d4e3faa7e /tests/unit/datepicker/datepicker_options.js | |
parent | 58d9130ba3f7f6560582c41066ca0678c036d8e3 (diff) | |
download | jquery-ui-1c1b64fcf017471970c3903a2bc89cc7d108aaa3.tar.gz jquery-ui-1c1b64fcf017471970c3903a2bc89cc7d108aaa3.zip |
Datepicker Tests: Fix IE tests by accounting for async nature of focus/blur and by correctly not double focusing a programmatically focused date picker.
A partial fix was implemented to resolve #6694, and this commit completes the fix so we can programmatically focus a date picker without focus being fired twice.
Diffstat (limited to 'tests/unit/datepicker/datepicker_options.js')
-rw-r--r-- | tests/unit/datepicker/datepicker_options.js | 146 |
1 files changed, 72 insertions, 74 deletions
diff --git a/tests/unit/datepicker/datepicker_options.js b/tests/unit/datepicker/datepicker_options.js index 1efd854a9..c1dcfb2b7 100644 --- a/tests/unit/datepicker/datepicker_options.js +++ b/tests/unit/datepicker/datepicker_options.js @@ -87,56 +87,53 @@ test("change", function() { equal($.datepicker._defaults.showOn, "focus", "Retain default showOn"); }); -asyncTest("invocation", function() { +asyncTest( "invocation", function() { expect( 29 ); var button, image, - inp = TestHelpers.datepicker.init("#inp"), - dp = $("#ui-datepicker-div"), - body = $("body"); + inp = TestHelpers.datepicker.init( "#inp" ), + dp = $( "#ui-datepicker-div" ), + body = $( "body" ); function step1() { // On focus - button = inp.siblings("button"); - ok(button.length === 0, "Focus - button absent"); - image = inp.siblings("img"); - ok(image.length === 0, "Focus - image absent"); - inp[0].focus(); - setTimeout(function() { - ok(dp.is(":visible"), "Focus - rendered on focus"); - inp.simulate("keydown", {keyCode: $.ui.keyCode.ESCAPE}); - ok(!dp.is(":visible"), "Focus - hidden on exit"); - inp[0].blur(); - setTimeout(function() { - inp[0].focus(); - setTimeout(function() { - ok(dp.is(":visible"), "Focus - rendered on focus"); - body.simulate("mousedown", {}); - ok(!dp.is(":visible"), "Focus - hidden on external click"); - inp.datepicker("hide").datepicker("destroy"); + button = inp.siblings( "button" ); + ok( button.length === 0, "Focus - button absent" ); + image = inp.siblings( "img" ); + ok( image.length === 0, "Focus - image absent" ); + + inp.one( "focus", function() { + ok( dp.is( ":visible" ), "Focus - rendered on focus" ); + inp.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } ); + ok( !dp.is( ":visible" ), "Focus - hidden on exit" ); - step2(); - }); + TestHelpers.datepicker.onBlurThenFocus( inp, function() { + ok( dp.is( ":visible" ), "Focus - rendered on focus" ); + body.simulate( "mousedown", {} ); + ok( !dp.is( ":visible" ), "Focus - hidden on external click" ); + inp.datepicker( "hide" ).datepicker( "destroy" ); + + step2(); }); - }); + })[ 0 ].focus(); } function step2() { // On button - inp = TestHelpers.datepicker.init("#inp", {showOn: "button", buttonText: "Popup"}); - ok(!dp.is(":visible"), "Button - initially hidden"); - button = inp.siblings("button"); - image = inp.siblings("img"); - ok(button.length === 1, "Button - button present"); - ok(image.length === 0, "Button - image absent"); - equal(button.text(), "Popup", "Button - button text"); - inp[0].focus(); - setTimeout(function() { - ok(!dp.is(":visible"), "Button - not rendered on focus"); + inp = TestHelpers.datepicker.init( "#inp", { showOn: "button", buttonText: "Popup" } ); + ok( !dp.is( ":visible" ), "Button - initially hidden" ); + button = inp.siblings( "button" ); + image = inp.siblings( "img" ); + ok( button.length === 1, "Button - button present" ); + ok( image.length === 0, "Button - image absent" ); + equal( button.text(), "Popup", "Button - button text" ); + + TestHelpers.datepicker.onBlurThenFocus( inp, function() { + ok( !dp.is( ":visible" ), "Button - not rendered on focus" ); button.click(); - ok(dp.is(":visible"), "Button - rendered on button click"); + ok( dp.is( ":visible" ), "Button - rendered on button click" ); button.click(); - ok(!dp.is(":visible"), "Button - hidden on second button click"); - inp.datepicker("hide").datepicker("destroy"); + ok( !dp.is( ":visible" ), "Button - hidden on second button click" ); + inp.datepicker( "hide" ).datepicker( "destroy" ); step3(); }); @@ -144,23 +141,27 @@ asyncTest("invocation", function() { function step3() { // On image button - inp = TestHelpers.datepicker.init("#inp", {showOn: "button", buttonImageOnly: true, - buttonImage: "images/calendar.gif", buttonText: "Cal"}); - ok(!dp.is(":visible"), "Image button - initially hidden"); - button = inp.siblings("button"); - ok(button.length === 0, "Image button - button absent"); - image = inp.siblings("img"); - ok(image.length === 1, "Image button - image present"); - equal(image.attr("src"), "images/calendar.gif", "Image button - image source"); - equal(image.attr("title"), "Cal", "Image button - image text"); - inp[0].focus(); - setTimeout(function() { - ok(!dp.is(":visible"), "Image button - not rendered on focus"); + inp = TestHelpers.datepicker.init( "#inp", { + showOn: "button", + buttonImageOnly: true, + buttonImage: "images/calendar.gif", + buttonText: "Cal" + }); + ok( !dp.is( ":visible" ), "Image button - initially hidden" ); + button = inp.siblings( "button" ); + ok( button.length === 0, "Image button - button absent" ); + image = inp.siblings( "img" ); + ok( image.length === 1, "Image button - image present" ); + equal( image.attr( "src" ), "images/calendar.gif", "Image button - image source" ); + equal( image.attr( "title" ), "Cal", "Image button - image text" ); + + TestHelpers.datepicker.onBlurThenFocus( inp, function() { + ok( !dp.is( ":visible" ), "Image button - not rendered on focus" ); image.click(); - ok(dp.is(":visible"), "Image button - rendered on image click"); + ok( dp.is( ":visible" ), "Image button - rendered on image click" ); image.click(); - ok(!dp.is(":visible"), "Image button - hidden on second image click"); - inp.datepicker("hide").datepicker("destroy"); + ok( !dp.is( ":visible" ), "Image button - hidden on second image click" ); + inp.datepicker( "hide" ).datepicker( "destroy" ); step4(); }); @@ -168,29 +169,26 @@ asyncTest("invocation", function() { function step4() { // On both - inp = TestHelpers.datepicker.init("#inp", {showOn: "both", buttonImage: "images/calendar.gif"}); - ok(!dp.is(":visible"), "Both - initially hidden"); - button = inp.siblings("button"); - ok(button.length === 1, "Both - button present"); - image = inp.siblings("img"); - ok(image.length === 0, "Both - image absent"); - image = button.children("img"); - ok(image.length === 1, "Both - button image present"); - inp[0].blur(); - setTimeout(function() { - inp[0].focus(); - setTimeout(function() { - ok(dp.is(":visible"), "Both - rendered on focus"); - body.simulate("mousedown", {}); - ok(!dp.is(":visible"), "Both - hidden on external click"); - button.click(); - ok(dp.is(":visible"), "Both - rendered on button click"); - button.click(); - ok(!dp.is(":visible"), "Both - hidden on second button click"); - inp.datepicker("hide").datepicker("destroy"); + inp = TestHelpers.datepicker.init( "#inp", { showOn: "both", buttonImage: "images/calendar.gif"} ); + ok( !dp.is( ":visible" ), "Both - initially hidden" ); + button = inp.siblings( "button" ); + ok( button.length === 1, "Both - button present" ); + image = inp.siblings( "img" ); + ok( image.length === 0, "Both - image absent" ); + image = button.children( "img" ); + ok( image.length === 1, "Both - button image present" ); - start(); - }); + TestHelpers.datepicker.onBlurThenFocus( inp, function() { + ok( dp.is( ":visible" ), "Both - rendered on focus" ); + body.simulate( "mousedown", {} ); + ok( !dp.is( ":visible" ), "Both - hidden on external click" ); + button.click(); + ok( dp.is( ":visible" ), "Both - rendered on button click" ); + button.click(); + ok( !dp.is( ":visible" ), "Both - hidden on second button click" ); + inp.datepicker( "hide" ).datepicker( "destroy" ); + + start(); }); } |