2023-01-01 19:19:09 +00:00
|
|
|
local Util = require("lazy.util")
|
|
|
|
local Cache = require("lazy.core.cache")
|
|
|
|
local Helpers = require("tests.helpers")
|
|
|
|
|
|
|
|
describe("util", function()
|
2023-01-07 21:24:46 +00:00
|
|
|
local rtp = vim.opt.rtp:get()
|
2023-01-01 19:19:09 +00:00
|
|
|
before_each(function()
|
2023-01-07 21:24:46 +00:00
|
|
|
vim.opt.rtp = rtp
|
|
|
|
for k, v in pairs(package.loaded) do
|
|
|
|
if k:find("^foobar") then
|
|
|
|
package.loaded[k] = nil
|
|
|
|
end
|
|
|
|
end
|
2023-01-01 19:19:09 +00:00
|
|
|
Helpers.fs_rm("")
|
2023-01-07 21:52:49 +00:00
|
|
|
assert(not vim.loop.fs_stat(Helpers.path("")), "fs root should be deleted")
|
2023-01-01 19:19:09 +00:00
|
|
|
end)
|
|
|
|
|
|
|
|
it("lsmod lists all mods in dir", function()
|
2023-01-07 21:24:46 +00:00
|
|
|
vim.opt.rtp:append(Helpers.path(""))
|
2023-01-01 19:19:09 +00:00
|
|
|
local tests = {
|
|
|
|
{
|
2023-01-03 21:31:18 +00:00
|
|
|
root = "lua/foo",
|
|
|
|
mod = "foo",
|
2023-01-01 19:19:09 +00:00
|
|
|
files = { "lua/foo/one.lua", "lua/foo/two.lua", "lua/foo/init.lua" },
|
2023-01-03 21:31:18 +00:00
|
|
|
mods = { "foo.one", "foo.two", "foo" },
|
2023-01-01 19:19:09 +00:00
|
|
|
},
|
|
|
|
{
|
2023-01-03 21:31:18 +00:00
|
|
|
root = "lua/foo",
|
|
|
|
mod = "foo",
|
2023-01-01 19:19:09 +00:00
|
|
|
files = { "lua/foo/one.lua", "lua/foo/two.lua", "lua/foo.lua" },
|
2023-01-03 21:31:18 +00:00
|
|
|
mods = { "foo.one", "foo.two", "foo" },
|
2023-01-01 19:19:09 +00:00
|
|
|
},
|
|
|
|
{
|
2023-01-03 21:31:18 +00:00
|
|
|
root = "lua/foo",
|
|
|
|
mod = "foo",
|
2023-01-01 19:19:09 +00:00
|
|
|
files = { "lua/foo/one.lua", "lua/foo/two.lua" },
|
|
|
|
mods = { "foo.one", "foo.two" },
|
|
|
|
},
|
2023-01-03 21:31:18 +00:00
|
|
|
{
|
|
|
|
root = "lua/load-plugins",
|
|
|
|
mod = "load-plugins",
|
|
|
|
files = { "lua/load-plugins.lua" },
|
|
|
|
mods = { "load-plugins" },
|
|
|
|
},
|
2023-01-01 19:19:09 +00:00
|
|
|
}
|
|
|
|
|
2023-01-03 21:31:18 +00:00
|
|
|
for t, test in ipairs(tests) do
|
|
|
|
local expected = vim.deepcopy(test.mods)
|
|
|
|
table.sort(expected)
|
2023-01-01 19:19:09 +00:00
|
|
|
Helpers.fs_rm("")
|
2023-01-03 21:31:18 +00:00
|
|
|
local files = Helpers.fs_create(test.files)
|
|
|
|
|
|
|
|
-- test with empty cache
|
2023-02-13 09:56:02 +00:00
|
|
|
package.loaded["lazy.core.cache"] = nil
|
2023-02-12 19:35:27 +00:00
|
|
|
local root = Util.find_root(test.mod)
|
2023-01-03 21:31:18 +00:00
|
|
|
assert(root, "no root found for " .. test.mod .. " (test " .. t .. ")")
|
|
|
|
assert.same(Helpers.path(test.root), root)
|
2023-01-01 19:19:09 +00:00
|
|
|
local mods = {}
|
2023-01-03 21:31:18 +00:00
|
|
|
Util.lsmod(test.mod, function(modname, modpath)
|
|
|
|
mods[#mods + 1] = modname
|
|
|
|
end)
|
|
|
|
table.sort(mods)
|
|
|
|
assert.same(expected, mods)
|
|
|
|
|
|
|
|
-- fill the cache
|
2023-02-13 09:56:02 +00:00
|
|
|
package.loaded["lazy.core.cache"] = nil
|
2023-02-12 19:35:27 +00:00
|
|
|
root = Util.find_root(test.mod)
|
2023-01-03 21:31:18 +00:00
|
|
|
assert(root, "no root found for " .. test.mod .. " (test " .. t .. ")")
|
|
|
|
assert.same(Helpers.path(test.root), root)
|
|
|
|
mods = {}
|
|
|
|
Util.lsmod(test.mod, function(modname, modpath)
|
2023-01-01 19:19:09 +00:00
|
|
|
mods[#mods + 1] = modname
|
|
|
|
end)
|
|
|
|
table.sort(mods)
|
2023-01-03 21:31:18 +00:00
|
|
|
assert.same(expected, mods)
|
2023-01-01 19:19:09 +00:00
|
|
|
end
|
|
|
|
end)
|
2023-01-07 21:24:46 +00:00
|
|
|
|
|
|
|
it("find the correct root with dels", function()
|
|
|
|
Cache.cache = {}
|
2023-02-12 19:35:27 +00:00
|
|
|
Cache._topmods = {}
|
|
|
|
Cache.topmods_rtp = false
|
2023-01-07 21:24:46 +00:00
|
|
|
vim.opt.rtp:append(Helpers.path("old"))
|
|
|
|
Helpers.fs_create({ "old/lua/foobar/init.lua" })
|
2023-01-07 21:52:49 +00:00
|
|
|
Cache.cache["foobar"] = { modpath = Helpers.path("old/lua/foobar/init.lua") }
|
2023-02-12 19:35:27 +00:00
|
|
|
local root = Util.find_root("foobar")
|
2023-01-07 21:24:46 +00:00
|
|
|
assert(root, "foobar root not found")
|
|
|
|
assert.same(Helpers.path("old/lua/foobar"), root)
|
|
|
|
|
2023-01-07 21:52:49 +00:00
|
|
|
Helpers.fs_rm("old")
|
|
|
|
assert(not vim.loop.fs_stat(Helpers.path("old/lua/foobar")), "old/lua/foobar should not exist")
|
2023-01-07 21:24:46 +00:00
|
|
|
|
|
|
|
-- vim.opt.rtp = rtp
|
2023-02-12 19:35:27 +00:00
|
|
|
Cache._topmods = {}
|
2023-01-07 21:24:46 +00:00
|
|
|
vim.opt.rtp:append(Helpers.path("new"))
|
|
|
|
Helpers.fs_create({ "new/lua/foobar/init.lua" })
|
2023-02-12 19:35:27 +00:00
|
|
|
root = Util.find_root("foobar")
|
2023-01-07 21:24:46 +00:00
|
|
|
assert(root, "foobar root not found")
|
|
|
|
assert.same(Helpers.path("new/lua/foobar"), root)
|
|
|
|
end)
|
|
|
|
|
|
|
|
it("find the correct root with mod dels", function()
|
|
|
|
Cache.cache = {}
|
2023-02-12 19:35:27 +00:00
|
|
|
Cache._topmods = {}
|
2023-01-07 21:24:46 +00:00
|
|
|
Cache.enabled = true
|
|
|
|
vim.opt.rtp:append(Helpers.path("old"))
|
|
|
|
Helpers.fs_create({ "old/lua/foobar/test.lua" })
|
|
|
|
Cache.cache["foobar.test"] = { modpath = Helpers.path("old/lua/foobar/test.lua") }
|
2023-02-12 19:35:27 +00:00
|
|
|
local root = Util.find_root("foobar")
|
2023-01-07 21:24:46 +00:00
|
|
|
assert(root, "foobar root not found")
|
|
|
|
assert.same(Helpers.path("old/lua/foobar"), root)
|
|
|
|
assert(not Cache.cache["foobar"], "foobar should not be in cache")
|
|
|
|
assert(Cache.cache["foobar.test"], "foobar.test not found in cache")
|
|
|
|
|
2023-01-07 21:52:49 +00:00
|
|
|
Helpers.fs_rm("old")
|
2023-01-07 21:24:46 +00:00
|
|
|
|
|
|
|
-- vim.opt.rtp = rtp
|
2023-02-12 19:35:27 +00:00
|
|
|
Cache._topmods = {}
|
2023-01-07 21:24:46 +00:00
|
|
|
vim.opt.rtp:append(Helpers.path("new"))
|
|
|
|
Helpers.fs_create({ "new/lua/foobar/test.lua" })
|
2023-02-12 19:35:27 +00:00
|
|
|
root = Util.find_root("foobar")
|
2023-01-07 21:24:46 +00:00
|
|
|
assert(root, "foobar root not found")
|
|
|
|
assert.same(Helpers.path("new/lua/foobar"), root)
|
|
|
|
end)
|
2023-01-10 06:32:28 +00:00
|
|
|
|
|
|
|
it("merges correctly", function()
|
|
|
|
local tests = {
|
|
|
|
{
|
|
|
|
input = { { a = 1 }, { b = 2 } },
|
|
|
|
output = { a = 1, b = 2 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
input = { { a = 1 }, { a = 2 } },
|
|
|
|
output = { a = 2 },
|
|
|
|
},
|
|
|
|
{
|
|
|
|
input = { { a = { 1, 2 } }, { a = { 3 } } },
|
|
|
|
output = { a = { 3 } },
|
|
|
|
},
|
|
|
|
{
|
2023-01-12 12:16:23 +00:00
|
|
|
input = { { b = { 1, 2 } }, { a = { 3 }, b = vim.NIL } },
|
2023-01-10 06:32:28 +00:00
|
|
|
output = { a = { 3 } },
|
|
|
|
},
|
|
|
|
{
|
2023-01-12 12:16:23 +00:00
|
|
|
input = { { a = 1 }, { b = 2, a = vim.NIL } },
|
2023-01-10 06:32:28 +00:00
|
|
|
output = { b = 2 },
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, test in ipairs(tests) do
|
|
|
|
assert.same(test.output, Util.merge(unpack(test.input)))
|
|
|
|
end
|
|
|
|
end)
|
2023-01-01 19:19:09 +00:00
|
|
|
end)
|