diff options
Diffstat (limited to 'tests/unit')
-rw-r--r-- | tests/unit/widget/core.js | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/tests/unit/widget/core.js b/tests/unit/widget/core.js index 74967e683..c1fb44f3c 100644 --- a/tests/unit/widget/core.js +++ b/tests/unit/widget/core.js @@ -476,6 +476,85 @@ test( "._superApply()", function() { delete $.fn.testWidget2; }); +test( "mixins", function() { + expect( 5 ); + + var mixin1 = { + foo: function() { + equal( method, "foo", "Methods from first mixin are copied over" ); + } + }; + var mixin2 = { + bar: function() { + equal( method, "bar", "Methods from second mixin are copied over" ); + } + }; + var prototype = { + baz: function() { + equal( method, "baz", "Methods from protoype are copied over" ); + } + }; + var existingBar = mixin2.bar; + var method; + + $.widget( "ui.testWidget", [ mixin1, mixin2, prototype ] ); + method = "foo"; + $.ui.testWidget.prototype.foo(); + method = "bar"; + $.ui.testWidget.prototype.bar(); + method = "baz"; + $.ui.testWidget.prototype.baz(); + + mixin1.foo = function() { + ok( false, "Changes to a mixin don't change the prototype" ); + }; + method = "foo"; + $.ui.testWidget.prototype.foo(); + + $.ui.testWidget.prototype.bar = function() {}; + strictEqual( mixin2.bar, existingBar, "Changes to a prototype don't change the mixin" ); +}); + +test( "mixins with inheritance", function() { + expect( 4 ); + + var mixin1 = { + foo: function() { + equal( method, "foo", "Methods from first mixin are copied over" ); + } + }; + var mixin2 = { + bar: function() { + equal( method, "bar", "Methods from second mixin are copied over" ); + } + }; + var parentPrototype = { + baz: function() { + equal( method, "baz", "Methods from parent protoype are copied over" ); + } + }; + var childPrototype = { + qux: function() { + equal( method, "qux", "Methods from child protoype are copied over" ); + } + }; + var method; + + $.widget( "ui.testWidget", [ mixin1, parentPrototype ] ); + $.widget( "ui.testWidget2", $.ui.testWidget, [ mixin2, childPrototype ] ); + method = "foo"; + $.ui.testWidget2.prototype.foo(); + method = "bar"; + $.ui.testWidget2.prototype.bar(); + method = "baz"; + $.ui.testWidget2.prototype.baz(); + method = "qux"; + $.ui.testWidget2.prototype.qux(); + + delete $.ui.testWidget2; + delete $.fn.testWidget2; +}); + test( ".option() - getter", function() { expect( 6 ); $.widget( "ui.testWidget", { |