diff options
author | Josep Sanz <josepsanzcamp@gmail.com> | 2021-11-08 11:53:45 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-08 11:53:45 +0100 |
commit | 85fba3f107a4a03bdac43f06c81ab2f2a3c2fea5 (patch) | |
tree | 3acb7fa147fff79cce1231f82cd709a5158483e0 /tests | |
parent | 1f0851b5381143e78d4ded1877b2a0e4d2aec5ca (diff) | |
download | jquery-ui-85fba3f107a4a03bdac43f06c81ab2f2a3c2fea5.tar.gz jquery-ui-85fba3f107a4a03bdac43f06c81ab2f2a3c2fea5.zip |
Tooltip: Don't crash on empty content
Commit 1f2011ece removed a `try-catch` around triggering the `remove` handlers
in the `jQuery.cleanData` override. The `try-catch` was meant for old IE but it was
also catching an error coming from the tooltip `remove` handler depending on
being able to find a relevant tooltip. The `_find` method returns `null`, though,
when the tooltip cotent is empty.
Instead of restoring the `try-catch`, handle the `null` case in the `remove` handler.
Fixes gh-1990
Closes gh-1994
Co-authored-by: Claas Augner <github@caugner.de>
Co-authored-by: Michał Gołębiowski-Owczarek <m.goleb@gmail.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/unit/tooltip/core.js | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/tests/unit/tooltip/core.js b/tests/unit/tooltip/core.js index 5ce49aeb7..a3eedbd6a 100644 --- a/tests/unit/tooltip/core.js +++ b/tests/unit/tooltip/core.js @@ -254,4 +254,74 @@ QUnit.test( "remove conflicting attributes from live region", function( assert ) .tooltip( "open" ); } ); +// gh-1990 +QUnit.test( "don't crash on empty tooltip content", function( assert ) { + var ready = assert.async(); + assert.expect( 1 ); + + var anchor = $( "#tooltipped1" ), + input = anchor.next(), + actions = []; + + $( document ).tooltip( { + show: false, + hide: false, + content: function() { + var title = $( this ).attr( "title" ); + if ( title === "inputtitle" ) { + return ""; + } + return title; + }, + open: function( event, ui ) { + actions.push( "open:" + ui.tooltip.text() ); + }, + close: function( event, ui ) { + actions.push( "close:" + ui.tooltip.text() ); + } + } ); + + function step1() { + anchor.simulate( "mouseover" ); + setTimeout( step2 ); + } + + function step2() { + anchor.simulate( "mouseout" ); + setTimeout( step3 ); + } + + function step3() { + input.simulate( "focus" ); + setTimeout( step4 ); + } + + function step4() { + input.simulate( "blur" ); + setTimeout( step5 ); + } + + function step5() { + anchor.simulate( "mouseover" ); + setTimeout( step6 ); + } + + function step6() { + anchor.simulate( "mouseout" ); + setTimeout( step7 ); + } + + function step7() { + assert.deepEqual( actions, [ + "open:anchortitle", + "close:anchortitle", + "open:anchortitle", + "close:anchortitle" + ], "Tooltip opens and closes without crashing" ); + ready(); + } + + step1(); +} ); + } ); |