author | Kim Alvefur <zash@zash.se> |
Mon, 07 Mar 2022 00:35:29 +0100 | |
changeset 12392 | 50fcd3879482 |
parent 12043 | e0a8c5b1ab4f |
permissions | -rw-r--r-- |
12038 | 1 |
local format = require"util.format".format; |
12041
82f6a0b0a425
tools/generate_format_spec: Apply lua-format to silence luacheck
Kim Alvefur <zash@zash.se>
parents:
12038
diff
changeset
|
2 |
local dump = require"util.serialization".new("oneline") |
12038 | 3 |
local types = { |
4 |
"nil"; |
|
5 |
"boolean"; |
|
6 |
"number"; |
|
7 |
"string"; |
|
8 |
"function"; |
|
9 |
-- "userdata"; |
|
10 |
"thread"; |
|
11 |
"table"; |
|
12 |
}; |
|
13 |
local example_values = { |
|
14 |
["nil"] = { n = 1; nil }; |
|
15 |
["boolean"] = { true; false }; |
|
12041
82f6a0b0a425
tools/generate_format_spec: Apply lua-format to silence luacheck
Kim Alvefur <zash@zash.se>
parents:
12038
diff
changeset
|
16 |
["number"] = { 97; -12345; 1.5; 73786976294838206464; math.huge; 2147483647 }; |
82f6a0b0a425
tools/generate_format_spec: Apply lua-format to silence luacheck
Kim Alvefur <zash@zash.se>
parents:
12038
diff
changeset
|
17 |
["string"] = { "hello"; "foo \1\2\3 bar"; "nödåtgärd"; string.sub("nödåtgärd", 1, -4) }; |
12038 | 18 |
["function"] = { function() end }; |
19 |
-- ["userdata"] = {}; |
|
20 |
["thread"] = { coroutine.create(function() end) }; |
|
12043
e0a8c5b1ab4f
util.format: Ensure metatable __tostring results are also sanitized
Kim Alvefur <zash@zash.se>
parents:
12041
diff
changeset
|
21 |
["table"] = { {}, setmetatable({},{__tostring=function ()return "foo \1\2\3 bar"end}) }; |
12038 | 22 |
}; |
23 |
local example_strings = setmetatable({ |
|
24 |
["nil"] = { "nil" }; |
|
25 |
["function"] = { "function() end" }; |
|
12041
82f6a0b0a425
tools/generate_format_spec: Apply lua-format to silence luacheck
Kim Alvefur <zash@zash.se>
parents:
12038
diff
changeset
|
26 |
["number"] = { "97"; "-12345"; "1.5"; "73786976294838206464"; "math.huge"; "2147483647" }; |
12038 | 27 |
["thread"] = { "coroutine.create(function() end)" }; |
12043
e0a8c5b1ab4f
util.format: Ensure metatable __tostring results are also sanitized
Kim Alvefur <zash@zash.se>
parents:
12041
diff
changeset
|
28 |
["table"] = { "{ }", "setmetatable({},{__tostring=function ()return \"foo \\1\\2\\3 bar\"end})" } |
12038 | 29 |
}, { __index = function() return {} end }); |
30 |
for _, lua_type in ipairs(types) do |
|
31 |
print(string.format("\t\tdescribe(\"%s\", function ()", lua_type)); |
|
32 |
local examples = example_values[lua_type]; |
|
33 |
for fmt in ("cdiouxXaAeEfgGqs"):gmatch(".") do |
|
34 |
print(string.format("\t\t\tdescribe(\"to %%%s\", function ()", fmt)); |
|
35 |
print("\t\t\t\tit(\"works\", function ()"); |
|
12041
82f6a0b0a425
tools/generate_format_spec: Apply lua-format to silence luacheck
Kim Alvefur <zash@zash.se>
parents:
12038
diff
changeset
|
36 |
for i = 1, examples.n or #examples do |
12038 | 37 |
local example = examples[i]; |
38 |
if not tostring(example):match("%w+: 0[xX]%x+") then |
|
12041
82f6a0b0a425
tools/generate_format_spec: Apply lua-format to silence luacheck
Kim Alvefur <zash@zash.se>
parents:
12038
diff
changeset
|
39 |
print(string.format("\t\t\t\t\tassert.equal(%q, format(%q, %s))", format("%" .. fmt, example), "%" .. fmt, |
82f6a0b0a425
tools/generate_format_spec: Apply lua-format to silence luacheck
Kim Alvefur <zash@zash.se>
parents:
12038
diff
changeset
|
40 |
example_strings[lua_type][i] or dump(example))); |
12038 | 41 |
else |
12041
82f6a0b0a425
tools/generate_format_spec: Apply lua-format to silence luacheck
Kim Alvefur <zash@zash.se>
parents:
12038
diff
changeset
|
42 |
print(string.format("\t\t\t\t\tassert.matches(\"[%s: 0[xX]%%x+]\", format(%q, %s))", lua_type, "%" .. fmt, |
82f6a0b0a425
tools/generate_format_spec: Apply lua-format to silence luacheck
Kim Alvefur <zash@zash.se>
parents:
12038
diff
changeset
|
43 |
example_strings[lua_type][i] or dump(example))); |
12038 | 44 |
end |
45 |
end |
|
46 |
print("\t\t\t\tend);"); |
|
47 |
print("\t\t\tend);"); |
|
48 |
print() |
|
49 |
end |
|
50 |
print("\t\tend);"); |
|
51 |
print() |
|
52 |
end |