You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

227 lines
4.9 KiB

dofile("wow_api.lua")
dofile("LibStub.lua")
dofile("../CallbackHandler-1.0/CallbackHandler-1.0.lua")
dofile("../AceConsole-3.0/AceConsole-3.0.lua")
dofile("../AceConfig-3.0/AceConfigRegistry-3.0/AceConfigRegistry-3.0.lua")
dofile("../AceConfig-3.0/AceConfigCmd-3.0/AceConfigCmd-3.0.lua")
local ccmd = assert(LibStub("AceConfigCmd-3.0"))
local creg = assert(LibStub("AceConfigRegistry-3.0"))
local app={}
-- helper: counts of what's been execd
local n = setmetatable({}, { __index = function(self,k) return 0 end })
function n:clear()
for k,v in pairs(self) do
if k~="clear" then
self[k]=nil
end
end
end
----- set / get on application object
function app:get_toggle(info, ...)
assert(self==app)
assert(select("#",...)==0)
n.get_toggle = n.get_toggle + 1
return true
end
function app:set_toggle(info, ...)
assert(self==app, "Expected self=="..tostring(app)..", got "..tostring(self))
assert(select("#",...)==1)
local b = select(1,...)
n.set_toggle = n.set_toggle + 1
assert(b==false)
end
--- set / get / validate as function refs
function makefunc(name)
_G[name] = function(info,...)
assert(type(info)=="table")
assert(#info>=1)
n[name] = n[name] + 1
return _G["_"..name](info,...)
end
end
makefunc("set_base")
makefunc("get_base")
makefunc("validate_base")
---------------- the option table!!
local opts = {
type = "group",
get = get_base, -- tests inheritance by declaring it at the bottom
set = set_base,
validate = validate_base,
args = {
input = {
type="input",
name="Input",
desc="Input Desc",
validate = false, -- tests removing inherited validate
},
toggle = {
type="toggle",
name="Toggle",
desc="Toggle Desc",
handler=app, -- tests "handler" arg
get = "get_toggle", -- tests overriding, and membernames
set = "set_toggle",
},
plugcmd = { -- this should never be used, we should use the plugin!
name="PlugCmdOrig",
desc="YOU SHOULD NOT SEE THIS",
type="toggle",
set = function() assert(false) end,
get = function() assert(false) end,
}
},
plugins = { -- test plugins
plugin1 = {
plugcmd = {
name="PluggedCmd",
desc="Woohoo",
type="toggle",
},
plugcmd2 = {
name="PluggedCmd2",
desc="WooTwo",
type="toggle",
}
},
plugin2 = {
-- empty, shouldnt cause errors
},
plugin3 = {
p3cmd = {
name="Plugin3Cmd",
desc="WooThree",
type="toggle",
},
}
}
}
creg:RegisterOptionsTable("testapp", opts)
assert(creg:GetOptionsTable("testapp")("cmd","foo-1") == opts)
assert(creg:GetOptionsTable("testapp","cmd","foo-1") == opts)
-- User error handler
local expect = {} -- list of strings to expect
function ChatFrame1.AddMessage(self, txt)
local expstr = tremove(expect)
assert(expstr, "Unexpected output: <"..txt..">")
assert(string.match(txt,expstr), "Got output <"..txt..">, expected <"..expstr..">")
end
--------------- test "/test toggle" (via handler:methodname)
function _validate_base() end -- noop
tinsert(expect, "/test toggle : 'thisshoulderror' %- expected 'on' or 'off', or no argument to toggle.")
ccmd:HandleCommand("test","testapp","toggle thisshoulderror") -- shouldn't work
assert(n.get_toggle==0)
assert(n.set_toggle==0)
assert(n.validate_base==0)
assert(table.getn(expect)==0)
n:clear()
ccmd:HandleCommand("test","testapp","toggle off")
assert(n.get_toggle==0)
assert(n.set_toggle==1)
assert(n.validate_base==1)
n:clear()
ccmd:HandleCommand("test","testapp","toggle")
assert(n.get_toggle==1)
assert(n.set_toggle==1)
assert(n.validate_base==1)
function _validate_base(info, ...)
return "THIS FAILS"
end
n:clear()
tinsert(expect, "/test toggle : 'on' %- THIS FAILS")
ccmd:HandleCommand("test","testapp","toggle on") -- "on" since it'll error if it reachest the set handler (it only accepts false)
assert(n.get_base==0)
assert(n.set_base==0)
assert(n.validate_base==1)
-------------- test "/test input" (via funcrefs)
function _set_base(info,...)
assert(select("#",...)==1)
assert(#info==1)
assert(info[0]=="test")
assert(info[1]=="input")
local a1 = ...
assert(a1=="")
end
n:clear()
ccmd:HandleCommand("test","testapp","input")
assert(n.get_base==0)
assert(n.validate_base==0)
assert(n.set_base==1)
function _set_base(info, ...)
assert(...=="hi2u woo ",dump(...))
end
ccmd:HandleCommand("test","testapp","input hi2u woo ")
-----------------------------------------------------------------------
local seen = {
[".*Arguments to.*"]=0,
["input.*Input Desc"]=0,
["toggle.*Toggle Desc"]=0,
["plugcmd.*Woohoo"]=0,
["plugcmd2.*WooTwo"]=0,
["p3cmd.*WooThree"]=0,
}
function ChatFrame1.AddMessage(self, txt)
local ok
for k,v in pairs(seen) do
if strmatch(txt, k) then
seen[k]=seen[k]+1
ok=true
break
end
end
assert(ok, "Did not expect to see "..format("%q",txt))
end
ccmd:HandleCommand("test","testapp","")
for k,v in pairs(seen) do
assert(v==1, "Expected to see <"..k.."> once. Saw it "..v.." times.")
end
-----------------------------------------------------------------------
print "OK"