1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
local test = {}
local fetch = require("luarocks.fetch")
local deps = require("luarocks.deps")
local util = require("luarocks.util")
local test_types = {
"busted",
"command",
}
local test_modules = {}
for _, test_type in ipairs(test_types) do
local mod = require("luarocks.test." .. test_type)
table.insert(test_modules, mod)
test_modules[test_type] = mod
test_modules[mod] = test_type
end
local function get_test_type(rockspec)
if rockspec.test and rockspec.test.type then
return rockspec.test.type
end
for _, test_module in ipairs(test_modules) do
if test_module.detect_type() then
return test_modules[test_module]
end
end
return nil, "could not detect test type -- no test suite for " .. rockspec.package .. "?"
end
-- Run test suite as configured in rockspec in the current directory.
function test.run_test_suite(rockspec_arg, test_type, args, prepare)
local rockspec
if type(rockspec_arg) == "string" then
local err, errcode
rockspec, err, errcode = fetch.load_rockspec(rockspec_arg)
if err then
return nil, err, errcode
end
else
assert(type(rockspec_arg) == "table")
rockspec = rockspec_arg
end
if not test_type then
local err
test_type, err = get_test_type(rockspec, test_type)
if not test_type then
return nil, err
end
end
assert(test_type)
local all_deps = {
"dependencies",
"build_dependencies",
"test_dependencies",
}
for _, dep_kind in ipairs(all_deps) do
if rockspec[dep_kind] and next(rockspec[dep_kind]) then
local ok, err, errcode = deps.fulfill_dependencies(rockspec, dep_kind, "all")
if err then
return nil, err, errcode
end
end
end
local mod_name = "luarocks.test." .. test_type
local pok, test_mod = pcall(require, mod_name)
if not pok then
return nil, "failed loading test execution module " .. mod_name
end
if prepare then
if test_type == "busted" then
return test_mod.run_tests(rockspec_arg, {"--version"})
else
return true
end
else
local flags = rockspec.test and rockspec.test.flags
if type(flags) == "table" then
util.variable_substitutions(flags, rockspec.variables)
-- insert any flags given in test.flags at the front of args
for i = 1, #flags do
table.insert(args, i, flags[i])
end
end
return test_mod.run_tests(rockspec.test, args)
end
end
return test
|