From dd009ccdfd62f9153dbc72f5f5de5d5f72979690 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Tue, 22 Apr 2014 15:13:38 +1000 Subject: Move all source into the new src directory, and shuffle a few other things around. --- src/GuiLua/test.lua | 211 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 src/GuiLua/test.lua (limited to 'src/GuiLua/test.lua') 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 @@ +-- Wrapping the entire module in do .. end helps if people just join a bunch of modules together, which apparently is popular. +-- By virtue of the fact we are stuffing our result into package.loaded[], just plain running this works as "loading the module". +do -- Only I'm not gonna indent this. + +local skang = require 'skang' +local _M = skang.moduleBegin('test', nil, 'Copyright 2014 David Seikel', '0.1', '2014-03-27 03:57:00', [[ + local win = skang.window(500, 500, "G'day planet.", 'testWindow') + skang.thingasm{win, 'quitter', 'Quits the skang window', types = 'widget', widget='"button", "Quit", 10, 10, 100, 30'} + win.W.quitter.action = 'skang.quit()' -- TODO Should look it up in ThingSpace.commands, and translat 'quit' into the Lua 'skang.quit()'? +]]) + +print('code') + +-- A variable that is private to this module. +local fool = 22 + +-- TODO - Could have a table of tables, and ipair through the top level, passing the inner ones to skang.thingasm{}. + +skang.thingasm{'fooble,f', 'Help text goes here', 1, widget='"edit", "The fooble:", 1, 1, 10, 50', required=true} +skang.thingasm('bar', 'Help text', "Default") +skang.thingasm('foo') + +-- We can use inline functions if we don't need the function internally. +skang.thingasm('ffunc', 'Help Text', function (arg1, arg2) + print('Inside test.ffunc(' .. arg1 .. ', ' .. arg2 .. ')') +end, 'number,string') + +print('Ending soon') +skang.moduleEnd(_M) + +end + + +-- Test it. +local skang = require 'skang' +local test = require 'test' +local test_c = require 'test_c' +local copy = skang.copy(test, 'copy') + +print('End ' .. test.bar .. ' ' .. test.VERSION .. ' ' .. skang.get(test, 'ffunc', 'help') .. ' ->> ' .. skang.get(test, 'f', 'action')) + +print('') + +print('foo = ' .. test.foo .. ' ->> ' .. skang.get(test, 'foo', 'help')) +print('fooble = ' .. test.fooble) +print('cfooble = ' .. test_c.cfooble .. ' ->> ' .. skang.get(test_c, 'cfooble', 'help') .. ' [' .. skang.get(test_c, 'cfooble', 'widget') .. ']') +print('cfunc ->> ' .. skang.get(test_c, 'cfunc', 'help')) +test.ffunc('one', 2) +test_c.cfunc(0, 'zero') +print('') + +test.f = 42 +print('f is now ' .. test.fooble .. ' ' .. test.f) +print('copy_f is now ' .. copy.fooble .. ' ' .. copy.f) +copy.f = 24 +print('f is now ' .. test.fooble .. ' ' .. test.f) +print('copy_f is now ' .. copy.fooble .. ' ' .. copy.f) +test.f = nil +print('f is now ' .. test.fooble .. ' ' .. test.f) +test.fooble = 42 +print('f is now ' .. test.fooble .. ' ' .. test.f) +test.fooble = nil +print('f is now ' .. test.fooble .. ' ' .. test.f) +print('') + +print(skang.isBoolean(true)) +print(skang.isBoolean(1)) +print(skang.isBoolean('1')) +print(skang.isBoolean('true')) +print(skang.isBoolean('Yep')) +print(skang.isBoolean('?')) +print(skang.isBoolean(test)) +print(skang.isBoolean(function (a) return true end)) +print('') +print(skang.isBoolean(false)) +print(skang.isBoolean(nil)) +print(skang.isBoolean(0)) +print(skang.isBoolean('')) +print(skang.isBoolean('0')) +print(skang.isBoolean('false')) +print(skang.isBoolean('Nope')) +print(skang.isBoolean(function (a) return false end)) +print('') + +-- Make it required, even though it was anyway. +skang.set(test, 'f', 'required', true) +-- Disable the default value, so we see "is required" errors. +skang.reset(test, 'f', 'default') +test.fooble = 42 +test.fooble = 'Should fail.' +test.fooble = 42 +test.fooble = nil +test.fooble = 42 +test.fooble = true +test.f = 42 +test.f = nil +test.bar = 123 +print('') + +skang.set(test, 'f', 'required', false) +test.f = 42 +test.f = nil +skang.set(test, 'f', 'default', 999) +test.f = 42 +test.f = nil +print(test.fooble .. ' ' .. test.f) +print(skang.get(test, 'f', 'default')) +print('') + +local stuff = {} +stuff.t = {} + +skang.thingasm{stuff, 'a', 'A test stufflet'} +skang.thingasm{stuff.t, 'b', 'A sub stufflet'} +skang.thingasm{stuff.t, 'c', 'Another sub stufflet'} +skang.thingasm{stuff, 's', 'A Stuff', types='table'} +stuff.s{'sa,a', 'A stufflet in a Stuff'} +stuff.s{'sb,b', 'Another stufflet in a Stuff'} +skang.thingasm{stuff, 'S', 'A database table of Stuff', types='Keyed'} +stuff.S{'field0', 'The first field of the db table.'} +stuff.S{'field1', 'The second field of the db table.'} + +print('*********************************') +skang.fixNames(skang, 'skang') +skang.fixNames(test, 'test') +skang.fixNames(test_c, 'test_c') +skang.fixNames(stuff, 'stuff') +print('*********************************') + +print(skang.get(stuff, 'a', 'help')) +print(skang.get(stuff.t, 'b', 'help')) +print(skang.get(stuff.t, 'c', 'help')) +print(skang.get(stuff, 's', 'help')) +print(skang.get(stuff.s, 'sa', 'help')) +print(skang.get(stuff.s, 'sb', 'help')) +print(skang.get(stuff.S, 'field0', 'help')) +print(skang.get(stuff.S, 'field1', 'help')) +skang.thingasm{test, 'baz,b', 'A test stufflet for test'} +print(skang.get(test, 'b', 'help')) +print(skang.get(test, 'f', 'help')) +-- Should fail isValid() +stuff.a = 1 +stuff.t.b = '2' +stuff.t.c = '3' +test.b = '422222' +test.f = 5 +test_c.cbar = '666' +-- This one doesn't actually exist. +test_c.bar = '7' +stuff.s.sa = true +stuff.s.sb = 22 +stuff.s.b = 33 +print('') +-- TODO - This triggers isValid() twice for each table element. +stuff.s = {a=8, sb='9'} +print('') +stuff.s.sb = 99 +-- NOTE - Yet this doesn't trigger isValid() twice. +stuff.S['record0'] = {field0=0, field1='zero'} +stuff.S['record1'] = {field0='1', field1='one'} +stuff.S['record2'] = {field0='2', field1='two'} + +print('') + +print(skang.get(stuff, 'a')) +print(skang.get(stuff.t, 'b')) +print(skang.get(stuff.t, 'c')) +print(skang.get(test, 'b')) +print(skang.get(test, 'baz')) +print(skang.get(test, 'f')) +print(skang.get(test, 'fooble')) +print(skang.get(test_c, 'cbar')) +print(skang.get(test_c, 'bar')) +print(type(skang.get(stuff, 's'))) +print(skang.get(stuff.s, 'sa')) +print(skang.get(stuff.s, 'sb')) +print('') + +print(stuff.a) +print(stuff.t.b) +print(stuff.t.c) +print(test.b) +print(test.baz) +print(test.f) +print(test.fooble) +print(test_c.cbar) +print(test_c.bar) +print(test_c.c) +print(test_c.cfooble) +print(stuff.s.sa) +print(stuff.s.sb) +print('') + +--skang.printTableStart(stuff.s, '', 'stuff.s') +--skang.printTableStart(stuff.S, '', 'stuff.S') +--skang.printTableStart(getmetatable(stuff.S), '', 'stuff.S metatable') + +print(stuff.S['record0'].field1) +print(stuff.S['record1'].field0) +print(stuff.S['record2'].field1) + +--skang.printTableStart(stuff.S['record0'], '', 'stuff.S[record0]') +--skang.printTableStart(getmetatable(stuff.S['record0']), '', 'metatable stuff.S[record0]') +--skang.printTableStart(getmetatable(stuff.S['record1']), '', 'metatable stuff.S[record1]') +--skang.printTableStart(getmetatable(stuff.S['record2']), '', 'metatable stuff.S[record2]') + +--skang.printTableStart(getmetatable(stuff.s), '', 'stuff.s metatable') +--skang.printTableStart(getmetatable(stuff), '', 'stuff metatable') +--skang.printTableStart(getmetatable(stuff.S), '', 'stuff.S metatable') + +--skang.printTableStart(getmetatable(test), '', 'test metatable') -- cgit v1.1