From 9ad2a4b1ccebb32cc745be3ef85a4b634e416ff8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Scott=20Gonz=C3=A1lez?= Date: Fri, 10 Dec 2010 14:11:20 -0500 Subject: [PATCH] Widget: Throw errors for invalid method calls. Fixes #5972 - Widget: Throw error for non-existent method calls. --- tests/unit/widget/widget_core.js | 17 +++++++++++++++++ ui/jquery.ui.widget.js | 22 +++++++++------------- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/tests/unit/widget/widget_core.js b/tests/unit/widget/widget_core.js index 2673350f3..c01cd6542 100644 --- a/tests/unit/widget/widget_core.js +++ b/tests/unit/widget/widget_core.js @@ -120,6 +120,23 @@ test( "direct usage", function() { equals( instance.getterSetterVal, 30, "getter/setter can act as setter" ); }); +test( "error handling", function() { + expect( 2 ); + var error = $.error; + $.widget( "ui.testWidget", {} ); + $.error = function( msg ) { + equal( msg, "cannot call methods on testWidget prior to initialization; " + + "attempted to call method 'missing'", "method call before init" ); + }; + $( "
" ).testWidget( "missing" ); + $.error = function( msg ) { + equal( msg, "no such method 'missing' for testWidget widget instance", + "invalid method call on widget instance" ); + }; + $( "
" ).testWidget().testWidget( "missing" ); + $.error = error; +}); + test("merge multiple option arguments", function() { expect( 1 ); $.widget( "ui.testWidget", { diff --git a/ui/jquery.ui.widget.js b/ui/jquery.ui.widget.js index fadf81f2b..0420bc31a 100644 --- a/ui/jquery.ui.widget.js +++ b/ui/jquery.ui.widget.js @@ -96,19 +96,15 @@ $.widget.bridge = function( name, object ) { if ( isMethodCall ) { this.each(function() { - var instance = $.data( this, name ), - methodValue = instance && $.isFunction( instance[options] ) ? - instance[ options ].apply( instance, args ) : - instance; - // TODO: add this back in 1.9 and use $.error() (see #5972) -// if ( !instance ) { -// throw "cannot call methods on " + name + " prior to initialization; " + -// "attempted to call method '" + options + "'"; -// } -// if ( !$.isFunction( instance[options] ) ) { -// throw "no such method '" + options + "' for " + name + " widget instance"; -// } -// var methodValue = instance[ options ].apply( instance, args ); + var instance = $.data( this, name ); + if ( !instance ) { + return $.error( "cannot call methods on " + name + " prior to initialization; " + + "attempted to call method '" + options + "'" ); + } + if ( !$.isFunction( instance[options] ) ) { + return $.error( "no such method '" + options + "' for " + name + " widget instance" ); + } + var methodValue = instance[ options ].apply( instance, args ); if ( methodValue !== instance && methodValue !== undefined ) { returnValue = methodValue; return false; -- 2.39.5