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
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"
|
|
|