]> source.dussan.org Git - jquery-ui.git/commitdiff
Widget: modified widget to throw exception on attempt to call private methods. Fixed... 128/head
authorWilliam Kevin Manire <williamkmanire@gmail.com>
Wed, 16 Feb 2011 08:28:32 +0000 (00:28 -0800)
committerWilliam Kevin Manire <williamkmanire@gmail.com>
Wed, 16 Feb 2011 08:28:32 +0000 (00:28 -0800)
tests/unit/widget/widget_core.js
ui/jquery.ui.widget.js

index b92885fd955ae747a132e43adf21e5d1b5812aee..11325140f54262bfc0963888782e1e29e70cada4 100644 (file)
@@ -166,9 +166,11 @@ test( "direct usage", function() {
 });
 
 test( "error handling", function() {
-       expect( 2 );
+       expect( 3 );
        var error = $.error;
-       $.widget( "ui.testWidget", {} );
+       $.widget( "ui.testWidget", {
+               _privateMethod: function () {}
+       });
        $.error = function( msg ) {
                equal( msg, "cannot call methods on testWidget prior to initialization; " +
                        "attempted to call method 'missing'", "method call before init" );
@@ -179,6 +181,11 @@ test( "error handling", function() {
                        "invalid method call on widget instance" );
        };
        $( "<div>" ).testWidget().testWidget( "missing" );
+       $.error = function ( msg ) {
+               equal( msg, "no such method '_privateMethod' for testWidget widget instance",
+                       "invalid method call on widget instance" );
+       };
+       $( "<div>" ).testWidget().testWidget( "_privateMethod" );               
        $.error = error;
 });
 
index 0a475902393c5cfdeceb2dbdecfb1381216a4938..10a25b6119375390ce510f857bf3112e4fdb0bb4 100644 (file)
@@ -104,11 +104,6 @@ $.widget.bridge = function( name, object ) {
                        $.extend.apply( null, [ true, options ].concat(args) ) :
                        options;
 
-               // prevent calls to internal methods
-               if ( isMethodCall && options.charAt( 0 ) === "_" ) {
-                       return returnValue;
-               }
-
                if ( isMethodCall ) {
                        this.each(function() {
                                var instance = $.data( this, name );
@@ -116,7 +111,7 @@ $.widget.bridge = function( name, object ) {
                                        return $.error( "cannot call methods on " + name + " prior to initialization; " +
                                                "attempted to call method '" + options + "'" );
                                }
-                               if ( !$.isFunction( instance[options] ) ) {
+                               if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
                                        return $.error( "no such method '" + options + "' for " + name + " widget instance" );
                                }
                                var methodValue = instance[ options ].apply( instance, args );