summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2022-05-24 10:06:53 +0800
committerLi Jin <dragon-fly@qq.com>2022-05-24 10:06:53 +0800
commit30a11b0023ad1bc59662d1ead279ba92f6f57cdc (patch)
tree0a871f2eb1819a2689ea931a0a07004be909465c
parentac2f4ff4cdd3286ecaf31aec47d9d8aadfa75b0f (diff)
downloadyuescript-0.10.23.tar.gz
yuescript-0.10.23.tar.bz2
yuescript-0.10.23.zip
add favicon and tests.v0.10.23
-rwxr-xr-xdoc/docs/.vuepress/config.js9
-rwxr-xr-xdoc/docs/.vuepress/public/image/favicon/android-chrome-192x192.pngbin0 -> 13954 bytes
-rwxr-xr-xdoc/docs/.vuepress/public/image/favicon/android-chrome-512x512.pngbin0 -> 35977 bytes
-rwxr-xr-xdoc/docs/.vuepress/public/image/favicon/apple-touch-icon.pngbin0 -> 12771 bytes
-rwxr-xr-xdoc/docs/.vuepress/public/image/favicon/favicon-16x16.pngbin0 -> 695 bytes
-rwxr-xr-xdoc/docs/.vuepress/public/image/favicon/favicon-32x32.pngbin0 -> 1565 bytes
-rwxr-xr-xdoc/docs/.vuepress/public/image/favicon/favicon.icobin0 -> 15406 bytes
-rwxr-xr-xdoc/docs/doc/README.md2
-rw-r--r--spec/inputs/test/class_spec.yue297
-rw-r--r--spec/inputs/test/loops_spec.yue9
-rw-r--r--spec/outputs/test/class_spec.lua1668
-rw-r--r--spec/outputs/test/loops_spec.lua39
12 files changed, 2021 insertions, 3 deletions
diff --git a/doc/docs/.vuepress/config.js b/doc/docs/.vuepress/config.js
index b3f7313..c6f8f39 100755
--- a/doc/docs/.vuepress/config.js
+++ b/doc/docs/.vuepress/config.js
@@ -23,11 +23,16 @@ module.exports = {
23 ['meta', { property: 'og:description', content: description }], 23 ['meta', { property: 'og:description', content: description }],
24 // Should probably have a og:url but I'm not sure how to add that without it being the same on all pages 24 // Should probably have a og:url but I'm not sure how to add that without it being the same on all pages
25 ['meta', { property: 'og:type', content: 'website' }], 25 ['meta', { property: 'og:type', content: 'website' }],
26 ['meta', { property: 'og:image', content: 'https://yuescript.org/image/yuescript.png' }], 26 ['meta', { property: 'og:image', content: '/image/yuescript.png' }],
27 ['meta', { property: 'og:image:secure_url', content: 'https://yuescript.org/image/yuescript.png' }], 27 ['meta', { property: 'og:image:secure_url', content: '/image/yuescript.png' }],
28 ['meta', { property: 'og:image:type', content: 'image/png' }], 28 ['meta', { property: 'og:image:type', content: 'image/png' }],
29 ['meta', { property: 'og:image:width', content: '1200' }], 29 ['meta', { property: 'og:image:width', content: '1200' }],
30 ['meta', { property: 'og:image:height', content: '1200' }], 30 ['meta', { property: 'og:image:height', content: '1200' }],
31 ['link', { rel: 'icon', href: '/image/favicon/favicon-16x16.png', sizes: '16x16', type: 'image/png' }],
32 ['link', { rel: 'icon', href: '/image/favicon/favicon-32x32.png', sizes: '32x32', type: 'image/png' }],
33 ['link', { rel: 'apple-touch-icon', href: '/image/favicon/apple-touch-icon-180x180.png', sizes: '180x180', type: 'image/png' }],
34 ['link', { rel: 'android-chrome', href: '/image/favicon/android-chrome-192x192.png', sizes: '192x192', type: 'image/png' }],
35 ['link', { rel: 'android-chrome', href: '/image/favicon/android-chrome-512x512.png', sizes: '512x512', type: 'image/png' }],
31 ['script', {}, `window.global = window;`], 36 ['script', {}, `window.global = window;`],
32 ['script', {}, ` 37 ['script', {}, `
33 var Module = { 38 var Module = {
diff --git a/doc/docs/.vuepress/public/image/favicon/android-chrome-192x192.png b/doc/docs/.vuepress/public/image/favicon/android-chrome-192x192.png
new file mode 100755
index 0000000..08c42cc
--- /dev/null
+++ b/doc/docs/.vuepress/public/image/favicon/android-chrome-192x192.png
Binary files differ
diff --git a/doc/docs/.vuepress/public/image/favicon/android-chrome-512x512.png b/doc/docs/.vuepress/public/image/favicon/android-chrome-512x512.png
new file mode 100755
index 0000000..557d8af
--- /dev/null
+++ b/doc/docs/.vuepress/public/image/favicon/android-chrome-512x512.png
Binary files differ
diff --git a/doc/docs/.vuepress/public/image/favicon/apple-touch-icon.png b/doc/docs/.vuepress/public/image/favicon/apple-touch-icon.png
new file mode 100755
index 0000000..5780626
--- /dev/null
+++ b/doc/docs/.vuepress/public/image/favicon/apple-touch-icon.png
Binary files differ
diff --git a/doc/docs/.vuepress/public/image/favicon/favicon-16x16.png b/doc/docs/.vuepress/public/image/favicon/favicon-16x16.png
new file mode 100755
index 0000000..f067228
--- /dev/null
+++ b/doc/docs/.vuepress/public/image/favicon/favicon-16x16.png
Binary files differ
diff --git a/doc/docs/.vuepress/public/image/favicon/favicon-32x32.png b/doc/docs/.vuepress/public/image/favicon/favicon-32x32.png
new file mode 100755
index 0000000..2865ef5
--- /dev/null
+++ b/doc/docs/.vuepress/public/image/favicon/favicon-32x32.png
Binary files differ
diff --git a/doc/docs/.vuepress/public/image/favicon/favicon.ico b/doc/docs/.vuepress/public/image/favicon/favicon.ico
new file mode 100755
index 0000000..2c1360d
--- /dev/null
+++ b/doc/docs/.vuepress/public/image/favicon/favicon.ico
Binary files differ
diff --git a/doc/docs/doc/README.md b/doc/docs/doc/README.md
index 1e55c07..5d856bb 100755
--- a/doc/docs/doc/README.md
+++ b/doc/docs/doc/README.md
@@ -3,7 +3,7 @@ sidebar: auto
3--- 3---
4 4
5# Yuescript 5# Yuescript
6<img src="/image/yuescript.svg" width="300" height="300" alt="logo"/> 6<img src="/image/yuescript.svg" width="300px" height="300px" alt="logo"/>
7 7
8## Introduction 8## Introduction
9 9
diff --git a/spec/inputs/test/class_spec.yue b/spec/inputs/test/class_spec.yue
new file mode 100644
index 0000000..394c59b
--- /dev/null
+++ b/spec/inputs/test/class_spec.yue
@@ -0,0 +1,297 @@
1
2describe "class", ->
3 it "should make a class with constructor", ->
4 class Thing
5 new: =>
6 @color = "blue"
7
8 instance = Thing!
9
10 assert.same instance, { color: "blue" }
11
12 it "should have instance methods", ->
13 class Thing
14 get_color: => @color
15
16 new: =>
17 @color = "blue"
18
19 instance = Thing!
20 assert.same instance\get_color!, "blue"
21
22 it "should have base properies from class", ->
23 class Thing
24 color: "blue"
25 get_color: => @color
26
27 instance = Thing!
28 assert.same instance\get_color!, "blue"
29 assert.same Thing.color, "blue"
30
31 it "should inherit another class", ->
32 class Base
33 get_property: => @[@property]
34
35 new: (@property) =>
36
37 class Thing extends Base
38 color: "green"
39
40 instance = Thing "color"
41 assert.same instance\get_property!, "green"
42
43
44 it "should have class properties", ->
45 class Base
46 class Thing extends Base
47
48 instance = Thing!
49
50 assert.same Base.__name, "Base"
51 assert.same Thing.__name, "Thing"
52 assert.is_true Thing.__parent == Base
53
54 assert.is_true instance.__class == Thing
55
56 it "should have name when assigned", ->
57 Thing = class
58 assert.same Thing.__name, "Thing"
59
60 it "should not expose class properties on instance", ->
61 class Thing
62 @height: 10
63
64 Thing.color = "blue"
65
66 instance = Thing!
67 assert.same instance.color, nil
68 assert.same instance.height, nil
69
70 it "should expose new things added to __base", ->
71 class Thing
72
73 instance = Thing!
74 Thing.__base.color = "green"
75
76 assert.same instance.color, "green"
77
78 it "should call with correct receiver", ->
79 local instance
80
81 class Thing
82 is_class: => assert.is_true @ == Thing
83 is_instance: => assert.is_true @ == instance
84
85 go: =>
86 @@is_class!
87 @is_instance!
88
89 instance = Thing!
90 instance\go!
91
92 it "should have class properies take precedence over base properties", ->
93 class Thing
94 @prop: "hello"
95 prop: "world"
96
97 assert.same "hello", Thing.prop
98
99 describe "super", ->
100 it "should call super constructor", ->
101 class Base
102 new: (@property) =>
103
104 class Thing extends Base
105 new: (@name) =>
106 super "name"
107
108 instance = Thing "the_thing"
109
110 assert.same instance.property, "name"
111 assert.same instance.name, "the_thing"
112
113 it "should call super method", ->
114 class Base
115 _count: 111
116 counter: => @_count
117
118 class Thing extends Base
119 counter: => "%08d"\format super!
120
121 instance = Thing!
122 assert.same instance\counter!, "00000111"
123
124 it "should call other method from super", ->
125 class Base
126 _count: 111
127 counter: =>
128 @_count
129
130 class Thing extends Base
131 other_method: => super\counter!
132
133 instance = Thing!
134 assert.same instance\other_method!, 111
135
136 it "should get super class", ->
137 class Base
138 class Thing extends Base
139 get_super: => super
140
141 instance = Thing!
142 assert.is_true instance\get_super! == Base
143
144 it "should get a bound method from super", ->
145 class Base
146 count: 1
147 get_count: => @count
148
149 class Thing extends Base
150 get_count: => "this is wrong"
151 get_method: => super\get_count
152
153 instance = Thing!
154 assert.same instance\get_method!!, 1
155
156 it "class properties take precedence in super class over base", ->
157 class Thing
158 @prop: "hello"
159 prop: "world"
160
161 class OtherThing extends Thing
162
163 assert.same "hello", OtherThing.prop
164
165 it "gets value from base in super class", ->
166 class Thing
167 prop: "world"
168
169 class OtherThing extends Thing
170 assert.same "world", OtherThing.prop
171
172 it "should let parent be replaced on class", ->
173 class A
174 @prop: "yeah"
175 cool: => 1234
176 plain: => "a"
177
178 class B
179 @prop: "okay"
180 cool: => 9999
181 plain: => "b"
182
183 class Thing extends A
184 cool: =>
185 super! + 1
186
187 get_super: =>
188 super
189
190 instance = Thing!
191
192 assert.same "a", instance\plain!
193 assert.same 1235, instance\cool!
194 assert A == instance\get_super!, "expected super to be B"
195
196 Thing.__parent = B
197 setmetatable Thing.__base, B.__base
198
199 assert.same "b", instance\plain!
200 assert.same 10000, instance\cool!
201 assert B == instance\get_super!, "expected super to be B"
202
203 it "should resolve many levels of super", ->
204 class One
205 a: =>
206 1
207
208 class Two extends One
209 a: =>
210 super! + 2
211
212 class Three extends Two
213 a: =>
214 super! + 3
215
216 i = Three!
217
218 assert.same 6, i\a!
219
220
221 it "should resolve many levels of super with a gap", ->
222 class One
223 a: =>
224 1
225
226 class Two extends One
227
228 class Three extends Two
229 a: =>
230 super! + 3
231
232 class Four extends Three
233 a: =>
234 super! + 4
235
236 i = Four!
237
238 assert.same 8, i\a!
239
240
241 it "should call correct class/instance super methods", ->
242 class Base
243 doit: =>
244 "instance"
245
246 @doit: =>
247 "class"
248
249 class One extends Base
250 doit: => super!
251 @doit: => super!
252
253 assert.same "instance", One!\doit!
254 assert.same "class", One\doit!
255
256
257 it "should resolve many levels of super on class methods", ->
258 class One
259 @a: =>
260 1
261
262 class Two extends One
263
264 class Three extends Two
265 @a: =>
266 super! + 3
267
268 class Four extends Three
269 @a: =>
270 super! + 4
271
272 assert.same 8, Four\a!
273
274 it "super should still work when method wrapped", ->
275 add_some = (opts) ->
276 => opts.amount + opts[1] @
277
278 class Base
279 value: => 1
280
281 class Sub extends Base
282 value: add_some {
283 amount: 12
284 =>
285 super! + 100
286 }
287
288 class OtherSub extends Base
289 value: if true
290 => 5 + super!
291 else
292 => 2 + super!
293
294 assert.same 1 + 100 + 12, Sub!\value!
295 assert.same 6, OtherSub!\value!
296
297
diff --git a/spec/inputs/test/loops_spec.yue b/spec/inputs/test/loops_spec.yue
new file mode 100644
index 0000000..68b5f97
--- /dev/null
+++ b/spec/inputs/test/loops_spec.yue
@@ -0,0 +1,9 @@
1
2describe "loops", ->
3 it "should continue", ->
4 input = {1,2,3,4,5,6}
5 output = for x in *input
6 continue if x % 2 == 1
7 x
8
9 assert.same output, { 2,4,6 }
diff --git a/spec/outputs/test/class_spec.lua b/spec/outputs/test/class_spec.lua
new file mode 100644
index 0000000..b4062e0
--- /dev/null
+++ b/spec/outputs/test/class_spec.lua
@@ -0,0 +1,1668 @@
1return describe("class", function()
2 it("should make a class with constructor", function()
3 local Thing
4 do
5 local _class_0
6 local _base_0 = { }
7 if _base_0.__index == nil then
8 _base_0.__index = _base_0
9 end
10 _class_0 = setmetatable({
11 __init = function(self)
12 self.color = "blue"
13 end,
14 __base = _base_0,
15 __name = "Thing"
16 }, {
17 __index = _base_0,
18 __call = function(cls, ...)
19 local _self_0 = setmetatable({ }, _base_0)
20 cls.__init(_self_0, ...)
21 return _self_0
22 end
23 })
24 _base_0.__class = _class_0
25 Thing = _class_0
26 end
27 local instance = Thing()
28 return assert.same(instance, {
29 color = "blue"
30 })
31 end)
32 it("should have instance methods", function()
33 local Thing
34 do
35 local _class_0
36 local _base_0 = {
37 get_color = function(self)
38 return self.color
39 end
40 }
41 if _base_0.__index == nil then
42 _base_0.__index = _base_0
43 end
44 _class_0 = setmetatable({
45 __init = function(self)
46 self.color = "blue"
47 end,
48 __base = _base_0,
49 __name = "Thing"
50 }, {
51 __index = _base_0,
52 __call = function(cls, ...)
53 local _self_0 = setmetatable({ }, _base_0)
54 cls.__init(_self_0, ...)
55 return _self_0
56 end
57 })
58 _base_0.__class = _class_0
59 Thing = _class_0
60 end
61 local instance = Thing()
62 return assert.same(instance:get_color(), "blue")
63 end)
64 it("should have base properies from class", function()
65 local Thing
66 do
67 local _class_0
68 local _base_0 = {
69 color = "blue",
70 get_color = function(self)
71 return self.color
72 end
73 }
74 if _base_0.__index == nil then
75 _base_0.__index = _base_0
76 end
77 _class_0 = setmetatable({
78 __init = function() end,
79 __base = _base_0,
80 __name = "Thing"
81 }, {
82 __index = _base_0,
83 __call = function(cls, ...)
84 local _self_0 = setmetatable({ }, _base_0)
85 cls.__init(_self_0, ...)
86 return _self_0
87 end
88 })
89 _base_0.__class = _class_0
90 Thing = _class_0
91 end
92 local instance = Thing()
93 assert.same(instance:get_color(), "blue")
94 return assert.same(Thing.color, "blue")
95 end)
96 it("should inherit another class", function()
97 local Base
98 do
99 local _class_0
100 local _base_0 = {
101 get_property = function(self)
102 return self[self.property]
103 end
104 }
105 if _base_0.__index == nil then
106 _base_0.__index = _base_0
107 end
108 _class_0 = setmetatable({
109 __init = function(self, property)
110 self.property = property
111 end,
112 __base = _base_0,
113 __name = "Base"
114 }, {
115 __index = _base_0,
116 __call = function(cls, ...)
117 local _self_0 = setmetatable({ }, _base_0)
118 cls.__init(_self_0, ...)
119 return _self_0
120 end
121 })
122 _base_0.__class = _class_0
123 Base = _class_0
124 end
125 local Thing
126 do
127 local _class_0
128 local _parent_0 = Base
129 local _base_0 = {
130 color = "green"
131 }
132 if _base_0.__index == nil then
133 _base_0.__index = _base_0
134 end
135 setmetatable(_base_0, _parent_0.__base)
136 _class_0 = setmetatable({
137 __init = function(self, ...)
138 return _class_0.__parent.__init(self, ...)
139 end,
140 __base = _base_0,
141 __name = "Thing",
142 __parent = _parent_0
143 }, {
144 __index = function(cls, name)
145 local val = rawget(_base_0, name)
146 if val == nil then
147 local parent = rawget(cls, "__parent")
148 if parent then
149 return parent[name]
150 end
151 else
152 return val
153 end
154 end,
155 __call = function(cls, ...)
156 local _self_0 = setmetatable({ }, _base_0)
157 cls.__init(_self_0, ...)
158 return _self_0
159 end
160 })
161 _base_0.__class = _class_0
162 if _parent_0.__inherited then
163 _parent_0.__inherited(_parent_0, _class_0)
164 end
165 Thing = _class_0
166 end
167 local instance = Thing("color")
168 return assert.same(instance:get_property(), "green")
169 end)
170 it("should have class properties", function()
171 local Base
172 do
173 local _class_0
174 local _base_0 = { }
175 if _base_0.__index == nil then
176 _base_0.__index = _base_0
177 end
178 _class_0 = setmetatable({
179 __init = function() end,
180 __base = _base_0,
181 __name = "Base"
182 }, {
183 __index = _base_0,
184 __call = function(cls, ...)
185 local _self_0 = setmetatable({ }, _base_0)
186 cls.__init(_self_0, ...)
187 return _self_0
188 end
189 })
190 _base_0.__class = _class_0
191 Base = _class_0
192 end
193 local Thing
194 do
195 local _class_0
196 local _parent_0 = Base
197 local _base_0 = { }
198 if _base_0.__index == nil then
199 _base_0.__index = _base_0
200 end
201 setmetatable(_base_0, _parent_0.__base)
202 _class_0 = setmetatable({
203 __init = function(self, ...)
204 return _class_0.__parent.__init(self, ...)
205 end,
206 __base = _base_0,
207 __name = "Thing",
208 __parent = _parent_0
209 }, {
210 __index = function(cls, name)
211 local val = rawget(_base_0, name)
212 if val == nil then
213 local parent = rawget(cls, "__parent")
214 if parent then
215 return parent[name]
216 end
217 else
218 return val
219 end
220 end,
221 __call = function(cls, ...)
222 local _self_0 = setmetatable({ }, _base_0)
223 cls.__init(_self_0, ...)
224 return _self_0
225 end
226 })
227 _base_0.__class = _class_0
228 if _parent_0.__inherited then
229 _parent_0.__inherited(_parent_0, _class_0)
230 end
231 Thing = _class_0
232 end
233 local instance = Thing()
234 assert.same(Base.__name, "Base")
235 assert.same(Thing.__name, "Thing")
236 assert.is_true(Thing.__parent == Base)
237 return assert.is_true(instance.__class == Thing)
238 end)
239 it("should have name when assigned", function()
240 local Thing
241 do
242 local _class_0
243 local _base_0 = { }
244 if _base_0.__index == nil then
245 _base_0.__index = _base_0
246 end
247 _class_0 = setmetatable({
248 __init = function() end,
249 __base = _base_0,
250 __name = "Thing"
251 }, {
252 __index = _base_0,
253 __call = function(cls, ...)
254 local _self_0 = setmetatable({ }, _base_0)
255 cls.__init(_self_0, ...)
256 return _self_0
257 end
258 })
259 _base_0.__class = _class_0
260 Thing = _class_0
261 end
262 return assert.same(Thing.__name, "Thing")
263 end)
264 it("should not expose class properties on instance", function()
265 local Thing
266 do
267 local _class_0
268 local _base_0 = { }
269 if _base_0.__index == nil then
270 _base_0.__index = _base_0
271 end
272 _class_0 = setmetatable({
273 __init = function() end,
274 __base = _base_0,
275 __name = "Thing"
276 }, {
277 __index = _base_0,
278 __call = function(cls, ...)
279 local _self_0 = setmetatable({ }, _base_0)
280 cls.__init(_self_0, ...)
281 return _self_0
282 end
283 })
284 _base_0.__class = _class_0
285 local self = _class_0;
286 self.height = 10
287 Thing = _class_0
288 end
289 Thing.color = "blue"
290 local instance = Thing()
291 assert.same(instance.color, nil)
292 return assert.same(instance.height, nil)
293 end)
294 it("should expose new things added to __base", function()
295 local Thing
296 do
297 local _class_0
298 local _base_0 = { }
299 if _base_0.__index == nil then
300 _base_0.__index = _base_0
301 end
302 _class_0 = setmetatable({
303 __init = function() end,
304 __base = _base_0,
305 __name = "Thing"
306 }, {
307 __index = _base_0,
308 __call = function(cls, ...)
309 local _self_0 = setmetatable({ }, _base_0)
310 cls.__init(_self_0, ...)
311 return _self_0
312 end
313 })
314 _base_0.__class = _class_0
315 Thing = _class_0
316 end
317 local instance = Thing()
318 Thing.__base.color = "green"
319 return assert.same(instance.color, "green")
320 end)
321 it("should call with correct receiver", function()
322 local instance
323 local Thing
324 do
325 local _class_0
326 local _base_0 = {
327 is_class = function(self)
328 return assert.is_true(self == Thing)
329 end,
330 is_instance = function(self)
331 return assert.is_true(self == instance)
332 end,
333 go = function(self)
334 self.__class:is_class()
335 return self:is_instance()
336 end
337 }
338 if _base_0.__index == nil then
339 _base_0.__index = _base_0
340 end
341 _class_0 = setmetatable({
342 __init = function() end,
343 __base = _base_0,
344 __name = "Thing"
345 }, {
346 __index = _base_0,
347 __call = function(cls, ...)
348 local _self_0 = setmetatable({ }, _base_0)
349 cls.__init(_self_0, ...)
350 return _self_0
351 end
352 })
353 _base_0.__class = _class_0
354 Thing = _class_0
355 end
356 instance = Thing()
357 return instance:go()
358 end)
359 it("should have class properies take precedence over base properties", function()
360 local Thing
361 do
362 local _class_0
363 local _base_0 = {
364 prop = "world"
365 }
366 if _base_0.__index == nil then
367 _base_0.__index = _base_0
368 end
369 _class_0 = setmetatable({
370 __init = function() end,
371 __base = _base_0,
372 __name = "Thing"
373 }, {
374 __index = _base_0,
375 __call = function(cls, ...)
376 local _self_0 = setmetatable({ }, _base_0)
377 cls.__init(_self_0, ...)
378 return _self_0
379 end
380 })
381 _base_0.__class = _class_0
382 local self = _class_0;
383 self.prop = "hello"
384 Thing = _class_0
385 end
386 return assert.same("hello", Thing.prop)
387 end)
388 return describe("super", function()
389 it("should call super constructor", function()
390 local Base
391 do
392 local _class_0
393 local _base_0 = { }
394 if _base_0.__index == nil then
395 _base_0.__index = _base_0
396 end
397 _class_0 = setmetatable({
398 __init = function(self, property)
399 self.property = property
400 end,
401 __base = _base_0,
402 __name = "Base"
403 }, {
404 __index = _base_0,
405 __call = function(cls, ...)
406 local _self_0 = setmetatable({ }, _base_0)
407 cls.__init(_self_0, ...)
408 return _self_0
409 end
410 })
411 _base_0.__class = _class_0
412 Base = _class_0
413 end
414 local Thing
415 do
416 local _class_0
417 local _parent_0 = Base
418 local _base_0 = { }
419 if _base_0.__index == nil then
420 _base_0.__index = _base_0
421 end
422 setmetatable(_base_0, _parent_0.__base)
423 _class_0 = setmetatable({
424 __init = function(self, name)
425 self.name = name
426 return _class_0.__parent.__init(self, "name")
427 end,
428 __base = _base_0,
429 __name = "Thing",
430 __parent = _parent_0
431 }, {
432 __index = function(cls, name)
433 local val = rawget(_base_0, name)
434 if val == nil then
435 local parent = rawget(cls, "__parent")
436 if parent then
437 return parent[name]
438 end
439 else
440 return val
441 end
442 end,
443 __call = function(cls, ...)
444 local _self_0 = setmetatable({ }, _base_0)
445 cls.__init(_self_0, ...)
446 return _self_0
447 end
448 })
449 _base_0.__class = _class_0
450 if _parent_0.__inherited then
451 _parent_0.__inherited(_parent_0, _class_0)
452 end
453 Thing = _class_0
454 end
455 local instance = Thing("the_thing")
456 assert.same(instance.property, "name")
457 return assert.same(instance.name, "the_thing")
458 end)
459 it("should call super method", function()
460 local Base
461 do
462 local _class_0
463 local _base_0 = {
464 _count = 111,
465 counter = function(self)
466 return self._count
467 end
468 }
469 if _base_0.__index == nil then
470 _base_0.__index = _base_0
471 end
472 _class_0 = setmetatable({
473 __init = function() end,
474 __base = _base_0,
475 __name = "Base"
476 }, {
477 __index = _base_0,
478 __call = function(cls, ...)
479 local _self_0 = setmetatable({ }, _base_0)
480 cls.__init(_self_0, ...)
481 return _self_0
482 end
483 })
484 _base_0.__class = _class_0
485 Base = _class_0
486 end
487 local Thing
488 do
489 local _class_0
490 local _parent_0 = Base
491 local _base_0 = {
492 counter = function(self)
493 return ("%08d"):format(_class_0.__parent.__base.counter(self))
494 end
495 }
496 if _base_0.__index == nil then
497 _base_0.__index = _base_0
498 end
499 setmetatable(_base_0, _parent_0.__base)
500 _class_0 = setmetatable({
501 __init = function(self, ...)
502 return _class_0.__parent.__init(self, ...)
503 end,
504 __base = _base_0,
505 __name = "Thing",
506 __parent = _parent_0
507 }, {
508 __index = function(cls, name)
509 local val = rawget(_base_0, name)
510 if val == nil then
511 local parent = rawget(cls, "__parent")
512 if parent then
513 return parent[name]
514 end
515 else
516 return val
517 end
518 end,
519 __call = function(cls, ...)
520 local _self_0 = setmetatable({ }, _base_0)
521 cls.__init(_self_0, ...)
522 return _self_0
523 end
524 })
525 _base_0.__class = _class_0
526 if _parent_0.__inherited then
527 _parent_0.__inherited(_parent_0, _class_0)
528 end
529 Thing = _class_0
530 end
531 local instance = Thing()
532 return assert.same(instance:counter(), "00000111")
533 end)
534 it("should call other method from super", function()
535 local Base
536 do
537 local _class_0
538 local _base_0 = {
539 _count = 111,
540 counter = function(self)
541 return self._count
542 end
543 }
544 if _base_0.__index == nil then
545 _base_0.__index = _base_0
546 end
547 _class_0 = setmetatable({
548 __init = function() end,
549 __base = _base_0,
550 __name = "Base"
551 }, {
552 __index = _base_0,
553 __call = function(cls, ...)
554 local _self_0 = setmetatable({ }, _base_0)
555 cls.__init(_self_0, ...)
556 return _self_0
557 end
558 })
559 _base_0.__class = _class_0
560 Base = _class_0
561 end
562 local Thing
563 do
564 local _class_0
565 local _parent_0 = Base
566 local _base_0 = {
567 other_method = function(self)
568 return _class_0.__parent.counter(self)
569 end
570 }
571 if _base_0.__index == nil then
572 _base_0.__index = _base_0
573 end
574 setmetatable(_base_0, _parent_0.__base)
575 _class_0 = setmetatable({
576 __init = function(self, ...)
577 return _class_0.__parent.__init(self, ...)
578 end,
579 __base = _base_0,
580 __name = "Thing",
581 __parent = _parent_0
582 }, {
583 __index = function(cls, name)
584 local val = rawget(_base_0, name)
585 if val == nil then
586 local parent = rawget(cls, "__parent")
587 if parent then
588 return parent[name]
589 end
590 else
591 return val
592 end
593 end,
594 __call = function(cls, ...)
595 local _self_0 = setmetatable({ }, _base_0)
596 cls.__init(_self_0, ...)
597 return _self_0
598 end
599 })
600 _base_0.__class = _class_0
601 if _parent_0.__inherited then
602 _parent_0.__inherited(_parent_0, _class_0)
603 end
604 Thing = _class_0
605 end
606 local instance = Thing()
607 return assert.same(instance:other_method(), 111)
608 end)
609 it("should get super class", function()
610 local Base
611 do
612 local _class_0
613 local _base_0 = { }
614 if _base_0.__index == nil then
615 _base_0.__index = _base_0
616 end
617 _class_0 = setmetatable({
618 __init = function() end,
619 __base = _base_0,
620 __name = "Base"
621 }, {
622 __index = _base_0,
623 __call = function(cls, ...)
624 local _self_0 = setmetatable({ }, _base_0)
625 cls.__init(_self_0, ...)
626 return _self_0
627 end
628 })
629 _base_0.__class = _class_0
630 Base = _class_0
631 end
632 local Thing
633 do
634 local _class_0
635 local _parent_0 = Base
636 local _base_0 = {
637 get_super = function(self)
638 return _class_0.__parent
639 end
640 }
641 if _base_0.__index == nil then
642 _base_0.__index = _base_0
643 end
644 setmetatable(_base_0, _parent_0.__base)
645 _class_0 = setmetatable({
646 __init = function(self, ...)
647 return _class_0.__parent.__init(self, ...)
648 end,
649 __base = _base_0,
650 __name = "Thing",
651 __parent = _parent_0
652 }, {
653 __index = function(cls, name)
654 local val = rawget(_base_0, name)
655 if val == nil then
656 local parent = rawget(cls, "__parent")
657 if parent then
658 return parent[name]
659 end
660 else
661 return val
662 end
663 end,
664 __call = function(cls, ...)
665 local _self_0 = setmetatable({ }, _base_0)
666 cls.__init(_self_0, ...)
667 return _self_0
668 end
669 })
670 _base_0.__class = _class_0
671 if _parent_0.__inherited then
672 _parent_0.__inherited(_parent_0, _class_0)
673 end
674 Thing = _class_0
675 end
676 local instance = Thing()
677 return assert.is_true(instance:get_super() == Base)
678 end)
679 it("should get a bound method from super", function()
680 local Base
681 do
682 local _class_0
683 local _base_0 = {
684 count = 1,
685 get_count = function(self)
686 return self.count
687 end
688 }
689 if _base_0.__index == nil then
690 _base_0.__index = _base_0
691 end
692 _class_0 = setmetatable({
693 __init = function() end,
694 __base = _base_0,
695 __name = "Base"
696 }, {
697 __index = _base_0,
698 __call = function(cls, ...)
699 local _self_0 = setmetatable({ }, _base_0)
700 cls.__init(_self_0, ...)
701 return _self_0
702 end
703 })
704 _base_0.__class = _class_0
705 Base = _class_0
706 end
707 local Thing
708 do
709 local _class_0
710 local _parent_0 = Base
711 local _base_0 = {
712 get_count = function(self)
713 return "this is wrong"
714 end,
715 get_method = function(self)
716 local _base_1 = _class_0.__parent
717 local _fn_0 = _base_1.get_count
718 return _fn_0 and function(...)
719 return _fn_0(_base_1, ...)
720 end
721 end
722 }
723 if _base_0.__index == nil then
724 _base_0.__index = _base_0
725 end
726 setmetatable(_base_0, _parent_0.__base)
727 _class_0 = setmetatable({
728 __init = function(self, ...)
729 return _class_0.__parent.__init(self, ...)
730 end,
731 __base = _base_0,
732 __name = "Thing",
733 __parent = _parent_0
734 }, {
735 __index = function(cls, name)
736 local val = rawget(_base_0, name)
737 if val == nil then
738 local parent = rawget(cls, "__parent")
739 if parent then
740 return parent[name]
741 end
742 else
743 return val
744 end
745 end,
746 __call = function(cls, ...)
747 local _self_0 = setmetatable({ }, _base_0)
748 cls.__init(_self_0, ...)
749 return _self_0
750 end
751 })
752 _base_0.__class = _class_0
753 if _parent_0.__inherited then
754 _parent_0.__inherited(_parent_0, _class_0)
755 end
756 Thing = _class_0
757 end
758 local instance = Thing()
759 return assert.same(instance:get_method()(), 1)
760 end)
761 it("class properties take precedence in super class over base", function()
762 local Thing
763 do
764 local _class_0
765 local _base_0 = {
766 prop = "world"
767 }
768 if _base_0.__index == nil then
769 _base_0.__index = _base_0
770 end
771 _class_0 = setmetatable({
772 __init = function() end,
773 __base = _base_0,
774 __name = "Thing"
775 }, {
776 __index = _base_0,
777 __call = function(cls, ...)
778 local _self_0 = setmetatable({ }, _base_0)
779 cls.__init(_self_0, ...)
780 return _self_0
781 end
782 })
783 _base_0.__class = _class_0
784 local self = _class_0;
785 self.prop = "hello"
786 Thing = _class_0
787 end
788 local OtherThing
789 do
790 local _class_0
791 local _parent_0 = Thing
792 local _base_0 = { }
793 if _base_0.__index == nil then
794 _base_0.__index = _base_0
795 end
796 setmetatable(_base_0, _parent_0.__base)
797 _class_0 = setmetatable({
798 __init = function(self, ...)
799 return _class_0.__parent.__init(self, ...)
800 end,
801 __base = _base_0,
802 __name = "OtherThing",
803 __parent = _parent_0
804 }, {
805 __index = function(cls, name)
806 local val = rawget(_base_0, name)
807 if val == nil then
808 local parent = rawget(cls, "__parent")
809 if parent then
810 return parent[name]
811 end
812 else
813 return val
814 end
815 end,
816 __call = function(cls, ...)
817 local _self_0 = setmetatable({ }, _base_0)
818 cls.__init(_self_0, ...)
819 return _self_0
820 end
821 })
822 _base_0.__class = _class_0
823 if _parent_0.__inherited then
824 _parent_0.__inherited(_parent_0, _class_0)
825 end
826 OtherThing = _class_0
827 end
828 return assert.same("hello", OtherThing.prop)
829 end)
830 it("gets value from base in super class", function()
831 local Thing
832 do
833 local _class_0
834 local _base_0 = {
835 prop = "world"
836 }
837 if _base_0.__index == nil then
838 _base_0.__index = _base_0
839 end
840 _class_0 = setmetatable({
841 __init = function() end,
842 __base = _base_0,
843 __name = "Thing"
844 }, {
845 __index = _base_0,
846 __call = function(cls, ...)
847 local _self_0 = setmetatable({ }, _base_0)
848 cls.__init(_self_0, ...)
849 return _self_0
850 end
851 })
852 _base_0.__class = _class_0
853 Thing = _class_0
854 end
855 local OtherThing
856 do
857 local _class_0
858 local _parent_0 = Thing
859 local _base_0 = { }
860 if _base_0.__index == nil then
861 _base_0.__index = _base_0
862 end
863 setmetatable(_base_0, _parent_0.__base)
864 _class_0 = setmetatable({
865 __init = function(self, ...)
866 return _class_0.__parent.__init(self, ...)
867 end,
868 __base = _base_0,
869 __name = "OtherThing",
870 __parent = _parent_0
871 }, {
872 __index = function(cls, name)
873 local val = rawget(_base_0, name)
874 if val == nil then
875 local parent = rawget(cls, "__parent")
876 if parent then
877 return parent[name]
878 end
879 else
880 return val
881 end
882 end,
883 __call = function(cls, ...)
884 local _self_0 = setmetatable({ }, _base_0)
885 cls.__init(_self_0, ...)
886 return _self_0
887 end
888 })
889 _base_0.__class = _class_0
890 if _parent_0.__inherited then
891 _parent_0.__inherited(_parent_0, _class_0)
892 end
893 OtherThing = _class_0
894 end
895 return assert.same("world", OtherThing.prop)
896 end)
897 it("should let parent be replaced on class", function()
898 local A
899 do
900 local _class_0
901 local _base_0 = {
902 cool = function(self)
903 return 1234
904 end,
905 plain = function(self)
906 return "a"
907 end
908 }
909 if _base_0.__index == nil then
910 _base_0.__index = _base_0
911 end
912 _class_0 = setmetatable({
913 __init = function() end,
914 __base = _base_0,
915 __name = "A"
916 }, {
917 __index = _base_0,
918 __call = function(cls, ...)
919 local _self_0 = setmetatable({ }, _base_0)
920 cls.__init(_self_0, ...)
921 return _self_0
922 end
923 })
924 _base_0.__class = _class_0
925 local self = _class_0;
926 self.prop = "yeah"
927 A = _class_0
928 end
929 local B
930 do
931 local _class_0
932 local _base_0 = {
933 cool = function(self)
934 return 9999
935 end,
936 plain = function(self)
937 return "b"
938 end
939 }
940 if _base_0.__index == nil then
941 _base_0.__index = _base_0
942 end
943 _class_0 = setmetatable({
944 __init = function() end,
945 __base = _base_0,
946 __name = "B"
947 }, {
948 __index = _base_0,
949 __call = function(cls, ...)
950 local _self_0 = setmetatable({ }, _base_0)
951 cls.__init(_self_0, ...)
952 return _self_0
953 end
954 })
955 _base_0.__class = _class_0
956 local self = _class_0;
957 self.prop = "okay"
958 B = _class_0
959 end
960 local Thing
961 do
962 local _class_0
963 local _parent_0 = A
964 local _base_0 = {
965 cool = function(self)
966 return _class_0.__parent.__base.cool(self) + 1
967 end,
968 get_super = function(self)
969 return _class_0.__parent
970 end
971 }
972 if _base_0.__index == nil then
973 _base_0.__index = _base_0
974 end
975 setmetatable(_base_0, _parent_0.__base)
976 _class_0 = setmetatable({
977 __init = function(self, ...)
978 return _class_0.__parent.__init(self, ...)
979 end,
980 __base = _base_0,
981 __name = "Thing",
982 __parent = _parent_0
983 }, {
984 __index = function(cls, name)
985 local val = rawget(_base_0, name)
986 if val == nil then
987 local parent = rawget(cls, "__parent")
988 if parent then
989 return parent[name]
990 end
991 else
992 return val
993 end
994 end,
995 __call = function(cls, ...)
996 local _self_0 = setmetatable({ }, _base_0)
997 cls.__init(_self_0, ...)
998 return _self_0
999 end
1000 })
1001 _base_0.__class = _class_0
1002 if _parent_0.__inherited then
1003 _parent_0.__inherited(_parent_0, _class_0)
1004 end
1005 Thing = _class_0
1006 end
1007 local instance = Thing()
1008 assert.same("a", instance:plain())
1009 assert.same(1235, instance:cool())
1010 assert(A == instance:get_super(), "expected super to be B")
1011 Thing.__parent = B
1012 setmetatable(Thing.__base, B.__base)
1013 assert.same("b", instance:plain())
1014 assert.same(10000, instance:cool())
1015 return assert(B == instance:get_super(), "expected super to be B")
1016 end)
1017 it("should resolve many levels of super", function()
1018 local One
1019 do
1020 local _class_0
1021 local _base_0 = {
1022 a = function(self)
1023 return 1
1024 end
1025 }
1026 if _base_0.__index == nil then
1027 _base_0.__index = _base_0
1028 end
1029 _class_0 = setmetatable({
1030 __init = function() end,
1031 __base = _base_0,
1032 __name = "One"
1033 }, {
1034 __index = _base_0,
1035 __call = function(cls, ...)
1036 local _self_0 = setmetatable({ }, _base_0)
1037 cls.__init(_self_0, ...)
1038 return _self_0
1039 end
1040 })
1041 _base_0.__class = _class_0
1042 One = _class_0
1043 end
1044 local Two
1045 do
1046 local _class_0
1047 local _parent_0 = One
1048 local _base_0 = {
1049 a = function(self)
1050 return _class_0.__parent.__base.a(self) + 2
1051 end
1052 }
1053 if _base_0.__index == nil then
1054 _base_0.__index = _base_0
1055 end
1056 setmetatable(_base_0, _parent_0.__base)
1057 _class_0 = setmetatable({
1058 __init = function(self, ...)
1059 return _class_0.__parent.__init(self, ...)
1060 end,
1061 __base = _base_0,
1062 __name = "Two",
1063 __parent = _parent_0
1064 }, {
1065 __index = function(cls, name)
1066 local val = rawget(_base_0, name)
1067 if val == nil then
1068 local parent = rawget(cls, "__parent")
1069 if parent then
1070 return parent[name]
1071 end
1072 else
1073 return val
1074 end
1075 end,
1076 __call = function(cls, ...)
1077 local _self_0 = setmetatable({ }, _base_0)
1078 cls.__init(_self_0, ...)
1079 return _self_0
1080 end
1081 })
1082 _base_0.__class = _class_0
1083 if _parent_0.__inherited then
1084 _parent_0.__inherited(_parent_0, _class_0)
1085 end
1086 Two = _class_0
1087 end
1088 local Three
1089 do
1090 local _class_0
1091 local _parent_0 = Two
1092 local _base_0 = {
1093 a = function(self)
1094 return _class_0.__parent.__base.a(self) + 3
1095 end
1096 }
1097 if _base_0.__index == nil then
1098 _base_0.__index = _base_0
1099 end
1100 setmetatable(_base_0, _parent_0.__base)
1101 _class_0 = setmetatable({
1102 __init = function(self, ...)
1103 return _class_0.__parent.__init(self, ...)
1104 end,
1105 __base = _base_0,
1106 __name = "Three",
1107 __parent = _parent_0
1108 }, {
1109 __index = function(cls, name)
1110 local val = rawget(_base_0, name)
1111 if val == nil then
1112 local parent = rawget(cls, "__parent")
1113 if parent then
1114 return parent[name]
1115 end
1116 else
1117 return val
1118 end
1119 end,
1120 __call = function(cls, ...)
1121 local _self_0 = setmetatable({ }, _base_0)
1122 cls.__init(_self_0, ...)
1123 return _self_0
1124 end
1125 })
1126 _base_0.__class = _class_0
1127 if _parent_0.__inherited then
1128 _parent_0.__inherited(_parent_0, _class_0)
1129 end
1130 Three = _class_0
1131 end
1132 local i = Three()
1133 return assert.same(6, i:a())
1134 end)
1135 it("should resolve many levels of super with a gap", function()
1136 local One
1137 do
1138 local _class_0
1139 local _base_0 = {
1140 a = function(self)
1141 return 1
1142 end
1143 }
1144 if _base_0.__index == nil then
1145 _base_0.__index = _base_0
1146 end
1147 _class_0 = setmetatable({
1148 __init = function() end,
1149 __base = _base_0,
1150 __name = "One"
1151 }, {
1152 __index = _base_0,
1153 __call = function(cls, ...)
1154 local _self_0 = setmetatable({ }, _base_0)
1155 cls.__init(_self_0, ...)
1156 return _self_0
1157 end
1158 })
1159 _base_0.__class = _class_0
1160 One = _class_0
1161 end
1162 local Two
1163 do
1164 local _class_0
1165 local _parent_0 = One
1166 local _base_0 = { }
1167 if _base_0.__index == nil then
1168 _base_0.__index = _base_0
1169 end
1170 setmetatable(_base_0, _parent_0.__base)
1171 _class_0 = setmetatable({
1172 __init = function(self, ...)
1173 return _class_0.__parent.__init(self, ...)
1174 end,
1175 __base = _base_0,
1176 __name = "Two",
1177 __parent = _parent_0
1178 }, {
1179 __index = function(cls, name)
1180 local val = rawget(_base_0, name)
1181 if val == nil then
1182 local parent = rawget(cls, "__parent")
1183 if parent then
1184 return parent[name]
1185 end
1186 else
1187 return val
1188 end
1189 end,
1190 __call = function(cls, ...)
1191 local _self_0 = setmetatable({ }, _base_0)
1192 cls.__init(_self_0, ...)
1193 return _self_0
1194 end
1195 })
1196 _base_0.__class = _class_0
1197 if _parent_0.__inherited then
1198 _parent_0.__inherited(_parent_0, _class_0)
1199 end
1200 Two = _class_0
1201 end
1202 local Three
1203 do
1204 local _class_0
1205 local _parent_0 = Two
1206 local _base_0 = {
1207 a = function(self)
1208 return _class_0.__parent.__base.a(self) + 3
1209 end
1210 }
1211 if _base_0.__index == nil then
1212 _base_0.__index = _base_0
1213 end
1214 setmetatable(_base_0, _parent_0.__base)
1215 _class_0 = setmetatable({
1216 __init = function(self, ...)
1217 return _class_0.__parent.__init(self, ...)
1218 end,
1219 __base = _base_0,
1220 __name = "Three",
1221 __parent = _parent_0
1222 }, {
1223 __index = function(cls, name)
1224 local val = rawget(_base_0, name)
1225 if val == nil then
1226 local parent = rawget(cls, "__parent")
1227 if parent then
1228 return parent[name]
1229 end
1230 else
1231 return val
1232 end
1233 end,
1234 __call = function(cls, ...)
1235 local _self_0 = setmetatable({ }, _base_0)
1236 cls.__init(_self_0, ...)
1237 return _self_0
1238 end
1239 })
1240 _base_0.__class = _class_0
1241 if _parent_0.__inherited then
1242 _parent_0.__inherited(_parent_0, _class_0)
1243 end
1244 Three = _class_0
1245 end
1246 local Four
1247 do
1248 local _class_0
1249 local _parent_0 = Three
1250 local _base_0 = {
1251 a = function(self)
1252 return _class_0.__parent.__base.a(self) + 4
1253 end
1254 }
1255 if _base_0.__index == nil then
1256 _base_0.__index = _base_0
1257 end
1258 setmetatable(_base_0, _parent_0.__base)
1259 _class_0 = setmetatable({
1260 __init = function(self, ...)
1261 return _class_0.__parent.__init(self, ...)
1262 end,
1263 __base = _base_0,
1264 __name = "Four",
1265 __parent = _parent_0
1266 }, {
1267 __index = function(cls, name)
1268 local val = rawget(_base_0, name)
1269 if val == nil then
1270 local parent = rawget(cls, "__parent")
1271 if parent then
1272 return parent[name]
1273 end
1274 else
1275 return val
1276 end
1277 end,
1278 __call = function(cls, ...)
1279 local _self_0 = setmetatable({ }, _base_0)
1280 cls.__init(_self_0, ...)
1281 return _self_0
1282 end
1283 })
1284 _base_0.__class = _class_0
1285 if _parent_0.__inherited then
1286 _parent_0.__inherited(_parent_0, _class_0)
1287 end
1288 Four = _class_0
1289 end
1290 local i = Four()
1291 return assert.same(8, i:a())
1292 end)
1293 it("should call correct class/instance super methods", function()
1294 local Base
1295 do
1296 local _class_0
1297 local _base_0 = {
1298 doit = function(self)
1299 return "instance"
1300 end
1301 }
1302 if _base_0.__index == nil then
1303 _base_0.__index = _base_0
1304 end
1305 _class_0 = setmetatable({
1306 __init = function() end,
1307 __base = _base_0,
1308 __name = "Base"
1309 }, {
1310 __index = _base_0,
1311 __call = function(cls, ...)
1312 local _self_0 = setmetatable({ }, _base_0)
1313 cls.__init(_self_0, ...)
1314 return _self_0
1315 end
1316 })
1317 _base_0.__class = _class_0
1318 local self = _class_0;
1319 self.doit = function(self)
1320 return "class"
1321 end
1322 Base = _class_0
1323 end
1324 local One
1325 do
1326 local _class_0
1327 local _parent_0 = Base
1328 local _base_0 = {
1329 doit = function(self)
1330 return _class_0.__parent.__base.doit(self)
1331 end
1332 }
1333 if _base_0.__index == nil then
1334 _base_0.__index = _base_0
1335 end
1336 setmetatable(_base_0, _parent_0.__base)
1337 _class_0 = setmetatable({
1338 __init = function(self, ...)
1339 return _class_0.__parent.__init(self, ...)
1340 end,
1341 __base = _base_0,
1342 __name = "One",
1343 __parent = _parent_0
1344 }, {
1345 __index = function(cls, name)
1346 local val = rawget(_base_0, name)
1347 if val == nil then
1348 local parent = rawget(cls, "__parent")
1349 if parent then
1350 return parent[name]
1351 end
1352 else
1353 return val
1354 end
1355 end,
1356 __call = function(cls, ...)
1357 local _self_0 = setmetatable({ }, _base_0)
1358 cls.__init(_self_0, ...)
1359 return _self_0
1360 end
1361 })
1362 _base_0.__class = _class_0
1363 local self = _class_0;
1364 self.doit = function(self)
1365 return _class_0.__parent.doit(self)
1366 end
1367 if _parent_0.__inherited then
1368 _parent_0.__inherited(_parent_0, _class_0)
1369 end
1370 One = _class_0
1371 end
1372 assert.same("instance", One():doit())
1373 return assert.same("class", One:doit())
1374 end)
1375 it("should resolve many levels of super on class methods", function()
1376 local One
1377 do
1378 local _class_0
1379 local _base_0 = { }
1380 if _base_0.__index == nil then
1381 _base_0.__index = _base_0
1382 end
1383 _class_0 = setmetatable({
1384 __init = function() end,
1385 __base = _base_0,
1386 __name = "One"
1387 }, {
1388 __index = _base_0,
1389 __call = function(cls, ...)
1390 local _self_0 = setmetatable({ }, _base_0)
1391 cls.__init(_self_0, ...)
1392 return _self_0
1393 end
1394 })
1395 _base_0.__class = _class_0
1396 local self = _class_0;
1397 self.a = function(self)
1398 return 1
1399 end
1400 One = _class_0
1401 end
1402 local Two
1403 do
1404 local _class_0
1405 local _parent_0 = One
1406 local _base_0 = { }
1407 if _base_0.__index == nil then
1408 _base_0.__index = _base_0
1409 end
1410 setmetatable(_base_0, _parent_0.__base)
1411 _class_0 = setmetatable({
1412 __init = function(self, ...)
1413 return _class_0.__parent.__init(self, ...)
1414 end,
1415 __base = _base_0,
1416 __name = "Two",
1417 __parent = _parent_0
1418 }, {
1419 __index = function(cls, name)
1420 local val = rawget(_base_0, name)
1421 if val == nil then
1422 local parent = rawget(cls, "__parent")
1423 if parent then
1424 return parent[name]
1425 end
1426 else
1427 return val
1428 end
1429 end,
1430 __call = function(cls, ...)
1431 local _self_0 = setmetatable({ }, _base_0)
1432 cls.__init(_self_0, ...)
1433 return _self_0
1434 end
1435 })
1436 _base_0.__class = _class_0
1437 if _parent_0.__inherited then
1438 _parent_0.__inherited(_parent_0, _class_0)
1439 end
1440 Two = _class_0
1441 end
1442 local Three
1443 do
1444 local _class_0
1445 local _parent_0 = Two
1446 local _base_0 = { }
1447 if _base_0.__index == nil then
1448 _base_0.__index = _base_0
1449 end
1450 setmetatable(_base_0, _parent_0.__base)
1451 _class_0 = setmetatable({
1452 __init = function(self, ...)
1453 return _class_0.__parent.__init(self, ...)
1454 end,
1455 __base = _base_0,
1456 __name = "Three",
1457 __parent = _parent_0
1458 }, {
1459 __index = function(cls, name)
1460 local val = rawget(_base_0, name)
1461 if val == nil then
1462 local parent = rawget(cls, "__parent")
1463 if parent then
1464 return parent[name]
1465 end
1466 else
1467 return val
1468 end
1469 end,
1470 __call = function(cls, ...)
1471 local _self_0 = setmetatable({ }, _base_0)
1472 cls.__init(_self_0, ...)
1473 return _self_0
1474 end
1475 })
1476 _base_0.__class = _class_0
1477 local self = _class_0;
1478 self.a = function(self)
1479 return _class_0.__parent.a(self) + 3
1480 end
1481 if _parent_0.__inherited then
1482 _parent_0.__inherited(_parent_0, _class_0)
1483 end
1484 Three = _class_0
1485 end
1486 local Four
1487 do
1488 local _class_0
1489 local _parent_0 = Three
1490 local _base_0 = { }
1491 if _base_0.__index == nil then
1492 _base_0.__index = _base_0
1493 end
1494 setmetatable(_base_0, _parent_0.__base)
1495 _class_0 = setmetatable({
1496 __init = function(self, ...)
1497 return _class_0.__parent.__init(self, ...)
1498 end,
1499 __base = _base_0,
1500 __name = "Four",
1501 __parent = _parent_0
1502 }, {
1503 __index = function(cls, name)
1504 local val = rawget(_base_0, name)
1505 if val == nil then
1506 local parent = rawget(cls, "__parent")
1507 if parent then
1508 return parent[name]
1509 end
1510 else
1511 return val
1512 end
1513 end,
1514 __call = function(cls, ...)
1515 local _self_0 = setmetatable({ }, _base_0)
1516 cls.__init(_self_0, ...)
1517 return _self_0
1518 end
1519 })
1520 _base_0.__class = _class_0
1521 local self = _class_0;
1522 self.a = function(self)
1523 return _class_0.__parent.a(self) + 4
1524 end
1525 if _parent_0.__inherited then
1526 _parent_0.__inherited(_parent_0, _class_0)
1527 end
1528 Four = _class_0
1529 end
1530 return assert.same(8, Four:a())
1531 end)
1532 return it("super should still work when method wrapped", function()
1533 local add_some
1534 add_some = function(opts)
1535 return function(self)
1536 return opts.amount + opts[1](self)
1537 end
1538 end
1539 local Base
1540 do
1541 local _class_0
1542 local _base_0 = {
1543 value = function(self)
1544 return 1
1545 end
1546 }
1547 if _base_0.__index == nil then
1548 _base_0.__index = _base_0
1549 end
1550 _class_0 = setmetatable({
1551 __init = function() end,
1552 __base = _base_0,
1553 __name = "Base"
1554 }, {
1555 __index = _base_0,
1556 __call = function(cls, ...)
1557 local _self_0 = setmetatable({ }, _base_0)
1558 cls.__init(_self_0, ...)
1559 return _self_0
1560 end
1561 })
1562 _base_0.__class = _class_0
1563 Base = _class_0
1564 end
1565 local Sub
1566 do
1567 local _class_0
1568 local _parent_0 = Base
1569 local _base_0 = {
1570 value = add_some({
1571 amount = 12,
1572 function(self)
1573 return _class_0.__parent.__base.value(self) + 100
1574 end
1575 })
1576 }
1577 if _base_0.__index == nil then
1578 _base_0.__index = _base_0
1579 end
1580 setmetatable(_base_0, _parent_0.__base)
1581 _class_0 = setmetatable({
1582 __init = function(self, ...)
1583 return _class_0.__parent.__init(self, ...)
1584 end,
1585 __base = _base_0,
1586 __name = "Sub",
1587 __parent = _parent_0
1588 }, {
1589 __index = function(cls, name)
1590 local val = rawget(_base_0, name)
1591 if val == nil then
1592 local parent = rawget(cls, "__parent")
1593 if parent then
1594 return parent[name]
1595 end
1596 else
1597 return val
1598 end
1599 end,
1600 __call = function(cls, ...)
1601 local _self_0 = setmetatable({ }, _base_0)
1602 cls.__init(_self_0, ...)
1603 return _self_0
1604 end
1605 })
1606 _base_0.__class = _class_0
1607 if _parent_0.__inherited then
1608 _parent_0.__inherited(_parent_0, _class_0)
1609 end
1610 Sub = _class_0
1611 end
1612 local OtherSub
1613 do
1614 local _class_0
1615 local _parent_0 = Base
1616 local _base_0 = {
1617 value = (function()
1618 if true then
1619 return function(self)
1620 return 5 + _class_0.__parent.__base.value(self)
1621 end
1622 else
1623 return function(self)
1624 return 2 + _class_0.__parent.__base.value(self)
1625 end
1626 end
1627 end)()
1628 }
1629 if _base_0.__index == nil then
1630 _base_0.__index = _base_0
1631 end
1632 setmetatable(_base_0, _parent_0.__base)
1633 _class_0 = setmetatable({
1634 __init = function(self, ...)
1635 return _class_0.__parent.__init(self, ...)
1636 end,
1637 __base = _base_0,
1638 __name = "OtherSub",
1639 __parent = _parent_0
1640 }, {
1641 __index = function(cls, name)
1642 local val = rawget(_base_0, name)
1643 if val == nil then
1644 local parent = rawget(cls, "__parent")
1645 if parent then
1646 return parent[name]
1647 end
1648 else
1649 return val
1650 end
1651 end,
1652 __call = function(cls, ...)
1653 local _self_0 = setmetatable({ }, _base_0)
1654 cls.__init(_self_0, ...)
1655 return _self_0
1656 end
1657 })
1658 _base_0.__class = _class_0
1659 if _parent_0.__inherited then
1660 _parent_0.__inherited(_parent_0, _class_0)
1661 end
1662 OtherSub = _class_0
1663 end
1664 assert.same(1 + 100 + 12, Sub():value())
1665 return assert.same(6, OtherSub():value())
1666 end)
1667 end)
1668end)
diff --git a/spec/outputs/test/loops_spec.lua b/spec/outputs/test/loops_spec.lua
new file mode 100644
index 0000000..3fc0332
--- /dev/null
+++ b/spec/outputs/test/loops_spec.lua
@@ -0,0 +1,39 @@
1return describe("loops", function()
2 return it("should continue", function()
3 local input = {
4 1,
5 2,
6 3,
7 4,
8 5,
9 6
10 }
11 local output
12 do
13 local _accum_0 = { }
14 local _len_0 = 1
15 for _index_0 = 1, #input do
16 local x = input[_index_0]
17 local _continue_0 = false
18 repeat
19 if x % 2 == 1 then
20 _continue_0 = true
21 break
22 end
23 _accum_0[_len_0] = x
24 _len_0 = _len_0 + 1
25 _continue_0 = true
26 until true
27 if not _continue_0 then
28 break
29 end
30 end
31 output = _accum_0
32 end
33 return assert.same(output, {
34 2,
35 4,
36 6
37 })
38 end)
39end)