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
101
102
103
104
105
106
107
108
109
110
111
112
113
|
local json = require "plugins.json"
local lpm
local function assert_exists(path) if not io.open(path, "rb") then error("assertion failed: file " .. path .. " does not exist", 2) end end
local function assert_not_exists(path) if io.open(path, "rb") then error("assertion failed: file " .. path .. " exists", 2) end end
local tmpdir = os.getenv("TMPDIR") or "/tmp"
local fast = os.getenv("FAST")
local userdir = tmpdir .. "/lpmtest"
setmetatable(_G, { __index = function(t, k) if not rawget(t, k) then error("cannot get undefined global variable: " .. k, 2) end end, __newindex = function(t, k) error("cannot set global variable: " .. k, 2) end })
local tests = {
["00_install_singleton"] = function()
local plugins = lpm("list bracketmatch")["plugins"]
assert(#plugins == 1)
assert(plugins[1].organization == "singleton")
assert(plugins[1].status == "available")
local actions = lpm("install bracketmatch")["actions"]
assert(actions[1]:find("Installing singleton"))
assert_exists(userdir .. "/plugins/bracketmatch.lua")
actions = lpm("uninstall bracketmatch")["actions"]
assert_not_exists(userdir .. "/plugins/bracketmatch.lua")
end,
["01_upgrade_singleton"] = function()
lpm("install bracketmatch")
local plugins = lpm("list bracketmatch")["plugins"]
assert(#plugins == 1)
assert(plugins[1].status == "installed")
assert_exists(plugins[1].path)
io.open(plugins[1].path, "ab"):write("-- this is a test comment to modify the checksum"):close()
plugins = lpm("list bracketmatch")["plugins"]
assert(#plugins == 2)
lpm("install bracketmatch")
plugins = lpm("list bracketmatch")["plugins"]
assert(#plugins == 1)
end,
["02_install_complex"] = function()
local plugins = lpm("list plugin_manager")["plugins"]
assert(#plugins == 1)
assert(plugins[1].organization == "complex")
assert(plugins[1].status == "available")
assert(plugins[1].dependencies.json)
local actions = lpm("install plugin_manager")["actions"]
assert_exists(userdir .. "/libraries/json.lua")
assert_exists(userdir .. "/plugins/plugin_manager")
assert_exists(userdir .. "/plugins/plugin_manager/init.lua")
actions = lpm("uninstall plugin_manager")["actions"]
assert_not_exists(userdir .. "/plugins/plugin_manager")
end,
["03_upgrade_complex"] = function()
local actions = lpm("install plugin_manager")
local plugins = lpm("list plugin_manager")["plugins"]
assert(#plugins == 1)
assert(plugins[1].organization == "complex")
assert(plugins[1].status == "installed")
end,
["04_list_plugins"] = function()
local plugins = lpm("list")["plugins"]
assert(#plugins > 20)
end
}
local last_command_result, last_command
lpm = function(cmd)
last_command = "./lpm --quiet --json --userdir=" .. userdir .. " " .. cmd
local pipe = io.popen(last_command, "r")
last_command_result = json.decode(pipe:read("*all"))
local success = pipe:close()
if not success then error("error calling lpm", 2) end
return last_command_result
end
local function run_tests(tests, arg)
local fail_count = 0
local names = {}
if #arg == 0 then
for k,v in pairs(tests) do table.insert(names, k) end
else
names = arg
end
table.sort(names)
local max_name = 0
for i,k in ipairs(names) do max_name = math.max(max_name, #k) end
for i,k in ipairs(names) do
local v = tests[k]
if fast then
os.execute("rm -rf " .. tmpdir .. "/lpmtest/plugins && mkdir -p " .. tmpdir .. "/lpmtest");
else
os.execute("rm -rf " .. tmpdir .. "/lpmtest && mkdir -p " .. tmpdir .. "/lpmtest");
end
io.stdout:write(string.format("test %-" .. (max_name + 1) .. "s: ", k))
local failed = false
xpcall(v, function(err)
print("[FAIL]: " .. debug.traceback(err, 2))
print()
print()
print("Last Command: " .. last_command)
print(json.encode(last_command_result))
fail_count = fail_count + 1
failed = true
end)
if not failed then
print("[PASSED]")
end
end
os.exit(fail_count)
end
run_tests(tests, arg)
|