mirror of
https://github.com/Reuh/candran.git
synced 2025-10-27 17:59:30 +00:00
Colorize tests output and fix Lua5.1 compatibility
This commit is contained in:
parent
c8aa4f2a08
commit
bf4cadc349
1 changed files with 45 additions and 15 deletions
|
|
@ -4,6 +4,37 @@ candran.default.mapLines = false
|
||||||
|
|
||||||
local load = require("candran.util").load
|
local load = require("candran.util").load
|
||||||
|
|
||||||
|
-- Text formatting
|
||||||
|
local colors = {
|
||||||
|
black = 30,
|
||||||
|
red = 31,
|
||||||
|
green = 32,
|
||||||
|
yellow = 33,
|
||||||
|
blue = 34,
|
||||||
|
purple = 35,
|
||||||
|
cyan = 36,
|
||||||
|
white = 37,
|
||||||
|
|
||||||
|
bgBlack = 40,
|
||||||
|
bgRed = 41,
|
||||||
|
bgGreen = 42,
|
||||||
|
bgYellow = 43,
|
||||||
|
bgBlue = 44,
|
||||||
|
bgPurple = 45,
|
||||||
|
bgCyan = 46,
|
||||||
|
bgWhite = 47,
|
||||||
|
|
||||||
|
bold = 1,
|
||||||
|
underline = 4
|
||||||
|
}
|
||||||
|
local function c(text, ...)
|
||||||
|
local codes = {}
|
||||||
|
for _, color in ipairs{...} do
|
||||||
|
table.insert(codes, colors[color])
|
||||||
|
end
|
||||||
|
return ("\027[%sm%s\027[0m"):format(table.concat(codes, ";"), text)
|
||||||
|
end
|
||||||
|
|
||||||
-- test helper
|
-- test helper
|
||||||
local results = {} -- tests result
|
local results = {} -- tests result
|
||||||
local function test(name, candranCode, expectedResult, options)
|
local function test(name, candranCode, expectedResult, options)
|
||||||
|
|
@ -18,7 +49,7 @@ local function test(name, candranCode, expectedResult, options)
|
||||||
local success, code = pcall(function() return assert(candran.make(candranCode, options)) end)
|
local success, code = pcall(function() return assert(candran.make(candranCode, options)) end)
|
||||||
if not success then
|
if not success then
|
||||||
self.result = "error"
|
self.result = "error"
|
||||||
self.message = "/!\\ error while making code:\n"..code
|
self.message = c("/!\\ error while making code:\n", "bold", "red")..c(code, "red")
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -28,7 +59,7 @@ local function test(name, candranCode, expectedResult, options)
|
||||||
local success, func = pcall(load, code, nil, env)
|
local success, func = pcall(load, code, nil, env)
|
||||||
if not success then
|
if not success then
|
||||||
self.result = "error"
|
self.result = "error"
|
||||||
self.message = "/!\\ error while loading code:\n"..func.."\ngenerated code:\n"..code
|
self.message = c("/!\\ error while loading code:\n"..func.."\ngenerated code:\n", "bold", "red")..c(code, "red")
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -36,14 +67,14 @@ local function test(name, candranCode, expectedResult, options)
|
||||||
local success, output = pcall(func)
|
local success, output = pcall(func)
|
||||||
if not success then
|
if not success then
|
||||||
self.result = "error"
|
self.result = "error"
|
||||||
self.message = "/!\\ error while running code:\n"..output.."\ngenerated code:\n"..code
|
self.message = c("/!\\ error while running code:\n"..output.."\ngenerated code:\n", "bold", "red")..c(code, "red")
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
-- check result
|
-- check result
|
||||||
if output ~= expectedResult then
|
if output ~= expectedResult then
|
||||||
self.result = "fail"
|
self.result = "fail"
|
||||||
self.message = "/!\\ invalid result from the code; it returned "..tostring(output).." instead of "..tostring(expectedResult).."; generated code:\n"..code
|
self.message = c("/!\\ invalid result from the code; it returned "..tostring(output).." instead of "..tostring(expectedResult).."; generated code:\n", "bold", "purple")..c(code, "purple")
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
self.result = "success"
|
self.result = "success"
|
||||||
|
|
@ -105,21 +136,18 @@ test("preprocessor options", [[
|
||||||
return true
|
return true
|
||||||
]], true, { foo = "sky" })
|
]], true, { foo = "sky" })
|
||||||
|
|
||||||
test("preprocessor long comment", [[
|
test("preprocessor long comment", "--[[\n"..[[
|
||||||
--[[
|
|
||||||
#error("preprocessor should ignore long comments")
|
#error("preprocessor should ignore long comments")
|
||||||
]].."]]"..[[
|
]].."]]"..[[
|
||||||
return true
|
return true
|
||||||
]], true)
|
]], true)
|
||||||
|
|
||||||
test("preprocessor long comment in long string", [[
|
test("preprocessor long comment in long string", [[
|
||||||
a=]].."[["..[[
|
a=]].."[[--[[\n"..[[
|
||||||
--[[
|
|
||||||
#error("preprocessor should ignore long strings")
|
#error("preprocessor should ignore long strings")
|
||||||
]].."]]"..[[
|
]].."]]"..[[
|
||||||
return a
|
return a
|
||||||
]], [[
|
]], "--[[\n"..[[
|
||||||
--[[
|
|
||||||
#error("preprocessor should ignore long strings")
|
#error("preprocessor should ignore long strings")
|
||||||
]])
|
]])
|
||||||
|
|
||||||
|
|
@ -375,9 +403,9 @@ test("short anonymous method parsing edge cases", [[
|
||||||
if a() then h() end
|
if a() then h() end
|
||||||
local function f (...)
|
local function f (...)
|
||||||
if select('#', ...) == 1 then
|
if select('#', ...) == 1 then
|
||||||
return (...)
|
return (...)
|
||||||
else
|
else
|
||||||
return "***"
|
return "***"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return f(x)
|
return f(x)
|
||||||
|
|
@ -585,6 +613,7 @@ test("table comprehension associative/self", [[
|
||||||
return a[1] and a[10]
|
return a[1] and a[10]
|
||||||
]], true)
|
]], true)
|
||||||
test("table comprehension variable length", [[
|
test("table comprehension variable length", [[
|
||||||
|
local unpack = table.unpack or unpack
|
||||||
t1 = {"hey", "hop"}
|
t1 = {"hey", "hop"}
|
||||||
t2 = {"foo", "bar"}
|
t2 = {"foo", "bar"}
|
||||||
return table.concat([push unpack(t1); push unpack(t2)])
|
return table.concat([push unpack(t1); push unpack(t2)])
|
||||||
|
|
@ -1024,7 +1053,8 @@ for name, t in pairs(results) do
|
||||||
end
|
end
|
||||||
|
|
||||||
-- print final results
|
-- print final results
|
||||||
for name, count in pairs(resultCounter) do
|
for _, name in ipairs{{"error", "red"}, {"fail", "purple"}, {"success", "green"}} do
|
||||||
print(count.." "..name.." (" .. math.floor((count / testCounter * 100)*100)/100 .. "%)")
|
local count = resultCounter[name[1]] or 0
|
||||||
|
print(c(count, "bold", name[2])..c(" "..name[1].." (" .. math.floor((count / testCounter * 100)*100)/100 .. "%)", name[2]))
|
||||||
end
|
end
|
||||||
print(testCounter.." total")
|
print(c(testCounter.." total", "bold"))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue