aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/GuiLua/test.lua
diff options
context:
space:
mode:
Diffstat (limited to 'src/GuiLua/test.lua')
-rw-r--r--src/GuiLua/test.lua211
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".
3do -- Only I'm not gonna indent this.
4
5local skang = require 'skang'
6local _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
12print('code')
13
14-- A variable that is private to this module.
15local 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
19skang.thingasm{'fooble,f', 'Help text goes here', 1, widget='"edit", "The fooble:", 1, 1, 10, 50', required=true}
20skang.thingasm('bar', 'Help text', "Default")
21skang.thingasm('foo')
22
23-- We can use inline functions if we don't need the function internally.
24skang.thingasm('ffunc', 'Help Text', function (arg1, arg2)
25 print('Inside test.ffunc(' .. arg1 .. ', ' .. arg2 .. ')')
26end, 'number,string')
27
28print('Ending soon')
29skang.moduleEnd(_M)
30
31end
32
33
34-- Test it.
35local skang = require 'skang'
36local test = require 'test'
37local test_c = require 'test_c'
38local copy = skang.copy(test, 'copy')
39
40print('End ' .. test.bar .. ' ' .. test.VERSION .. ' ' .. skang.get(test, 'ffunc', 'help') .. ' ->> ' .. skang.get(test, 'f', 'action'))
41
42print('')
43
44print('foo = ' .. test.foo .. ' ->> ' .. skang.get(test, 'foo', 'help'))
45print('fooble = ' .. test.fooble)
46print('cfooble = ' .. test_c.cfooble .. ' ->> ' .. skang.get(test_c, 'cfooble', 'help') .. ' [' .. skang.get(test_c, 'cfooble', 'widget') .. ']')
47print('cfunc ->> ' .. skang.get(test_c, 'cfunc', 'help'))
48test.ffunc('one', 2)
49test_c.cfunc(0, 'zero')
50print('')
51
52test.f = 42
53print('f is now ' .. test.fooble .. ' ' .. test.f)
54print('copy_f is now ' .. copy.fooble .. ' ' .. copy.f)
55copy.f = 24
56print('f is now ' .. test.fooble .. ' ' .. test.f)
57print('copy_f is now ' .. copy.fooble .. ' ' .. copy.f)
58test.f = nil
59print('f is now ' .. test.fooble .. ' ' .. test.f)
60test.fooble = 42
61print('f is now ' .. test.fooble .. ' ' .. test.f)
62test.fooble = nil
63print('f is now ' .. test.fooble .. ' ' .. test.f)
64print('')
65
66print(skang.isBoolean(true))
67print(skang.isBoolean(1))
68print(skang.isBoolean('1'))
69print(skang.isBoolean('true'))
70print(skang.isBoolean('Yep'))
71print(skang.isBoolean('?'))
72print(skang.isBoolean(test))
73print(skang.isBoolean(function (a) return true end))
74print('')
75print(skang.isBoolean(false))
76print(skang.isBoolean(nil))
77print(skang.isBoolean(0))
78print(skang.isBoolean(''))
79print(skang.isBoolean('0'))
80print(skang.isBoolean('false'))
81print(skang.isBoolean('Nope'))
82print(skang.isBoolean(function (a) return false end))
83print('')
84
85-- Make it required, even though it was anyway.
86skang.set(test, 'f', 'required', true)
87-- Disable the default value, so we see "is required" errors.
88skang.reset(test, 'f', 'default')
89test.fooble = 42
90test.fooble = 'Should fail.'
91test.fooble = 42
92test.fooble = nil
93test.fooble = 42
94test.fooble = true
95test.f = 42
96test.f = nil
97test.bar = 123
98print('')
99
100skang.set(test, 'f', 'required', false)
101test.f = 42
102test.f = nil
103skang.set(test, 'f', 'default', 999)
104test.f = 42
105test.f = nil
106print(test.fooble .. ' ' .. test.f)
107print(skang.get(test, 'f', 'default'))
108print('')
109
110local stuff = {}
111stuff.t = {}
112
113skang.thingasm{stuff, 'a', 'A test stufflet'}
114skang.thingasm{stuff.t, 'b', 'A sub stufflet'}
115skang.thingasm{stuff.t, 'c', 'Another sub stufflet'}
116skang.thingasm{stuff, 's', 'A Stuff', types='table'}
117stuff.s{'sa,a', 'A stufflet in a Stuff'}
118stuff.s{'sb,b', 'Another stufflet in a Stuff'}
119skang.thingasm{stuff, 'S', 'A database table of Stuff', types='Keyed'}
120stuff.S{'field0', 'The first field of the db table.'}
121stuff.S{'field1', 'The second field of the db table.'}
122
123print('*********************************')
124skang.fixNames(skang, 'skang')
125skang.fixNames(test, 'test')
126skang.fixNames(test_c, 'test_c')
127skang.fixNames(stuff, 'stuff')
128print('*********************************')
129
130print(skang.get(stuff, 'a', 'help'))
131print(skang.get(stuff.t, 'b', 'help'))
132print(skang.get(stuff.t, 'c', 'help'))
133print(skang.get(stuff, 's', 'help'))
134print(skang.get(stuff.s, 'sa', 'help'))
135print(skang.get(stuff.s, 'sb', 'help'))
136print(skang.get(stuff.S, 'field0', 'help'))
137print(skang.get(stuff.S, 'field1', 'help'))
138skang.thingasm{test, 'baz,b', 'A test stufflet for test'}
139print(skang.get(test, 'b', 'help'))
140print(skang.get(test, 'f', 'help'))
141-- Should fail isValid()
142stuff.a = 1
143stuff.t.b = '2'
144stuff.t.c = '3'
145test.b = '422222'
146test.f = 5
147test_c.cbar = '666'
148-- This one doesn't actually exist.
149test_c.bar = '7'
150stuff.s.sa = true
151stuff.s.sb = 22
152stuff.s.b = 33
153print('')
154-- TODO - This triggers isValid() twice for each table element.
155stuff.s = {a=8, sb='9'}
156print('')
157stuff.s.sb = 99
158-- NOTE - Yet this doesn't trigger isValid() twice.
159stuff.S['record0'] = {field0=0, field1='zero'}
160stuff.S['record1'] = {field0='1', field1='one'}
161stuff.S['record2'] = {field0='2', field1='two'}
162
163print('')
164
165print(skang.get(stuff, 'a'))
166print(skang.get(stuff.t, 'b'))
167print(skang.get(stuff.t, 'c'))
168print(skang.get(test, 'b'))
169print(skang.get(test, 'baz'))
170print(skang.get(test, 'f'))
171print(skang.get(test, 'fooble'))
172print(skang.get(test_c, 'cbar'))
173print(skang.get(test_c, 'bar'))
174print(type(skang.get(stuff, 's')))
175print(skang.get(stuff.s, 'sa'))
176print(skang.get(stuff.s, 'sb'))
177print('')
178
179print(stuff.a)
180print(stuff.t.b)
181print(stuff.t.c)
182print(test.b)
183print(test.baz)
184print(test.f)
185print(test.fooble)
186print(test_c.cbar)
187print(test_c.bar)
188print(test_c.c)
189print(test_c.cfooble)
190print(stuff.s.sa)
191print(stuff.s.sb)
192print('')
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
198print(stuff.S['record0'].field1)
199print(stuff.S['record1'].field0)
200print(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')