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.

128 lines
3.4 KiB

dofile("wow_api.lua")
dofile("LibStub.lua")
dofile("../CallbackHandler-1.0/CallbackHandler-1.0.lua")
local MAJOR="AceConfigRegistry-3.0"
dofile("../AceConfig-3.0/"..MAJOR.."/"..MAJOR..".lua")
local creg = assert(LibStub(MAJOR))
local errpattern = "^"..string.gsub(MAJOR,"-","%%-")..":ValidateOptionsTable"
---------------- the option table!!
local opts = {
type = "group",
get = function(info) return true end,
set = function(info,v) end,
validate = function() return end,
args = {
input = {
type="input",
name="Input",
},
toggle = {
type="toggle",
name="Toggle",
},
grp = {
type="group",
name="Grp",
args = {
toggle = {
type="toggle",
name="Toggle",
}
}
},
select = {
type="select",
name="Select",
desc="Styled!",
style="dropdown",
values={},
}
},
plugins = { -- test plugins
plugin1 = {
plugcmd = {
name="PluggedCmd",
type="toggle",
},
plugcmd2 = {
name="PluggedCmd2",
type="toggle",
}
},
}
}
creg:RegisterOptionsTable("testapp", opts)
assert(creg:GetOptionsTable("testapp","cmd","foo-1") == opts)
-- This should not error
creg:ValidateOptionsTable(opts,"mytable")
-----------------------------------------------------------------------
-- Smack various things to pieces and make sure we get a validation error
-- Make sure that errors are indicated on the right callstack offset!
local function test(pattern)
local ok,msg=pcall(creg.ValidateOptionsTable, creg, opts,"mytable")
assert(not ok, "Wtf, this didnt error?")
assert(string.match(msg, errpattern), "<"..msg.."> did not match <"..errpattern..">") -- error should point at the pcall == no location info
assert(string.match(msg,pattern), "<"..msg.."> did not match <"..pattern..">")
end
opts.type=nil
test("mytable.type")
opts.type="group"
opts.plugins.plugin1["bad\tkey"]=true
test("mytable.plugins.plugin1.*contained control characters")
opts.plugins.plugin1["bad\tkey"]=nil
opts.plugins.mybad = "hi"
test("mytable.plugins.mybad.*expected a table")
opts.plugins.mybad = nil
opts.plugins.plugin1.plugcmd.type="barf"
test("unknown type")
opts.plugins.plugin1.plugcmd.type="toggle"
opts.args.select.style="hi2u"
test("select.style.*expect string value 'hi2u'")
opts.args.select.style="radio"
assert(pcall(creg.ValidateOptionsTable, creg, opts,"mytable"))
opts.args.select.style=nil
assert(pcall(creg.ValidateOptionsTable, creg, opts,"mytable"))
opts.args.select.values=nil
test("select.values.*expected a methodname, funcref or table")
opts.args.select.values={}
-----------------------------------------------------------------------
-- Make sure we get correct error message levels via other apis also
opts.hateme=true
local pattern="testapp.hateme.*unknown param"
local ok,msg=pcall(creg.GetOptionsTable,creg,"testapp","dropdown","foo-1")
assert(not ok)
assert(string.match(msg, errpattern), "<"..msg.."> did not match <"..errpattern..">") -- error should point at the pcall == no location info
assert(string.match(msg,pattern), "<"..msg.."> did not match <"..pattern..">")
local ok,msg=pcall(creg:GetOptionsTable("testapp"),"dropdown","foo-1")
assert(not ok)
assert(string.match(msg, errpattern), "<"..msg.."> did not match <"..errpattern..">") -- error should point at the pcall == no location info
assert(string.match(msg,pattern), "<"..msg.."> did not match <"..pattern..">")
-----------------------------------------------------------------------
print "OK"