Skip to content

Commit 8cd4a83

Browse files
committed
Widget: Allow redefining a widget after other widgets have inherited from it.
1 parent e496cde commit 8cd4a83

File tree

4 files changed

+217
-168
lines changed

4 files changed

+217
-168
lines changed

tests/unit/tabs/tabs_deprecated.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ test( "enable", function() {
281281

282282
var element = $( "#tabs1" ).tabs({
283283
disabled: [ 0, 1 ],
284-
enable: function ( event, ui ) {
284+
enable: function( event, ui ) {
285285
equals( ui.tab, element.find( ".ui-tabs-nav a" )[ 1 ], "ui.tab" );
286286
equals( ui.panel, element.find( ".ui-tabs-panel" )[ 1 ], "ui.panel" );
287287
equals( ui.index, 1, "ui.index" );
@@ -296,10 +296,10 @@ test( "disable", function() {
296296
expect( 3 );
297297

298298
var element = $( "#tabs1" ).tabs({
299-
disable: function ( event, ui ) {
300-
equals( ui.tab, element.find( ".ui-tabs-nav a" )[ 1 ], "ui.tab" );
301-
equals( ui.panel, element.find( ".ui-tabs-panel" )[ 1 ], "ui.panel" );
302-
equals( ui.index, 1, "ui.index" );
299+
disable: function( event, ui ) {
300+
equals( ui.tab, element.find( ".ui-tabs-nav a" )[ 1 ], "ui.tab" );
301+
equals( ui.panel, element.find( ".ui-tabs-panel" )[ 1 ], "ui.panel" );
302+
equals( ui.index, 1, "ui.index" );
303303
}
304304
});
305305
element.tabs( "disable", 1 );

tests/unit/widget/widget_core.js

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1050,11 +1050,54 @@ test( "redefine", function() {
10501050
}
10511051
});
10521052

1053-
var instance = new $.ui.testWidget();
1053+
var instance = new $.ui.testWidget({});
10541054
instance.method( "foo" );
10551055
equal( $.ui.testWidget.foo, "bar", "static properties remain" );
10561056
});
10571057

1058+
test( "redefine deep prototype chain", function() {
1059+
expect( 8 );
1060+
$.widget( "ui.testWidget", {
1061+
method: function( str ) {
1062+
strictEqual( this, instance, "original invoked with correct this" );
1063+
equal( str, "level 4", "original invoked with correct parameter" );
1064+
}
1065+
});
1066+
$.widget( "ui.testWidget2", $.ui.testWidget, {
1067+
method: function( str ) {
1068+
strictEqual( this, instance, "testWidget2 invoked with correct this" );
1069+
equal( str, "level 2", "testWidget2 invoked with correct parameter" );
1070+
this._super( "level 3" );
1071+
}
1072+
});
1073+
$.widget( "ui.testWidget3", $.ui.testWidget2, {
1074+
method: function( str ) {
1075+
strictEqual( this, instance, "testWidget3 invoked with correct this" );
1076+
equal( str, "level 1", "testWidget3 invoked with correct parameter" );
1077+
this._super( "level 2" );
1078+
}
1079+
});
1080+
// redefine testWidget after other widgets have inherited from it
1081+
// this tests whether the inheriting widgets get updated prototype chains
1082+
$.widget( "ui.testWidget", $.ui.testWidget, {
1083+
method: function( str ) {
1084+
strictEqual( this, instance, "new invoked with correct this" );
1085+
equal( str, "level 3", "new invoked with correct parameter" );
1086+
this._super( "level 4" );
1087+
}
1088+
});
1089+
// redefine testWidget3 after it has been automatically redefined
1090+
// this tests whether we properly handle _super() when the topmost prototype
1091+
// doesn't have the method defined
1092+
$.widget( "ui.testWidget3", $.ui.testWidget3, {} );
1093+
1094+
var instance = new $.ui.testWidget3({});
1095+
instance.method( "level 1" );
1096+
1097+
delete $.ui.testWidget3;
1098+
delete $.ui.testWidget2;
1099+
});
1100+
10581101
asyncTest( "_delay", function() {
10591102
expect( 6 );
10601103
var order = 0,

0 commit comments

Comments
 (0)