From 2e352408c2490ec3c890dd75b34bd48318e79e91 Mon Sep 17 00:00:00 2001 From: lethosor Date: Thu, 26 Mar 2020 23:26:43 -0400 Subject: [PATCH] Split up test runner funcs --- test/main.lua | 100 +++++++++++++++++++++++++++----------------------- 1 file changed, 55 insertions(+), 45 deletions(-) diff --git a/test/main.lua b/test/main.lua index 04313aea2..ed8e634bb 100644 --- a/test/main.lua +++ b/test/main.lua @@ -102,6 +102,59 @@ function finish_tests() end end +function load_tests(file, tests) + local short_filename = file:sub(file:find('test'), -1) + print('Loading file: ' .. short_filename) + local env, env_private = build_test_env() + local code, err = loadfile(file, 't', env) + if not code then + dfhack.printerr('Failed to load file: ' .. tostring(err)) + return false + else + local ok, err = pcall(code) + if not ok then + dfhack.printerr('Error when running file: ' .. tostring(err)) + return false + else + for name, test_func in pairs(env.test) do + local test_data = { + full_name = short_filename .. ':' .. name, + func = test_func, + private = env_private, + } + test_data.name = test_data.full_name:gsub('test/', ''):gsub('.lua', '') + table.insert(tests, test_data) + end + end + end + return true +end + +function run_test(test, status, counts) + if status[test.full_name] == TestStatus.PENDING then + test.private.checks = 0 + test.private.checks_ok = 0 + counts.tests = counts.tests + 1 + local ok, err = pcall(test.func) + local passed = false + if not ok then + dfhack.printerr('test errored: ' .. test.name .. ': ' .. tostring(err)) + elseif test.private.checks ~= test.private.checks_ok then + dfhack.printerr('test failed: ' .. test.name) + else + print('test passed: ' .. test.name) + passed = true + counts.tests_ok = counts.tests_ok + 1 + end + counts.checks = counts.checks + (tonumber(test.private.checks) or 0) + counts.checks_ok = counts.checks_ok + (tonumber(test.private.checks_ok) or 0) + status[test.full_name] = passed and TestStatus.PASSED or TestStatus.FAILED + save_test_status(status) + else + print('test skipped: ' .. test.name .. ' (state = ' .. status[test.full_name] .. ')') + end +end + function main() local files = get_test_files() @@ -132,31 +185,9 @@ function main() print('Loading tests') local tests = {} for _, file in ipairs(files) do - local short_filename = file:sub(file:find('test'), -1) - print('Loading file: ' .. short_filename) - local env, env_private = build_test_env() - local code, err = loadfile(file, 't', env) - if not code then + if not load_tests(file, tests) then passed = false counts.file_errors = counts.file_errors + 1 - dfhack.printerr('Failed to load file: ' .. tostring(err)) - else - local ok, err = pcall(code) - if not ok then - passed = false - counts.file_errors = counts.file_errors + 1 - dfhack.printerr('Error when running file: ' .. tostring(err)) - else - for name, test_func in pairs(env.test) do - local test_data = { - full_name = short_filename .. ':' .. name, - func = test_func, - private = env_private, - } - test_data.name = test_data.full_name:gsub('test/', ''):gsub('.lua', '') - table.insert(tests, test_data) - end - end end end @@ -169,28 +200,7 @@ function main() print('Running tests') for _, test in pairs(tests) do - if status[test.full_name] == TestStatus.PENDING then - test.private.checks = 0 - test.private.checks_ok = 0 - counts.tests = counts.tests + 1 - local ok, err = pcall(test.func) - local passed = false - if not ok then - dfhack.printerr('test errored: ' .. test.name .. ': ' .. tostring(err)) - elseif test.private.checks ~= test.private.checks_ok then - dfhack.printerr('test failed: ' .. test.name) - else - print('test passed: ' .. test.name) - passed = true - counts.tests_ok = counts.tests_ok + 1 - end - counts.checks = counts.checks + (tonumber(test.private.checks) or 0) - counts.checks_ok = counts.checks_ok + (tonumber(test.private.checks_ok) or 0) - status[test.full_name] = passed and TestStatus.PASSED or TestStatus.FAILED - save_test_status(status) - else - print('test skipped: ' .. test.name .. ' (state = ' .. status[test.full_name] .. ')') - end + run_test(test, status, counts) end print('\nTest summary:')