|
|
@ -1,11 +1,12 @@
|
|
|
|
-- DFHack developer test harness
|
|
|
|
-- DFHack developer test harness
|
|
|
|
--@ module = true
|
|
|
|
--@ module = true
|
|
|
|
|
|
|
|
|
|
|
|
local expect = require 'test_util.expect'
|
|
|
|
local expect = require('test_util.expect')
|
|
|
|
local json = require 'json'
|
|
|
|
local helpdb = require('helpdb')
|
|
|
|
local mock = require 'test_util.mock'
|
|
|
|
local json = require('json')
|
|
|
|
local script = require 'gui.script'
|
|
|
|
local mock = require('test_util.mock')
|
|
|
|
local utils = require 'utils'
|
|
|
|
local script = require('gui.script')
|
|
|
|
|
|
|
|
local utils = require('utils')
|
|
|
|
|
|
|
|
|
|
|
|
local help_text =
|
|
|
|
local help_text =
|
|
|
|
[====[
|
|
|
|
[====[
|
|
|
@ -13,17 +14,24 @@ local help_text =
|
|
|
|
test
|
|
|
|
test
|
|
|
|
====
|
|
|
|
====
|
|
|
|
|
|
|
|
|
|
|
|
Run DFHack tests.
|
|
|
|
Tags: dev
|
|
|
|
|
|
|
|
|
|
|
|
Usage:
|
|
|
|
Command: "test"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Run DFHack regression tests.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Discover DFHack functionality that has broken due to recent changes in DF or DFHack.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Usage
|
|
|
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
|
|
test [<options>] [<done_command>]
|
|
|
|
test [<options>] [<done_command>]
|
|
|
|
|
|
|
|
|
|
|
|
If a done_command is specified, it will be run after the tests complete.
|
|
|
|
If a done_command is specified, it will be run after the tests complete.
|
|
|
|
|
|
|
|
|
|
|
|
Options:
|
|
|
|
Options
|
|
|
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
|
|
-h, --help display this help message and exit.
|
|
|
|
|
|
|
|
-d, --test_dir specifies which directory to look in for tests. defaults to
|
|
|
|
-d, --test_dir specifies which directory to look in for tests. defaults to
|
|
|
|
the "hack/scripts/test" folder in your DF installation.
|
|
|
|
the "hack/scripts/test" folder in your DF installation.
|
|
|
|
-m, --modes only run tests in the given comma separated list of modes.
|
|
|
|
-m, --modes only run tests in the given comma separated list of modes.
|
|
|
@ -36,9 +44,11 @@ Options:
|
|
|
|
a "fortress" mode test is run. if not specified, defaults to
|
|
|
|
a "fortress" mode test is run. if not specified, defaults to
|
|
|
|
'region1'.
|
|
|
|
'region1'.
|
|
|
|
-t, --tests only run tests that match one of the comma separated list of
|
|
|
|
-t, --tests only run tests that match one of the comma separated list of
|
|
|
|
patterns. if not specified, no tests are filtered.
|
|
|
|
patterns. if not specified, no tests are filtered and all tessts
|
|
|
|
|
|
|
|
are run.
|
|
|
|
|
|
|
|
|
|
|
|
Modes:
|
|
|
|
Modes
|
|
|
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
|
|
none the test can be run on any screen
|
|
|
|
none the test can be run on any screen
|
|
|
|
title the test must be run on the DF title screen. note that if the game
|
|
|
|
title the test must be run on the DF title screen. note that if the game
|
|
|
@ -47,7 +57,8 @@ Modes:
|
|
|
|
currently on the title screen, the save specified by the save_dir
|
|
|
|
currently on the title screen, the save specified by the save_dir
|
|
|
|
parameter will be loaded.
|
|
|
|
parameter will be loaded.
|
|
|
|
|
|
|
|
|
|
|
|
Examples:
|
|
|
|
Examples
|
|
|
|
|
|
|
|
--------
|
|
|
|
|
|
|
|
|
|
|
|
test runs all tests
|
|
|
|
test runs all tests
|
|
|
|
test -r runs all tests that haven't been run before
|
|
|
|
test -r runs all tests that haven't been run before
|
|
|
@ -352,18 +363,33 @@ local function load_tests(file, tests)
|
|
|
|
if not code then
|
|
|
|
if not code then
|
|
|
|
dfhack.printerr('Failed to load file: ' .. tostring(err))
|
|
|
|
dfhack.printerr('Failed to load file: ' .. tostring(err))
|
|
|
|
return false
|
|
|
|
return false
|
|
|
|
else
|
|
|
|
end
|
|
|
|
dfhack.internal.IN_TEST = true
|
|
|
|
dfhack.internal.IN_TEST = true
|
|
|
|
local ok, err = dfhack.pcall(code)
|
|
|
|
local ok, err = dfhack.pcall(code)
|
|
|
|
dfhack.internal.IN_TEST = false
|
|
|
|
dfhack.internal.IN_TEST = false
|
|
|
|
if not ok then
|
|
|
|
if not ok then
|
|
|
|
dfhack.printerr('Error when running file: ' .. tostring(err))
|
|
|
|
dfhack.printerr('Error when running file: ' .. tostring(err))
|
|
|
|
return false
|
|
|
|
return false
|
|
|
|
else
|
|
|
|
end
|
|
|
|
if not MODES[env.config.mode] then
|
|
|
|
if not MODES[env.config.mode] then
|
|
|
|
dfhack.printerr('Invalid config.mode: ' .. tostring(env.config.mode))
|
|
|
|
dfhack.printerr('Invalid config.mode: ' .. tostring(env.config.mode))
|
|
|
|
return false
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
if not env.config.targets then
|
|
|
|
|
|
|
|
dfhack.printerr('Test target(s) not specified in ' .. file)
|
|
|
|
|
|
|
|
return false
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
local targets = type(env.config.targets) == table and env.config.targets or {env.config.targets}
|
|
|
|
|
|
|
|
for _,target in ipairs(targets) do
|
|
|
|
|
|
|
|
if target == 'core' then goto continue end
|
|
|
|
|
|
|
|
if type(target) ~= 'string' or not helpdb.is_entry(target) or
|
|
|
|
|
|
|
|
helpdb.get_entry_tags(target).unavailable
|
|
|
|
|
|
|
|
then
|
|
|
|
|
|
|
|
dfhack.printerr('Skipping tests for unavailable target: ' .. target)
|
|
|
|
|
|
|
|
return false
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
::continue::
|
|
|
|
|
|
|
|
end
|
|
|
|
for name, test_func in pairs(env.test) do
|
|
|
|
for name, test_func in pairs(env.test) do
|
|
|
|
if env.config.wrapper then
|
|
|
|
if env.config.wrapper then
|
|
|
|
local fn = test_func
|
|
|
|
local fn = test_func
|
|
|
@ -378,8 +404,6 @@ local function load_tests(file, tests)
|
|
|
|
test_data.name = test_data.full_name:gsub('test/', ''):gsub('.lua', '')
|
|
|
|
test_data.name = test_data.full_name:gsub('test/', ''):gsub('.lua', '')
|
|
|
|
table.insert(tests, test_data)
|
|
|
|
table.insert(tests, test_data)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
return true
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
@ -575,7 +599,7 @@ local function dump_df_state()
|
|
|
|
enabler = {
|
|
|
|
enabler = {
|
|
|
|
fps = df.global.enabler.fps,
|
|
|
|
fps = df.global.enabler.fps,
|
|
|
|
gfps = df.global.enabler.gfps,
|
|
|
|
gfps = df.global.enabler.gfps,
|
|
|
|
fullscreen = df.global.enabler.fullscreen,
|
|
|
|
fullscreen_state = df.global.enabler.fullscreen_state.whole,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
gps = {
|
|
|
|
gps = {
|
|
|
|
dimx = df.global.gps.dimx,
|
|
|
|
dimx = df.global.gps.dimx,
|
|
|
|