diff options
author | Jyoti Deka <dekajp@gmail.com> | 2013-10-14 23:43:06 -0400 |
---|---|---|
committer | Jörn Zaefferer <joern.zaefferer@gmail.com> | 2013-10-16 22:22:28 +0200 |
commit | ecde7cd41a59e9c3ff07f56baeeaec2147cca779 (patch) | |
tree | cdb3b636f816fa51c16b392b28ed11c9caa5ed91 | |
parent | 9620812986a090668c44d48a7c85a46b580a89df (diff) | |
download | jquery-ui-ecde7cd41a59e9c3ff07f56baeeaec2147cca779.tar.gz jquery-ui-ecde7cd41a59e9c3ff07f56baeeaec2147cca779.zip |
Widget: option-method should work as getter only when argument length is 1. Fixes #9601 - Widget: calling _setOption with undefined as 3rd argument makes it a getter
-rw-r--r-- | tests/unit/widget/widget_core.js | 17 | ||||
-rw-r--r-- | ui/jquery.ui.widget.js | 4 |
2 files changed, 16 insertions, 5 deletions
diff --git a/tests/unit/widget/widget_core.js b/tests/unit/widget/widget_core.js index ec4c85874..3cda48df9 100644 --- a/tests/unit/widget/widget_core.js +++ b/tests/unit/widget/widget_core.js @@ -535,7 +535,7 @@ test( ".option() - delegate to ._setOptions()", function() { }); test( ".option() - delegate to ._setOption()", function() { - expect( 2 ); + expect( 3 ); var div, calls = []; $.widget( "ui.testWidget", { @@ -555,6 +555,11 @@ test( ".option() - delegate to ._setOption()", function() { "_setOption called for single option" ); calls = []; + div.testWidget( "option", "foo", undefined ); + deepEqual( calls, [{ key: "foo", val: undefined }], + "_setOption called for single option where value is undefined" ); + + calls = []; div.testWidget( "option", { bar: "qux", quux: "quuux" @@ -566,9 +571,9 @@ test( ".option() - delegate to ._setOption()", function() { }); test( ".option() - deep option setter", function() { - expect( 6 ); + expect( 9 ); $.widget( "ui.testWidget", {} ); - var div = $( "<div>" ).testWidget(); + var result, div = $( "<div>" ).testWidget(); function deepOption( from, to, msg ) { div.testWidget( "instance" ).options.foo = from; $.ui.testWidget.prototype._setOption = function( key, value ) { @@ -580,6 +585,12 @@ test( ".option() - deep option setter", function() { deepOption( { bar: "baz" }, { bar: "qux" }, "one deep" ); div.testWidget( "option", "foo.bar", "qux" ); + deepOption( { bar: "baz" }, { bar: undefined }, "one deep - value = undefined" ); + + result = div.testWidget( "option", "foo.bar", undefined ); + + deepEqual ( result, div, "option should return widget on successful set operation" ); + deepOption( null, { bar: "baz" }, "null" ); div.testWidget( "option", "foo.bar", "baz" ); diff --git a/ui/jquery.ui.widget.js b/ui/jquery.ui.widget.js index a46dcaf99..cc01f784f 100644 --- a/ui/jquery.ui.widget.js +++ b/ui/jquery.ui.widget.js @@ -321,12 +321,12 @@ $.Widget.prototype = { curOption = curOption[ parts[ i ] ]; } key = parts.pop(); - if ( value === undefined ) { + if ( arguments.length === 1 ) { return curOption[ key ] === undefined ? null : curOption[ key ]; } curOption[ key ] = value; } else { - if ( value === undefined ) { + if ( arguments.length === 1 ) { return this.options[ key ] === undefined ? null : this.options[ key ]; } options[ key ] = value; |