1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-01-24 06:30:03 +08:00
SpaceVim/bundle/neo-tree.nvim/tests/utils/fs.lua
2023-05-30 21:09:18 +08:00

95 lines
2.4 KiB
Lua

local Path = require("plenary.path")
local fs = {}
function fs.create_temp_dir()
-- Resolve for two reasons.
-- 1. Follow any symlinks which make comparing paths fail. (on macOS, TMPDIR can be under /var which is symlinked to
-- /private/var)
-- 2. Remove any double separators (on macOS TMPDIR can end in a trailing / which absolute doesn't remove, this should
-- be coverted by https://github.com/nvim-lua/plenary.nvim/issues/330).
local temp_dir = vim.fn.resolve(
Path:new(
vim.fn.fnamemodify(vim.fn.tempname(), ":h"),
string.format("neo-tree-test-%s", vim.fn.rand())
):absolute()
)
vim.fn.mkdir(temp_dir, "p")
return temp_dir
end
function fs.create_dir(path)
local abspath = Path:new(path):absolute()
vim.fn.mkdir(abspath, "p")
end
function fs.remove_dir(dir, recursive)
if vim.fn.isdirectory(dir) == 1 then
return vim.fn.delete(dir, recursive and "rf" or "d") == 0
end
return false
end
function fs.write_file(path, content)
local abspath = Path:new(path):absolute()
fs.create_dir(vim.fn.fnamemodify(abspath, ":h"))
vim.fn.writefile(content or {}, abspath)
end
function fs.create_fs_tree(fs_tree)
local function create_items(items, basedir, relative_root_path)
relative_root_path = relative_root_path or "."
for _, item in ipairs(items) do
local relative_path = relative_root_path .. "/" .. item.name
-- create lookups
fs_tree.lookup[relative_path] = item
if item.id then
fs_tree.lookup[item.id] = item
end
-- create actual files and directories
if item.type == "dir" then
item.abspath = Path:new(basedir, item.name):absolute()
fs.create_dir(item.abspath)
if item.items then
create_items(item.items, item.abspath, relative_path)
end
elseif item.type == "file" then
item.abspath = Path:new(basedir, item.name):absolute()
fs.write_file(item.abspath)
end
end
end
create_items(fs_tree.items, fs_tree.abspath)
return fs_tree
end
function fs.init_test(fs_tree)
fs_tree.lookup = {}
if not fs_tree.abspath then
fs_tree.abspath = fs.create_temp_dir()
end
local function setup()
fs.remove_dir(fs_tree.abspath, true)
fs.create_fs_tree(fs_tree)
vim.cmd("tcd " .. fs_tree.abspath)
end
local function teardown()
fs.remove_dir(fs_tree.abspath, true)
end
return {
fs_tree = fs_tree,
setup = setup,
teardown = teardown,
}
end
return fs