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