That sure is a nice status bar.
This commit is contained in:
parent
476a2de8f7
commit
cf7ed5b289
|
@ -198,76 +198,34 @@ function TestSuite:runTests (parent_prefix, parent_indent)
|
|||
end
|
||||
|
||||
if not parent_prefix then
|
||||
io.write(TERM_COLOR_CODE_WHITE)
|
||||
io.write('\n## All tests run! ##\n\n')
|
||||
|
||||
local width_of_bar = 70
|
||||
local size_of_red_bar = math.ceil( width_of_bar * nr_errors/nr_tests)
|
||||
local size_of_green_bar = width_of_bar-size_of_red_bar
|
||||
|
||||
io.write('Status: ')
|
||||
io.write(nr_errors == 0 and TERM_COLOR_CODE_GREEN or TERM_COLOR_CODE_RED)
|
||||
io.write(string.rep('#', width_of_bar))
|
||||
io.write(TERM_COLOR_CODE_WHITE)
|
||||
|
||||
-- Get
|
||||
io.write('\n\nSummary: '..TERM_COLOR_CODE_GREEN..string.rep('#', size_of_green_bar)..TERM_COLOR_CODE_RED..string.rep('#', size_of_red_bar)..'\n\n')
|
||||
io.write(TERM_COLOR_CODE_WHITE)
|
||||
self:writeStatus(nr_errors, nr_tests)
|
||||
end
|
||||
|
||||
return nr_errors, nr_tests
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
function TestSuite:writeStatus ( nr_errors, nr_tests )
|
||||
io.write(TERM_COLOR_CODE_WHITE)
|
||||
io.write('\n## All tests run! ##\n\n')
|
||||
|
||||
local function get_end_of_function (text, start_i)
|
||||
local indent, i, end_i = 0, start_i, text:len()
|
||||
while i <= end_i do
|
||||
if text:sub(i,i) == '"' then -- "style" strings
|
||||
i = text:find('"', i + 1) + 1
|
||||
elseif text:sub(i,i) == "'" then -- 'style' strings
|
||||
i = text:find("'", i + 1) + 1
|
||||
elseif text:sub(i,i+1) == '[[' then -- [[style]] strings
|
||||
i = text:find(']]', i) + 2
|
||||
elseif text:sub(i,i+3) == '--[[' then -- multi line comments
|
||||
i = text:find(']]', i) + 2
|
||||
elseif text:sub(i,i+1) == '--' then -- single line comments
|
||||
i = text:find('\n', i) + 1
|
||||
elseif text:sub(i-1, i+8):find('%sfunction%s') or i == start_i and text:sub(i, i+7) == 'function' then
|
||||
indent, i = indent + 1, i + 8
|
||||
elseif text:sub(i-1, i+5):find('%swhile%s') or i == start_i and text:sub(i, i+4) == 'while' then
|
||||
indent, i = indent + 1, i + 4
|
||||
elseif text:sub(i-1, i+3):find('%sfor%s') or i == start_i and text:sub(i, i+2) == 'for' then
|
||||
indent, i = indent + 1, i + 2
|
||||
elseif text:sub(i-1, i+2):find('%sif%s') or i == start_i and text:sub(i, i+1) == 'if' then
|
||||
indent, i = indent + 1, i + 2
|
||||
elseif text:sub(i-1, i+3):find('%send%s') or (i == end_i - 2) and text:sub(i, i+2) == 'end' then
|
||||
indent, i = indent - 1, i + 2
|
||||
if indent == 0 then
|
||||
return i
|
||||
end
|
||||
else
|
||||
i = i + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
local WIDTH_OR_BAR = 70
|
||||
local BAR_CHAR = '#'
|
||||
local nr_successes = nr_tests - nr_errors
|
||||
local size_of_green_bar = math.floor( WIDTH_OR_BAR * nr_successes/nr_tests)
|
||||
|
||||
function TestSuite.getLocalFunction (module_name, func_name)
|
||||
local file = io.open(module_name .. '.lua')
|
||||
local file_text = file:read('*a')
|
||||
file:close()
|
||||
io.write('Status: ')
|
||||
io.write(nr_errors == 0 and TERM_COLOR_CODE_GREEN or TERM_COLOR_CODE_RED)
|
||||
io.write(BAR_CHAR:rep(WIDTH_OR_BAR))
|
||||
io.write(TERM_COLOR_CODE_WHITE)
|
||||
|
||||
local function_start_index = file_text:find('function '..func_name)
|
||||
local function_end_index = get_end_of_function(file_text, function_start_index)
|
||||
local numbers_str = ' ' .. nr_successes .. ' / ' .. nr_tests .. ' '
|
||||
local half_bar = (WIDTH_OR_BAR-#numbers_str)/2
|
||||
local green_bar = BAR_CHAR:rep(math.floor(half_bar)) .. numbers_str .. BAR_CHAR:rep(math.ceil(half_bar))
|
||||
green_bar = TERM_COLOR_CODE_GREEN .. green_bar:sub(1, size_of_green_bar) .. TERM_COLOR_CODE_RED .. green_bar:sub(size_of_green_bar + 1)
|
||||
|
||||
local new_text = file_text:sub(1, function_end_index):gsub('local function '..func_name, 'return function')
|
||||
assert(new_text ~= file_text, ('No function in module "%s" with name "%s" '):format(module_name, func_name))
|
||||
local chunk, error_msg = load(new_text)
|
||||
if not chunk then
|
||||
error(('While loading function in module "%s" with name "%s":\n\n\t%s\n'):format(module_name, func_name, error_msg))
|
||||
end
|
||||
assert(chunk, error)
|
||||
return chunk()
|
||||
-- Get
|
||||
io.write('\n\nSummary: '..green_bar..'\n\n')
|
||||
io.write(TERM_COLOR_CODE_WHITE)
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
|
|
@ -266,12 +266,6 @@ format_test {
|
|||
expect = '{\n\t[{...}] = \'Hello World\'\n}',
|
||||
}
|
||||
|
||||
|
||||
format_test {
|
||||
input = false,
|
||||
expect = 'true',
|
||||
}
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
return SUITE
|
||||
|
|
Loading…
Reference in New Issue
Block a user