diff options
Diffstat (limited to 'src/GuiLua/test.lua')
-rw-r--r-- | src/GuiLua/test.lua | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/src/GuiLua/test.lua b/src/GuiLua/test.lua new file mode 100644 index 0000000..705f7ad --- /dev/null +++ b/src/GuiLua/test.lua | |||
@@ -0,0 +1,211 @@ | |||
1 | -- Wrapping the entire module in do .. end helps if people just join a bunch of modules together, which apparently is popular. | ||
2 | -- By virtue of the fact we are stuffing our result into package.loaded[], just plain running this works as "loading the module". | ||
3 | do -- Only I'm not gonna indent this. | ||
4 | |||
5 | local skang = require 'skang' | ||
6 | local _M = skang.moduleBegin('test', nil, 'Copyright 2014 David Seikel', '0.1', '2014-03-27 03:57:00', [[ | ||
7 | local win = skang.window(500, 500, "G'day planet.", 'testWindow') | ||
8 | skang.thingasm{win, 'quitter', 'Quits the skang window', types = 'widget', widget='"button", "Quit", 10, 10, 100, 30'} | ||
9 | win.W.quitter.action = 'skang.quit()' -- TODO Should look it up in ThingSpace.commands, and translat 'quit' into the Lua 'skang.quit()'? | ||
10 | ]]) | ||
11 | |||
12 | print('code') | ||
13 | |||
14 | -- A variable that is private to this module. | ||
15 | local fool = 22 | ||
16 | |||
17 | -- TODO - Could have a table of tables, and ipair through the top level, passing the inner ones to skang.thingasm{}. | ||
18 | |||
19 | skang.thingasm{'fooble,f', 'Help text goes here', 1, widget='"edit", "The fooble:", 1, 1, 10, 50', required=true} | ||
20 | skang.thingasm('bar', 'Help text', "Default") | ||
21 | skang.thingasm('foo') | ||
22 | |||
23 | -- We can use inline functions if we don't need the function internally. | ||
24 | skang.thingasm('ffunc', 'Help Text', function (arg1, arg2) | ||
25 | print('Inside test.ffunc(' .. arg1 .. ', ' .. arg2 .. ')') | ||
26 | end, 'number,string') | ||
27 | |||
28 | print('Ending soon') | ||
29 | skang.moduleEnd(_M) | ||
30 | |||
31 | end | ||
32 | |||
33 | |||
34 | -- Test it. | ||
35 | local skang = require 'skang' | ||
36 | local test = require 'test' | ||
37 | local test_c = require 'test_c' | ||
38 | local copy = skang.copy(test, 'copy') | ||
39 | |||
40 | print('End ' .. test.bar .. ' ' .. test.VERSION .. ' ' .. skang.get(test, 'ffunc', 'help') .. ' ->> ' .. skang.get(test, 'f', 'action')) | ||
41 | |||
42 | print('') | ||
43 | |||
44 | print('foo = ' .. test.foo .. ' ->> ' .. skang.get(test, 'foo', 'help')) | ||
45 | print('fooble = ' .. test.fooble) | ||
46 | print('cfooble = ' .. test_c.cfooble .. ' ->> ' .. skang.get(test_c, 'cfooble', 'help') .. ' [' .. skang.get(test_c, 'cfooble', 'widget') .. ']') | ||
47 | print('cfunc ->> ' .. skang.get(test_c, 'cfunc', 'help')) | ||
48 | test.ffunc('one', 2) | ||
49 | test_c.cfunc(0, 'zero') | ||
50 | print('') | ||
51 | |||
52 | test.f = 42 | ||
53 | print('f is now ' .. test.fooble .. ' ' .. test.f) | ||
54 | print('copy_f is now ' .. copy.fooble .. ' ' .. copy.f) | ||
55 | copy.f = 24 | ||
56 | print('f is now ' .. test.fooble .. ' ' .. test.f) | ||
57 | print('copy_f is now ' .. copy.fooble .. ' ' .. copy.f) | ||
58 | test.f = nil | ||
59 | print('f is now ' .. test.fooble .. ' ' .. test.f) | ||
60 | test.fooble = 42 | ||
61 | print('f is now ' .. test.fooble .. ' ' .. test.f) | ||
62 | test.fooble = nil | ||
63 | print('f is now ' .. test.fooble .. ' ' .. test.f) | ||
64 | print('') | ||
65 | |||
66 | print(skang.isBoolean(true)) | ||
67 | print(skang.isBoolean(1)) | ||
68 | print(skang.isBoolean('1')) | ||
69 | print(skang.isBoolean('true')) | ||
70 | print(skang.isBoolean('Yep')) | ||
71 | print(skang.isBoolean('?')) | ||
72 | print(skang.isBoolean(test)) | ||
73 | print(skang.isBoolean(function (a) return true end)) | ||
74 | print('') | ||
75 | print(skang.isBoolean(false)) | ||
76 | print(skang.isBoolean(nil)) | ||
77 | print(skang.isBoolean(0)) | ||
78 | print(skang.isBoolean('')) | ||
79 | print(skang.isBoolean('0')) | ||
80 | print(skang.isBoolean('false')) | ||
81 | print(skang.isBoolean('Nope')) | ||
82 | print(skang.isBoolean(function (a) return false end)) | ||
83 | print('') | ||
84 | |||
85 | -- Make it required, even though it was anyway. | ||
86 | skang.set(test, 'f', 'required', true) | ||
87 | -- Disable the default value, so we see "is required" errors. | ||
88 | skang.reset(test, 'f', 'default') | ||
89 | test.fooble = 42 | ||
90 | test.fooble = 'Should fail.' | ||
91 | test.fooble = 42 | ||
92 | test.fooble = nil | ||
93 | test.fooble = 42 | ||
94 | test.fooble = true | ||
95 | test.f = 42 | ||
96 | test.f = nil | ||
97 | test.bar = 123 | ||
98 | print('') | ||
99 | |||
100 | skang.set(test, 'f', 'required', false) | ||
101 | test.f = 42 | ||
102 | test.f = nil | ||
103 | skang.set(test, 'f', 'default', 999) | ||
104 | test.f = 42 | ||
105 | test.f = nil | ||
106 | print(test.fooble .. ' ' .. test.f) | ||
107 | print(skang.get(test, 'f', 'default')) | ||
108 | print('') | ||
109 | |||
110 | local stuff = {} | ||
111 | stuff.t = {} | ||
112 | |||
113 | skang.thingasm{stuff, 'a', 'A test stufflet'} | ||
114 | skang.thingasm{stuff.t, 'b', 'A sub stufflet'} | ||
115 | skang.thingasm{stuff.t, 'c', 'Another sub stufflet'} | ||
116 | skang.thingasm{stuff, 's', 'A Stuff', types='table'} | ||
117 | stuff.s{'sa,a', 'A stufflet in a Stuff'} | ||
118 | stuff.s{'sb,b', 'Another stufflet in a Stuff'} | ||
119 | skang.thingasm{stuff, 'S', 'A database table of Stuff', types='Keyed'} | ||
120 | stuff.S{'field0', 'The first field of the db table.'} | ||
121 | stuff.S{'field1', 'The second field of the db table.'} | ||
122 | |||
123 | print('*********************************') | ||
124 | skang.fixNames(skang, 'skang') | ||
125 | skang.fixNames(test, 'test') | ||
126 | skang.fixNames(test_c, 'test_c') | ||
127 | skang.fixNames(stuff, 'stuff') | ||
128 | print('*********************************') | ||
129 | |||
130 | print(skang.get(stuff, 'a', 'help')) | ||
131 | print(skang.get(stuff.t, 'b', 'help')) | ||
132 | print(skang.get(stuff.t, 'c', 'help')) | ||
133 | print(skang.get(stuff, 's', 'help')) | ||
134 | print(skang.get(stuff.s, 'sa', 'help')) | ||
135 | print(skang.get(stuff.s, 'sb', 'help')) | ||
136 | print(skang.get(stuff.S, 'field0', 'help')) | ||
137 | print(skang.get(stuff.S, 'field1', 'help')) | ||
138 | skang.thingasm{test, 'baz,b', 'A test stufflet for test'} | ||
139 | print(skang.get(test, 'b', 'help')) | ||
140 | print(skang.get(test, 'f', 'help')) | ||
141 | -- Should fail isValid() | ||
142 | stuff.a = 1 | ||
143 | stuff.t.b = '2' | ||
144 | stuff.t.c = '3' | ||
145 | test.b = '422222' | ||
146 | test.f = 5 | ||
147 | test_c.cbar = '666' | ||
148 | -- This one doesn't actually exist. | ||
149 | test_c.bar = '7' | ||
150 | stuff.s.sa = true | ||
151 | stuff.s.sb = 22 | ||
152 | stuff.s.b = 33 | ||
153 | print('') | ||
154 | -- TODO - This triggers isValid() twice for each table element. | ||
155 | stuff.s = {a=8, sb='9'} | ||
156 | print('') | ||
157 | stuff.s.sb = 99 | ||
158 | -- NOTE - Yet this doesn't trigger isValid() twice. | ||
159 | stuff.S['record0'] = {field0=0, field1='zero'} | ||
160 | stuff.S['record1'] = {field0='1', field1='one'} | ||
161 | stuff.S['record2'] = {field0='2', field1='two'} | ||
162 | |||
163 | print('') | ||
164 | |||
165 | print(skang.get(stuff, 'a')) | ||
166 | print(skang.get(stuff.t, 'b')) | ||
167 | print(skang.get(stuff.t, 'c')) | ||
168 | print(skang.get(test, 'b')) | ||
169 | print(skang.get(test, 'baz')) | ||
170 | print(skang.get(test, 'f')) | ||
171 | print(skang.get(test, 'fooble')) | ||
172 | print(skang.get(test_c, 'cbar')) | ||
173 | print(skang.get(test_c, 'bar')) | ||
174 | print(type(skang.get(stuff, 's'))) | ||
175 | print(skang.get(stuff.s, 'sa')) | ||
176 | print(skang.get(stuff.s, 'sb')) | ||
177 | print('') | ||
178 | |||
179 | print(stuff.a) | ||
180 | print(stuff.t.b) | ||
181 | print(stuff.t.c) | ||
182 | print(test.b) | ||
183 | print(test.baz) | ||
184 | print(test.f) | ||
185 | print(test.fooble) | ||
186 | print(test_c.cbar) | ||
187 | print(test_c.bar) | ||
188 | print(test_c.c) | ||
189 | print(test_c.cfooble) | ||
190 | print(stuff.s.sa) | ||
191 | print(stuff.s.sb) | ||
192 | print('') | ||
193 | |||
194 | --skang.printTableStart(stuff.s, '', 'stuff.s') | ||
195 | --skang.printTableStart(stuff.S, '', 'stuff.S') | ||
196 | --skang.printTableStart(getmetatable(stuff.S), '', 'stuff.S metatable') | ||
197 | |||
198 | print(stuff.S['record0'].field1) | ||
199 | print(stuff.S['record1'].field0) | ||
200 | print(stuff.S['record2'].field1) | ||
201 | |||
202 | --skang.printTableStart(stuff.S['record0'], '', 'stuff.S[record0]') | ||
203 | --skang.printTableStart(getmetatable(stuff.S['record0']), '', 'metatable stuff.S[record0]') | ||
204 | --skang.printTableStart(getmetatable(stuff.S['record1']), '', 'metatable stuff.S[record1]') | ||
205 | --skang.printTableStart(getmetatable(stuff.S['record2']), '', 'metatable stuff.S[record2]') | ||
206 | |||
207 | --skang.printTableStart(getmetatable(stuff.s), '', 'stuff.s metatable') | ||
208 | --skang.printTableStart(getmetatable(stuff), '', 'stuff metatable') | ||
209 | --skang.printTableStart(getmetatable(stuff.S), '', 'stuff.S metatable') | ||
210 | |||
211 | --skang.printTableStart(getmetatable(test), '', 'test metatable') | ||