From 8c3d786157ec7fef3072feac55c2d5450800568b Mon Sep 17 00:00:00 2001 From: Li Jin Date: Fri, 30 Jan 2026 18:16:45 +0800 Subject: Added more tests. --- spec/outputs/test/anonymous_class_spec.lua | 142 +++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 spec/outputs/test/anonymous_class_spec.lua (limited to 'spec/outputs/test/anonymous_class_spec.lua') diff --git a/spec/outputs/test/anonymous_class_spec.lua b/spec/outputs/test/anonymous_class_spec.lua new file mode 100644 index 0000000..8f6a122 --- /dev/null +++ b/spec/outputs/test/anonymous_class_spec.lua @@ -0,0 +1,142 @@ +return describe("anonymous class", function() + it("should create anonymous class", function() + local AnonymousClass + do + local _class_0 + local _base_0 = { + value = 100, + getValue = function(self) + return self.value + end + } + if _base_0.__index == nil then + _base_0.__index = _base_0 + end + _class_0 = setmetatable({ + __init = function() end, + __base = _base_0, + __name = "AnonymousClass" + }, { + __index = _base_0, + __call = function(cls, ...) + local _self_0 = setmetatable({ }, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + AnonymousClass = _class_0 + end + local instance = AnonymousClass() + return assert.same(instance:getValue(), 100) + end) + it("should use assigned name", function() + local MyClass + do + local _class_0 + local _base_0 = { + value = 50 + } + if _base_0.__index == nil then + _base_0.__index = _base_0 + end + _class_0 = setmetatable({ + __init = function() end, + __base = _base_0, + __name = "MyClass" + }, { + __index = _base_0, + __call = function(cls, ...) + local _self_0 = setmetatable({ }, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + MyClass = _class_0 + end + local instance = MyClass() + assert.is_true(MyClass.__name == "MyClass") + return assert.same(instance.value, 50) + end) + return it("should support anonymous subclass", function() + local Base + do + local _class_0 + local _base_0 = { + baseMethod = function(self) + return "base" + end + } + if _base_0.__index == nil then + _base_0.__index = _base_0 + end + _class_0 = setmetatable({ + __init = function() end, + __base = _base_0, + __name = "Base" + }, { + __index = _base_0, + __call = function(cls, ...) + local _self_0 = setmetatable({ }, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + Base = _class_0 + end + local Sub + do + local _class_0 + local _parent_0 = Base + local _base_0 = { + subMethod = function(self) + return "sub" + end + } + for _key_0, _val_0 in pairs(_parent_0.__base) do + if _base_0[_key_0] == nil and _key_0:match("^__") and not (_key_0 == "__index" and _val_0 == _parent_0.__base) then + _base_0[_key_0] = _val_0 + end + end + if _base_0.__index == nil then + _base_0.__index = _base_0 + end + setmetatable(_base_0, _parent_0.__base) + _class_0 = setmetatable({ + __init = function(self, ...) + return _class_0.__parent.__init(self, ...) + end, + __base = _base_0, + __name = "Sub", + __parent = _parent_0 + }, { + __index = function(cls, name) + local val = rawget(_base_0, name) + if val == nil then + local parent = rawget(cls, "__parent") + if parent then + return parent[name] + end + else + return val + end + end, + __call = function(cls, ...) + local _self_0 = setmetatable({ }, _base_0) + cls.__init(_self_0, ...) + return _self_0 + end + }) + _base_0.__class = _class_0 + if _parent_0.__inherited then + _parent_0.__inherited(_parent_0, _class_0) + end + Sub = _class_0 + end + local instance = Sub() + assert.same(instance:baseMethod(), "base") + return assert.same(instance:subMethod(), "sub") + end) +end) -- cgit v1.2.3-55-g6feb