summaryrefslogtreecommitdiff
path: root/Data/BuiltIn/Libraries/middleclass/spec/mixins_spec.lua
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-11-15 11:54:17 +0800
committerchai <chaifix@163.com>2021-11-15 11:54:17 +0800
commit30f2f46474bf4eda5f10d4c64a07cde01d469f66 (patch)
tree6ff2ed3262037b3c9bae2d2b9059a1d65773f31c /Data/BuiltIn/Libraries/middleclass/spec/mixins_spec.lua
parent4c36bed53fe63ae6056730b3ecad2573f03d88f8 (diff)
*rename DefaultContent -> BuiltIn
Diffstat (limited to 'Data/BuiltIn/Libraries/middleclass/spec/mixins_spec.lua')
-rw-r--r--Data/BuiltIn/Libraries/middleclass/spec/mixins_spec.lua53
1 files changed, 53 insertions, 0 deletions
diff --git a/Data/BuiltIn/Libraries/middleclass/spec/mixins_spec.lua b/Data/BuiltIn/Libraries/middleclass/spec/mixins_spec.lua
new file mode 100644
index 0000000..ef592a1
--- /dev/null
+++ b/Data/BuiltIn/Libraries/middleclass/spec/mixins_spec.lua
@@ -0,0 +1,53 @@
+local class = require 'middleclass'
+
+describe('A Mixin', function()
+
+ local Mixin1, Mixin2, Class1, Class2
+
+ before_each(function()
+ Mixin1, Mixin2 = {},{}
+
+ function Mixin1:included(theClass) theClass.includesMixin1 = true end
+ function Mixin1:foo() return 'foo' end
+ function Mixin1:bar() return 'bar' end
+ Mixin1.static = {}
+ Mixin1.static.bazzz = function() return 'bazzz' end
+
+
+ function Mixin2:baz() return 'baz' end
+
+ Class1 = class('Class1'):include(Mixin1, Mixin2)
+ function Class1:foo() return 'foo1' end
+
+ Class2 = class('Class2', Class1)
+ function Class2:bar2() return 'bar2' end
+ end)
+
+ it('invokes the "included" method when included', function()
+ assert.is_true(Class1.includesMixin1)
+ end)
+
+ it('has all its functions (except "included") copied to its target class', function()
+ assert.equal(Class1:bar(), 'bar')
+ assert.is_nil(Class1.included)
+ end)
+
+ it('makes its functions available to subclasses', function()
+ assert.equal(Class2:baz(), 'baz')
+ end)
+
+ it('allows overriding of methods in the same class', function()
+ assert.equal(Class2:foo(), 'foo1')
+ end)
+
+ it('allows overriding of methods on subclasses', function()
+ assert.equal(Class2:bar2(), 'bar2')
+ end)
+
+ it('makes new static methods available in classes', function()
+ assert.equal(Class1:bazzz(), 'bazzz')
+ assert.equal(Class2:bazzz(), 'bazzz')
+ end)
+
+end)
+