forked from WoWUIDev/Ace3
-
Notifications
You must be signed in to change notification settings - Fork 0
/
AceConfigRegisty-3.0-errors.lua
128 lines (101 loc) · 3.39 KB
/
AceConfigRegisty-3.0-errors.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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"